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.plugins.directory.utils.DirectoryErrorException;
37  import fr.paris.lutece.portal.service.plugin.Plugin;
38  import fr.paris.lutece.portal.web.util.LocalizedPaginator;
39  import fr.paris.lutece.util.ReferenceList;
40  import fr.paris.lutece.util.html.Paginator;
41  
42  import org.apache.commons.fileupload.FileItem;
43  
44  import java.util.HashMap;
45  import java.util.List;
46  import java.util.Locale;
47  
48  import javax.servlet.http.HttpServletRequest;
49  
50  /**
51   *
52   * IEntry Class
53   */
54  public interface IEntry
55  {
56      /**
57       * @return the id of entry
58       */
59      int getIdEntry( );
60  
61      /**
62       * set the id of the entry
63       * 
64       * @param idEntry
65       *            the id of the entry
66       */
67      void setIdEntry( int idEntry );
68  
69      /**
70       *
71       * @return the directory associate to the entry
72       */
73      Directory getDirectory( );
74  
75      /**
76       * set the directory associate to the entry
77       * 
78       * @param directory
79       *            the directory associate to the entry
80       */
81      void setDirectory( Directory directory );
82  
83      /**
84       * @return title entry
85       */
86      String getTitle( );
87  
88      /**
89       * set title entry
90       * 
91       * @param title
92       *            title
93       */
94      void setTitle( String title );
95  
96      /**
97       * @return the entry help message
98       */
99      String getHelpMessage( );
100 
101     /**
102      * set entry help message
103      * 
104      * @param helpMessage
105      *            entry helpMessage
106      */
107     void setHelpMessage( String helpMessage );
108 
109     /**
110      * @return the entry help message for search
111      */
112     String getHelpMessageSearch( );
113 
114     /**
115      * set the entry help message for search
116      * 
117      * @param helpMessage
118      *            the entry help message for search
119      */
120     void setHelpMessageSearch( String helpMessage );
121 
122     /**
123      * @return the entry comment
124      */
125     String getComment( );
126 
127     /**
128      * set entry comment
129      * 
130      * @param comment
131      *            entry comment
132      */
133     void setComment( String comment );
134 
135     /**
136      * @return true if the question is mandatory
137      */
138     boolean isMandatory( );
139 
140     /**
141      * set true if the question is mandatory
142      * 
143      * @param mandatory
144      *            true if the question is mandatory
145      */
146     void setMandatory( boolean mandatory );
147 
148     /**
149      * @return true if the field associate must be display in line
150      */
151     boolean isFieldInLine( );
152 
153     /**
154      * set true if the field associate must be display in line
155      * 
156      * @param fieldInLine
157      *            true if the field associate must be display in line
158      */
159     void setFieldInLine( boolean fieldInLine );
160 
161     /**
162      * @return true if the field must be shown in advanced search
163      */
164     boolean isShownInAdvancedSearch( );
165 
166     /**
167      * @return true if the field must be shown in result list
168      */
169     boolean isShownInResultList( );
170 
171     /**
172      * set true if the field must be shown in result list page
173      * 
174      * @param shown
175      *            true if the entry must be shown in result list page
176      */
177     void setShownInResultList( boolean shown );
178 
179     /**
180      * @return true if the field must be shown in result record page
181      */
182     boolean isShownInResultRecord( );
183 
184     /**
185      * set true if the field must be shown in result record page
186      * 
187      * @param shown
188      *            true if the entry must be shown in result record page
189      */
190     void setShownInResultRecord( boolean shown );
191 
192     /**
193      * @return true if the field must be shown in result record page
194      */
195     boolean isShownInHistory( );
196 
197     /**
198      * set true if the field must be shown in history page
199      * 
200      * @param shown
201      *            true if the entry must be shown in history page
202      */
203     void setShownInHistory( boolean shown );
204 
205     /**
206      * set true if the field must be shown advanced search
207      * 
208      * @param shown
209      *            true if the entry must be shown in advanced search
210      */
211     void setShownInAdvancedSearch( boolean shown );
212 
213     /**
214      * @return true if the field must be shown in data export
215      */
216     boolean isShownInExport( );
217 
218     /**
219      * set true if the field must be shown in data export
220      * 
221      * @param shown
222      *            true if the entry must be shown in data export
223      */
224     void setShownInExport( boolean shown );
225 
226     /**
227      * @return true if the field must be shown in record completeness
228      */
229     boolean isShownInCompleteness( );
230 
231     /**
232      * set true if the field must be shown record completeness
233      * 
234      * @param shown
235      *            true if the entry must be shown in record completeness
236      */
237     void setShownInCompleteness( boolean shown );
238 
239     /**
240      * @return true if the field must be indexed
241      */
242     boolean isIndexed( );
243 
244     /**
245      * set true if the field must be indexed
246      * 
247      * @param indexed
248      *            true if the field must be indexed
249      */
250     void setIndexed( boolean indexed );
251 
252     /**
253      * @return true if the field is (part of) the title of the document in the global index
254      */
255     boolean isIndexedAsTitle( );
256 
257     /**
258      * set true if the field is (part of) the title of the document in the global index
259      * 
260      * @param indexedAsTitle
261      *            true if the field is (part of) the title of the document in the global index
262      */
263     void setIndexedAsTitle( boolean indexedAsTitle );
264 
265     /**
266      * @return true if the field is (part of) the summary of the document in the global index
267      */
268     boolean isIndexedAsSummary( );
269 
270     /**
271      * set true if the field is (part of) the summary of the document in the global index
272      * 
273      * @param indexedAsSummary
274      *            true if the field is (part of) the summary of the document in the global index
275      */
276     void setIndexedAsSummary( boolean indexedAsSummary );
277 
278     /**
279      * @return position entry
280      */
281     int getPosition( );
282 
283     /**
284      * set position entry
285      * 
286      * @param position
287      *            position entry
288      */
289     void setPosition( int position );
290 
291     /**
292      * @return the type of the entry
293      */
294     EntryType getEntryType( );
295 
296     /**
297      * set the type of the entry
298      * 
299      * @param entryType
300      *            the type of the entry
301      */
302     void setEntryType( EntryType entryType );
303 
304     /**
305      * @return the list of field who are associate to the entry
306      */
307     List<Field> getFields( );
308 
309     /**
310      * set the list of field who are associate to the entry
311      * 
312      * @param fields
313      *            the list of field
314      */
315     void setFields( List<Field> fields );
316 
317     /**
318      * @return parent entry if the entry is insert in a group
319      */
320     IEntry getParent( );
321 
322     /**
323      * set parent entry if the entry is insert in a group
324      * 
325      * @param parent
326      *            parent entry
327      */
328     void setParent( IEntry parent );
329 
330     /**
331      *
332      * @return the list of entry who are insert in the group
333      */
334     List<IEntry> getChildren( );
335 
336     /**
337      * set the list of entry who are insert in the group
338      * 
339      * @param children
340      *            the list of entry
341      */
342     void setChildren( List<IEntry> children );
343 
344     /**
345      * @return true if the entry is the last entry of a group or the list of entry
346      */
347     boolean isLastInTheList( );
348 
349     /**
350      * set true if the entry is the last entry of a group or the list of entry
351      * 
352      * @param lastInTheList
353      *            true if the entry is the last entry of a group or the list of entry
354      */
355     void setLastInTheList( boolean lastInTheList );
356 
357     /**
358      * @return true if the entry is the first entry of a group or the list of entry
359      */
360     boolean isFirstInTheList( );
361 
362     /**
363      * set true if the entry is the first entry of a group or the list of entry
364      * 
365      * @param firstInTheList
366      *            true if the entry is the last entry of a group or the list of entry
367      */
368     void setFirstInTheList( boolean firstInTheList );
369 
370     /**
371      *
372      * @return the width of the entry
373      */
374     int getDisplayWidth( );
375 
376     /**
377      * set the width of the entry
378      * 
379      * @param width
380      *            width of the entry
381      */
382     void setDisplayWidth( int width );
383 
384     /**
385      *
386      * @return the height of the entry
387      */
388     int getDisplayHeight( );
389 
390     /**
391      * set the height of the entry
392      * 
393      * @param height
394      *            the height of the entry
395      */
396     void setDisplayHeight( int height );
397 
398     /**
399      *
400      * @return true if a role can be associated with a item
401      */
402     boolean isRoleAssociated( );
403 
404     /**
405      * set true if a role can be associated with a item
406      * 
407      * @param bRoleAssociated
408      *            true if a role can be associated with a item
409      */
410     void setRoleAssociated( boolean bRoleAssociated );
411 
412     /**
413      *
414      * @return true if a workgroup can be associated with a item
415      */
416     boolean isWorkgroupAssociated( );
417 
418     /**
419      * set true if a workgroup can be associated with a item
420      * 
421      * @param bWorkGroupAssociated
422      *            true if a workgroup can be associated with a item
423      */
424     void setWorkgroupAssociated( boolean bWorkGroupAssociated );
425 
426     /**
427      *
428      * @return true if the entry is display with Multiple search field
429      */
430     boolean isMultipleSearchFields( );
431 
432     /**
433      * set true if the entry is display with Multiple search field
434      * 
435      * @param multipleSearchFields
436      *            true if the entry is display with Multiple search field
437      */
438     void setMultipleSearchFields( boolean multipleSearchFields );
439 
440     /**
441      *
442      * @return the id entry associed
443      */
444     int getEntryAssociate( );
445 
446     /**
447      * set id entry is display with Multiple search field
448      * 
449      * @param idEntryAssociate
450      *            id entry
451      */
452     void setEntryAssociate( int idEntryAssociate );
453 
454     /**
455      *
456      * @return the request SQL
457      */
458     String getRequestSQL( );
459 
460     /**
461      * set request SQL
462      * 
463      * @param strRequestSQL
464      *            request SQL
465      */
466     void setRequestSQL( String strRequestSQL );
467 
468     /**
469      *
470      * @return true if add value for all search
471      */
472     boolean isAddValueAllSearch( );
473 
474     /**
475      * set the AddValueAllSearch boolean
476      * 
477      * @param bAddValueAllSearch
478      *            The AddValueAllSearch boolean
479      */
480     void setAddValueAllSearch( boolean bAddValueAllSearch );
481 
482     /**
483      * @return true if entry is autocomplete
484      */
485     boolean isAutocompleteEntry( );
486 
487     /**
488      * set autocomplete entry type
489      * 
490      * @param bIsAutocompleEntry
491      */
492     void setAutocompleteEntry( boolean bIsAutocompleEntry );
493 
494     /**
495      *
496      * @return the label of value for all search
497      */
498     String getLabelValueAllSearch( );
499 
500     /**
501      * Set the label value all search
502      * 
503      * @param strLabelValueAllSearch
504      *            The label value all search
505      */
506     void setLabelValueAllSearch( String strLabelValueAllSearch );
507 
508     /**
509      * Get the request data
510      * 
511      * @param request
512      *            HttpRequest
513      * @param locale
514      *            the locale
515      * @return null if all data requiered are in the request else the url of jsp error
516      */
517     String getEntryData( HttpServletRequest request, Locale locale );
518 
519     /**
520      * save in the list of record field the record field associate to the entry
521      * 
522      * @param record
523      *            the record associated to the record field
524      * @param request
525      *            HttpRequest
526      * @param bTestDirectoryError
527      *            true if the value contains in the request must be tested
528      * @param bAddNewValue
529      * 				true if add new value
530      * @param listRecordField
531      *            the list of record field associate to the record
532      * @param locale
533      *            the locale
534      * @throws DirectoryErrorException
535      *             If an error occurs
536      */
537     void getRecordFieldData( Record record, HttpServletRequest request, boolean bTestDirectoryError, boolean bAddNewValue, List<RecordField> listRecordField,
538             Locale locale ) throws DirectoryErrorException;
539 
540     /**
541      * save in the list of record field the record field associate to the entry
542      * 
543      * @param record
544      *            the record associated to the record field
545      * @param listValue
546      *            the list which contains the string value of the record field
547      * @param bTestDirectoryError
548      *            true if the value contains in the request must be tested
549      * @param bAddNewValue
550      * 				true if add new value
551      * @param listRecordField
552      *            the list of record field associate to the record
553      * @param locale
554      *            the locale
555      * @throws DirectoryErrorException
556      *             If an error occurs
557      */
558     void getRecordFieldData( Record record, List<String> listValue, boolean bTestDirectoryError, boolean bAddNewValue, List<RecordField> listRecordField,
559             Locale locale ) throws DirectoryErrorException;
560 
561     /**
562      * save in the list of record field the record field associate to the entry
563      * 
564      * @param record
565      *            the record associated to the record field
566      * @param strImportValue
567      *            the import string which contains the string value of the record field
568      * @param bTestDirectoryError
569      *            true if the value contains in the request must be tested
570      * @param listRecordField
571      *            the list of record field associate to the record
572      * @param locale
573      *            the locale
574      * @throws DirectoryErrorException
575      *             If an error occurs
576      */
577     void getImportRecordFieldData( Record record, String strImportValue, boolean bTestDirectoryError, List<RecordField> listRecordField, Locale locale )
578             throws DirectoryErrorException;
579 
580     /**
581      * Get template create url
582      * 
583      * @return template create url
584      */
585     String getTemplateCreate( );
586 
587     /**
588      * Get the template modify url
589      * 
590      * @return template modify url
591      */
592     String getTemplateModify( );
593 
594     /**
595      * The paginator who is use in the template modify of the entry
596      * 
597      * @param nItemPerPage
598      *            Number of items to display per page
599      * @param strBaseUrl
600      *            The base Url for build links on each page link
601      * @param strPageIndexParameterName
602      *            The parameter name for the page index
603      * @param strPageIndex
604      *            The current page index
605      * @return the paginator who is use in the template modify of the entry
606      */
607     Paginator getPaginator( int nItemPerPage, String strBaseUrl, String strPageIndexParameterName, String strPageIndex );
608 
609     /**
610      * Get the list of regular expression who is use in the template modify
611      * 
612      * @param plugin
613      *            the plugin
614      * @param entry
615      *            the entry
616      * @return the regular expression list who is use in the template modify
617      */
618     ReferenceList getReferenceListRegularExpression( IEntry entry, Plugin plugin );
619 
620     /**
621      * Get Html code used in entry form
622      * 
623      * @param locale
624      *            the locale
625      * @param isDisplayFront
626      *            true if the template front or false if the template back
627      * @return html code
628      *
629      * */
630     String getHtmlFormEntry( Locale locale, boolean isDisplayFront );
631 
632     /**
633      * Get Html code used in entry form
634      * 
635      * @param locale
636      *            the locale
637      * @param listRecordField
638      *            the list of record field associate to the entry
639      * @param isDisplayFront
640      *            true if the template front or false if the template back
641      * @return html code
642      *
643      * */
644     String getHtmlFormEntry( Locale locale, List<RecordField> listRecordField, boolean isDisplayFront );
645 
646     /**
647      * Get Html code used in search form
648      * 
649      * @param locale
650      *            the locale
651      * @param isDisplayFront
652      *            true if the template front or false if the template back
653      * @return html code
654      *
655      * */
656     String getHtmlFormSearchEntry( Locale locale, boolean isDisplayFront );
657 
658     /**
659      * Get Html code used in search form
660      * 
661      * @param locale
662      *            the locale
663      * @param listRecordField
664      *            the list of record field associate to the entry
665      * @param isDisplayFront
666      *            true if the template front or false if the template back
667      * @return html code
668      *
669      * */
670     String getHtmlFormSearchEntry( Locale locale, List<RecordField> listRecordField, boolean isDisplayFront );
671 
672     /**
673      * Get the Html code used in display records
674      * 
675      * @param locale
676      *            the locale
677      * @param recordField
678      *            the record field associate to the entry
679      * @param isDisplayFront
680      *            true if the template front or false if the template back
681      * @return html code
682      *
683      * */
684     String getHtmlRecordFieldValue( Locale locale, RecordField recordField, boolean isDisplayFront );
685 
686     /**
687      * convert the value contains in the record field to string
688      * 
689      * @param recordField
690      *            the recordField
691      * @param locale
692      *            the locale
693      * @param bDisplayFront
694      *            true if display front or false if display back
695      * @param bDisplayExport
696      *            true if display export
697      * @return string
698      */
699 
700     String convertRecordFieldValueToString( RecordField recordField, Locale locale, boolean bDisplayFront, boolean bDisplayExport );
701 
702     /**
703      * convert the title contains in the record field to string
704      * 
705      * @param recordField
706      *            the recordField
707      * @param locale
708      *            the locale
709      * @param bDisplayFront
710      *            true if display front or false if display back
711      * @return string
712      */
713     String convertRecordFieldTitleToString( RecordField recordField, Locale locale, boolean bDisplayFront );
714 
715     /**
716      * add in the search map the criteria
717      * 
718      * @param recordField
719      *            the record field
720      * @param mapSearchItem
721      *            Search map
722      *
723      */
724     void addSearchCriteria( HashMap<String, Object> mapSearchItem, RecordField recordField );
725 
726     /**
727      * add The Xml of the entry in the string buffer
728      * 
729      * @param plugin
730      *            plugin
731      * @param locale
732      *            loclae
733      * @param strXml
734      *            the string buffer
735      *
736      */
737     void getXml( Plugin plugin, Locale locale, StringBuffer strXml );
738 
739     /**
740      * @param record
741      *            The record
742      * @param decodedBytes 
743      * 				decoded bytes
744      * @param nomFile 
745      * 				name of file
746      * @param b 
747      * 				flag
748      * @param listRecordField 
749      * 				list of record fields
750      * @param locale 
751      * 				the locale
752      * @throws DirectoryErrorException
753      *              directory error exception
754      */
755     void getImportRecordFieldData( Record record, byte [ ] decodedBytes, String nomFile, boolean b, List<RecordField> listRecordField, Locale locale )
756             throws DirectoryErrorException;
757 
758     /**
759      * Sets the map provider
760      * 
761      * @param mapProvider
762      *            the map provider
763      */
764     void setMapProvider( IMapProvider mapProvider );
765 
766     /**
767      * Gets the map provider
768      * 
769      * @return the map provider
770      */
771     IMapProvider getMapProvider( );
772 
773     /**
774      * Check if the entry is sortable
775      * 
776      * @return true if it is sortable, false otherwise
777      */
778     boolean isSortable( );
779 
780     /**
781      * The paginator who is use in the template modify of the entry
782      * 
783      * @param nItemPerPage
784      *            Number of items to display per page
785      * @param strBaseUrl
786      *            The base Url for build links on each page link
787      * @param strPageIndexParameterName
788      *            The parameter name for the page index
789      * @param strPageIndex
790      *            The current page index
791      * @param locale
792      *            Locale
793      * @return the paginator who is use in the template modify of the entry
794      */
795     LocalizedPaginator getPaginator( int nItemPerPage, String strBaseUrl, String strPageIndexParameterName, String strPageIndex, Locale locale );
796 
797     // SQL PART
798     // ADDED TO SORT LIST WITH BETTER PERFORMANCES
799     /**
800      * Gets the join clause for SQL in case of query order. This function has been added to provide better performances to sort record list.
801      * 
802      * @return join clause (i.e <code>" JOIN some_table ON col1=col2 "</code>)
803      * @see #isSortable
804      */
805     String getSQLJoin( );
806 
807     /**
808      * Gets the order by clause in case of query order. Does not contain ASC or DESC clause (provided by DAO). This function has been added to provide better
809      * performances to sort record list.
810      * 
811      * @return order by clause (i.e. <code>" ORDER BY some_column "</code>)
812      * @see #isSortable
813      */
814     String getSQLOrderBy( );
815 
816     /**
817      * Use with {@link #getSQLJoin()} and {@link #getSQLOrderBy()} to add parameters values
818      * 
819      * @return an empty list if no parameter needed, parameters values otherwise.
820      */
821     List<Object> getSQLParametersValues( );
822 
823     /**
824      * Check if the file can be uploaded or not. This method will check the size of each file and the number max of files that can be uploaded.
825      * 
826      * @param listUploadedFileItems
827      *            the list of uploaded files
828      * @param listFileItemsToUpload
829      *            the list of files to upload
830      * @param locale
831      *            the locale
832      * @throws DirectoryErrorException
833      *             exception if there is an error
834      */
835     void canUploadFiles( List<FileItem> listUploadedFileItems, List<FileItem> listFileItemsToUpload, Locale locale ) throws DirectoryErrorException;
836 
837     /**
838      * Check if this entry should be anonymized when a record is anonymized.
839      * 
840      * @return True if this entry should be anonymized, false otherwise.
841      */
842     boolean getAnonymize( );
843 
844     /**
845      * Set the anonymize status of an entry.
846      * 
847      * @param bAnonymize
848      *            True if this entry should be anonymized when a record is anonymized, false otherwise
849      */
850     void setAnonymize( boolean bAnonymize );
851 
852     /**
853      * Check if entries of this type are anonymizable or not.
854      * 
855      * @return True if the entry is anonymizable, false otherwise
856      */
857     boolean isAnonymizable( );
858 
859     /**
860      * @return the _nNumberRow
861      */
862     int getNumberRow( );
863 
864     /**
865      * @param nNumberRow
866      *            the _nNumberRow to set
867      */
868     void setNumberRow( int nNumberRow );
869 
870     /**
871      * @return the _nNumberColumn
872      */
873     int getNumberColumn( );
874 
875     /**
876      * @param nNumberColumn
877      *            the _nNumberColumn to set
878      */
879     void setNumberColumn( int nNumberColumn );
880 
881     String getHtmlFormEntryPopup( Locale locale, List<RecordField> defaultValues, boolean isDisplayFront );
882 
883     String getHtmlListEntry( Locale locale, List<RecordField> defaultValues, boolean isDisplayFront );
884 
885 }