KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > war > action > OlapDataSourceAction


1 package com.jaspersoft.jasperserver.war.action;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.List JavaDoc;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.springframework.webflow.Event;
9 import org.springframework.webflow.RequestContext;
10 import org.springframework.webflow.ScopeType;
11 import org.springframework.webflow.action.FormAction;
12
13 import com.jaspersoft.jasperserver.api.JSException;
14 import com.jaspersoft.jasperserver.api.metadata.common.domain.Resource;
15 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup;
16 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;
17 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JdbcReportDataSource;
18 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JndiJdbcReportDataSource;
19 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportDataSource;
20 import com.jaspersoft.jasperserver.api.metadata.olap.domain.JdbcOlapDataSource;
21 import com.jaspersoft.jasperserver.api.metadata.olap.domain.JndiJdbcOlapDataSource;
22 import com.jaspersoft.jasperserver.api.metadata.olap.service.OlapConnectionService;
23 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria;
24 import com.jaspersoft.jasperserver.war.common.JasperServerConstImpl;
25 import com.jaspersoft.jasperserver.war.dto.BaseDTO;
26 import com.jaspersoft.jasperserver.war.dto.OlapDataSourceWrapper;
27 import com.jaspersoft.jasperserver.war.validation.OlapDataSourceValidator;
28
29 /**
30  *
31  * OlapDataSourceAction provides the actions for the olap data source web flow
32  *
33  * @author jshih
34  */

