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.folderlisting.web.portlet;
35  
36  import fr.paris.lutece.plugins.folderlisting.business.portlet.FolderListingPortlet;
37  import fr.paris.lutece.plugins.folderlisting.business.portlet.FolderListingPortletHome;
38  import fr.paris.lutece.plugins.folderlisting.service.Folder;
39  import fr.paris.lutece.plugins.folderlisting.service.FolderService;
40  import fr.paris.lutece.portal.business.portlet.PortletHome;
41  import fr.paris.lutece.portal.service.message.AdminMessage;
42  import fr.paris.lutece.portal.service.message.AdminMessageService;
43  import fr.paris.lutece.portal.service.template.AppTemplateService;
44  import fr.paris.lutece.portal.service.util.AppPathService;
45  import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
46  import fr.paris.lutece.portal.web.portlet.PortletJspBean;
47  import fr.paris.lutece.util.ReferenceList;
48  import fr.paris.lutece.util.html.HtmlTemplate;
49  
50  import java.io.File;
51  
52  import java.util.HashMap;
53  import java.util.List;
54  
55  import javax.servlet.http.HttpServletRequest;
56  
57  
58  /**
59   * This class provides the user interface to manage FolderListing Portlet features
60   */
61  public class FolderListingPortletJspBean extends PortletJspBean
62  {
63      // Rights
64      public static final String RIGHT_MANAGE_ADMIN_SITE = "CORE_ADMIN_SITE";
65  
66      // Messages
67      private static final String MESSAGE_FOLDER_INVALID = "folderlisting.message.folderInvalid";
68  
69      //Parameters
70      private static final String PARAMETER_PAGE_ID = "page_id";
71      private static final String PARAMETER_PORTLET_ID = "portlet_id";
72      private static final String PARAMETER_PORTLET_TYPE_ID = "portlet_type_id";
73      private static final String PARAMETER_FOLDER = "folder";
74  
75      //Markers
76      private static final String MARK_FOLDER_LIST = "folder_list";
77      private static final String MARK_FOLDER_ID = "folder_id";
78  
79      // Templates
80      private static final String TEMPLATE_COMBO_FOLDER = "admin/plugins/folderlisting/portlet/combo_folder.html";
81      private static final String COMBO_FOLDER_LIST = "@combo_folders@";
82  
83      /**
84       * Returns the FolderListing portlet creation form
85       *
86       * @param request The Http request
87       *
88       * @return The HTML form
89       */
90      public String getCreate( HttpServletRequest request )
91      {
92          String strIdPage = request.getParameter( PARAMETER_PAGE_ID );
93          System.out.println( "strIdPage  " + strIdPage );
94  
95          String strPortletIdType = request.getParameter( PARAMETER_PORTLET_TYPE_ID );
96          System.out.println( "strPortletIdType  " + strPortletIdType );
97  
98          HtmlTemplate template = getCreateTemplate( strIdPage, strPortletIdType );
99          List<Folder> listFolders = FolderService.getInstance(  ).getFoldersCollection(  );
100         listFolders = (List<Folder>) AdminWorkgroupService.getAuthorizedCollection( listFolders, getUser(  ) );
101 
102         ReferenceList rlFolders = new ReferenceList(  );
103 
104         for ( Folder folder : listFolders )
105         {
106             rlFolders.addItem( folder.getId(  ), folder.getName(  ) );
107         }
108 
109         String strHtmlCombo = getFolderIndexCombo( rlFolders, "" );
110         template.substitute( COMBO_FOLDER_LIST, strHtmlCombo );
111 
112         return template.getHtml(  );
113     }
114 
115     /**
116      * Returns the FolderListing portlet modification form
117      *
118      * @param request The Http request
119      *
120      * @return The HTML form
121      */
122     public String getModify( HttpServletRequest request )
123     {
124         String strPortletId = request.getParameter( PARAMETER_PORTLET_ID );
125         int nPortletId = Integer.parseInt( strPortletId );
126         FolderListingPortlet portlet = (FolderListingPortlet) PortletHome.findByPrimaryKey( nPortletId );
127         HtmlTemplate template = getModifyTemplate( portlet );
128         List<Folder> listFolders = FolderService.getInstance(  ).getFoldersCollection(  );
129         listFolders = (List<Folder>) AdminWorkgroupService.getAuthorizedCollection( listFolders, getUser(  ) );
130 
131         ReferenceList rlFolders = new ReferenceList(  );
132 
133         for ( Folder folder : listFolders )
134         {
135             rlFolders.addItem( folder.getId(  ), folder.getName(  ) );
136         }
137 
138         String strHtmlCombo = getFolderIndexCombo( rlFolders, portlet.getRootFolderId(  ) );
139         template.substitute( COMBO_FOLDER_LIST, strHtmlCombo );
140 
141         return template.getHtml(  );
142     }
143 
144     /**
145      * Returns portlet's properties prefix
146      *
147      * @return prefix
148      */
149     public String getPropertiesPrefix(  )
150     {
151         return "portlet.folderlisting";
152     }
153 
154     /**
155      * Process portlet's creation
156      *
157      * @param request The Http request
158      *
159      * @return The Jsp management URL of the process result
160      */
161     public String doCreate( HttpServletRequest request )
162     {
163         FolderListingPortlet portlet = new FolderListingPortlet(  );
164         String strIdPage = request.getParameter( PARAMETER_PAGE_ID );
165         String strFolderId = request.getParameter( PARAMETER_FOLDER );
166         int nIdPage = Integer.parseInt( strIdPage );
167 
168         // get portlet common attributes
169         String strErrorUrl = setPortletCommonData( request, portlet );
170 
171         if ( strErrorUrl != null )
172         {
173             return strErrorUrl;
174         }
175 
176         portlet.setPageId( nIdPage );
177 
178         if ( isValidFolder( strFolderId ) )
179         {
180             portlet.setRootFolderId( strFolderId );
181             FolderListingPortletHome.getInstance(  ).create( portlet );
182         }
183         else
184         {
185             return AdminMessageService.getMessageUrl( request, MESSAGE_FOLDER_INVALID, AdminMessage.TYPE_STOP );
186         }
187 
188         //Displays the page with the new Portlet
189         return getPageUrl( nIdPage );
190     }
191 
192     /**
193      * Process portlet's modification
194      *
195      * @param request The Http request
196      *
197      * @return The Jsp management URL of the process result
198      */
199     public String doModify( HttpServletRequest request )
200     {
201         // Getting portlet
202         String strPortletId = request.getParameter( PARAMETER_PORTLET_ID );
203         int nPortletId = Integer.parseInt( strPortletId );
204         FolderListingPortlet portlet = (FolderListingPortlet) PortletHome.findByPrimaryKey( nPortletId );
205 
206         // get portlet common attributes
207         String strErrorUrl = setPortletCommonData( request, portlet );
208 
209         if ( strErrorUrl != null )
210         {
211             return strErrorUrl;
212         }
213 
214         // Getting portlet's common attributs
215         setPortletCommonData( request, portlet );
216 
217         String strFolderId = request.getParameter( PARAMETER_FOLDER );
218 
219         if ( isValidFolder( strFolderId ) )
220         {
221             portlet.setRootFolderId( strFolderId );
222             portlet.update(  );
223         }
224         else
225         {
226             return AdminMessageService.getMessageUrl( request, MESSAGE_FOLDER_INVALID, AdminMessage.TYPE_STOP );
227         }
228 
229         return getPageUrl( portlet.getPageId(  ) );
230     }
231 
232     /**
233      * Return the folder listing depending on rights
234      *
235      * @param listFolders The list of folders
236      * @param strDefaultFolderId the default id of the folder
237      *
238      * @return DOCUMENT ME!
239      */
240     String getFolderIndexCombo( ReferenceList listFolders, String strDefaultFolderId )
241     {
242         HashMap model = new HashMap(  );
243         model.put( MARK_FOLDER_LIST, listFolders );
244         model.put( MARK_FOLDER_ID, strDefaultFolderId );
245 
246         HtmlTemplate templateCombo = AppTemplateService.getTemplate( TEMPLATE_COMBO_FOLDER, getLocale(  ), model );
247 
248         return templateCombo.getHtml(  );
249     }
250 
251     /**
252      * Verifies whether the folder is valid
253      *
254      * @param strFolderId The Id corresponding to the folder
255      *
256      * @return true if the folder is a valid folder
257      */
258     private boolean isValidFolder( String strFolderId )
259     {
260         boolean bValue = false;
261 
262         if ( ( strFolderId != null ) && !strFolderId.equals( "" ) )
263         {
264             Folder folder = FolderService.getInstance(  ).getFolder( strFolderId );
265 
266             if ( folder != null )
267             {
268                 String strFolderPath = "/" + folder.getPath(  );
269                 String strAbsolutePath = AppPathService.getAbsolutePathFromRelativePath( strFolderPath );
270 
271                 if ( new File( strAbsolutePath ).exists(  ) )
272                 {
273                     bValue = true;
274                 }
275             }
276         }
277 
278         return bValue;
279     }
280 }