1 package com.jaspersoft.jasperserver.war.action; 2 3 import java.util.ArrayList ; 4 import java.util.List ; 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 35 public class OlapDataSourceAction extends FormAction { 36 protected final Log log = LogFactory.getLog(this.getClass()); 37 private static final String FORM_OBJECT_KEY="dataResource"; 38 private static final String DATASOURCEURI_PARAM = "resource"; 39 private static final String PARENT_FOLDER_ATTR = "parentFolder"; 40 private RepositoryService repository; 41 private OlapConnectionService olapConnection; 42 private JasperServerConstImpl constants=new JasperServerConstImpl(); 43 44 47 public OlapDataSourceAction(){ 48 setFormObjectClass(OlapDataSourceWrapper.class); 49 setFormObjectName(FORM_OBJECT_KEY); 50 setFormObjectScope(ScopeType.FLOW); 51 setValidator(new OlapDataSourceValidator()); 52 } 53 54 61 public Event initAction(RequestContext context) throws Exception { 62 OlapDataSourceWrapper formObject = 63 (OlapDataSourceWrapper) getFormObject(context); 64 if (formObject.isSubflowMode() 65 && formObject.getAllDatasources() == null) { 66 FilterCriteria criteria = FilterCriteria 68 .createFilter(ReportDataSource.class); 69 ResourceLookup[] lookups = repository.findResource(null, criteria); 70 List allDataSources = null; 71 if (lookups != null && lookups.length != 0) { 72 log("Found OlapDataSource lookups size=" + lookups.length); 73 allDataSources = new ArrayList (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 94 public Event handleTypeSelection(RequestContext context) throws Exception { 95 OlapDataSourceWrapper formObject = 96 (OlapDataSourceWrapper) getFormObject(context); 97 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 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 if(formObject.getType().equals(constants.getJDBCDatasourceType())) { 127 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 148 public Event saveLookup(RequestContext context) throws Exception { 149 OlapDataSourceWrapper formObject=(OlapDataSourceWrapper) getFormObject(context); 150 log("user selected a reusable OlapDataSource"); 151 String 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 165 public Event saveDatasource(RequestContext context) throws Exception { 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 185 public Object loadFormObject(RequestContext context) 186 { 187 OlapDataSourceWrapper formObject = null; 190 String 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 parentFolder = (String ) 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 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 formObject.setSelectedUri(resourceUri); 224 return formObject; 225 } 226 227 232 public RepositoryService getRepository() { 233 return repository; 234 } 235 236 241 public void setRepository(RepositoryService repository) { 242 this.repository = repository; 243 } 244 245 250 public OlapConnectionService getOlapConnection() { 251 return this.olapConnection; 252 } 253 254 259 public void setOlapConnection(OlapConnectionService olapConnection) { 260 this.olapConnection = olapConnection; 261 } 262 263 private void log(String text) { 268 log.debug(text); 269 } 270 271 275 public static String getDATASOURCEURI_PARAM() { 276 return DATASOURCEURI_PARAM; 277 } 278 279 283 public static String getFORM_OBJECT_KEY() { 284 return FORM_OBJECT_KEY; 285 } 286 } 287 | Popular Tags |