1 /*
2  * JasperReports - Free Java Reporting Library.
3  * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
4  * http://www.jaspersoft.com
5  *
6  * Unless you have purchased a commercial license agreement from Jaspersoft,
7  * the following license terms apply:
8  *
9  * This program is part of JasperReports.
10  *
11  * JasperReports is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * JasperReports is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
23  */

24 package net.sf.jasperreports.extensions;
25
26 import java.util.Collections;
27 import java.util.List;
28
29 import net.sf.jasperreports.charts.ChartThemeBundle;
30 import net.sf.jasperreports.components.headertoolbar.HeaderToolbarElement;
31 import net.sf.jasperreports.components.headertoolbar.json.HeaderToolbarElementJsonHandler;
32 import net.sf.jasperreports.components.iconlabel.IconLabelElement;
33 import net.sf.jasperreports.components.iconlabel.IconLabelElementCsvHandler;
34 import net.sf.jasperreports.components.iconlabel.IconLabelElementDocxHandler;
35 import net.sf.jasperreports.components.iconlabel.IconLabelElementGraphics2DHandler;
36 import net.sf.jasperreports.components.iconlabel.IconLabelElementHtmlHandler;
37 import net.sf.jasperreports.components.iconlabel.IconLabelElementOdsHandler;
38 import net.sf.jasperreports.components.iconlabel.IconLabelElementOdtHandler;
39 import net.sf.jasperreports.components.iconlabel.IconLabelElementPdfHandler;
40 import net.sf.jasperreports.components.iconlabel.IconLabelElementPptxHandler;
41 import net.sf.jasperreports.components.iconlabel.IconLabelElementRtfHandler;
42 import net.sf.jasperreports.components.iconlabel.IconLabelElementXlsHandler;
43 import net.sf.jasperreports.components.iconlabel.IconLabelElementXlsxHandler;
44 import net.sf.jasperreports.components.map.MapComponent;
45 import net.sf.jasperreports.components.map.MapElementDocxHandler;
46 import net.sf.jasperreports.components.map.MapElementGraphics2DHandler;
47 import net.sf.jasperreports.components.map.MapElementHtmlHandler;
48 import net.sf.jasperreports.components.map.MapElementJsonHandler;
49 import net.sf.jasperreports.components.map.MapElementOdsHandler;
50 import net.sf.jasperreports.components.map.MapElementOdtHandler;
51 import net.sf.jasperreports.components.map.MapElementPdfHandler;
52 import net.sf.jasperreports.components.map.MapElementPptxHandler;
53 import net.sf.jasperreports.components.map.MapElementRtfHandler;
54 import net.sf.jasperreports.components.map.MapElementXlsHandler;
55 import net.sf.jasperreports.components.map.MapElementXlsxHandler;
56 import net.sf.jasperreports.components.sort.SortElement;
57 import net.sf.jasperreports.components.sort.SortElementHtmlHandler;
58 import net.sf.jasperreports.components.sort.SortElementJsonHandler;
59 import net.sf.jasperreports.crosstabs.interactive.CrosstabInteractiveJsonHandler;
60 import net.sf.jasperreports.engine.JRPropertiesMap;
61 import net.sf.jasperreports.engine.export.FlashHtmlHandler;
62 import net.sf.jasperreports.engine.export.FlashPrintElement;
63 import net.sf.jasperreports.engine.export.GenericElementHandler;
64 import net.sf.jasperreports.engine.export.GenericElementHandlerBundle;
65 import net.sf.jasperreports.engine.export.HtmlExporter;
66 import net.sf.jasperreports.engine.export.JRCsvExporter;
67 import net.sf.jasperreports.engine.export.JRGraphics2DExporter;
68 import net.sf.jasperreports.engine.export.JRPdfExporter;
69 import net.sf.jasperreports.engine.export.JRRtfExporter;
70 import net.sf.jasperreports.engine.export.JRXlsExporter;
71 import net.sf.jasperreports.engine.export.JsonExporter;
72 import net.sf.jasperreports.engine.export.oasis.JROdsExporter;
73 import net.sf.jasperreports.engine.export.oasis.JROdtExporter;
74 import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
75 import net.sf.jasperreports.engine.export.ooxml.JRPptxExporter;
76 import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
77 import net.sf.jasperreports.engine.fill.DefaultChartTheme;
78 import net.sf.jasperreports.engine.fill.JRFillCrosstab;
79 import net.sf.jasperreports.engine.query.DefaultQueryExecuterFactoryBundle;
80 import net.sf.jasperreports.engine.query.JRQueryExecuterFactoryBundle;
81 import net.sf.jasperreports.engine.scriptlets.DefaultScriptletFactory;
82 import net.sf.jasperreports.engine.scriptlets.ScriptletFactory;
83 import net.sf.jasperreports.engine.util.MessageProviderFactory;
84 import net.sf.jasperreports.engine.util.ResourceBundleMessageProviderFactory;
85 import net.sf.jasperreports.engine.xml.JRXmlConstants;
86
87
88 /**
89  * @author Teodor Danciu (teodord@users.sourceforge.net)
90  */

