View Javadoc
1   /*
2    * Copyright (c) 2002-2013, 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.modules.exportfile.service;
35  
36  import fr.paris.lutece.plugins.directory.business.DirectoryHome;
37  import fr.paris.lutece.plugins.directory.business.EntryFilter;
38  import fr.paris.lutece.plugins.directory.business.EntryHome;
39  import fr.paris.lutece.plugins.directory.business.File;
40  import fr.paris.lutece.plugins.directory.business.IEntry;
41  import fr.paris.lutece.plugins.directory.business.Record;
42  import fr.paris.lutece.plugins.directory.business.RecordField;
43  import fr.paris.lutece.plugins.directory.business.RecordFieldFilter;
44  import fr.paris.lutece.plugins.directory.business.RecordFieldHome;
45  import fr.paris.lutece.plugins.directory.business.RecordHome;
46  import fr.paris.lutece.plugins.directory.service.DirectoryPlugin;
47  import fr.paris.lutece.plugins.directory.utils.DirectoryUtils;
48  import fr.paris.lutece.portal.service.admin.AdminUserService;
49  import fr.paris.lutece.portal.service.plugin.Plugin;
50  import fr.paris.lutece.portal.service.plugin.PluginService;
51  import fr.paris.lutece.portal.service.util.AppPathService;
52  import fr.paris.lutece.portal.service.util.AppPropertiesService;
53  import fr.paris.lutece.util.ReferenceItem;
54  import fr.paris.lutece.util.ReferenceList;
55  
56  import org.apache.commons.lang.StringUtils;
57  
58  import java.sql.Timestamp;
59  import java.text.SimpleDateFormat;
60  import java.util.ArrayList;
61  import java.util.List;
62  
63  import javax.servlet.http.HttpServletRequest;
64  
65  /**
66   * DirectoryService
67   */
68  public class DirectoryService
69  {
70      private static final String PROPERTY_ENTRY_TYPE_CAMERA = "module.directory.exportfile.entry_type.camera";
71      private static final String PROPERTY_ENTRY_TYPE_FILE = "module.directory.exportfile.entry_type.file";
72      private static final String PROPERTY_ENTRY_TYPE_IMAGE = "directory.resource_rss.entry_type_image";
73      private static final String PROPERTY_ENTRY_TYPE_GEOLOCATION = "directory.entry_type.geolocation";
74  
75      private static final String DATE_CREATION_RECORD_TITLE = "creation date";
76      public static final String DATE_CREATION_RECORD_CODE = "9999999";
77  
78      private static DirectoryService _singleton;
79  
80      /**
81       * The plugin directory.
82       */
83      public final Plugin _pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
84  
85      /**
86       * @return instance DirectoryService
87       */
88      public static DirectoryService getService( )
89      {
90          if ( _singleton == null )
91          {
92              _singleton = new DirectoryService( );
93  
94              return _singleton;
95          }
96  
97          return _singleton;
98      }
99  
100     /**
101      * Get the list of directorise
102      * 
103      * @return a ReferenceList
104      */
105     public ReferenceList getListDirectories( )
106     {
107         Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
108         ReferenceList listDirectories = DirectoryHome.getDirectoryList( pluginDirectory );
109         ReferenceList refenreceListDirectories = new ReferenceList( );
110         refenreceListDirectories.addItem( DirectoryUtils.CONSTANT_ID_NULL, StringUtils.EMPTY );
111 
112         if ( listDirectories != null )
113         {
114             refenreceListDirectories.addAll( listDirectories );
115         }
116 
117         return refenreceListDirectories;
118     }
119 
120     /**
121      * Method to get directory entries list
122      * 
123      * @param nIdDirectory
124      *            id directory
125      * @param request
126      *            request
127      * @return ReferenceList entries list
128      */
129     public ReferenceList getListEntries( int nIdDirectory, HttpServletRequest request )
130     {
131         if ( nIdDirectory != -1 )
132         {
133             Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
134             List<IEntry> listEntries = DirectoryUtils.getFormEntries( nIdDirectory, pluginDirectory, AdminUserService.getAdminUser( request ) );
135             ReferenceList referenceList = new ReferenceList( );
136 
137             for ( IEntry entry : listEntries )
138             {
139                 if ( entry.getEntryType( ).getComment( ) )
140                 {
141                     continue;
142                 }
143 
144                 if ( entry.getEntryType( ).getGroup( ) )
145                 {
146                     if ( entry.getChildren( ) != null )
147                     {
148                         for ( IEntry child : entry.getChildren( ) )
149                         {
150                             if ( child.getEntryType( ).getComment( ) )
151                             {
152                                 continue;
153                             }
154 
155                             ReferenceItem referenceItem = new ReferenceItem( );
156                             referenceItem.setCode( String.valueOf( child.getIdEntry( ) ) );
157                             referenceItem.setName( child.getTitle( ) );
158                             referenceList.add( referenceItem );
159                         }
160                     }
161                 }
162                 else
163                 {
164                     ReferenceItem referenceItem = new ReferenceItem( );
165                     referenceItem.setCode( String.valueOf( entry.getIdEntry( ) ) );
166                     referenceItem.setName( entry.getTitle( ) );
167                     referenceList.add( referenceItem );
168                 }
169             }
170 
171             ReferenceItem referenceItem = new ReferenceItem( );
172             referenceItem.setCode( DATE_CREATION_RECORD_CODE );
173             referenceItem.setName( DATE_CREATION_RECORD_TITLE );
174             referenceList.add( referenceItem );
175             return referenceList;
176         }
177         else
178         {
179             return new ReferenceList( );
180         }
181     }
182 
183     /**
184      * get Entry list of directory
185      * 
186      * @param nidDirectory
187      * @return Entry list of directory
188      */
189     public List<IEntry> getListEntries( int nidDirectory )
190     {
191         Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
192         List<IEntry> listEntries = new ArrayList<IEntry>( );
193         EntryFilter entryFilter = new EntryFilter( );
194         entryFilter.setIdDirectory( nidDirectory );
195 
196         listEntries = EntryHome.getEntryList( entryFilter, pluginDirectory );
197 
198         return listEntries;
199     }
200 
201     /**
202      * get record field value
203      * 
204      * @param nIdEntry
205      * @param nIdRecord
206      * @param nIdDirectory
207      * @return record field value
208      */
209     public File getRecordFieldValue( int nIdEntry, int nIdRecord, int nIdDirectory )
210     {
211         Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
212 
213         // RecordField
214         IEntry entry = EntryHome.findByPrimaryKey( nIdEntry, pluginDirectory );
215 
216         if ( ( entry != null ) )
217         {
218 
219             RecordFieldFilter recordFieldFilter = new RecordFieldFilter( );
220             recordFieldFilter.setIdDirectory( nIdDirectory );
221             recordFieldFilter.setIdEntry( entry.getIdEntry( ) );
222             recordFieldFilter.setIdRecord( nIdRecord );
223 
224             List<RecordField> listRecordFields = RecordFieldHome.getRecordFieldList( recordFieldFilter, pluginDirectory );
225 
226             if ( ( entry.getEntryType( ).getIdType( ) == AppPropertiesService.getPropertyInt( PROPERTY_ENTRY_TYPE_IMAGE, 10 ) )
227                     || entry.getEntryType( ).getIdType( ) == AppPropertiesService.getPropertyInt( PROPERTY_ENTRY_TYPE_FILE, 8 )
228                     || entry.getEntryType( ).getIdType( ) == AppPropertiesService.getPropertyInt( PROPERTY_ENTRY_TYPE_CAMERA, 23 ) )
229             {
230                 if ( listRecordFields.size( ) >= 1 )
231                 {
232                     return listRecordFields.get( 0 ).getFile( );
233                 }
234                 else
235                 {
236                     return null;
237                 }
238             }
239 
240         }
241 
242         return null;
243     }
244 
245     /**
246      * get Identifiant of the record
247      * 
248      * @param nIdResource
249      * @return id Record
250      */
251     public List<Record> getListRecord( int nIdDirectory, int nIdEntry )
252     {
253         RecordFieldFilter filter = new RecordFieldFilter( );
254         filter.setIdDirectory( nIdDirectory );
255         filter.setIdEntry( nIdEntry );
256 
257         List<Record> listRecord = RecordHome.getListRecord( filter, _pluginDirectory );
258 
259         return listRecord;
260     }
261 
262     public Timestamp getDateCreation( int nIdRecord, int nIdDirectory )
263     {
264         Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
265 
266         RecordFieldFilter recordFieldFilter = new RecordFieldFilter( );
267         recordFieldFilter.setIdDirectory( nIdDirectory );
268         recordFieldFilter.setIdRecord( nIdRecord );
269 
270         List<RecordField> listRecordFields = RecordFieldHome.getRecordFieldList( recordFieldFilter, pluginDirectory );
271 
272         if ( ( listRecordFields != null ) && !listRecordFields.isEmpty( ) && ( listRecordFields.get( 0 ) != null ) )
273         {
274             return listRecordFields.get( 0 ).getRecord( ).getDateCreation( );
275         }
276 
277         return null;
278     }
279 
280     /**
281      * get record field value
282      * 
283      * @param nIdEntry
284      * @param nIdRecord
285      * @param nIdDirectory
286      * @return record field value
287      */
288     public String getRecordFieldStringValue( int nIdEntry, int nIdRecord, int nIdDirectory )
289     {
290         String strRecordFieldValue = StringUtils.EMPTY;
291         Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
292 
293         IEntry entry = EntryHome.findByPrimaryKey( nIdEntry, pluginDirectory );
294 
295         if ( ( entry != null ) )
296         {
297 
298             RecordFieldFilter recordFieldFilter = new RecordFieldFilter( );
299             recordFieldFilter.setIdDirectory( nIdDirectory );
300             recordFieldFilter.setIdEntry( entry.getIdEntry( ) );
301             recordFieldFilter.setIdRecord( nIdRecord );
302 
303             List<RecordField> listRecordFields = RecordFieldHome.getRecordFieldList( recordFieldFilter, pluginDirectory );
304 
305             if ( entry.getEntryType( ).getIdType( ) == AppPropertiesService.getPropertyInt( PROPERTY_ENTRY_TYPE_GEOLOCATION, 16 ) )
306             {
307                 if ( listRecordFields.size( ) >= 4 )
308                 {
309                     return listRecordFields.get( 2 ).getValue( ) + ", " + listRecordFields.get( 3 ).getValue( );
310                 }
311                 else
312                 {
313                     return StringUtils.EMPTY;
314                 }
315             }
316 
317             if ( ( entry.getEntryType( ).getIdType( ) == AppPropertiesService.getPropertyInt( PROPERTY_ENTRY_TYPE_IMAGE, 10 ) )
318                     || ( entry.getEntryType( ).getIdType( ) == 8 ) )
319             {
320                 if ( listRecordFields.size( ) >= 1 )
321                 {
322                     return listRecordFields.get( 0 ).getFile( ).getTitle( );
323                 }
324                 else
325                 {
326                     return StringUtils.EMPTY;
327                 }
328             }
329 
330             if ( ( listRecordFields != null ) && !listRecordFields.isEmpty( ) && ( listRecordFields.get( 0 ) != null ) )
331             {
332                 RecordField recordFieldIdDemand = listRecordFields.get( 0 );
333                 strRecordFieldValue = recordFieldIdDemand.getValue( );
334 
335                 if ( recordFieldIdDemand.getField( ) != null )
336                 {
337                     strRecordFieldValue = recordFieldIdDemand.getField( ).getTitle( );
338                 }
339             }
340         }
341 
342         return strRecordFieldValue;
343     }
344 
345 }