35 public class OlapDataSourceAction extends FormAction {
36     protected final Log log = LogFactory.getLog(this.getClass());
37     private static final String JavaDoc FORM_OBJECT_KEY="dataResource";
38     private static final String JavaDoc DATASOURCEURI_PARAM = "resource";
39     private static final String JavaDoc PARENT_FOLDER_ATTR = "parentFolder";
40     private RepositoryService repository;
41     private OlapConnectionService olapConnection;
42     private JasperServerConstImpl constants=new JasperServerConstImpl();
43
44     /**
45      * initialize OlapDataSourceAction.class object
46      */

47     public OlapDataSourceAction(){
48         setFormObjectClass(OlapDataSourceWrapper.class);
49         setFormObjectName(FORM_OBJECT_KEY);
50         setFormObjectScope(ScopeType.FLOW);
51         setValidator(new OlapDataSourceValidator());
52     }
53
54     /**
55      * initAction performs the initialization for the olap data source web flow
56      *
57      * @param context
58      * @return
59      * @throws Exception
60      */

61     public Event initAction(RequestContext context) throws Exception JavaDoc {
62         OlapDataSourceWrapper formObject =
63             (OlapDataSourceWrapper) getFormObject(context);
64         if (formObject.isSubflowMode()
65                 && formObject.getAllDatasources() == null) {
66             // get a list of all datasources in repo and set in the formObject
67
FilterCriteria criteria = FilterCriteria
68                     .createFilter(ReportDataSource.class);
69             ResourceLookup[] lookups = repository.findResource(null, criteria);
70             List JavaDoc allDataSources = null;
71             if (lookups != null && lookups.length != 0) {
72                 log("Found OlapDataSource lookups size=" + lookups.length);
73                 allDataSources = new ArrayList JavaDoc(lookups.length);
74                 for (int i = 0; i < lookups.length; i++) {
75                     ResourceLookup dr = lookups[i];
76                     allDataSources.add(dr.getURIString());
77                 }
78             }
79             formObject.setAllDatasources(allDataSources);
80         }
81         log("Type of datasource=" + formObject.getType() + " Mode="
82                 + formObject.getMode());
83         context.getFlowScope().put("constants", constants);
84         return success();
85     }
86     
87     /**
88      * handleTypeSelection handles data source type selection
89      *
90      * @param context
91      * @return
92      * @throws Exception
93      */

94     public Event handleTypeSelection(RequestContext context) throws Exception JavaDoc {
95         OlapDataSourceWrapper formObject =
96             (OlapDataSourceWrapper) getFormObject(context);
97         //If the object instance held by OlapDataSource is not the type selected
98
// copy common things
99
ReportDataSource ds=formObject.getOlapDataSource();
100         if(ds==null){
101             log("Type="+formObject.getType());
102             if(formObject.getType().equals(constants.getJNDIDatasourceType())) {
103                 ds=(JndiJdbcReportDataSource) repository.newResource(
104                         null,JndiJdbcReportDataSource.class);
105             } else
106                 ds=(JdbcReportDataSource)repository.newResource(
107                         null,JdbcReportDataSource.class);
108             formObject.setOlapDataSource(ds);
109         }
110         
111         if(JdbcOlapDataSource.class.isAssignableFrom(ds.getClass())) {
112             if(formObject.getType().equals(constants.getJNDIDatasourceType())) {
113                 // User opted for JNDI type and the exisiting OlapDataSource instance is Jdbc
114
JndiJdbcReportDataSource jndiSource=
115                     (JndiJdbcReportDataSource)repository.newResource(
116                             null,JndiJdbcReportDataSource.class);
117                 jndiSource.setParentFolder(ds.getParentFolder());
118                 jndiSource.setName(ds.getName());
119                 jndiSource.setLabel(ds.getLabel());
120                 jndiSource.setDescription(ds.getDescription());
121                 jndiSource.setVersion(ds.getVersion());
122                 formObject.setOlapDataSource(jndiSource);
123             }
124         } else {
125             // OlapDataSource holds an instance of JdbcOlapDataSource
126
if(formObject.getType().equals(constants.getJDBCDatasourceType())) {
127                 // User opted for Jndi type
128
JdbcReportDataSource jdbcSource=
129                     (JdbcReportDataSource)repository.newResource(null,JdbcReportDataSource.class);
130                 jdbcSource.setParentFolder(ds.getParentFolder());
131                 jdbcSource.setName(ds.getName());
132                 jdbcSource.setLabel(ds.getLabel());
133                 jdbcSource.setDescription(ds.getDescription());
134                 jdbcSource.setVersion(ds.getVersion());
135                 formObject.setOlapDataSource(jdbcSource);
136             }
137         }
138         return success();
139     }
140     
141     /**
142      * saveLookup catptures the data source selected
143      *
144      * @param context
145      * @return
146      * @throws Exception
147      */

148     public Event saveLookup(RequestContext context) throws Exception JavaDoc {
149         OlapDataSourceWrapper formObject=(OlapDataSourceWrapper) getFormObject(context);
150         log("user selected a reusable OlapDataSource");
151         String JavaDoc selectedUri=formObject.getSelectedUri();
152         Resource resource=repository.getResource(null, selectedUri);
153         formObject.setOlapDataSource((ReportDataSource) resource);
154         formObject.setSelectedUri(selectedUri);
155         return success();
156     }
157     
158     /**
159      * saveDatasource stores the selected data source
160      *
161      * @param context
162      * @return
163      * @throws Exception
164      */

165     public Event saveDatasource(RequestContext context) throws Exception JavaDoc {
166         OlapDataSourceWrapper formObject=(OlapDataSourceWrapper) getFormObject(context);
167         log("Saving the datasource back ");
168         if(formObject.isStandAloneMode()) {
169             if (formObject.getType()!=null) {
170                 ReportDataSource ds=formObject.getOlapDataSource();
171                 log("Saving DataSource name="+ds.getName()+
172                     " datasource desc="+ds.getDescription()+" in folder="+ds.getParentFolder());
173                 if(ds.getName()!=null)
174                     repository.saveResource(null,ds);
175             }
176         }
177         return success();
178     }
179     
180     /**
181      * loadFormObject loads the form object
182      *
183      * @param context
184      */

185     public Object JavaDoc loadFormObject(RequestContext context)
186     {
187         // TODO was not called during initAction(),
188
// the one in OlapUnitAction was called instead
189
OlapDataSourceWrapper formObject = null;
190         String JavaDoc resourceUri = context.getRequestParameters().get(DATASOURCEURI_PARAM);
191         if( resourceUri!=null && resourceUri.trim().length()!=0){
192             Resource resource=(Resource)repository.getResource(null,resourceUri);
193             if(resource==null)
194                 throw new JSException("Could not find resource with URI "+resourceUri);
195             log("Found resource with uri="+resourceUri);
196             formObject=new OlapDataSourceWrapper();
197             formObject.setMode(BaseDTO.MODE_STAND_ALONE_EDIT);
198             ReportDataSource dataSource=(ReportDataSource)resource;
199             if(JdbcOlapDataSource.class.isAssignableFrom(dataSource.getClass())){
200                 formObject.setType(constants.getJDBCDatasourceType());
201             }else
202                 if(JndiJdbcOlapDataSource.class.isAssignableFrom(dataSource.getClass()))
203                     formObject.setType(constants.getJNDIDatasourceType());
204             formObject.setOlapDataSource(dataSource);
205         }
206         if(formObject==null){
207             String JavaDoc parentFolder = (String JavaDoc) context.getFlowScope().get(PARENT_FOLDER_ATTR);
208             if(parentFolder==null || parentFolder.trim().length()==0)
209                 parentFolder="/";
210             log("Datasource flow: Stand alone new mode");
211             formObject=new OlapDataSourceWrapper();
212             formObject.setMode(BaseDTO.MODE_STAND_ALONE_NEW);
213             // set default options for datasource type
214
formObject.setType(constants.getJNDIDatasourceType());
215             formObject.setSource(constants.getFieldChoiceLocal());
216             JndiJdbcReportDataSource jndiSource=
217                 (JndiJdbcReportDataSource)repository.newResource(null,JndiJdbcReportDataSource.class);
218             jndiSource.setParentFolder(parentFolder);
219             jndiSource.setVersion(Resource.VERSION_NEW);
220             formObject.setOlapDataSource(jndiSource);
221         }
222         // setting selected uri allows jsp to position the selected data source item
223
formObject.setSelectedUri(resourceUri);
224         return formObject;
225     }
226
227     /**
228      * getRepository returns repository service property
229      *
230      * @return
231      */

232     public RepositoryService getRepository() {
233         return repository;
234     }
235     
236     /**
237      * setRepository sets repository service property
238      *
239      * @param repository
240      */

241     public void setRepository(RepositoryService repository) {
242         this.repository = repository;
243     }
244     
245     /**
246      * method to get the olap connection service object
247      *
248      * @return
249      */

250     public OlapConnectionService getOlapConnection() {
251         return this.olapConnection;
252     }
253     
254     /**
255      * method to set the olap connection service object
256      *
257      * @param olapConnection
258      */

259     public void setOlapConnection(OlapConnectionService olapConnection) {
260         this.olapConnection = olapConnection;
261     }
262
263     /**
264      * log logs debug message
265      *
266      * @param text
267      */
private void log(String JavaDoc text) {
268         log.debug(text);
269     }
270      
271     /**
272      * getDATASOURCEURI_PARAM
273      * @return
274      */

275     public static String JavaDoc getDATASOURCEURI_PARAM() {
276         return DATASOURCEURI_PARAM;
277     }
278     
279     /**
280      * getFORM_OBJECT_KEY
281      * @return
282      */

283     public static String JavaDoc getFORM_OBJECT_KEY() {
284         return FORM_OBJECT_KEY;
285     }
286 }
287
Popular Tags