View Javadoc
1   /*
2    * Copyright (c) 2002-2014, 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.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   * Library insert service JSP Bean
83   */
84  public class LibraryInsertServiceJspBean extends InsertServiceJspBean implements InsertServiceSelectionBean
85  {
86      private static final long serialVersionUID = -7071548876864568789L;
87  
88      // Templates
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      // Parameters
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     // JSP
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     // Marks
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     // Constants
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     // Local session variables
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         // get the selected space 
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         //        Collection<LibraryMapping> allMappings = LibraryMappingHome.findAllMappingsByMedia( mediaType.getMediaId(  ), _plugin );
498         //        LibraryMapping mapping = allMappings.iterator(  ).next(  );
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         // We reset session parameters
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         //return new Paginator<Pair<String, Document>>( list, _nNbItemsPerPage, url.getUrl(  ), PARAMETER_PAGE_INDEX,
701           //  _strCurrentPageIndex );
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 }