View Javadoc
1   /*
2    * Copyright (c) 2002-2022, City of 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.pluginwizard.service.generator;
35  
36  import fr.paris.lutece.plugins.pluginwizard.business.model.BusinessClass;
37  import fr.paris.lutece.plugins.pluginwizard.business.model.Feature;
38  import fr.paris.lutece.plugins.pluginwizard.business.model.PluginModel;
39  import fr.paris.lutece.plugins.pluginwizard.service.ModelService;
40  import fr.paris.lutece.plugins.pluginwizard.util.Utils;
41  
42  import java.util.HashMap;
43  import java.util.List;
44  import java.util.Map;
45  
46  /**
47   * Admin Jsp Controller Generator
48   */
49  public class AdminJspControllerGenerator extends AbstractGenerator
50  {
51      private static final String PATH = "webapp/jsp/admin/plugins/{plugin_name}/";
52      private String _strBusinessTemplate;
53      private String _strFeatureTemplate;
54  
55      /**
56       * Sets the business template
57       * 
58       * @param strTemplate
59       *            The template
60       */
61      public void setBusinessTemplate( String strTemplate )
62      {
63          _strBusinessTemplate = strTemplate;
64      }
65  
66      /**
67       * Sets the feature template
68       * 
69       * @param strTemplate
70       *            The template
71       */
72      public void setFeatureTemplate( String strTemplate )
73      {
74          _strFeatureTemplate = strTemplate;
75      }
76  
77      /**
78       * {@inheritDoc }
79       */
80      @Override
81      public Map generate( PluginModel pm, String generationSchemeName )
82      {
83          HashMap map = new HashMap( );
84  
85          String strPluginName = pm.getPluginNameAsRadicalPackage( );
86  
87          for ( Feature feature : pm.getFeatures( ) )
88          {
89              List<BusinessClass> listBusinessClasses = ModelService.getBusinessClassesByFeature( pm, feature.getId( ) );
90  
91              for ( BusinessClass businessClass : listBusinessClasses )
92              {
93                  String strJspFileName = "Manage" + businessClass.getBusinessClass( ) + "s.jsp";
94  
95                  String strPath = getFilePath( pm, PATH, strJspFileName );
96  
97                  String strSourceCode = getJspBusinessFile( businessClass, feature.getFeatureName( ), strPluginName, pm.isModule( ) );
98                  strSourceCode = strSourceCode.replace( "&lt;", "<" );
99                  strSourceCode = strSourceCode.replace( "&gt;", ">" );
100                 map.put( strPath, strSourceCode );
101             }
102         }
103 
104         return map;
105     }
106 
107     /**
108      * Gets the Jsp File of a business class
109      * 
110      * @param businessClass
111      *            The business class
112      * @param strFeatureName
113      *            The feature name
114      * @param strPluginName
115      *            The generated plugin name
116      * @param nJspType
117      *            The type of jsp
118      * @return The source code of the jsp
119      */
120     private String getJspBusinessFile( BusinessClass businessClass, String strFeatureName, String strPluginName, boolean bIsModule )
121     {
122         String strBeanName = strFeatureName.toLowerCase( ) + businessClass.getBusinessClass( );
123         Map<String, Object> model = new HashMap<>( );
124         model.put( Markers.MARK_BUSINESS_CLASS, businessClass );
125         model.put( Markers.MARK_PLUGIN_NAME, strPluginName );
126         model.put( Markers.MARK_BEAN_NAME, strBeanName );
127         model.put( Markers.MARK_IS_MODULE, bIsModule );
128 
129         return build( _strBusinessTemplate, model );
130     }
131 
132     /**
133      * Gets the JSP feature file code
134      * 
135      * @param strFeatureName
136      *            The feature name
137      * @param strPluginName
138      *            The plugin name
139      * @return The source code of the JSP
140      */
141     private String getFeatureJspFile( String strFeatureName, String strPluginName, boolean bIsModule )
142     {
143         Map<String, Object> model = new HashMap<>( );
144         model.put( Markers.MARK_FEATURE_NAME, strFeatureName );
145         model.put( Markers.MARK_PLUGIN_NAME, strPluginName );
146         model.put( Markers.MARK_IS_MODULE, bIsModule );
147 
148         return build( _strFeatureTemplate, model );
149     }
150 }