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.dbpage.web.portlet;
35  
36  import fr.paris.lutece.plugins.dbpage.business.DbPage;
37  import fr.paris.lutece.plugins.dbpage.business.portlet.DbPagePortlet;
38  import fr.paris.lutece.plugins.dbpage.business.portlet.DbPagePortletHome;
39  import fr.paris.lutece.plugins.dbpage.service.DbPageService;
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.workgroup.AdminWorkgroupService;
45  import fr.paris.lutece.portal.web.constants.Messages;
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.util.Collection;
51  import java.util.HashMap;
52  
53  import javax.servlet.http.HttpServletRequest;
54  
55  
56  /**
57   * This class provides the user interface to manage DbPage Portlet features
58   */
59  public class DbPagePortletJspBean extends PortletJspBean
60  {
61      ////////////////////////////////////////////////////////////////////////////
62      // Constants
63      private static final String PARAMETER_PAGE_ID = "page_id";
64      private static final String PARAMETER_PORTLET_ID = "portlet_id";
65      private static final String PARAMETER_PORTLET_TYPE_ID = "portlet_type_id";
66      private static final String PARAMETER_DBPAGE_NAME = "dbpage_name";
67      private static final String PARAMETER_DBPAGE_VALUES = "dbpage_param_values";
68      private static final String COMBO_DBPAGE_LIST = "@combo_dbpage@";
69      private static final String MARK_DBPAGE_VALUES = "dbpage_values";
70  
71      // Markers
72      private static final String MARK_DBPAGE_LIST = "dbpage_list";
73      private static final String MARK_DBPAGE_ID = "default_dbpage_id";
74      private static final String PROPERTY_PORTLET_PREFIX = "portlet.dbpage";
75  
76      //////////////////////////////////////////////////////////////////////////////////
77      //Templates
78      private static final String TEMPLATE_COMBO_DBPAGE = "admin/plugins/dbpage/portlet/combo_dbpage.html";
79  
80      ////////////////////////////////////////////////////////////////////////////
81      // Methods
82  
83      /**
84       * Returns the DbPage portlet creation form
85       *
86       * @param request The Http request
87       * @return The HTML form
88       */
89      public String getCreate( HttpServletRequest request )
90      {
91          String strIdPage = request.getParameter( PARAMETER_PAGE_ID );
92          String strPortletIdType = request.getParameter( PARAMETER_PORTLET_TYPE_ID );
93          HtmlTemplate template = getCreateTemplate( strIdPage, strPortletIdType );
94  
95          Collection<DbPage> colDbPage = DbPageService.getInstance(  ).getDbPagesCollection(  );
96          colDbPage = AdminWorkgroupService.getAuthorizedCollection( colDbPage, getUser(  ) );
97  
98          template.substitute( COMBO_DBPAGE_LIST, getDbPageListCombo( colDbPage, "" ) );
99          template.substitute( MARK_DBPAGE_VALUES, " " );
100 
101         return template.getHtml(  );
102     }
103 
104     /**
105      * Returns the DbPage portlet modification form
106      *
107      * @param request The Http request
108      * @return The HTML form
109      */
110     public String getModify( HttpServletRequest request )
111     {
112         String strPortletId = request.getParameter( PARAMETER_PORTLET_ID );
113         int nPortletId = Integer.parseInt( strPortletId );
114         DbPagePortlet portlet = (DbPagePortlet) PortletHome.findByPrimaryKey( nPortletId );
115 
116         HtmlTemplate template = getModifyTemplate( portlet );
117         Collection<DbPage> colDbPage = DbPageService.getInstance(  ).getDbPagesCollection(  );
118         colDbPage = AdminWorkgroupService.getAuthorizedCollection( colDbPage, getUser(  ) );
119 
120         template.substitute( COMBO_DBPAGE_LIST, getDbPageListCombo( colDbPage, portlet.getDbPageName(  ) ) );
121         template.substitute( MARK_DBPAGE_VALUES, portlet.getDbValues(  ) );
122 
123         return template.getHtml(  );
124     }
125 
126     /**
127      * Returns the portlet's properties prefix
128      * @return The portlet's properties prefix
129      */
130     public String getPropertiesPrefix(  )
131     {
132         return PROPERTY_PORTLET_PREFIX;
133     }
134 
135     /**
136      * Process portlet's creation
137      *
138      * @param request The Http request
139      * @return The Jsp management URL of the process result
140      */
141     public String doCreate( HttpServletRequest request )
142     {
143         DbPagePortlet portlet = new DbPagePortlet(  );
144         String strIdPage = request.getParameter( PARAMETER_PAGE_ID );
145         String strValues = request.getParameter( PARAMETER_DBPAGE_VALUES );
146         int nIdPage = Integer.parseInt( strIdPage );
147         String strDbPage = request.getParameter( PARAMETER_DBPAGE_NAME );
148         portlet.setDbPageName( strDbPage );
149         portlet.setValues( strValues );
150 
151         DbPage dbPage = DbPageService.getInstance(  ).getDbPage( portlet.getDbPageName(  ) );
152 
153         if ( !AdminWorkgroupService.isAuthorized( dbPage, getUser(  ) ) )
154         {
155             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
156         }
157 
158         // get portlet common attributes
159         String strErrorUrl = setPortletCommonData( request, portlet );
160 
161         if ( strErrorUrl != null )
162         {
163             return strErrorUrl;
164         }
165 
166         portlet.setPageId( nIdPage );
167 
168         // Portlet's creation
169         DbPagePortletHome.getInstance(  ).create( portlet );
170 
171         //Displays the page with the new Portlet
172         return getPageUrl( nIdPage );
173     }
174 
175     /**
176      * Process portlet's modification
177      *
178      * @param request The Http request
179      * @return The Jsp management URL of the process result
180      */
181     public String doModify( HttpServletRequest request )
182     {
183         // recovers portlet attributes
184         String strPortletId = request.getParameter( PARAMETER_PORTLET_ID );
185         int nPortletId = Integer.parseInt( strPortletId );
186         DbPagePortlet portlet = (DbPagePortlet) PortletHome.findByPrimaryKey( nPortletId );
187 
188         // retrieve portlet common attributes
189         String strErrorUrl = setPortletCommonData( request, portlet );
190 
191         if ( strErrorUrl != null )
192         {
193             return strErrorUrl;
194         }
195 
196         String strDbPageName = request.getParameter( PARAMETER_DBPAGE_NAME );
197 
198         DbPage dbPage = DbPageService.getInstance(  ).getDbPage( strDbPageName );
199 
200         if ( !AdminWorkgroupService.isAuthorized( dbPage, getUser(  ) ) )
201         {
202             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
203         }
204 
205         portlet.setDbPageName( strDbPageName );
206 
207         String strDbPageValues = request.getParameter( PARAMETER_DBPAGE_VALUES );
208         portlet.setValues( strDbPageValues );
209 
210         // updates the portlet
211         portlet.update(  );
212 
213         // displays the page with the portlet updated
214         return getPageUrl( portlet.getPageId(  ) );
215     }
216 
217     /**
218      * Returns an html template containing the list of the dbpages
219      * @param strDbPageId The default DbPage identifier
220      * @param dbPageList The list of available dbpages
221      * @return The html code
222      */
223     private String getDbPageListCombo( ReferenceList dbPageList, String strDbPageId )
224     {
225         HashMap model = new HashMap(  );
226         model.put( MARK_DBPAGE_ID, strDbPageId );
227         model.put( MARK_DBPAGE_LIST, dbPageList );
228 
229         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_COMBO_DBPAGE, getLocale(  ), model );
230 
231         return template.getHtml(  );
232     }
233 
234     /**
235      * Returns an html template containing the list of the dbpages
236      * @param strDbPageId The default DbPage identifier
237      * @param dbPageCollection The collection of dbpages
238      * @return The html code
239      */
240     private String getDbPageListCombo( Collection<DbPage> dbPageCollection, String strDbPageId )
241     {
242         ReferenceList dbPageList = new ReferenceList(  );
243 
244         for ( DbPage dbPage : dbPageCollection )
245         {
246             dbPageList.addItem( dbPage.getName(  ), dbPage.getName(  ) );
247         }
248 
249         return getDbPageListCombo( dbPageList, strDbPageId );
250     }
251 }