KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > ws > axis2 > RepositoryHelper


1 /*
2  * RepositoryHelper.java
3  *
4  * Created on April 1, 2006, 12:13 PM
5  *
6  * To change this template, choose Tools | Template Manager
7  * and open the template in the editor.
8  */

9
10 package com.jaspersoft.jasperserver.ws.axis2;
11
12 import com.jaspersoft.jasperserver.api.metadata.common.domain.Query;
13 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportDataSource;
14 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.Argument;
15 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.InputControlQueryDataRow;
16 import java.sql.Connection JavaDoc;
17 import java.sql.PreparedStatement JavaDoc;
18 import java.sql.ResultSet JavaDoc;
19 import java.util.ArrayList JavaDoc;
20 import java.util.HashMap JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.Map JavaDoc;
24 import javax.naming.Context JavaDoc;
25 import javax.naming.InitialContext JavaDoc;
26
27 import net.sf.jasperreports.engine.JRParameter;
28 import net.sf.jasperreports.engine.JRParameter;
29 import net.sf.jasperreports.engine.JRReport;
30
31 import org.apache.commons.logging.Log;
32 import org.apache.commons.logging.LogFactory;
33
34 import com.jaspersoft.jasperserver.api.JSException;
35 import com.jaspersoft.jasperserver.api.engine.common.service.EngineService;
36 import com.jaspersoft.jasperserver.api.metadata.common.domain.DataType;
37 import com.jaspersoft.jasperserver.api.metadata.common.domain.FileResource;
38 import com.jaspersoft.jasperserver.api.metadata.common.domain.Folder;
39 import com.jaspersoft.jasperserver.api.metadata.common.domain.InputControl;
40 import com.jaspersoft.jasperserver.api.metadata.common.domain.ListOfValues;
41 import com.jaspersoft.jasperserver.api.metadata.common.domain.ListOfValuesItem;
42 import com.jaspersoft.jasperserver.api.metadata.common.domain.Resource;
43 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup;
44 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceReference;
45 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;
46 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.BeanReportDataSource;
47 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JdbcReportDataSource;
48 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JndiJdbcReportDataSource;
49 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit;
50 import com.jaspersoft.jasperserver.api.metadata.olap.domain.MondrianConnection;
51 import com.jaspersoft.jasperserver.api.metadata.olap.domain.XMLAConnection;
52 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria;
53 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ListItem;
54 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ResourceDescriptor;
55
56
57 /**
58  *
59  * @author gtoffoli
60  */

