KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * Copyright (C) 2006 JasperSoft http://www.jaspersoft.com
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed WITHOUT ANY WARRANTY; and without the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
15  * or write to:
16  *
17  * Free Software Foundation, Inc.,
18  * 59 Temple Place - Suite 330,
19  * Boston, MA USA 02111-1307
20  */

21 package com.jaspersoft.jasperserver.war.action;
22
23 import java.util.ArrayList JavaDoc;
24 import java.util.Arrays JavaDoc;
25 import java.util.List JavaDoc;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.springframework.webflow.Event;
30 import org.springframework.webflow.RequestContext;
31 import org.springframework.webflow.ScopeType;
32 import org.springframework.webflow.action.FormAction;
33
34 import com.jaspersoft.jasperserver.api.JSException;
35 import com.jaspersoft.jasperserver.api.metadata.common.domain.DataType;
36 import com.jaspersoft.jasperserver.api.metadata.common.domain.InputControl;
37 import com.jaspersoft.jasperserver.api.metadata.common.domain.ListOfValues;
38 import com.jaspersoft.jasperserver.api.metadata.common.domain.Query;
39 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup;
40 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceReference;
41 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;
42 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria;
43 import com.jaspersoft.jasperserver.war.common.JasperServerConstImpl;
44 import com.jaspersoft.jasperserver.war.dto.BaseDTO;
45 import com.jaspersoft.jasperserver.war.dto.DataTypeWrapper;
46 import com.jaspersoft.jasperserver.war.dto.InputControlWrapper;
47 import com.jaspersoft.jasperserver.war.dto.ListOfValuesDTO;
48 import com.jaspersoft.jasperserver.war.dto.ResourceReferenceDTO;
49 import com.jaspersoft.jasperserver.war.validation.InputControlsFlowValidator;
50
51 public class DefineInputControlsAction extends FormAction {
52     private final Log log = LogFactory.getLog(this.getClass());
53
54     private static final String JavaDoc FORM_OBJECT_KEY="control";
55     private static final String JavaDoc CONSTANTS_KEY="constants";
56     private static final String JavaDoc DATATYPE_KEY="dataType";
57     private static final String JavaDoc LOV_KEY="listOfValuesDTO";
58     private static String JavaDoc DATA_TYPE_FOLDER="dataType";
59     private static String JavaDoc QUERY_FOLDER="query";
60     private static String JavaDoc LOV_FOLDER="lov";
61     private static final String JavaDoc INPUTCONTROLURI_PARAM = "resource";
62     private static final String JavaDoc PARENT_FOLDER_ATTR = "parentFolder";
63     private RepositoryService repository;
64     private String JavaDoc queryReferenceReqAttrName;
65     private String JavaDoc queryReferenceOutpuAttrName;
66
67     /*
68      * method to get the reposervice object
69      * @return Returns an instance of the repository service injected by spring IOC
70      */

71     public RepositoryService getRepository() {
72         return repository;
73     }
74
75     /*
76      * method to set the reposervice object
77      * @return void
78      */

79     public void setRepository(RepositoryService repository) {
80         this.repository = repository;
81     }
82
83     public DefineInputControlsAction(){
84         setFormObjectClass(InputControlWrapper.class); //custom form backing object class
85
setFormObjectName(FORM_OBJECT_KEY);
86         setFormObjectScope(ScopeType.FLOW); //this is a multi-page wizard!
87
setValidator(new InputControlsFlowValidator());
88     }
89
90     /** Sets up the objects required by the flow
91      * and initilises to any default values that we want
92      * @param context
93      * @return
94      */
public Event initControlDefinition(RequestContext context) throws Exception JavaDoc
95     {
96         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
97         context.getFlowScope().put(CONSTANTS_KEY, new JasperServerConstImpl());
98         /*When in Stand alone new mode get a list of all
99          * previously existing resources to validate name uniqueness*/

100         if(formObject.isAloneNewMode()){
101             InputControl ic=formObject.getInputControl();
102             FilterCriteria criteria = FilterCriteria.createFilter();
103             criteria.addFilterElement(FilterCriteria.createParentFolderFilter(ic.getParentFolder()));
104             ResourceLookup[] resources = repository.findResource(null, criteria);
105             List JavaDoc allResources=Arrays.asList(resources);
106             formObject.setAllResources(allResources);
107         }
108         
109         return success();
110     }
111
112     /** Gets a list of exisiting control types
113      * for the type selected by the user
114      * @param context
115      * @return
116      */
public Event prepareForControlType(RequestContext context) throws Exception JavaDoc
117     {
118         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
119         InputControl control = formObject.getInputControl();
120         byte selectedType = control.getType();
121         if(selectedType==0)
122         {
123             log("Selected type was null");
124             selectedType=InputControl.TYPE_SINGLE_VALUE;
125         }
126
127         FilterCriteria criteria=null;
128         if(selectedType==InputControl.TYPE_MULTI_SELECT_LIST_OF_VALUES
129                 || selectedType==InputControl.TYPE_SINGLE_SELECT_LIST_OF_VALUES
130                 || selectedType == InputControl.TYPE_SINGLE_SELECT_LIST_OF_VALUES_RADIO
131                 || selectedType == InputControl.TYPE_MULTI_SELECT_LIST_OF_VALUES_CHECKBOX){
132             criteria=FilterCriteria.createFilter(ListOfValues.class);
133             if (control.getListOfValues() != null) {
134                 String JavaDoc uri = control.getListOfValues().getReferenceURI();
135                 if (uri != null) {
136                     formObject.setExistingPath(uri);
137                     formObject.setSource(JasperServerConstImpl.getFieldChoiceRepo());
138                 } else {
139                     formObject.setSource(JasperServerConstImpl.getFieldChoiceLocal());
140                 }
141             }
142         }
143         if(selectedType==InputControl.TYPE_MULTI_SELECT_QUERY
144                 || selectedType==InputControl.TYPE_SINGLE_SELECT_QUERY
145                 || selectedType==InputControl.TYPE_SINGLE_SELECT_QUERY_RADIO
146                 || selectedType==InputControl.TYPE_MULTI_SELECT_QUERY_CHECKBOX){
147             criteria=FilterCriteria.createFilter(Query.class);
148             if (control.getQuery() != null) {
149                 String JavaDoc uri = control.getQuery().getReferenceURI();
150                 if (uri != null) {
151                     formObject.setExistingPath(uri);
152                     formObject.setSource(JasperServerConstImpl.getFieldChoiceRepo());
153                 } else {
154                     formObject.setSource(JasperServerConstImpl.getFieldChoiceLocal());
155                 }
156             }
157         }
158         if(selectedType==InputControl.TYPE_MULTI_VALUE ||
159            selectedType==InputControl.TYPE_SINGLE_VALUE){
160             criteria=FilterCriteria.createFilter(DataType.class);
161             if (control.getDataType() != null) {
162                 String JavaDoc uri = control.getDataType().getReferenceURI();
163                 if (uri != null) {
164                     formObject.setExistingPath(uri);
165                     formObject.setSource(JasperServerConstImpl.getFieldChoiceRepo());
166                 } else {
167                     formObject.setSource(JasperServerConstImpl.getFieldChoiceLocal());
168                 }
169             }
170         }
171         if(selectedType==InputControl.TYPE_BOOLEAN){
172             //Save the boolean control and do nothing else
173
return success();
174             }
175         log("control type="+selectedType);
176         List JavaDoc existingPathsList=new ArrayList JavaDoc();
177         ResourceLookup[] lookups=repository.findResource(null,criteria);
178         if(lookups!=null){
179             log("Found lookups size="+lookups.length);
180             for(int i=0;i<lookups.length;i++){
181                 existingPathsList.add(lookups[i].getURIString());
182                 if(lookups[i]!=null)
183                     log("Found path="+lookups[i].getURIString());
184                 else
185                     log("Found null Lookup at "+i);
186             }
187         }
188         formObject.setExistingPathList(existingPathsList);
189 // context.getFlowScope().put(FORM_OBJECT_KEY, dto);
190
return success();
191     }
192
193     /**Handles user's selection at the DataType control form
194      * @param context
195      * @return
196      */
public Event handleDataTypeControl(RequestContext context) throws Exception JavaDoc
197     {
198         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
199         if(formObject==null)
200             return error();
201         InputControl control=formObject.getInputControl();
202         formObject.setSource(context.getRequestParameters().get("source"));
203
204         if (formObject.getSource().equals(JasperServerConstImpl.getFieldChoiceLocal())) {
205             DataTypeWrapper wrapper;
206             if (control.getDataType() == null || control.getDataType().getLocalResource() == null) {
207                 DataType dt = (DataType)repository.newResource(null, DataType.class);
208                 control.setDataType(dt);
209                 wrapper = new DataTypeWrapper(dt);
210                 wrapper.setMode(BaseDTO.MODE_SUB_FLOW_NEW);
211             } else {
212                 if (control.getDataType().isLocal()) {
213                     DataType dt = (DataType) control.getDataType().getLocalResource();
214                     if (dt.getDecimals() != null)
215                         formObject.setDtDecimals(dt.getDecimals().toString());
216                     if (dt.getMaxLength() != null)
217                         formObject.setDtMaxLength(dt.getMaxLength().toString());
218                 }
219                 wrapper = new DataTypeWrapper((DataType) control.getDataType().getLocalResource());
220                 wrapper.setMode(BaseDTO.MODE_SUB_FLOW_EDIT);
221             }
222             context.getFlowScope().put(DATATYPE_KEY, wrapper);
223         } else {
224             String JavaDoc path = context.getRequestParameters().get("existingPath");
225             control.setDataTypeReference(path);
226             return yes();
227         }
228         return success();
229     }
230
231     /**Handles user's selection at the List of values control form
232      * @param context
233      * @return
234      */
public Event handleLovControl(RequestContext context) throws Exception JavaDoc
235     {
236         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
237         if(formObject==null)
238             return error();
239
240         InputControl control = formObject.getInputControl();
241         formObject.setSource(context.getRequestParameters().get("source"));
242
243         if (formObject.getSource().equals(JasperServerConstImpl.getFieldChoiceLocal())) {
244             ListOfValuesDTO listOfValues;
245             if (control.getListOfValues() == null || control.getListOfValues().getLocalResource() == null) {
246                 ListOfValues lov= (ListOfValues)repository.newResource(null, ListOfValues.class);
247                 control.setListOfValues(lov);
248                 listOfValues = new ListOfValuesDTO(lov);
249                 listOfValues.setMode(BaseDTO.MODE_SUB_FLOW_NEW);
250             }
251             else {
252                 listOfValues = new ListOfValuesDTO((ListOfValues) control.getListOfValues().getLocalResource());
253                 listOfValues.setMode(BaseDTO.MODE_SUB_FLOW_EDIT);
254             }
255             context.getFlowScope().put(LOV_KEY, listOfValues);
256         } else {
257             String JavaDoc path = context.getRequestParameters().get("existingPath");
258             control.setListOfValuesReference(path);
259             return yes();
260         }
261
262         return success();
263     }
264
265
266     public Event saveInputControl(RequestContext context) throws Exception JavaDoc
267     {
268         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
269         InputControl control = formObject.getInputControl();
270         if (control.getType() == InputControl.TYPE_SINGLE_VALUE ||
271             control.getType() == InputControl.TYPE_MULTI_VALUE) {
272             DataType dataType = (DataType) control.getDataType().getLocalResource();
273             if (formObject.getDtMaxLength() != null && formObject.getDtMaxLength().length() > 0)
274                 dataType.setMaxLength(new Integer JavaDoc(formObject.getDtMaxLength()));
275             if (formObject.getDtDecimals() != null && formObject.getDtDecimals().length() > 0)
276                 dataType.setDecimals(new Integer JavaDoc(formObject.getDtDecimals()));
277         }
278         if (formObject.isStandAloneMode()) {
279             repository.saveResource(null, control);
280         }
281
282         return success();
283     }
284
285
286     public Object JavaDoc loadFormObject(RequestContext context)
287     {
288         InputControlWrapper formObject = null;
289         String JavaDoc resourceUri = context.getRequestParameters().get(INPUTCONTROLURI_PARAM);
290         if( resourceUri!=null && resourceUri.trim().length()!=0){
291             InputControl resource=(InputControl)repository.getResource(null,resourceUri);
292             if(resource==null)
293                 throw new JSException("Could not find resource with URI "+resourceUri);
294             log("Found resource with uri="+resourceUri);
295             formObject = new InputControlWrapper(resource);
296             formObject.setMode(BaseDTO.MODE_STAND_ALONE_EDIT);
297         }
298         if (formObject == null) {
299             InputControl inputControl = (InputControl) repository.newResource(null, InputControl.class);
300             String JavaDoc parentFolder = (String JavaDoc) context.getFlowScope().get(PARENT_FOLDER_ATTR);
301             inputControl.setParentFolder(parentFolder);
302             formObject=new InputControlWrapper(inputControl);
303             formObject.setMode(BaseDTO.MODE_STAND_ALONE_NEW);
304         }
305         InputControl control=formObject.getInputControl();
306         if(control.getParentFolder()==null)
307             control.setParentFolder("/");
308         formObject.setSource(JasperServerConstImpl.getFieldChoiceRepo());
309         return formObject;
310     }
311
312
313     public Event addVisibleColumn(RequestContext context) throws Exception JavaDoc
314     {
315         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
316
317         formObject.getInputControl().addQueryVisibleColumn(formObject.getNewVisibleColumn());
318
319         return success();
320     }
321
322
323     public Event removeVisibleColumn(RequestContext context) throws Exception JavaDoc
324     {
325         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
326
327         String JavaDoc[] selectedColumns;
328
329         if (context.getRequestParameters().contains("itemToDelete")) {
330             Object JavaDoc parameter = context.getRequestParameters().getMap().get("itemToDelete");
331             if (parameter instanceof String JavaDoc)
332                 selectedColumns = new String JavaDoc[]{(String JavaDoc)parameter};
333             else
334                 selectedColumns = (String JavaDoc[])parameter;
335
336
337             for (int i = 0; i < selectedColumns.length; i++)
338                 formObject.getInputControl().removeQueryVisibleColumn(selectedColumns[i]);
339         }
340
341         return success();
342     }
343
344     /** Helper method to help change the logging level in the code
345      * back to info once, debug is complete
346      * @param text The text to be logged
347      */
private void log(String JavaDoc text){
348         log.debug(text);
349     }
350
351     public static String JavaDoc getFORM_OBJECT_KEY() {
352         return FORM_OBJECT_KEY;
353     }
354     
355     public Event prepareQuery(RequestContext context) throws Exception JavaDoc {
356         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
357         ResourceReference queryRef = formObject.getInputControl().getQuery();
358         ResourceReferenceDTO queryRefDTO = new ResourceReferenceDTO(queryRef);
359         context.getRequestScope().put(getQueryReferenceReqAttrName(), queryRefDTO);
360         return success();
361     }
362     
363     public Event setQueryReference(RequestContext context) throws Exception JavaDoc {
364         ResourceReferenceDTO queryRef = (ResourceReferenceDTO) context.getFlowScope().getRequired(getQueryReferenceOutpuAttrName(), ResourceReferenceDTO.class);
365         InputControlWrapper formObject = (InputControlWrapper) getFormObject(context);
366         formObject.getInputControl().setQuery(queryRef.toResourceReference());
367         return success();
368     }
369     
370     /**
371      * @return Returns the queryReferenceReqAttrName.
372      */

373     public String JavaDoc getQueryReferenceReqAttrName() {
374         return queryReferenceReqAttrName;
375     }
376     
377     /**
378      * @param queryReferenceReqAttrName The queryReferenceReqAttrName to set.
379      */

380     public void setQueryReferenceReqAttrName(String JavaDoc queryReferenceReqAttrName) {
381         this.queryReferenceReqAttrName = queryReferenceReqAttrName;
382     }
383     
384     /**
385      * @return Returns the queryReferenceOutpuAttrName.
386      */

387     public String JavaDoc getQueryReferenceOutpuAttrName() {
388         return queryReferenceOutpuAttrName;
389     }
390     
391     /**
392      * @param queryReferenceOutpuAttrName The queryReferenceOutpuAttrName to set.
393      */

394     public void setQueryReferenceOutpuAttrName(
395             String JavaDoc queryReferenceOutpuAttrName) {
396         this.queryReferenceOutpuAttrName = queryReferenceOutpuAttrName;
397     }
398 }
399
Popular Tags