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.data;
25
26 import java.util.Iterator;
27 import java.util.List;
28
29 import net.sf.jasperreports.data.bean.BeanDataAdapter;
30 import net.sf.jasperreports.data.bean.BeanDataAdapterService;
31 import net.sf.jasperreports.data.csv.CsvDataAdapter;
32 import net.sf.jasperreports.data.csv.CsvDataAdapterService;
33 import net.sf.jasperreports.data.ds.DataSourceDataAdapter;
34 import net.sf.jasperreports.data.ds.DataSourceDataAdapterService;
35 import net.sf.jasperreports.data.ejbql.EjbqlDataAdapter;
36 import net.sf.jasperreports.data.ejbql.EjbqlDataAdapterService;
37 import net.sf.jasperreports.data.empty.EmptyDataAdapter;
38 import net.sf.jasperreports.data.empty.EmptyDataAdapterService;
39 import net.sf.jasperreports.data.excel.ExcelDataAdapter;
40 import net.sf.jasperreports.data.excel.ExcelDataAdapterService;
41 import net.sf.jasperreports.data.hibernate.HibernateDataAdapter;
42 import net.sf.jasperreports.data.hibernate.HibernateDataAdapterService;
43 import net.sf.jasperreports.data.hibernate.spring.SpringHibernateDataAdapter;
44 import net.sf.jasperreports.data.hibernate.spring.SpringHibernateDataAdapterService;
45 import net.sf.jasperreports.data.jdbc.JdbcDataAdapter;
46 import net.sf.jasperreports.data.jdbc.JdbcDataAdapterContributorFactory;
47 import net.sf.jasperreports.data.jdbc.JdbcDataAdapterService;
48 import net.sf.jasperreports.data.jndi.JndiDataAdapter;
49 import net.sf.jasperreports.data.jndi.JndiDataAdapterService;
50 import net.sf.jasperreports.data.json.JsonDataAdapter;
51 import net.sf.jasperreports.data.json.JsonDataAdapterService;
52 import net.sf.jasperreports.data.mondrian.MondrianDataAdapter;
53 import net.sf.jasperreports.data.mondrian.MondrianDataAdapterService;
54 import net.sf.jasperreports.data.provider.DataSourceProviderDataAdapter;
55 import net.sf.jasperreports.data.provider.DataSourceProviderDataAdapterService;
56 import net.sf.jasperreports.data.qe.QueryExecuterDataAdapter;
57 import net.sf.jasperreports.data.qe.QueryExecuterDataAdapterService;
58 import net.sf.jasperreports.data.random.RandomDataAdapter;
59 import net.sf.jasperreports.data.random.RandomDataAdapterService;
60 import net.sf.jasperreports.data.xls.XlsDataAdapter;
61 import net.sf.jasperreports.data.xls.XlsDataAdapterService;
62 import net.sf.jasperreports.data.xlsx.XlsxDataAdapter;
63 import net.sf.jasperreports.data.xlsx.XlsxDataAdapterService;
64 import net.sf.jasperreports.data.xml.XmlDataAdapter;
65 import net.sf.jasperreports.data.xml.XmlDataAdapterService;
66 import net.sf.jasperreports.data.xmla.XmlaDataAdapter;
67 import net.sf.jasperreports.data.xmla.XmlaDataAdapterService;
68 import net.sf.jasperreports.engine.JasperReportsContext;
69 import net.sf.jasperreports.engine.ParameterContributorContext;
70
71
72 /**
73  * @author Teodor Danciu (teodord@users.sourceforge.net)
74  */