91 public class DefaultExtensionsRegistryFactory implements ExtensionsRegistryFactory
92 {
93     private static final GenericElementHandlerBundle HANDLER_BUNDLE = 
94         new GenericElementHandlerBundle()
95         {
96             @Override
97             public String getNamespace()
98             {
99                 return JRXmlConstants.JASPERREPORTS_NAMESPACE;
100             }
101             
102             @Override
103             public GenericElementHandler getHandler(String elementName,
104                     String exporterKey)
105             {
106                 if (
107                     FlashPrintElement.FLASH_ELEMENT_NAME.equals(elementName) 
108                     && HtmlExporter.HTML_EXPORTER_KEY.equals(exporterKey)
109                     )
110                 {
111                     return FlashHtmlHandler.getInstance();
112                 }
113                 if (MapComponent.MAP_ELEMENT_NAME.equals(elementName))
114                 {
115                     if (JRGraphics2DExporter.GRAPHICS2D_EXPORTER_KEY.equals(exporterKey))
116                     {
117                         return MapElementGraphics2DHandler.getInstance();
118                     }
119                     if (HtmlExporter.HTML_EXPORTER_KEY.equals(exporterKey))
120                     {
121                         return MapElementHtmlHandler.getInstance();
122                     }
123                     else if (JsonExporter.JSON_EXPORTER_KEY.equals(exporterKey))
124                     {
125                         return MapElementJsonHandler.getInstance();
126                     }
127                     else if(JRPdfExporter.PDF_EXPORTER_KEY.equals(exporterKey))
128                     {
129                         return MapElementPdfHandler.getInstance();
130                     }
131                     else if(JRXlsExporter.XLS_EXPORTER_KEY.equals(exporterKey))
132                     {
133                         return MapElementXlsHandler.getInstance();
134                     }
135                     else if(JRXlsxExporter.XLSX_EXPORTER_KEY.equals(exporterKey))
136                     {
137                         return MapElementXlsxHandler.getInstance();
138                     }
139                     else if(JRDocxExporter.DOCX_EXPORTER_KEY.equals(exporterKey))
140                     {
141                         return MapElementDocxHandler.getInstance();
142                     }
143                     else if(JRPptxExporter.PPTX_EXPORTER_KEY.equals(exporterKey))
144                     {
145                         return MapElementPptxHandler.getInstance();
146                     }
147                     else if(JRRtfExporter.RTF_EXPORTER_KEY.equals(exporterKey))
148                     {
149                         return MapElementRtfHandler.getInstance();
150                     }
151                     else if(JROdtExporter.ODT_EXPORTER_KEY.equals(exporterKey))
152                     {
153                         return MapElementOdtHandler.getInstance();
154                     }
155                     else if(JROdsExporter.ODS_EXPORTER_KEY.equals(exporterKey))
156                     {
157                         return MapElementOdsHandler.getInstance();
158                     }
159                 }
160                 if (SortElement.SORT_ELEMENT_NAME.equals(elementName))
161                 {
162                     if (HtmlExporter.HTML_EXPORTER_KEY.equals(exporterKey))
163                     {
164                         return new SortElementHtmlHandler();
165                     } else if (JsonExporter.JSON_EXPORTER_KEY.equals(exporterKey))
166                     {
167                         return new SortElementJsonHandler();
168                     }
169                 }
170                 if (HeaderToolbarElement.ELEMENT_NAME.equals(elementName) && JsonExporter.JSON_EXPORTER_KEY.equals(exporterKey))
171                 {
172                     return new HeaderToolbarElementJsonHandler();
173                 }
174                 if (IconLabelElement.ELEMENT_NAME.equals(elementName))
175                 {
176                     if (JRPdfExporter.PDF_EXPORTER_KEY.equals(exporterKey))
177                     {
178                         return new IconLabelElementPdfHandler();
179                     }
180                     else if (JRGraphics2DExporter.GRAPHICS2D_EXPORTER_KEY.equals(exporterKey))
181                     {
182                         return new IconLabelElementGraphics2DHandler();
183                     }        
184                     else if (HtmlExporter.HTML_EXPORTER_KEY.equals(exporterKey))
185                     {
186                         return IconLabelElementHtmlHandler.getInstance();
187                     }        
188                     else if (JRCsvExporter.CSV_EXPORTER_KEY.equals(exporterKey))
189                     {
190                         return IconLabelElementCsvHandler.getInstance();
191                     }        
192                     else if (JRXlsExporter.XLS_EXPORTER_KEY.equals(exporterKey))
193                     {
194                         return IconLabelElementXlsHandler.getInstance();
195                     }        
196                     else if (JRXlsxExporter.XLSX_EXPORTER_KEY.equals(exporterKey))
197                     {
198                         return IconLabelElementXlsxHandler.getInstance();
199                     }        
200                     else if (JRDocxExporter.DOCX_EXPORTER_KEY.equals(exporterKey))
201                     {
202                         return IconLabelElementDocxHandler.getInstance();
203                     }        
204                     else if (JRPptxExporter.PPTX_EXPORTER_KEY.equals(exporterKey))
205                     {
206                         return IconLabelElementPptxHandler.getInstance();
207                     }        
208                     else if (JROdsExporter.ODS_EXPORTER_KEY.equals(exporterKey))
209                     {
210                         return IconLabelElementOdsHandler.getInstance();
211                     }        
212                     else if (JROdtExporter.ODT_EXPORTER_KEY.equals(exporterKey))
213                     {
214                         return IconLabelElementOdtHandler.getInstance();
215                     }        
216                     else if (JRRtfExporter.RTF_EXPORTER_KEY.equals(exporterKey))
217                     {
218                         return IconLabelElementRtfHandler.getInstance();
219                     }        
220 //                    else if (JRXmlExporter.XML_EXPORTER_KEY.equals(exporterKey))
221 //                    {
222 //                        return IconLabelElementXmlHandler.getInstance();
223 //                    }        
224                 }
225                 
226                 if (JRFillCrosstab.CROSSTAB_INTERACTIVE_ELEMENT_NAME.equals(elementName))
227                 {
228                     if (JsonExporter.JSON_EXPORTER_KEY.equals(exporterKey))
229                     {
230                         return new CrosstabInteractiveJsonHandler();
231                     }
232                 }
233                 
234                 return null;
235             }
236         };
237
238     private static final ExtensionsRegistry defaultExtensionsRegistry = 
239         new ExtensionsRegistry()
240         {
241             @Override
242             public <T> List<T> getExtensions(Class<T> extensionType) 
243             {
244                 if (JRQueryExecuterFactoryBundle.class.equals(extensionType))
245                 {
246                     return (List<T>) Collections.singletonList((Object)DefaultQueryExecuterFactoryBundle.getInstance());
247                 }
248                 else if (ScriptletFactory.class.equals(extensionType))
249                 {
250                     return (List<T>) Collections.singletonList((Object)DefaultScriptletFactory.getInstance());
251                 }
252                 else if (ChartThemeBundle.class.equals(extensionType))
253                 {
254                     return (List<T>) Collections.singletonList((Object)DefaultChartTheme.BUNDLE);
255                 }
256                 else if (GenericElementHandlerBundle.class.equals(extensionType))
257                 {
258                     return (List<T>) Collections.singletonList((Object)HANDLER_BUNDLE);
259                 }
260                 else if (MessageProviderFactory.class.equals(extensionType))
261                 {
262                     return (List<T>) Collections.singletonList((Object) new ResourceBundleMessageProviderFactory());
263                 }
264                 return null;
265             }
266         };
267     
268     @Override
269     public ExtensionsRegistry createRegistry(String registryId, JRPropertiesMap properties) 
270     {
271         return defaultExtensionsRegistry;
272     }
273 }
274