View Javadoc
1   /*
2    * Copyright (c) 2002-2017, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.directory.business;
35  
36  import fr.paris.lutece.portal.service.plugin.Plugin;
37  import fr.paris.lutece.util.sql.DAOUtil;
38  import java.util.ArrayList;
39  import java.util.List;
40  
41  /**
42   * This class provides Data Access methods for Field objects
43   */
44  public final class FileDAO implements IFileDAO
45  {
46      // Constants
47      private static final String SQL_QUERY_NEW_PK = "SELECT max( id_file ) FROM directory_file";
48      private static final String SQL_QUERY_FIND_BY_PRIMARY_KEY = "SELECT id_file,title,id_physical_file,file_size,mime_type,extension, date_expiration "
49              + " FROM directory_file WHERE id_file = ?";
50      private static final String SQL_QUERY_INSERT = "INSERT INTO directory_file(id_file,title,id_physical_file,file_size,mime_type,extension,date_expiration)"
51              + " VALUES(?,?,?,?,?,?,?)";
52      private static final String SQL_QUERY_DELETE = "DELETE FROM directory_file WHERE id_file = ? ";
53      private static final String SQL_QUERY_UPDATE = "UPDATE  directory_file SET "
54              + "id_file=?,title=?,id_physical_file=?,file_size=?,mime_type=?, extension=?, date_expiration=? WHERE id_file = ?";
55      private static final String SQL_QUERY_PURGE = " UPDATE directory_file SET title = ?, file_size = ? WHERE id_file = ?";
56      private static final String SQL_QUERY_SELECT_ALL = " SELECT id_file,title,id_physical_file,file_size,mime_type, extension, date_expiration FROM directory_file ";
57  
58      /**
59       * {@inheritDoc}
60       */
61      @Override
62      public int newPrimaryKey( Plugin plugin )
63      {
64          DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEW_PK, plugin );
65          daoUtil.executeQuery( );
66  
67          int nKey;
68  
69          if ( !daoUtil.next( ) )
70          {
71              // if the table is empty
72              nKey = 1;
73          }
74  
75          nKey = daoUtil.getInt( 1 ) + 1;
76          daoUtil.free( );
77  
78          return nKey;
79      }
80  
81      /**
82       * {@inheritDoc}
83       */
84      @Override
85      public synchronized int insert( File file, Plugin plugin )
86      {
87          DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, plugin );
88          daoUtil.setString( 2, file.getTitle( ) );
89  
90          if ( file.getPhysicalFile( ) != null )
91          {
92              daoUtil.setInt( 3, file.getPhysicalFile( ).getIdPhysicalFile( ) );
93          }
94          else
95          {
96              daoUtil.setIntNull( 3 );
97          }
98  
99          daoUtil.setInt( 4, file.getSize( ) );
100         daoUtil.setString( 5, file.getMimeType( ) );
101         daoUtil.setString( 6, file.getExtension( ) );
102         daoUtil.setTimestamp( 7, file.getDateExpiration( ) );
103         file.setIdFile( newPrimaryKey( plugin ) );
104         daoUtil.setInt( 1, file.getIdFile( ) );
105         daoUtil.executeUpdate( );
106 
107         daoUtil.free( );
108 
109         return file.getIdFile( );
110     }
111 
112     /**
113      * {@inheritDoc}
114      */
115     @Override
116     public File load( int nId, Plugin plugin )
117     {
118         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_FIND_BY_PRIMARY_KEY, plugin );
119         daoUtil.setInt( 1, nId );
120         daoUtil.executeQuery( );
121 
122         File file = null;
123         PhysicalFile physicalFile = null;
124 
125         if ( daoUtil.next( ) )
126         {
127             file = new File( );
128             file.setIdFile( daoUtil.getInt( 1 ) );
129             file.setTitle( daoUtil.getString( 2 ) );
130 
131             if ( daoUtil.getObject( 3 ) != null )
132             {
133                 physicalFile = new PhysicalFile( );
134                 physicalFile.setIdPhysicalFile( daoUtil.getInt( 3 ) );
135                 file.setPhysicalFile( physicalFile );
136             }
137 
138             file.setSize( daoUtil.getInt( 4 ) );
139             file.setMimeType( daoUtil.getString( 5 ) );
140             file.setExtension( daoUtil.getString( 6 ) );
141             file.setDateExpiration( daoUtil.getTimestamp( 7 ) );
142 
143         }
144 
145         daoUtil.free( );
146 
147         return file;
148     }
149 
150     /**
151      * {@inheritDoc}
152      */
153     @Override
154     public void delete( int nIdFile, Plugin plugin )
155     {
156         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE, plugin );
157         daoUtil.setInt( 1, nIdFile );
158         daoUtil.executeUpdate( );
159         daoUtil.free( );
160     }
161 
162     /**
163      * {@inheritDoc}
164      */
165     @Override
166     public void store( File file, Plugin plugin )
167     {
168         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE, plugin );
169         daoUtil.setInt( 1, file.getIdFile( ) );
170         daoUtil.setString( 2, file.getTitle( ) );
171 
172         if ( file.getPhysicalFile( ) != null )
173         {
174             daoUtil.setInt( 3, file.getPhysicalFile( ).getIdPhysicalFile( ) );
175         }
176         else
177         {
178             daoUtil.setIntNull( 3 );
179         }
180 
181         daoUtil.setInt( 4, file.getSize( ) );
182         daoUtil.setString( 5, file.getMimeType( ) );
183         daoUtil.setString( 6, file.getExtension( ) );
184         daoUtil.setTimestamp( 7, file.getDateExpiration( ) );
185 
186         daoUtil.setInt( 8, file.getIdFile( ) );
187         daoUtil.executeUpdate( );
188         daoUtil.free( );
189     }
190 
191     /**
192      * {@inheritDoc}
193      */
194     public void purge( File file, Plugin plugin )
195     {
196         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_PURGE, plugin );
197         daoUtil.setString( 1, file.getTitle( ) );
198         daoUtil.setInt( 2, 0 );
199         daoUtil.setInt( 3, file.getIdFile( ) );
200         daoUtil.executeUpdate( );
201         daoUtil.free( );
202     }
203 
204     /**
205      * {@inheritDoc}
206      */
207     public List<File> selectFilesList( Plugin plugin )
208     {
209         List<File> fileList = new ArrayList<>( );
210         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ALL, plugin );
211         daoUtil.executeQuery( );
212 
213         while ( daoUtil.next( ) )
214         {
215             File file = new File( );
216             PhysicalFile physicalFile = null;
217             file.setIdFile( daoUtil.getInt( 1 ) );
218             file.setTitle( daoUtil.getString( 2 ) );
219 
220             if ( daoUtil.getObject( 3 ) != null )
221             {
222                 physicalFile = new PhysicalFile( );
223                 physicalFile.setIdPhysicalFile( daoUtil.getInt( 3 ) );
224                 file.setPhysicalFile( physicalFile );
225             }
226 
227             file.setSize( daoUtil.getInt( 4 ) );
228             file.setMimeType( daoUtil.getString( 5 ) );
229             file.setExtension( daoUtil.getString( 6 ) );
230             file.setDateExpiration( daoUtil.getTimestamp( 7 ) );
231 
232             fileList.add( file );
233         }
234 
235         daoUtil.free( );
236 
237         return fileList;
238     }
239 }