61 public class RepositoryHelper extends org.springframework.web.context.support.WebApplicationObjectSupport
62  {
63     protected static final Log log = LogFactory.getLog(RepositoryHelper.class);
64
65     private RepositoryService repo = null;
66     private EngineService engine;
67
68     protected void setUp() throws Exception JavaDoc {
69
70             setRepo((RepositoryService) Axis2SpringServlet.getContext().getBean("repositoryService"));
71             setEngine( (EngineService)Axis2SpringServlet.getContext().getBean("engineService") );
72             log.debug("Repository: " + getRepo());
73     }
74        
75     public static RepositoryHelper mainInstance = null;
76     
77     public static RepositoryHelper getInstance()
78     {
79         if (mainInstance == null)
80         {
81             mainInstance = new RepositoryHelper();
82             try {
83                 mainInstance.setUp();
84             } catch (Exception JavaDoc ex)
85             {
86                 log.error(ex);
87                 mainInstance = null;
88             }
89         }
90         return mainInstance;
91     }
92
93     /**
94      * Creates a new instance of RepositoryHelper
95      */

96     private RepositoryHelper() {
97     }
98     
99     
100     /**
101      * Return a list of ResourceDescriptor(s)
102      */

103     public List JavaDoc list(String JavaDoc uri)
104     {
105         log.debug("list for uri: " + uri);
106         
107         List JavaDoc returnedMaps = new ArrayList JavaDoc();
108         
109         
110         // This filters with object level security.
111
// Will only get folders the user has access to
112

113         List JavaDoc folders = getRepo().getSubFolders(null, uri);
114        
115         if (folders == null) return returnedMaps;
116         
117         for (int i=0; i <folders.size(); ++i)
118         {
119             Resource folderRes = (Resource)folders.get(i);
120             returnedMaps.add( createResourceDescriptor(folderRes) );
121         }
122         
123         // create a criteria for finding things with a common parent folder.
124
FilterCriteria filterCriteria = new FilterCriteria();
125     filterCriteria.addFilterElement( FilterCriteria.createParentFolderFilter(uri) );
126         
127     // This filters with object level security
128
// Will only get resources the user has access to
129

130     List JavaDoc units = getRepo().loadClientResources(filterCriteria);
131                 
132         if (units == null) return returnedMaps;
133         
134         for (Iterator JavaDoc it = units.iterator(); units != null && it.hasNext(); )
135         {
136             Resource fileRes = (Resource) it.next();
137             try {
138                 returnedMaps.add( createResourceDescriptor(fileRes));
139             } catch (Exception JavaDoc ex)
140             {
141                 log.error(ex);
142             }
143         }
144         
145         return returnedMaps;
146     }
147     
148     
149     /**
150      * This method uses the repo.getResource(null, uri) to get
151      * a reference to the resource, and then uses createResourceDescriptor to
152      * return the descriptor.
153      * In the resource is a ReportUnit, all resources of this ReportUnit
154      * will be present as well.
155      *
156      * If res is not found, the method returns null.
157      */

158     public ResourceDescriptor getResourceDescriptor(String JavaDoc uri)
159     {
160         return getResourceDescriptor(uri, null);
161     }
162     /**
163      * This method uses the repo.getResource(null, uri) to get
164      * a reference to the resource, and then uses createResourceDescriptor to
165      * return the descriptor.
166      * In the resource is a ReportUnit, all resources of this ReportUnit
167      * will be present as well.
168      *
169      * If res is not found, the method returns null.
170      */

171     public ResourceDescriptor getResourceDescriptor(String JavaDoc uri, Map JavaDoc specialOptions)
172     {
173         //Resource res = (Resource)getRepo().getResource(null, uri);
174

175         Resource res = null;
176         
177         int sep = uri.lastIndexOf(Folder.SEPARATOR);
178
179         String JavaDoc name;
180         String JavaDoc folderName;
181
182         FilterCriteria filterCriteria = new FilterCriteria();
183
184         if (sep >= 0) {
185                 name = uri.substring(sep + Folder.SEPARATOR_LENGTH);
186                 folderName = uri.substring(0,sep);
187         } else {
188                 // No separator: error
189
throw new JSException("Invalid URI: " + uri);
190         }
191
192         
193         // Check if the folder is a RU first...
194
if (folderName.endsWith("_files"))
195         {
196             
197             String JavaDoc ruUri = folderName.substring( 0, folderName.length() - "_files".length() );
198             log.warn("Loading uri: " + ruUri);
199             Resource resRU = (Resource)getRepo().getResource(null, ruUri);
200             if (resRU != null && resRU.getResourceType().equals( ReportUnit.class.getName() ))
201             {
202             
203                 // The parent folder is a RU...
204
// Get the resource (quick way to check accessibility....)
205
ResourceDescriptor ruRd = getResourceDescriptor(folderName);
206
207                 log.warn("Loaded RU " + res);
208                 if (ruRd == null) {
209                     // The user can not access to this RU...
210
return null;
211                 }
212
213                 res = (Resource)getRepo().getResource(null, uri);
214                 log.warn("Loaded resource " + uri + " " + res);
215             }
216         }
217         
218         if (res == null)
219         {
220             if (folderName.length() == 0) folderName = "/";
221             filterCriteria.addFilterElement( FilterCriteria.createParentFolderFilter(folderName) );
222             filterCriteria.addFilterElement(FilterCriteria.createPropertyEqualsFilter("name", name));
223
224             // This filters with object level security
225
// Will only get resources the user has access to
226

227             List JavaDoc resources = getRepo().loadClientResources(filterCriteria);
228             if (resources != null && !resources.isEmpty()) {
229                     res = (Resource) resources.get(0);
230             }
231         }
232         
233         if (res == null) // try to look for a folder...
234
{
235             Folder folder = (Folder) getRepo().getFolder(null, uri);
236             
237             if (folder != null)
238             {
239                 res = folder;
240             }
241             else
242             {
243                 return null;
244             }
245         }
246         return createResourceDescriptor( res, true, specialOptions);
247     }
248     
249     /**
250      * the same as createResourceDescriptor( resource, false)
251      */

252     protected ResourceDescriptor createResourceDescriptor( Resource resource)
253     {
254         return createResourceDescriptor( resource, false);
255     }
256     
257     /**
258      * Create a ResourceDescriptor from a Resource.
259      * The real type of this resource is saved in WsType
260      *
261      * if reportUnit is true, this method will add all childs to the reportUnit object.
262      * This service does not yet deal with controls, query and datasource object.
263      *
264      */

265     protected ResourceDescriptor createResourceDescriptor( Resource resource, boolean reportUnitContentToo)
266     {
267         return createResourceDescriptor( resource, reportUnitContentToo, null);
268     }
269     /**
270      * Create a ResourceDescriptor from a Resource.
271      * The real type of this resource is saved in WsType
272      *
273      * if reportUnit is true, this method will add all childs to the reportUnit object.
274      * This service does not yet deal with controls, query and datasource object.
275      *
276      */

277     protected ResourceDescriptor createResourceDescriptor( Resource resource, boolean reportUnitContentToo, Map JavaDoc specialOptions)
278     {
279         if (resource instanceof ResourceLookup) {
280             throw new JSException("ResourceLookup, not a resource: " + resource.getClass().getName());
281         }
282         
283         ResourceDescriptor rd = new ResourceDescriptor();
284         rd.setUriString( resource.getURIString() );
285         rd.setDescription( resource.getDescription());
286         rd.setLabel( resource.getLabel());
287         rd.setName( resource.getName() );
288         rd.setResourceType( resource.getResourceType() );
289         rd.setParentFolder( resource.getParentFolder());
290         rd.setVersion( resource.getVersion() );
291         
292         rd.setCreationDate( resource.getCreationDate() );
293         
294         
295         if (resource.getResourceType().equals( Folder.class.getName() ))
296         {
297             //Folder folderRes = (Folder)resource;
298
rd.setWsType( rd.TYPE_FOLDER);
299         }
300         else if (resource.getResourceType().equals( ReportUnit.class.getName() ))
301         {
302             ReportUnit reportUnit = (ReportUnit)resource;
303             rd.setWsType( rd.TYPE_REPORTUNIT);
304             
305             if (reportUnitContentToo)
306             {
307                     // Get datasource...
308
ResourceReference ruDataSource = reportUnit.getDataSource();
309                     if (ruDataSource.isLocal())
310                     {
311                         rd.getChildren().add(createResourceDescriptor(ruDataSource.getLocalResource()));
312                     }
313                     else
314                     {
315                         ResourceDescriptor rdDs = new ResourceDescriptor();
316                         rdDs.setWsType( rdDs.TYPE_DATASOURCE );
317                         rdDs.setReferenceUri(ruDataSource.getReferenceURI());
318                         rdDs.setIsReference(true);
319                         rd.getChildren().add( rdDs );
320                     }
321                     
322                     // Get the main jrxml...
323
ResourceReference ruMainReportResourceResourceReference = reportUnit.getMainReport();
324                     
325                     ResourceDescriptor ruMainReportResourceDescriptor = null;
326                     
327                     if (ruMainReportResourceResourceReference != null)
328                     {
329                         if (ruMainReportResourceResourceReference.isLocal())
330                         {
331                             ruMainReportResourceDescriptor = createResourceDescriptor(ruMainReportResourceResourceReference.getLocalResource());
332                             //ruMainReportResourceDescriptor.setLocal(true);
333
}
334                         else
335                         {
336                             ruMainReportResourceDescriptor = getResourceDescriptor(ruMainReportResourceResourceReference.getReferenceURI());
337                             // This is a trick to say that this is really a reference, and the resource is not local!
338
ruMainReportResourceDescriptor.setReferenceUri( ruMainReportResourceResourceReference.getReferenceURI());
339                             ruMainReportResourceDescriptor.setIsReference(true);
340                             //ruMainReportResourceDescriptor.setLocal(false);
341
}
342
343                         ruMainReportResourceDescriptor.setMainReport(true);
344                         rd.getChildren().add(ruMainReportResourceDescriptor);
345                     }
346                     
347                     
348                     if (ruMainReportResourceResourceReference != null)
349                     {
350                         if (ruMainReportResourceResourceReference.isLocal())
351                         {
352                             ruMainReportResourceDescriptor = createResourceDescriptor(ruMainReportResourceResourceReference.getLocalResource());
353                             //ruMainReportResourceDescriptor.setLocal(true);
354
}
355                         else
356                         {
357                             ruMainReportResourceDescriptor = getResourceDescriptor(ruMainReportResourceResourceReference.getReferenceURI());
358                             //ruMainReportResourceDescriptor.setLocal(false);
359
}
360
361                         ruMainReportResourceDescriptor.setMainReport(true);
362                         rd.getChildren().add(ruMainReportResourceDescriptor);
363                     }
364                     
365                     List JavaDoc inputControls = reportUnit.getInputControls();
366                     if (inputControls != null && !inputControls.isEmpty()) {
367                         for (Iterator JavaDoc it = inputControls.iterator(); it.hasNext();) {
368                             
369                             ResourceReference resRef = (ResourceReference)it.next();
370                             ResourceDescriptor ruResourceDescriptor = null;
371                             if (resRef.isLocal())
372                             {
373                                 ruResourceDescriptor = createResourceDescriptor(resRef.getLocalResource());
374                                 //ruMainReportResourceDescriptor.setLocal(true);
375
}
376                             else
377                             {
378                                 ruResourceDescriptor = getResourceDescriptor(resRef.getReferenceURI());
379                                 //ruMainReportResourceDescriptor.setLocal(false);
380
}
381                             
382                             if (ruResourceDescriptor != null)
383                             {
384                                 rd.getChildren().add( ruResourceDescriptor );
385                             }
386                         }
387                     }
388                     
389                     List JavaDoc resources = reportUnit.getResources();
390                     if (resources != null && !resources.isEmpty()) {
391                         for (Iterator JavaDoc it = resources.iterator(); it.hasNext();) {
392                             
393                             ResourceReference resRef = (ResourceReference) it.next();
394                             ResourceDescriptor ruResourceDescriptor = null;
395                             if (resRef.isLocal())
396                             {
397                                 ruResourceDescriptor = createResourceDescriptor(resRef.getLocalResource());
398                                 //ruMainReportResourceDescriptor.setLocal(true);
399
}
400                             else
401                             {
402                                 ruResourceDescriptor = getResourceDescriptor(resRef.getReferenceURI());
403                                 //ruMainReportResourceDescriptor.setLocal(false);
404
}
405                             
406                             if (ruResourceDescriptor != null &&
407                                 !ruMainReportResourceDescriptor.getUriString().equals(ruResourceDescriptor.getUriString()))
408                             {
409                                 rd.getChildren().add( ruResourceDescriptor );
410                             }
411                         }
412                     }
413             }
414             
415         }
416         else if (resource.getResourceType().equals( BeanReportDataSource.class.getName() ))
417         {
418             BeanReportDataSource dsResource = (BeanReportDataSource)resource;
419             rd.setBeanName( dsResource.getBeanName());
420             rd.setBeanMethod( dsResource.getBeanMethod());
421             rd.setWsType( rd.TYPE_DATASOURCE_BEAN );
422         }
423         else if (resource.getResourceType().equals( FileResource.class.getName() ))
424         {
425             FileResource fileResource = (FileResource)resource;
426             rd.setWsType( fileResource.getFileType() );
427             rd.setHasData( fileResource.hasData() );
428             rd.setIsReference( fileResource.isReference() );
429             if (rd.getIsReference())
430             {
431                 rd.setReferenceUri( fileResource.getReferenceURI());
432             }
433             
434             String JavaDoc resourceType = fileResource.getFileType();
435             if (rd.getIsReference()) {
436                 rd.setWsType( ResourceDescriptor.TYPE_REFERENCE );
437             }
438             else if (resourceType.equals("jrxml")) rd.setWsType( ResourceDescriptor.TYPE_JRXML);
439             else if (resourceType.equals("img")) rd.setWsType( ResourceDescriptor.TYPE_IMAGE);
440             else if (resourceType.equals("font")) rd.setWsType( ResourceDescriptor.TYPE_FONT);
441             else if (resourceType.equals("jar")) rd.setWsType( ResourceDescriptor.TYPE_CLASS_JAR);
442             else if (resourceType.equals("prop")) rd.setWsType( ResourceDescriptor.TYPE_RESOURCE_BUNDLE);
443             
444         }
445         else if (resource.getResourceType().equals( JdbcReportDataSource.class.getName() ))
446         {
447             JdbcReportDataSource dsResource = (JdbcReportDataSource)resource;
448             rd.setDriverClass( dsResource.getDriverClass());
449             rd.setPassword( dsResource.getPassword());
450             rd.setUsername( dsResource.getUsername());
451             rd.setConnectionUrl( dsResource.getConnectionUrl() );
452             rd.setWsType( rd.TYPE_DATASOURCE_JDBC );
453         }
454         else if (resource.getResourceType().equals( JndiJdbcReportDataSource.class.getName() ))
455         {
456             JndiJdbcReportDataSource dsResource = (JndiJdbcReportDataSource)resource;
457             rd.setJndiName( dsResource.getJndiName());
458             rd.setWsType( rd.TYPE_DATASOURCE_JNDI );
459         }
460         else if (resource.getResourceType().equals( DataType.class.getName() ))
461         {
462             DataType fileResource = (DataType)resource;
463             rd.setWsType( rd.TYPE_DATA_TYPE );
464             rd.setHasData(false);
465             rd.setIsReference( false );
466             
467             rd.setDataType( fileResource.getType() );
468             rd.setPattern( fileResource.getRegularExpr());
469             // We suppose this field is a String!!!
470
rd.setMaxValue( fileResource.getMaxValue() == null ? null : fileResource.getMaxValue()+"");
471             // We suppose this field is a String!!!
472
rd.setMinValue( fileResource.getMinValue() == null ? null : fileResource.getMinValue()+"");
473             rd.setStrictMax( fileResource.isStrictMax() );
474             rd.setStrictMin( fileResource.isStrictMin() );
475             
476         }
477         else if (resource.getResourceType().equals( InputControl.class.getName() ))
478         {
479             InputControl fileResource = (InputControl)resource;
480             rd.setWsType( rd.TYPE_INPUT_CONTROL );
481             rd.setHasData(false);
482             rd.setIsReference( false );
483             
484             rd.setMandatory( fileResource.isMandatory() );
485             rd.setReadOnly( fileResource.isReadOnly() );
486             
487             rd.setControlType( fileResource.getType() );
488             
489             ResourceReference childReference = null;
490             if (rd.getControlType() == ResourceDescriptor.IC_TYPE_SINGLE_VALUE)
491             {
492                 childReference = fileResource.getDataType();
493             }
494             else if (rd.getControlType() == ResourceDescriptor.IC_TYPE_SINGLE_SELECT_LIST_OF_VALUES)
495             {
496                 childReference = fileResource.getListOfValues();
497             }
498             else if (rd.getControlType() == ResourceDescriptor.IC_TYPE_SINGLE_SELECT_QUERY)
499             {
500                 log.info("Adding query and columns: " + fileResource.getQueryValueColumn() );
501                 childReference = fileResource.getQuery();
502                 rd.setQueryValueColumn( fileResource.getQueryValueColumn() );
503                 rd.setQueryVisibleColumns( fileResource.getQueryVisibleColumns() );
504             }
505             
506             if (childReference != null)
507             {
508                 ResourceDescriptor childRd = null;
509
510                 if (childReference.isLocal())
511                 {
512                     childRd = createResourceDescriptor(childReference.getLocalResource());
513                 }
514                 else
515                 {
516                     //childRd = getResourceDescriptor(childReference.getReferenceLookup().getURIString());
517
childRd = new ResourceDescriptor();
518                     childRd.setWsType(ResourceDescriptor.TYPE_REFERENCE);
519                     childRd.setReferenceUri(childReference.getReferenceURI());
520                 }
521
522                 if (childRd != null)
523                 {
524                     rd.getChildren().add(childRd);
525                 }
526             }
527             
528             if (specialOptions != null &&
529                 specialOptions.containsKey(Argument.IC_GET_QUERY_DATA))
530             {
531                 // get the datasource against wich get the query data...
532
String JavaDoc dsUri = (String JavaDoc)specialOptions.get(Argument.IC_GET_QUERY_DATA);
533
534                 java.util.List JavaDoc data = getInputControlItems(fileResource, dsUri);
535
536                 rd.setQueryData( data );
537             }
538         }
539         else if (resource.getResourceType().equals( com.jaspersoft.jasperserver.api.metadata.olap.domain.MondrianConnection.class.getName() ))
540         {
541             MondrianConnection fileResource = (MondrianConnection)resource;
542             rd.setWsType( rd.TYPE_OLAP_MONDRIAN_CONNECTION );
543             rd.setHasData(false);
544             rd.setIsReference( false );
545         }
546         else if (resource.getResourceType().equals( com.jaspersoft.jasperserver.api.metadata.olap.domain.XMLAConnection.class.getName() ))
547         {
548             XMLAConnection fileResource = (XMLAConnection)resource;
549             rd.setWsType( rd.TYPE_OLAP_XMLA_CONNECTION );
550             rd.setHasData(false);
551             rd.setIsReference( false );
552         }
553         else if (resource.getResourceType().equals( com.jaspersoft.jasperserver.api.metadata.common.domain.ListOfValues.class.getName() ))
554         {
555             ListOfValues fileResource = (ListOfValues)resource;
556             rd.setWsType( rd.TYPE_LOV );
557             rd.setHasData(false);
558             rd.setIsReference( false );
559             
560             ArrayList JavaDoc list = new ArrayList JavaDoc();
561             ListOfValuesItem[] lovis = fileResource.getValues();
562             for (int k=0; k< lovis.length; ++k)
563             {
564                 ListItem lsitItem = new ListItem(lovis[k].getLabel(), lovis[k].getValue());
565                 list.add(lsitItem);
566             }
567             rd.setListOfValues( list );
568         }
569         else if (resource.getResourceType().equals( com.jaspersoft.jasperserver.api.metadata.common.domain.Query.class.getName() ))
570         {
571             Query fileResource = (Query)resource;
572             rd.setWsType( rd.TYPE_QUERY );
573             rd.setHasData(false);
574             rd.setIsReference( false );
575             rd.setSql( fileResource.getSql());
576         }
577         else
578         {
579             rd.setWsType( rd.TYPE_UNKNOW);
580             System.out.println("Unknow resource type: " + resource.getResourceType() + " instanceof " + resource.getClass().getName());
581         }
582
583         return rd;
584     }
585
586     public RepositoryService getRepo() {
587         return repo;
588     }
589
590     public void setRepo(RepositoryService repo) {
591         this.repo = repo;
592     }
593
594     public EngineService getEngine() {
595         return engine;
596     }
597
598     public void setEngine(EngineService engine) {
599         this.engine = engine;
600     }
601     
602     /**
603      * Converts BigDecimal numbers to the the type they should be based on
604      * what the JRParameters say.
605      *
606      * @todo add float and dobule
607      *
608      * @param reportUri the name of the report
609      * @param currentParameters parameters to fic
610      */

611     public Map JavaDoc convertParameterValues(String JavaDoc reportUri, Map JavaDoc currentParameters)
612     {
613             Map JavaDoc parametersMap = new HashMap JavaDoc();
614
615             JRReport report = getEngine().getMainJasperReport(null, reportUri);
616             JRParameter[] parameters = report.getParameters();
617             if (parameters != null)
618             {
619                     for(int i = 0; i < parameters.length; i++)
620                     {
621                             JRParameter parameter = parameters[i];
622                             parametersMap.put(parameter.getName(), parameter);
623                     }
624             }
625
626             
627             for (Iterator JavaDoc i=currentParameters.keySet().iterator(); i.hasNext(); )
628             {
629                     String JavaDoc parameterName = ""+i.next();
630                     
631                     JRParameter parameter = (JRParameter)parametersMap.get(parameterName);
632                     if (parameter != null)
633                     {
634                             Object JavaDoc value = currentParameters.get(parameterName);
635                             if (value != null && java.util.Date JavaDoc.class.getName().equals(parameter.getValueClassName()))
636                             {
637
638                                     value = new java.util.Date JavaDoc(Long.valueOf(value.toString()).longValue());
639                             }
640                             else if (value != null && Number JavaDoc.class.isAssignableFrom(parameter.getValueClass()))
641                             {
642                                     value = new java.math.BigDecimal JavaDoc(value.toString());
643                                     if (Byte JavaDoc.class.getName().equals(parameter.getValueClassName()))
644                                     {
645                                             value = new Byte JavaDoc(((Number JavaDoc)value).byteValue());
646                                     }
647                                     else if (Short JavaDoc.class.getName().equals(parameter.getValueClassName()))
648                                     {
649                                             value = new Short JavaDoc(((Number JavaDoc)value).shortValue());
650                                     }
651                                     else if (Integer JavaDoc.class.getName().equals(parameter.getValueClassName()))
652                                     {
653                                             value = new Integer JavaDoc(((Number JavaDoc)value).intValue());
654                                     }
655                                     else if (Long JavaDoc.class.getName().equals(parameter.getValueClassName()))
656                                     {
657                                             value = new Long JavaDoc(((Number JavaDoc)value).longValue());
658                                     }
659                                     else if (Float JavaDoc.class.getName().equals(parameter.getValueClassName()))
660                                     {
661                                             value = new Float JavaDoc(((Number JavaDoc)value).floatValue());
662                                     }
663                                     else if (Double JavaDoc.class.getName().equals(parameter.getValueClassName()))
664                                     {
665                                             value = new Double JavaDoc(((Double JavaDoc)value).longValue());
666                                     }
667                             }
668                             else if (value != null && Boolean JavaDoc.class.getName().equals(parameter.getValueClassName()))
669                             {
670                                     value = Boolean.valueOf(value.toString());
671                             }
672                             
673                             currentParameters.put(parameterName, value);
674                     }
675             }
676
677             return currentParameters;
678     }
679     
680     
681     /*
682      * execute a query against a named datasource to get the data for an InputControl.
683      * Returns a list of InputControlQueryDataRow
684      *
685      */

686     protected java.util.List JavaDoc getInputControlItems(InputControl control, String JavaDoc datasourceUri) throws JSException
687     {
688
689         java.util.List JavaDoc list = new java.util.ArrayList JavaDoc();
690         Connection JavaDoc connection = null;
691         Query query = null;
692     ResourceReference queryRef = control.getQuery();
693         if (queryRef.isLocal())
694                 query = (Query) queryRef.getLocalResource();
695         else
696                 query = (Query) repo.getResource(null, queryRef.getReferenceURI());
697
698         
699         if (datasourceUri == null) return list;
700         
701         Resource dataSource = repo.getResource(null,datasourceUri);
702         
703          try {
704             if (dataSource instanceof JdbcReportDataSource) {
705                     HashMap JavaDoc paramValues = new HashMap JavaDoc();
706                 
707                     getEngine().createDataSourceService((ReportDataSource) dataSource).setReportParameterValues(paramValues);
708                     connection = (Connection JavaDoc) paramValues.get(JRParameter.REPORT_CONNECTION);
709             }
710             else if (dataSource instanceof JndiJdbcReportDataSource) {
711                     JndiJdbcReportDataSource jndiDs = (JndiJdbcReportDataSource) dataSource;
712
713                         Context JavaDoc ctx = new InitialContext JavaDoc();
714                         javax.sql.DataSource JavaDoc sqlDs = (javax.sql.DataSource JavaDoc) ctx.lookup("java:comp/env/" + jndiDs.getJndiName());
715                         connection = sqlDs.getConnection();
716             }
717         
718         } catch (Exception JavaDoc ex)
719                 {
720                     log.error(ex);
721                     throw new JSException(ex.getMessage());
722                 }
723
724         if (connection != null) {
725                 PreparedStatement JavaDoc st = null;
726                 ResultSet JavaDoc rs = null;
727
728                 try {
729                         
730                         st = connection.prepareStatement(query.getSql());
731                     
732                         rs = st.executeQuery();
733                         
734                         while (rs.next()) {
735
736                                 InputControlQueryDataRow ic = new InputControlQueryDataRow();
737                                 
738                                 
739                                 Object JavaDoc valueColumn = rs.getObject(control.getQueryValueColumn());
740                                 String JavaDoc[] queryVisibleColumns = control.getQueryVisibleColumns();
741                                 String JavaDoc[] visibleColumnsValues = new String JavaDoc[queryVisibleColumns.length];
742                                 for (int i = 0; i < visibleColumnsValues.length; i++)
743                                         visibleColumnsValues[i] = rs.getString(queryVisibleColumns[i]);
744                                 //StringBuffer visibleColumns = new StringBuffer(visibleColumnsValues[0] != null ? visibleColumnsValues[0] : "");
745
for (int i = 0; i < visibleColumnsValues.length; i++)
746                                     ic.getColumnValues().add( visibleColumnsValues[i] != null ? visibleColumnsValues[i] : "" );
747
748                                 ic.setValue( valueColumn );
749                                 list.add(ic);
750
751                         }
752                 } catch (Throwable JavaDoc ex)
753                 {
754                     ex.printStackTrace();
755                     throw new JSException(ex.getMessage());
756
757                 } finally
758                 {
759                         if (rs != null)
760                                 try {rs.close();} catch(Exception JavaDoc e){}
761                         if (st != null)
762                                 try {st.close();} catch(Exception JavaDoc e){}
763                         try { connection.close();} catch(Exception JavaDoc e){}
764                 }
765         }
766         return list;
767     }
768     
769     
770 }
771
Popular Tags