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.library.web;
35
36 import fr.paris.lutece.plugins.document.business.Document;
37 import fr.paris.lutece.plugins.document.business.DocumentFilter;
38 import fr.paris.lutece.plugins.document.business.DocumentHome;
39 import fr.paris.lutece.plugins.document.business.attributes.DocumentAttributeHome;
40 import fr.paris.lutece.plugins.document.business.spaces.DocumentSpace;
41 import fr.paris.lutece.plugins.document.service.spaces.DocumentSpacesService;
42 import fr.paris.lutece.plugins.library.business.LibraryMapping;
43 import fr.paris.lutece.plugins.library.business.LibraryMapping.AttributeAssociation;
44 import fr.paris.lutece.plugins.library.business.LibraryMappingHome;
45 import fr.paris.lutece.plugins.library.business.LibraryMedia;
46 import fr.paris.lutece.plugins.library.business.LibraryMediaHome;
47 import fr.paris.lutece.plugins.library.business.MediaAttribute;
48 import fr.paris.lutece.plugins.library.business.MediaAttributeHome;
49 import fr.paris.lutece.plugins.library.business.SelectedMedia;
50 import fr.paris.lutece.portal.business.user.AdminUser;
51 import fr.paris.lutece.portal.service.admin.AdminUserService;
52 import fr.paris.lutece.portal.service.html.XmlTransformerService;
53 import fr.paris.lutece.portal.service.plugin.Plugin;
54 import fr.paris.lutece.portal.service.plugin.PluginService;
55 import fr.paris.lutece.portal.service.template.AppTemplateService;
56 import fr.paris.lutece.portal.service.util.AppLogService;
57 import fr.paris.lutece.portal.service.util.AppPathService;
58 import fr.paris.lutece.portal.service.util.AppPropertiesService;
59 import fr.paris.lutece.portal.web.insert.InsertServiceJspBean;
60 import fr.paris.lutece.portal.web.insert.InsertServiceSelectionBean;
61 import fr.paris.lutece.portal.web.util.LocalizedPaginator;
62 import fr.paris.lutece.util.UniqueIDGenerator;
63 import fr.paris.lutece.util.html.HtmlTemplate;
64 import fr.paris.lutece.util.html.Paginator;
65 import fr.paris.lutece.util.url.UrlItem;
66 import fr.paris.lutece.util.xml.XmlUtil;
67
68 import org.apache.commons.lang3.StringEscapeUtils;
69 import org.apache.commons.lang3.StringUtils;
70
71 import java.util.ArrayList;
72 import java.util.Collection;
73 import java.util.Collections;
74 import java.util.HashMap;
75 import java.util.List;
76 import java.util.Map;
77
78 import javax.servlet.http.HttpServletRequest;
79
80
81
82
83
84 public class LibraryInsertServiceJspBean extends InsertServiceJspBean implements InsertServiceSelectionBean
85 {
86 private static final long serialVersionUID = -7071548876864568789L;
87
88
89 private static final String TEMPLATE_MEDIATYPE_SELECTOR = "admin/plugins/library/mediatype_selector.html";
90 private static final String TEMPLATE_MEDIA_SELECTOR = "admin/plugins/library/media_selector.html";
91 private static final String TEMPLATE_MEDIA_SELECTOR_MULTIPLE = "admin/plugins/library/media_selector_multiple.html";
92 private static final String TEMPLATE_EDIT_MEDIA = "admin/plugins/library/mediaedition_selector.html";
93 private static final String TEMPLATE_EDIT_MEDIA_MULTIPLE = "admin/plugins/library/mediaedition_selector_multiple.html";
94
95
96 private static final String PARAMETER_PLUGIN_NAME = "plugin_name";
97 private static final String PARAMETER_MEDIA_TYPE = "media_type";
98 private static final String PARAMETER_MEDIA_ID = "media";
99 private static final String PARAMETER_DOCUMENT_ID = "id_document";
100 private static final String PARAMETER_SPACE_ID = "space_id";
101 private static final String PARAMETER_INPUT = "input";
102 private static final String PARAMETER_MAPPING_ID = "id_mapping";
103 private static final String PARAMETER_NB_ITEMS_PER_PAGE = "nb_items";
104 private static final String PARAMETER_PAGE_INDEX = "page_index";
105 private static final String PARAMETER_REMOVE_SELECTED = "remove_selected";
106 private static final String PARAMETER_MOVE_UP = "move_up";
107 private static final String PARAMETER_BROWSER_SPACE_ID = "browser_id_space";
108
109
110
111 private static final String JSP_INSERT_MEDIA = "jsp/admin/plugins/library/DoInsertMedia.jsp";
112 private static final String JSP_MEDIA_TYPE_SELECTION = "jsp/admin/plugins/library/SelectMedia.jsp";
113 private static final String JSP_MEDIA_EDIT_SELECTED = "jsp/admin/plugins/library/EditSelectedMedia.jsp";
114
115
116 private static final String MARK_MEDIA_DOC = "document";
117 private static final String MARK_JSP_INSERT = "jsp_insert";
118 private static final String MARK_MEDIA_TYPES = "mediatypes";
119 private static final String MARK_MEDIA_TYPE = "mediatype";
120 private static final String MARK_MEDIA_TYPE_ATTRIBUTES = "media_attributes";
121 private static final String MARK_MEDIA_ATTRIBUTES_ASSOCIATIONS = "attributes_associations";
122 private static final String MARK_SPACES_BROWSER = "spaces_browser";
123 private static final String MARK_SELECTED_SPACE = "selected_space";
124 private static final String MARK_PREVIEW_TYPE = "preview_type";
125 private static final String MARK_PAGINATOR = "paginator";
126 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
127 private static final String MARK_SELECTED_MEDIAS = "selected_medias";
128 private static final String MARK_ALL_MEDIA_ATTRIBUTES_ASSOCIATIONS = "all_attributes_associations";
129 private static final String MARK_ALL_DOCUMENTS = "all_documents";
130 private static final String MARK_MEDIA_DOC_LIST = "document_list";
131 private static final String MARK_IS_DOCUMENT_CREATION_ALLOWED = "is_document_creation_allowed" ;
132
133
134 private static final String XML_TAG_MEDIA_LIST = "mediaList";
135 private static final String XML_TAG_MEDIA = "media";
136 private static final String DEFAULT_RESULTS_PER_PAGE = "10";
137 private static final String PROPERTY_RESULTS_PER_PAGE = "library.nbdocsperpage";
138 private static final String SPACE_ID_SESSION = "spaceIdSession";
139 private static final String DEFAULT_PAGE_INDEX = "1";
140 private static final String XSL_UNIQUE_PREFIX_ID = UniqueIDGenerator.getNewId( ) + "library-";
141 private static final int APPROVED_DOCUMENT_STATE = 3;
142
143
144 private AdminUser _user;
145 private Plugin _plugin;
146 private String _input;
147 private int _nNbItemsPerPage;
148 private String _strCurrentPageIndex;
149 private List<SelectedMedia> _listSelectedMedia;
150
151 public String getInsertServiceSelectorUI( HttpServletRequest request )
152 {
153 init( request );
154 _listSelectedMedia = null;
155
156 Collection<LibraryMedia> libraryMedia = LibraryMediaHome.findAllMedia( _plugin );
157 HashMap<String, Object> model = getDefaultModel( );
158 model.put( MARK_MEDIA_TYPES, libraryMedia );
159
160 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MEDIATYPE_SELECTOR, _user.getLocale( ), model );
161
162 return template.getHtml( );
163 }
164
165 public String getSelectMedia( HttpServletRequest request )
166 {
167 init( request );
168
169 String strMediaType = request.getParameter( PARAMETER_MEDIA_TYPE );
170
171 String strSpaceIdRequest = request.getParameter( DocumentSpacesService.PARAMETER_BROWSER_SELECTED_SPACE_ID );
172 int nSpaceId = -1;
173
174 if ( ( strSpaceIdRequest != null ) && ( strSpaceIdRequest.length( ) > 0 ) )
175 {
176 nSpaceId = Integer.parseInt( strSpaceIdRequest );
177 request.getSession( ).setAttribute( SPACE_ID_SESSION, nSpaceId );
178 }
179 else
180 {
181 Integer nSpaceIdTmp = (Integer) request.getSession( ).getAttribute( SPACE_ID_SESSION );
182
183 if ( nSpaceIdTmp != null )
184 {
185 nSpaceId = nSpaceIdTmp.intValue( );
186 }
187 }
188
189 LibraryMedia mediaType = LibraryMediaHome.findByPrimaryKey( Integer.parseInt( strMediaType ), _plugin );
190 mediaType.setMediaAttributeList( MediaAttributeHome.findAllAttributesForMedia( mediaType.getMediaId( ), _plugin ) );
191
192 Collection<LibraryMapping> allMappings = LibraryMappingHome.findAllMappingsByMedia( mediaType.getMediaId( ),
193 _plugin );
194 Collection<DocumentSpace> spaces = DocumentSpacesService.getInstance( ).getUserAllowedSpaces( _user );
195
196 List<Pair<String, Document>> listDocuments = new ArrayList<Pair<String, Document>>( );
197 HashMap<String, Map<String, String>> mapAssociationAttributes = new HashMap<String, Map<String, String>>( );
198 List<Integer> listDocumentsId = new ArrayList<Integer>( );
199
200
201 for ( LibraryMapping mapping : allMappings )
202 {
203 listDocumentsId.addAll( getIdDocumentsFromMapping( mapping, nSpaceId ) );
204 mapAssociationAttributes.put( String.valueOf( mapping.getIdMapping( ) ),
205 getAttributesFromMapping( mapping ) );
206 }
207
208 LocalizedPaginator<Integer> paginator = getPaginator( request, listDocumentsId );
209
210
211
212
213 for ( LibraryMapping mapping : allMappings )
214 {
215 listDocuments.addAll( getDocumentsFromMapping( mapping, nSpaceId, paginator ) );
216
217 }
218
219
220 DocumentSpace selectedSpace = null ;
221 if ( nSpaceId > 0 )
222 {
223 for ( DocumentSpace space : spaces )
224 {
225 if ( space.getId() == nSpaceId )
226 {
227 selectedSpace = space ;
228 break ;
229 }
230 }
231 }
232
233
234
235 HashMap<String, Object> model = getDefaultModel( );
236 model.put( MARK_PREVIEW_TYPE, "<img src='%SRC' alt='%ALT' />" );
237 model.put( MARK_MEDIA_TYPE, mediaType );
238 model.put( MARK_MEDIA_TYPE_ATTRIBUTES, mediaType.getMediaAttributeList( ) );
239 model.put( MARK_ALL_MEDIA_ATTRIBUTES_ASSOCIATIONS, mapAssociationAttributes );
240 model.put( MARK_ALL_DOCUMENTS, listDocuments );
241 model.put( MARK_SPACES_BROWSER,
242 DocumentSpacesService.getInstance( ).getSpacesBrowser( request, _user, _user.getLocale( ), true, true, true ) );
243 model.put( MARK_SELECTED_SPACE, nSpaceId );
244 model.put( MARK_PAGINATOR, paginator );
245 model.put( MARK_NB_ITEMS_PER_PAGE, Integer.toString( paginator.getItemsPerPage( ) ) );
246 model.put( MARK_SELECTED_MEDIAS, _listSelectedMedia );
247 model.put( MARK_IS_DOCUMENT_CREATION_ALLOWED ,
248 ( selectedSpace!=null?selectedSpace.isDocumentCreationAllowed():false ) ) ;
249 HtmlTemplate template = AppTemplateService.getTemplate( mediaType.getIsMultipleMedia( )
250 ? TEMPLATE_MEDIA_SELECTOR_MULTIPLE : TEMPLATE_MEDIA_SELECTOR, _user.getLocale( ), model );
251
252 return template.getHtml( );
253 }
254
255 public String getEditSelectedMedia( HttpServletRequest request )
256 {
257 init( request );
258
259 String strMediaTypeId = request.getParameter( PARAMETER_MEDIA_ID );
260
261 LibraryMedia mediaType = LibraryMediaHome.findByPrimaryKey( Integer.parseInt( strMediaTypeId ), _plugin );
262 mediaType.setMediaAttributeList( MediaAttributeHome.findAllAttributesForMedia( mediaType.getMediaId( ), _plugin ) );
263
264 Map<String, Object> model = getDefaultModel( );
265 model.put( MARK_MEDIA_TYPE, mediaType );
266 model.put( MARK_MEDIA_TYPE_ATTRIBUTES, mediaType.getMediaAttributeList( ) );
267
268 if ( mediaType.getIsMultipleMedia( ) )
269 {
270 for ( SelectedMedia media : _listSelectedMedia )
271 {
272 LibraryMapping mapping = LibraryMappingHome.findByPrimaryKey( media.getMappingId( ), _plugin );
273 media.setAttributesFromMapping( getAttributesFromMapping( mapping ) );
274 }
275
276 model.put( MARK_MEDIA_DOC_LIST, _listSelectedMedia );
277 }
278 else
279 {
280 String strDocumentId = request.getParameter( PARAMETER_DOCUMENT_ID );
281 Document doc = DocumentHome.findByPrimaryKey( Integer.parseInt( strDocumentId ) );
282 model.put( MARK_MEDIA_DOC, doc );
283
284 String strMappingId = request.getParameter( PARAMETER_MAPPING_ID );
285 LibraryMapping mapping = LibraryMappingHome.findByPrimaryKey( Integer.parseInt( strMappingId ), _plugin );
286 model.put( MARK_MEDIA_ATTRIBUTES_ASSOCIATIONS, getAttributesFromMapping( mapping ) );
287 }
288
289 model.put( MARK_JSP_INSERT, JSP_INSERT_MEDIA );
290
291 HtmlTemplate template = AppTemplateService.getTemplate( mediaType.getIsMultipleMedia( )
292 ? TEMPLATE_EDIT_MEDIA_MULTIPLE : TEMPLATE_EDIT_MEDIA, _user.getLocale( ), model );
293
294 return template.getHtml( );
295 }
296
297 public String doSelectMedia( HttpServletRequest request )
298 {
299 init( request );
300
301 String strDocumentId = request.getParameter( PARAMETER_DOCUMENT_ID );
302 String strMediaTypeId = request.getParameter( PARAMETER_MEDIA_ID );
303 String strMappingId = request.getParameter( PARAMETER_MAPPING_ID );
304 String strIdSpaceFilter = request.getParameter( DocumentSpacesService.PARAMETER_BROWSER_SELECTED_SPACE_ID );
305 String strIdSpace = request.getParameter( PARAMETER_BROWSER_SPACE_ID );
306
307
308 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + JSP_MEDIA_TYPE_SELECTION );
309 urlItem.addParameter( PARAMETER_MEDIA_TYPE, strMediaTypeId );
310 urlItem.addParameter( DocumentSpacesService.PARAMETER_BROWSER_SELECTED_SPACE_ID, strIdSpaceFilter );
311 urlItem.addParameter( PARAMETER_BROWSER_SPACE_ID, strIdSpace );
312
313
314 if ( Boolean.parseBoolean( request.getParameter( PARAMETER_REMOVE_SELECTED ) ) )
315 {
316 int nIdDocument = Integer.parseInt( strDocumentId );
317
318 if ( ( _listSelectedMedia != null ) && ( _listSelectedMedia.size( ) > 0 ) )
319 {
320 for ( SelectedMedia media : _listSelectedMedia )
321 {
322 if ( media.getDocumentId( ) == nIdDocument )
323 {
324 _listSelectedMedia.remove( media );
325
326 break;
327 }
328 }
329
330 if ( _listSelectedMedia.size( ) > 0 )
331 {
332 Collections.sort( _listSelectedMedia );
333
334 int nOrder = 1;
335
336 for ( SelectedMedia media : _listSelectedMedia )
337 {
338 media.setOrder( nOrder++ );
339 }
340 }
341 else
342 {
343 _listSelectedMedia = null;
344 }
345 }
346
347 return urlItem.getUrl( );
348 }
349
350 SelectedMediaary/business/SelectedMedia.html#SelectedMedia">SelectedMedia media = new SelectedMedia( Integer.parseInt( strMediaTypeId ), Integer.parseInt( strDocumentId ),
351 Integer.parseInt( strMappingId ) );
352 media.setDocument( DocumentHome.findByPrimaryKeyWithoutBinaries( media.getDocumentId( ) ) );
353
354 if ( ( _listSelectedMedia == null ) || ( _listSelectedMedia.size( ) == 0 ) )
355 {
356 _listSelectedMedia = new ArrayList<SelectedMedia>( );
357 media.setOrder( 1 );
358 }
359 else
360 {
361 media.setOrder( _listSelectedMedia.get( _listSelectedMedia.size( ) - 1 ).getOrder( ) + 1 );
362 }
363
364 _listSelectedMedia.add( media );
365
366 return urlItem.getUrl( );
367 }
368
369 public String addAllSpace( HttpServletRequest request )
370 {
371 init( request );
372
373 String strMediaTypeId = request.getParameter( PARAMETER_MEDIA_ID );
374
375 int nMediaTypeId = Integer.parseInt( strMediaTypeId );
376
377 int nIdSpace = (Integer) request.getSession( ).getAttribute( SPACE_ID_SESSION );
378
379 List<Document> listDocuments = DocumentHome.findBySpaceKey( nIdSpace );
380 int nCurrentOrder;
381
382 if ( ( _listSelectedMedia == null ) || ( _listSelectedMedia.size( ) == 0 ) )
383 {
384 _listSelectedMedia = new ArrayList<SelectedMedia>( );
385 nCurrentOrder = 1;
386 }
387 else
388 {
389 nCurrentOrder = _listSelectedMedia.get( _listSelectedMedia.size( ) - 1 ).getOrder( ) + 1;
390 }
391
392 LibraryMedia mediaType = LibraryMediaHome.findByPrimaryKey( nMediaTypeId, _plugin );
393 Collection<LibraryMapping> allMappings = LibraryMappingHome.findAllMappingsByMedia( mediaType.getMediaId( ),
394 _plugin );
395
396 for ( Document document : listDocuments )
397 {
398 document = DocumentHome.findByPrimaryKeyWithoutBinaries( document.getId( ) );
399
400 LibraryMapping selectedMapping = null;
401
402 for ( LibraryMapping mapping : allMappings )
403 {
404 if ( StringUtils.equals( mapping.getCodeDocumentType( ), document.getCodeDocumentType( ) ) )
405 {
406 selectedMapping = mapping;
407 }
408 }
409
410 if ( selectedMapping != null )
411 {
412 SelectedMediaary/business/SelectedMedia.html#SelectedMedia">SelectedMedia media = new SelectedMedia( nMediaTypeId, document.getId( ),
413 selectedMapping.getIdMapping( ) );
414 media.setOrder( nCurrentOrder );
415 media.setDocument( document );
416 _listSelectedMedia.add( media );
417 }
418 }
419
420 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + JSP_MEDIA_EDIT_SELECTED );
421 urlItem.addParameter( PARAMETER_MEDIA_ID, strMediaTypeId );
422
423 return urlItem.getUrl( );
424 }
425
426 public String doMoveMedia( HttpServletRequest request )
427 {
428 String strDocumentId = request.getParameter( PARAMETER_DOCUMENT_ID );
429 String strMediaTypeId = request.getParameter( PARAMETER_MEDIA_ID );
430 String strIdSpaceFilter = request.getParameter( DocumentSpacesService.PARAMETER_BROWSER_SELECTED_SPACE_ID );
431 String strIdSpace = request.getParameter( PARAMETER_BROWSER_SPACE_ID );
432
433
434 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + JSP_MEDIA_TYPE_SELECTION );
435 urlItem.addParameter( PARAMETER_MEDIA_TYPE, strMediaTypeId );
436 urlItem.addParameter( DocumentSpacesService.PARAMETER_BROWSER_SELECTED_SPACE_ID, strIdSpaceFilter );
437 urlItem.addParameter( PARAMETER_BROWSER_SPACE_ID, strIdSpace );
438
439
440 boolean bMoveUp = Boolean.parseBoolean( request.getParameter( PARAMETER_MOVE_UP ) );
441
442 int nIdDocument = Integer.parseInt( strDocumentId );
443
444 if ( bMoveUp )
445 {
446 SelectedMedia previousMedia = null;
447
448 for ( SelectedMedia media : _listSelectedMedia )
449 {
450 if ( media.getDocumentId( ) == nIdDocument )
451 {
452 if ( previousMedia != null )
453 {
454 int nMediaOrder = media.getOrder( );
455 media.setOrder( previousMedia.getOrder( ) );
456 previousMedia.setOrder( nMediaOrder );
457 }
458
459 break;
460 }
461
462 previousMedia = media;
463 }
464 }
465 else
466 {
467 SelectedMedia currentMedia = null;
468
469 for ( SelectedMedia nextMedia : _listSelectedMedia )
470 {
471 if ( ( currentMedia != null ) && ( currentMedia.getDocumentId( ) == nIdDocument ) )
472 {
473 int nMediaOrder = nextMedia.getOrder( );
474 nextMedia.setOrder( currentMedia.getOrder( ) );
475 currentMedia.setOrder( nMediaOrder );
476
477 break;
478 }
479
480 currentMedia = nextMedia;
481 }
482 }
483
484 Collections.sort( _listSelectedMedia );
485
486 return urlItem.getUrl( );
487 }
488
489 public String doInsertUrl( HttpServletRequest request )
490 {
491 init( request );
492
493 String strMediaTypeId = request.getParameter( PARAMETER_MEDIA_ID );
494 LibraryMedia mediaType = LibraryMediaHome.findByPrimaryKey( Integer.parseInt( strMediaTypeId ), _plugin );
495 mediaType.setMediaAttributeList( MediaAttributeHome.findAllAttributesForMedia( mediaType.getMediaId( ), _plugin ) );
496
497
498
499 StringBuffer sbXml = new StringBuffer( XmlUtil.getXmlHeader( ) );
500
501 if ( mediaType.getIsMultipleMedia( ) )
502 {
503 XmlUtil.beginElement( sbXml, XML_TAG_MEDIA_LIST );
504
505 for ( int i = 0; i < _listSelectedMedia.size( ); i++ )
506 {
507 XmlUtil.beginElement( sbXml, XML_TAG_MEDIA );
508
509 for ( MediaAttribute attribute : mediaType.getMediaAttributeList( ) )
510 {
511 String strValue = request.getParameter( attribute.getCode( ) + i );
512
513 if ( attribute.getTypeId( ) == MediaAttribute.ATTRIBUTE_TYPE_BINARY )
514 {
515 strValue = StringEscapeUtils.escapeHtml4( strValue );
516 }
517
518 XmlUtil.addElement( sbXml, attribute.getCode( ), strValue );
519 }
520
521 XmlUtil.endElement( sbXml, XML_TAG_MEDIA );
522 }
523
524 XmlUtil.endElement( sbXml, XML_TAG_MEDIA_LIST );
525 }
526 else
527 {
528 XmlUtil.beginElement( sbXml, XML_TAG_MEDIA );
529
530 for ( MediaAttribute attribute : mediaType.getMediaAttributeList( ) )
531 {
532 String strValue = request.getParameter( attribute.getCode( ) );
533
534 if ( attribute.getTypeId( ) == MediaAttribute.ATTRIBUTE_TYPE_BINARY )
535 {
536 strValue = StringEscapeUtils.escapeHtml4( strValue );
537 }
538
539 XmlUtil.addElement( sbXml, attribute.getCode( ), strValue );
540 }
541
542 XmlUtil.endElement( sbXml, XML_TAG_MEDIA );
543 }
544
545 String strHtml = "";
546
547 try
548 {
549 XmlTransformerService xmlTransformerService = new XmlTransformerService( );
550 String strXslUniqueId = XSL_UNIQUE_PREFIX_ID + strMediaTypeId;
551 String strPreHtml = xmlTransformerService.transformBySourceWithXslCache( sbXml.toString( ),
552 mediaType.getStyleSheet( ).getSource( ), strXslUniqueId, null, null );
553
554 strHtml = StringEscapeUtils.escapeEcmaScript( strPreHtml );
555 }
556 catch ( Exception e )
557 {
558 AppLogService.error( sbXml.toString( ) );
559 AppLogService.error( getClass( ).getClassLoader( ).getResource( "testlibrary.xsl" ) );
560 AppLogService.error( e.getMessage( ), e );
561 }
562
563
564 _nNbItemsPerPage = 0;
565 _strCurrentPageIndex = "";
566 _listSelectedMedia = null;
567
568 return insertUrl( request, _input, strHtml );
569 }
570
571 private List<Integer> getIdDocumentsFromMapping( LibraryMapping m, int nSpaceId )
572 {
573 DocumentFilter filter = new DocumentFilter( );
574 filter.setCodeDocumentType( m.getCodeDocumentType( ) );
575 filter.setIdState( APPROVED_DOCUMENT_STATE );
576
577 List<Integer> documents = null;
578
579 if ( nSpaceId >= 0 )
580 {
581 if ( !DocumentSpacesService.getInstance( ).isAuthorizedViewByRole( nSpaceId, _user ) ||
582 !DocumentSpacesService.getInstance( ).isAuthorizedViewByWorkgroup( nSpaceId, _user ) )
583 {
584 return null;
585 }
586
587 filter.setIdSpace( nSpaceId );
588 documents = (List<Integer>) DocumentHome.findPrimaryKeysByFilter(filter, _user.getLocale( ) );
589 }
590
591 return documents;
592 }
593
594 private List<Pair<String, Document>> getDocumentsFromMapping( LibraryMapping m, int nSpaceId,
595 LocalizedPaginator<Integer> paginator)
596 {
597
598 List<Pair<String, Document>> result = new ArrayList<Pair<String, Document>>( );
599 for ( Integer documentId : paginator.getPageItems( ) )
600 {
601 Document document = DocumentHome.findByPrimaryKey( documentId ) ;
602
603 if ( document != null )
604 {
605 result.add( new Pair<String, Document>( String.valueOf( m.getIdMapping( ) ), document ) );
606 }
607 }
608
609
610 return result;
611 }
612
613 private Map<String, String> getAttributesFromMapping( LibraryMapping m )
614 {
615 HashMap<String, String> result = new HashMap<String, String>( );
616
617 for ( AttributeAssociation assoc : m.getAttributeAssociationList( ) )
618 {
619 result.put( MediaAttributeHome.findByPrimaryKey( assoc.getIdMediaAttribute( ), _plugin ).getCode( ),
620 DocumentAttributeHome.findByPrimaryKey( assoc.getIdDocumentAttribute( ) ).getCode( ) );
621 }
622
623 return result;
624 }
625
626 private void init( HttpServletRequest request )
627 {
628 String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
629 _user = AdminUserService.getAdminUser( request );
630
631 if ( StringUtils.isNotBlank( strPluginName ) )
632 {
633 _plugin = PluginService.getPlugin( strPluginName );
634 }
635
636 String strInput = request.getParameter( PARAMETER_INPUT );
637
638 if ( StringUtils.isNotBlank( strInput ) )
639 {
640 _input = strInput;
641 }
642 }
643
644 private HashMap<String, Object> getDefaultModel( )
645 {
646 HashMap<String, Object> model = new HashMap<String, Object>( );
647 model.put( PARAMETER_PLUGIN_NAME, _plugin.getName( ) );
648 model.put( PARAMETER_INPUT, _input );
649
650 return model;
651 }
652
653 private LocalizedPaginator<Integer> getPaginator( HttpServletRequest request,
654 List<Integer> listDocumentsId )
655 {
656 String strNbItemPerPage = request.getParameter( Paginator.PARAMETER_ITEMS_PER_PAGE );
657
658 if ( StringUtils.isNotEmpty( strNbItemPerPage ) && StringUtils.isNumeric( strNbItemPerPage ) )
659 {
660 _nNbItemsPerPage = Integer.parseInt( strNbItemPerPage );
661 }
662
663 if ( _nNbItemsPerPage <= 0 )
664 {
665 String strDefaultNbItemPerPage = AppPropertiesService.getProperty( PROPERTY_RESULTS_PER_PAGE,
666 DEFAULT_RESULTS_PER_PAGE );
667 _nNbItemsPerPage = Integer.parseInt( strDefaultNbItemPerPage );
668 }
669
670 String strCurrentPageIndex = request.getParameter( Paginator.PARAMETER_PAGE_INDEX );
671
672 if ( StringUtils.isNotEmpty( strCurrentPageIndex ) && StringUtils.isNumeric( strCurrentPageIndex ) )
673 {
674 _strCurrentPageIndex = strCurrentPageIndex;
675 }
676
677 if ( StringUtils.isEmpty( _strCurrentPageIndex ) )
678 {
679 _strCurrentPageIndex = DEFAULT_PAGE_INDEX;
680 }
681
682 UrlItem url = new UrlItem( JSP_MEDIA_TYPE_SELECTION );
683 url.addParameter( PARAMETER_INPUT, _input );
684 url.addParameter( PARAMETER_PLUGIN_NAME, _plugin.getName( ) );
685
686 String strSpaceId = request.getParameter( PARAMETER_SPACE_ID );
687
688 if ( strSpaceId != null )
689 {
690 url.addParameter( PARAMETER_SPACE_ID, strSpaceId );
691 }
692
693 url.addParameter( PARAMETER_MEDIA_TYPE, request.getParameter( PARAMETER_MEDIA_TYPE ) );
694 url.addParameter( PARAMETER_NB_ITEMS_PER_PAGE, _nNbItemsPerPage );
695
696 LocalizedPaginator<Integer> paginator = new LocalizedPaginator<Integer>( (List<Integer>) listDocumentsId, _nNbItemsPerPage, url.getUrl( ),
697 Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, _user.getLocale( ) );
698 return paginator;
699
700
701
702 }
703
704 public class Pair<X, Y>
705 {
706 private X first;
707 private Y second;
708
709 public Pair( X x, Y y )
710 {
711 first = x;
712 second = y;
713 }
714
715 public X getFirst( )
716 {
717 return first;
718 }
719
720 public Y getSecond( )
721 {
722 return second;
723 }
724 }
725 }