75 public class DefaultDataAdapterServiceFactory implements DataAdapterContributorFactory, DataAdapterServiceFactory
76 {
77
78     /**
79      *
80      */

81     private static final DefaultDataAdapterServiceFactory INSTANCE = new DefaultDataAdapterServiceFactory();
82
83     /**
84      *
85      */

86     private DefaultDataAdapterServiceFactory()
87     {
88     }
89
90     /**
91      *
92      */

93     public static DefaultDataAdapterServiceFactory getInstance()
94     {
95         return INSTANCE;
96     }
97     
98     @Override
99     public DataAdapterService getDataAdapterService(ParameterContributorContext context, DataAdapter dataAdapter)
100     {
101         //JasperReportsContext jasperReportsContext = context.getJasperReportsContext();
102         DataAdapterService dataAdapterService = null;
103         
104         if (dataAdapter instanceof BeanDataAdapter)
105         {
106             dataAdapterService = new BeanDataAdapterService(context, (BeanDataAdapter)dataAdapter);
107         }
108         else if (dataAdapter instanceof CsvDataAdapter)
109         {
110             dataAdapterService = new CsvDataAdapterService(context, (CsvDataAdapter)dataAdapter);
111         }
112         else if (dataAdapter instanceof DataSourceDataAdapter)
113         {
114             dataAdapterService = new DataSourceDataAdapterService(context, (DataSourceDataAdapter)dataAdapter);
115         }
116         else if (dataAdapter instanceof EmptyDataAdapter)
117         {
118             dataAdapterService = new EmptyDataAdapterService(context, (EmptyDataAdapter)dataAdapter);
119         }
120         else if (dataAdapter instanceof RandomDataAdapter)
121         {
122             dataAdapterService = new RandomDataAdapterService(context, (RandomDataAdapter)dataAdapter);
123         }
124         else if (dataAdapter instanceof JndiDataAdapter)
125         {
126             dataAdapterService = new JndiDataAdapterService(context, (JndiDataAdapter)dataAdapter);//FIXME maybe want some cache here
127         }
128         else if (dataAdapter instanceof DataSourceProviderDataAdapter)
129         {
130             dataAdapterService = new DataSourceProviderDataAdapterService(context, (DataSourceProviderDataAdapter)dataAdapter);
131         }
132         else if (dataAdapter instanceof QueryExecuterDataAdapter)
133         {
134             dataAdapterService = new QueryExecuterDataAdapterService(context, (QueryExecuterDataAdapter)dataAdapter);
135         }
136         
137         // these following three adapters must be kept in order of inheritance hierarchy
138         else if (dataAdapter instanceof ExcelDataAdapter)
139         {
140             dataAdapterService = new ExcelDataAdapterService(context, (ExcelDataAdapter)dataAdapter);
141         }
142         else if (dataAdapter instanceof XlsxDataAdapter)
143         {
144             dataAdapterService = new XlsxDataAdapterService(context, (XlsxDataAdapter)dataAdapter);
145         }
146         else if (dataAdapter instanceof XlsDataAdapter)
147         {
148             dataAdapterService = new XlsDataAdapterService(context, (XlsDataAdapter)dataAdapter);
149         }
150         // end excel
151
152         else if (dataAdapter instanceof XmlDataAdapter)
153         {
154             dataAdapterService = new XmlDataAdapterService(context, (XmlDataAdapter)dataAdapter);
155         }
156         else if (dataAdapter instanceof JsonDataAdapter)
157         {
158             dataAdapterService = new JsonDataAdapterService(context, (JsonDataAdapter)dataAdapter);
159         }
160         else if (dataAdapter instanceof HibernateDataAdapter)
161         {
162             dataAdapterService = new HibernateDataAdapterService(context, (HibernateDataAdapter)dataAdapter);
163         }
164         else if (dataAdapter instanceof SpringHibernateDataAdapter)
165         {
166             dataAdapterService = new SpringHibernateDataAdapterService(context, (SpringHibernateDataAdapter)dataAdapter);
167         }
168         else if (dataAdapter instanceof EjbqlDataAdapter)
169         {
170             dataAdapterService = new EjbqlDataAdapterService(context, (EjbqlDataAdapter)dataAdapter);
171         }
172         else if (dataAdapter instanceof MondrianDataAdapter)
173         {
174             dataAdapterService = new MondrianDataAdapterService(context, (MondrianDataAdapter)dataAdapter);
175         }
176         else if (dataAdapter instanceof XmlaDataAdapter)
177         {
178             dataAdapterService = new XmlaDataAdapterService(context, (XmlaDataAdapter)dataAdapter);
179         }
180         else if (dataAdapter instanceof JdbcDataAdapter)
181         {
182             JasperReportsContext jasperReportsContext = context.getJasperReportsContext();
183             
184             List<JdbcDataAdapterContributorFactory> bundles = jasperReportsContext.getExtensions(
185                     JdbcDataAdapterContributorFactory.class);
186             for (Iterator<JdbcDataAdapterContributorFactory> it = bundles.iterator(); it.hasNext();)
187             {
188                 JdbcDataAdapterContributorFactory factory = it.next();
189                 DataAdapterService service = factory.getDataAdapterService(context, (JdbcDataAdapter)dataAdapter);
190                 if (service != null)
191                 {
192                     dataAdapterService = service;
193                     break;
194                 }
195             }
196
197             if (dataAdapterService == null)
198             {
199                 dataAdapterService = new JdbcDataAdapterService(context, (JdbcDataAdapter)dataAdapter);
200             }
201         }
202         
203         return dataAdapterService;
204     }
205     
206     /**
207      * @deprecated Replaced by {@link #getDataAdapterService(ParameterContributorContext, DataAdapter)}.
208      */

209     @Override
210     public DataAdapterService getDataAdapterService(JasperReportsContext jasperReportsContext, DataAdapter dataAdapter)
211     {
212         return getDataAdapterService(new ParameterContributorContext(jasperReportsContext, nullnull), dataAdapter);
213     }
214   
215 }
216