1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.document.business;
35
36 import fr.paris.lutece.plugins.document.business.attributes.DocumentAttribute;
37 import fr.paris.lutece.plugins.document.business.category.Category;
38 import fr.paris.lutece.plugins.document.business.publication.DocumentPublication;
39 import fr.paris.lutece.plugins.document.business.publication.DocumentPublicationHome;
40 import fr.paris.lutece.portal.business.resourceenhancer.ResourceEnhancer;
41 import fr.paris.lutece.portal.service.i18n.I18nService;
42 import fr.paris.lutece.portal.service.i18n.Localizable;
43 import fr.paris.lutece.portal.service.resource.IExtendableResource;
44 import fr.paris.lutece.portal.service.util.AppPropertiesService;
45 import fr.paris.lutece.util.date.DateUtil;
46 import fr.paris.lutece.util.url.UrlItem;
47 import fr.paris.lutece.util.xml.XmlUtil;
48
49 import org.apache.commons.lang3.StringUtils;
50
51 import java.util.Date;
52 import java.util.GregorianCalendar;
53 import java.util.List;
54 import java.util.Locale;
55
56 import javax.servlet.http.HttpServletRequest;
57
58
59
60
61 public class Document implements Localizable, IExtendableResource
62 {
63 public static final String CODE_DOCUMENT_TYPE_DOWNLOAD = "download";
64 public static final String CODE_DOCUMENT_TYPE_IMAGE = "image";
65 public static final String PROPERTY_RESOURCE_TYPE = "document";
66 private static final String SERVLET_DOCUMENT_PATH = "document";
67 private static final String PROPERTY_DEFAULT_THUMBNAIL = "document.thumbnail.default";
68 private static final String PROPERTY_RESOURCE_PROVIDER_URL = "document.resource.provider.url";
69
70
71
72 private static final String TAG_DOCUMENT = "document";
73 private static final String TAG_DOCUMENT_ID = "document-id";
74 private static final String TAG_DATE_PUBLICATION = "document-date-publication";
75 private static final String TAG_DOCUMENT_XML_CONTENT = "document-xml-content";
76 private static final String MARK_ID = "id";
77 private static final String MARK_ID_ATTRIBUTE = "id_attribute";
78 private static final String EMPTY_STRING = "";
79 private static final String CONSTANT_QUESTION_MARK = "?";
80 private static final String CONSTANT_EQUALS = "=";
81
82
83 private int _nIdDocument;
84 private String _strCodeDocumentType;
85 private String _strType;
86 private String _strTitle;
87 private String _strSummary;
88 private int _nIdCreator;
89 private int _nIdMailingList;
90 private java.sql.Timestamp _dateCreation;
91 private java.sql.Timestamp _dateModification;
92 private java.sql.Timestamp _dateValidityBegin;
93 private java.sql.Timestamp _dateValidityEnd;
94 private String _strComment;
95 private String _strXmlWorkingContent;
96 private String _strXmlValidatedContent;
97 private String _strXmlMetadata;
98 private int _nIdSpace;
99 private int _nIdPageTemplateDocument;
100 private int _nPublishedStatus;
101 private String _strSpace;
102 private int _nIdState;
103 private String _strState;
104 private List<DocumentAttribute> _listAttributes;
105 private Locale _locale;
106 private List _listActions;
107 private List<Category> _listCategories;
108 private boolean _bSkipPortlet;
109 private boolean _bSkipCategories;
110
111
112
113
114
115
116 public int getId( )
117 {
118 return _nIdDocument;
119 }
120
121
122
123
124
125
126
127 public void setId( int nIdDocument )
128 {
129 _nIdDocument = nIdDocument;
130 }
131
132
133
134
135
136
137 public Locale getLocale( )
138 {
139 return I18nService.getDefaultLocale( );
140 }
141
142
143
144
145
146
147
148 @Override
149 public void setLocale( Locale locale )
150 {
151 _locale = locale;
152 }
153
154
155
156
157
158
159 public String getCodeDocumentType( )
160 {
161 return _strCodeDocumentType;
162 }
163
164
165
166
167
168
169
170 public void setCodeDocumentType( String strCodeDocumentType )
171 {
172 _strCodeDocumentType = strCodeDocumentType;
173 }
174
175
176
177
178
179
180 public String getTitle( )
181 {
182 return _strTitle;
183 }
184
185
186
187
188
189
190
191 public void setTitle( String strTitle )
192 {
193 _strTitle = strTitle;
194 }
195
196
197
198
199
200
201 public String getSummary( )
202 {
203 return ( _strSummary != null ) ? _strSummary : EMPTY_STRING;
204 }
205
206
207
208
209
210
211
212 public void setSummary( String strSummary )
213 {
214 _strSummary = strSummary;
215 }
216
217
218
219
220
221
222 public java.sql.Timestamp getDateCreation( )
223 {
224 return _dateCreation;
225 }
226
227
228
229
230
231
232
233 public void setDateCreation( java.sql.Timestamp dateCreation )
234 {
235 _dateCreation = dateCreation;
236 }
237
238
239
240
241
242
243 public int getCreatorId( )
244 {
245 return _nIdCreator;
246 }
247
248
249
250
251
252
253
254 public void setCreatorId( int nIdCreator )
255 {
256 _nIdCreator = nIdCreator;
257 }
258
259
260
261
262
263
264 public java.sql.Timestamp getDateModification( )
265 {
266 return _dateModification;
267 }
268
269
270
271
272
273
274
275 public void setDateModification( java.sql.Timestamp dateModification )
276 {
277 _dateModification = dateModification;
278 }
279
280
281
282
283
284
285 public java.sql.Timestamp getDateValidityBegin( )
286 {
287 return _dateValidityBegin;
288 }
289
290
291
292
293
294
295
296 public void setDateValidityBegin( java.sql.Timestamp dateValidityBegin )
297 {
298 _dateValidityBegin = dateValidityBegin;
299 }
300
301
302
303
304
305
306 public java.sql.Timestamp getDateValidityEnd( )
307 {
308 return _dateValidityEnd;
309 }
310
311
312
313
314
315
316
317 public void setDateValidityEnd( java.sql.Timestamp dateValidityEnd )
318 {
319 _dateValidityEnd = dateValidityEnd;
320 }
321
322
323
324
325
326
327 public String getComment( )
328 {
329 return ( _strComment != null ) ? _strComment : EMPTY_STRING;
330 }
331
332
333
334
335
336
337
338 public void setComment( String strComment )
339 {
340 _strComment = strComment;
341 }
342
343
344
345
346
347
348 public String getXmlWorkingContent( )
349 {
350 return _strXmlWorkingContent;
351 }
352
353
354
355
356
357
358
359 public void setXmlWorkingContent( String strXmlWorkingContent )
360 {
361 _strXmlWorkingContent = strXmlWorkingContent;
362 }
363
364
365
366
367
368
369 public String getXmlValidatedContent( )
370 {
371 return _strXmlValidatedContent;
372 }
373
374
375
376
377
378
379
380 public void setXmlValidatedContent( String strXmlValidatedContent )
381 {
382 _strXmlValidatedContent = strXmlValidatedContent;
383 }
384
385
386
387
388
389
390 public String getXmlMetadata( )
391 {
392 return _strXmlMetadata;
393 }
394
395
396
397
398
399
400
401 public void setXmlMetadata( String strXmlMetadata )
402 {
403 _strXmlMetadata = strXmlMetadata;
404 }
405
406
407
408
409
410
411 public int getSpaceId( )
412 {
413 return _nIdSpace;
414 }
415
416
417
418
419
420
421
422 public void setSpaceId( int nIdSpace )
423 {
424 _nIdSpace = nIdSpace;
425 }
426
427
428
429
430
431
432 public String getSpace( )
433 {
434 return _strSpace;
435 }
436
437
438
439
440
441
442
443 public void setSpace( String strSpace )
444 {
445 _strSpace = strSpace;
446 }
447
448
449
450
451
452
453 public int getStateId( )
454 {
455 return _nIdState;
456 }
457
458
459
460
461
462
463
464 public void setStateId( int nIdState )
465 {
466 _nIdState = nIdState;
467 }
468
469
470
471
472
473
474 public String getStateKey( )
475 {
476 return _strState;
477 }
478
479
480
481
482
483
484 public String getState( )
485 {
486 return I18nService.getLocalizedString( _strState, _locale );
487 }
488
489
490
491
492
493
494
495 public void setStateKey( String strState )
496 {
497 _strState = strState;
498 }
499
500
501
502
503
504
505 public int getMailingListId( )
506 {
507 return _nIdMailingList;
508 }
509
510
511
512
513
514
515
516 public void setMailingListId( int nIdMailingList )
517 {
518 _nIdMailingList = nIdMailingList;
519 }
520
521
522
523
524
525
526 public int getPageTemplateDocumentId( )
527 {
528 return _nIdPageTemplateDocument;
529 }
530
531
532
533
534
535
536
537 public void setPageTemplateDocumentId( int nIdPageTemplateDocument )
538 {
539 _nIdPageTemplateDocument = nIdPageTemplateDocument;
540 }
541
542
543
544
545
546
547 public List<DocumentAttribute> getAttributes( )
548 {
549 return _listAttributes;
550 }
551
552
553
554
555
556
557
558 public void setAttributes( List<DocumentAttribute> listAttributes )
559 {
560 _listAttributes = listAttributes;
561 }
562
563
564
565
566
567
568 public List getActions( )
569 {
570 return _listActions;
571 }
572
573
574
575
576
577
578
579 public void setActions( List listActions )
580 {
581 _listActions = listActions;
582 }
583
584
585
586
587
588
589 public String getType( )
590 {
591 return _strType;
592 }
593
594
595
596
597
598
599
600 public void setType( String strType )
601 {
602 _strType = strType;
603 }
604
605
606
607
608 public List<Category> getCategories( )
609 {
610 return _listCategories;
611 }
612
613
614
615
616
617 public void setCategories( List<Category> listCategory )
618 {
619 _listCategories = listCategory;
620 }
621
622
623
624
625
626 public void setPublishedStatus( int nPublishedStatus )
627 {
628 _nPublishedStatus = nPublishedStatus;
629 }
630
631
632
633
634
635
636 public int getPublishedStatus( )
637 {
638 return _nPublishedStatus;
639 }
640
641
642
643
644
645
646 public boolean isSkipPortlet( )
647 {
648 return _bSkipPortlet;
649 }
650
651
652
653
654
655
656
657 public void setSkipPortlet( boolean bSkipPortlet )
658 {
659 _bSkipPortlet = bSkipPortlet;
660 }
661
662
663
664
665
666
667 public boolean isSkipCategories( )
668 {
669 return _bSkipCategories;
670 }
671
672
673
674
675
676
677
678 public void setSkipCategories( boolean bSkipCategories )
679 {
680 _bSkipCategories = bSkipCategories;
681 }
682
683
684
685
686
687
688 public String getThumbnail( )
689 {
690 String strThumbnailUrl = AppPropertiesService.getProperty( PROPERTY_DEFAULT_THUMBNAIL );
691 String strResourceUrl = AppPropertiesService.getProperty( PROPERTY_RESOURCE_PROVIDER_URL );
692
693 DocumentType documentType = DocumentTypeHome.findByPrimaryKey( getCodeDocumentType( ) );
694
695 if ( documentType.getThumbnailAttributeId( ) != 0 )
696 {
697 strThumbnailUrl = strResourceUrl + getId( );
698 }
699 else
700 if ( !documentType.getDefaultThumbnailUrl( ).equals( "" ) )
701 {
702 strThumbnailUrl = documentType.getDefaultThumbnailUrl( );
703 }
704
705 return strThumbnailUrl;
706 }
707
708
709
710
711
712
713
714
715
716
717
718
719
720 public String getXml( HttpServletRequest request, int nIdPortlet )
721 {
722 StringBuffer strXml = new StringBuffer( );
723
724 XmlUtil.beginElement( strXml, TAG_DOCUMENT );
725
726 XmlUtil.addElement( strXml, TAG_DOCUMENT_ID, Integer.toString( getId( ) ) );
727
728 if ( nIdPortlet != -1 )
729 {
730 DocumentPublication publication = DocumentPublicationHome.findByPrimaryKey( nIdPortlet, getId( ) );
731 String strDate = DateUtil.getDateString( publication.getDatePublishing( ), getLocale( ) );
732 XmlUtil.addElement( strXml, TAG_DATE_PUBLICATION, strDate );
733 }
734
735 XmlUtil.addElement( strXml, TAG_DOCUMENT_XML_CONTENT, getXmlValidatedContent( ) );
736
737
738 ResourceEnhancer.getXmlAddOn( strXml, PROPERTY_RESOURCE_TYPE, getId( ) );
739
740 XmlUtil.endElement( strXml, TAG_DOCUMENT );
741
742 return strXml.toString( );
743 }
744
745
746
747
748
749
750
751
752
753
754 public String getXmlDocument( HttpServletRequest request, int nIdPortlet )
755 {
756 return XmlUtil.getXmlHeader( ) + getXml( request, nIdPortlet );
757 }
758
759
760
761
762
763
764
765
766 public DocumentAttribute getAttribute( String strAttributeCode )
767 {
768 if ( _listAttributes != null )
769 {
770 for ( DocumentAttribute attribute : _listAttributes )
771 {
772 if ( attribute.getCode( ).equals( strAttributeCode ) )
773 {
774 return attribute;
775 }
776 }
777 }
778
779 return null;
780 }
781
782
783
784
785
786
787
788
789 public boolean isValid( )
790 {
791 java.sql.Timestamp dateValidityBegin = getDateValidityBegin( );
792 java.sql.Timestamp dateValidityEnd = getDateValidityEnd( );
793
794 GregorianCalendar gc = new GregorianCalendar( );
795
796 java.sql.Date dateToday = new java.sql.Date( gc.getTime( ).getTime( ) );
797
798 if ( ( dateValidityBegin == null ) && ( dateValidityEnd == null ) )
799 {
800 return true;
801 }
802 else
803 if ( dateValidityBegin == null )
804 {
805
806 return ( dateValidityEnd.compareTo( dateToday ) >= 0 );
807 }
808 else
809 if ( dateValidityEnd == null )
810 {
811
812 return ( dateValidityBegin.compareTo( dateToday ) <= 0 );
813 }
814 else
815 {
816
817
818 return ( ( dateValidityBegin.compareTo( dateToday ) <= 0 ) && ( dateValidityEnd.compareTo( dateToday ) >= 0 ) );
819 }
820 }
821
822
823
824
825
826
827 public boolean isOutOfDate( )
828 {
829 if ( getDateValidityEnd( ) == null )
830 {
831 return false;
832 }
833
834
835 return !( getDateValidityEnd( ).compareTo( new Date( ) ) >= 0 );
836 }
837
838
839
840
841 @Override
842 public String getIdExtendableResource( )
843 {
844 return Integer.toString( _nIdDocument );
845 }
846
847
848
849
850 @Override
851 public String getExtendableResourceType( )
852 {
853 return PROPERTY_RESOURCE_TYPE;
854 }
855
856
857
858
859 @Override
860 public String getExtendableResourceName( )
861 {
862 return _strTitle;
863 }
864
865
866
867
868 @Override
869 public String getExtendableResourceDescription( )
870 {
871 return _strSummary;
872 }
873
874
875
876
877 @Override
878 public String getExtendableResourceImageUrl( )
879 {
880 if ( StringUtils.equalsIgnoreCase( _strCodeDocumentType, CODE_DOCUMENT_TYPE_IMAGE ) )
881 {
882 UrlItem urlItem = new UrlItem( SERVLET_DOCUMENT_PATH );
883 urlItem.addParameter( MARK_ID, _nIdDocument );
884
885 return urlItem.getUrl( );
886 }
887
888 if ( _listAttributes != null )
889 {
890 for ( DocumentAttribute attribute : _listAttributes )
891 {
892 if ( StringUtils.equals( attribute.getCodeAttributeType( ), "image" ) )
893 {
894 UrlItem urlItem = new UrlItem( SERVLET_DOCUMENT_PATH );
895 urlItem.addParameter( MARK_ID, _nIdDocument );
896 urlItem.addParameter( MARK_ID_ATTRIBUTE, attribute.getId( ) );
897
898 return urlItem.getUrl( );
899 }
900 }
901 }
902
903 return null;
904 }
905 }