1 /*
2 * Copyright (c) 2002-2025, 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.PluginModel;
37 import fr.paris.lutece.plugins.pluginwizard.business.model.Portlet;
38 import fr.paris.lutece.portal.service.util.AppLogService;
39
40 import java.util.ArrayList;
41 import java.util.HashMap;
42 import java.util.List;
43 import java.util.Map;
44
45 /**
46 * The portlet generator generates all the java files needed for portlet creation
47 */
48 public class PortletGenerator extends AbstractGenerator
49 {
50 private static final String PATH = "src/java/fr/paris/lutece/plugins/{plugin_name}/business/portlet/";
51 private static final String EXT_JAVA = ".java";
52 private List<BusinessFileConfig> _listFiles;
53
54 /**
55 * Set the list of files config
56 *
57 * @param listFiles
58 * The list of files
59 */
60 public void setFiles( List<BusinessFileConfig> listFiles )
61 {
62 if ( listFiles != null )
63 {
64 _listFiles = (List<BusinessFileConfig>) ( ( (ArrayList<BusinessFileConfig>) listFiles ).clone( ) );
65 }
66 else
67 {
68 _listFiles = null;
69 }
70 }
71
72 /**
73 * {@inheritDoc }
74 */
75 @Override
76 public Map generate( PluginModel pm, String generationSchemeName )
77 {
78 HashMap map = new HashMap( );
79 String strRadicalPackage = pm.getPluginNameAsRadicalPackage( );
80
81 for ( Portlet portlet : pm.getPortlets( ) )
82 {
83 for ( BusinessFileConfig file : _listFiles )
84 {
85 String strPortletFile = file.getPrefix( ) + portlet.getPortletClass( ) + file.getSuffix( ) + EXT_JAVA;
86
87 String strPath = getFilePath( pm, PATH, strPortletFile );
88
89 String strSourceCode = getPortletFile( portlet, pm.getPluginName( ), file.getTemplate( ), strRadicalPackage );
90 strSourceCode = strSourceCode.replace( "<", "<" );
91 strSourceCode = strSourceCode.replace( ">", ">" );
92 map.put( strPath, strSourceCode );
93 }
94 }
95
96 return map;
97 }
98
99 /**
100 * Produces text content of java file used to build a portlet
101 *
102 * @param portlet
103 * The instance of a portlet
104 * @param strPluginName
105 * The plugin name
106 * @param strTemplate
107 * The template of portlet file
108 * @param strPortletName
109 * The portlet name
110 * @return The content of the portlet file
111 */
112 private String getPortletFile( Portlet portlet, String strPluginName, String strTemplate, String strRadicalPackage )
113 {
114 Map<String, Object> model = new HashMap<>( );
115
116 model.put( Markers.MARK_PORTLET, portlet );
117 model.put( Markers.MARK_PLUGIN_NAME, strPluginName );
118 model.put( Markers.MARK_RADICAL_PACKAGE, strRadicalPackage );
119
120 AppLogService.info( portlet );
121
122 return build( strTemplate, model );
123 }
124 }