Java tutorial
/* * Copyright (C) 2005 - 2014 TIBCO Software Inc. All rights reserved. * http://www.jaspersoft.com. * * Unless you have purchased a commercial license agreement from Jaspersoft, * the following license terms apply: * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.jaspersoft.jasperserver.war.action; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TimeZone; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.TibcoDriverManagerImpl; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.VirtualReportDataSource; import com.jaspersoft.jasperserver.war.model.TreeDataProvider; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.propertyeditors.StringTrimmerEditor; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.validation.DataBinder; import org.springframework.validation.Errors; import org.springframework.validation.FieldError; import org.springframework.webflow.action.FormAction; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.execution.ScopeType; import com.jaspersoft.jasperserver.api.JSDuplicateResourceException; import com.jaspersoft.jasperserver.api.JSException; import com.jaspersoft.jasperserver.api.engine.common.service.EngineService; import com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.CustomReportDataSourceServiceFactory; import com.jaspersoft.jasperserver.api.engine.jasperreports.util.CustomDataSourceDefinition; import com.jaspersoft.jasperserver.api.metadata.common.domain.Folder; import com.jaspersoft.jasperserver.api.metadata.common.domain.Resource; import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup; import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService; import com.jaspersoft.jasperserver.api.metadata.common.service.ResourceFactory; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.BeanReportDataSource; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.CustomReportDataSource; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JdbcReportDataSource; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.JndiJdbcReportDataSource; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportDataSource; import com.jaspersoft.jasperserver.api.metadata.jasperreports.service.ReportDataSourceService; import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria; import com.jaspersoft.jasperserver.war.common.ConfigurationBean; import com.jaspersoft.jasperserver.war.common.JasperServerConstImpl; import com.jaspersoft.jasperserver.war.common.JasperServerUtil; import com.jaspersoft.jasperserver.war.common.JdkTimeZonesList; import com.jaspersoft.jasperserver.war.dto.BaseDTO; import com.jaspersoft.jasperserver.war.dto.ReportDataSourceWrapper; import com.jaspersoft.jasperserver.war.dto.StringOption; import java.util.Collections; public class ReportDataSourceAction extends FormAction implements ApplicationContextAware { private static final String ATTRIBUTE_RESOURCE_ID_NOT_SUPPORTED_SYMBOLS = "resourceIdNotSupportedSymbols"; protected final Log log = LogFactory.getLog(this.getClass()); public static final String FORM_OBJECT_KEY = "dataResource"; public static final String DATASOURCEURI_PARAM = "resource"; public static final String PARENT_FOLDER_ATTR = "parentFolder"; private static final String DATASOURCE_TREE_DATA_PROVIDER = "dsTreeDataProvider"; private RepositoryService repository; private ResourceFactory dataSourceMappings; private JdkTimeZonesList timezones; private ConfigurationBean configuration; private JasperServerConstImpl constants = new JasperServerConstImpl(); private EngineService engine; private String queryLanguageFlowAttribute; private MessageSource messageSource; private CustomReportDataSourceServiceFactory customDataSourceFactory; ApplicationContext ctx; private TreeDataProvider typedTreeDataProvider; public ReportDataSourceAction() { setFormObjectClass(ReportDataSourceWrapper.class); //custom form backing object class setFormObjectName(FORM_OBJECT_KEY); setFormObjectScope(ScopeType.FLOW); //this is a multi-page wizard! } /* (non-Javadoc) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ public void setApplicationContext(ApplicationContext arg0) throws BeansException { ctx = arg0; } public Event initAction(RequestContext context) throws Exception { // Look for any supplied ResourceDTO by any parent flows ReportDataSourceWrapper formObject = (ReportDataSourceWrapper) getFormObject(context); // Check for any request parameters sent along // If there is no parent flow, start here **For testing as a stand alone flow if (formObject.isSubflowMode() && formObject.getAllDatasources() == null) { List allDataSources = null; String dataSourceType = getQueryLanguage(context); if (dataSourceType != null && dataSourceType.trim().equalsIgnoreCase("olapClientConnection")) { // get a list of all JDBC and JNDI datasources in repo and set in the formObject FilterCriteria criteria = FilterCriteria.createFilter(JdbcReportDataSource.class); ResourceLookup[] jdbcLookups = repository .findResource(JasperServerUtil.getExecutionContext(context), criteria); criteria = FilterCriteria.createFilter(JndiJdbcReportDataSource.class); ResourceLookup[] jndiLookups = repository .findResource(JasperServerUtil.getExecutionContext(context), criteria); if (jdbcLookups != null && jdbcLookups.length != 0) { log("Found Jdbc DataSource lookups size= " + jdbcLookups.length); allDataSources = new ArrayList(jdbcLookups.length); for (ResourceLookup lookup : jdbcLookups) { allDataSources.add(lookup.getURIString()); } } if (jndiLookups != null && jndiLookups.length != 0) { log("Found JndiJdbc DataSource lookups size= " + jndiLookups.length); if (allDataSources == null) { allDataSources = new ArrayList(jndiLookups.length); } for (ResourceLookup lookup : jndiLookups) { allDataSources.add(lookup.getURIString()); } } Collections.sort(allDataSources, String.CASE_INSENSITIVE_ORDER); } else { // get a list of all datasources in repo and set in the formObject ResourceLookup[] lookups = engine.getDataSources(JasperServerUtil.getExecutionContext(context), dataSourceType); if (lookups != null && lookups.length != 0) { allDataSources = new ArrayList(lookups.length); log("Found ReportDataSource lookups size=" + lookups.length); for (ResourceLookup dr : lookups) { allDataSources.add(dr.getURIString()); } } } formObject.setAllDatasources(allDataSources); // TODO get this from main flow getAllFolders(formObject); String folderURI = (String) context.getFlowScope().get(PARENT_FOLDER_ATTR); if (folderURI == null) { folderURI = "/"; } if (formObject.getReportDataSource() != null) { // TODO put parent folder in flow scope in main flow formObject.getReportDataSource() .setParentFolder((String) context.getFlowScope().get(PARENT_FOLDER_ATTR)); } } log("Type of datasource=" + formObject.getType() + " Mode=" + formObject.getMode()); // context.getFlowScope().put(FORM_OBJECT_KEY, formObject); context.getFlowScope().put("constants", constants); context.getExternalContext().getSessionMap().put(DATASOURCE_TREE_DATA_PROVIDER, typedTreeDataProvider); context.getFlowScope().put(ATTRIBUTE_RESOURCE_ID_NOT_SUPPORTED_SYMBOLS, configuration.getResourceIdNotSupportedSymbols()); return success(); } private void getAllFolders(ReportDataSourceWrapper wrapper) { List allFolders = repository.getAllFolders(null); wrapper.setAllFolders(new ArrayList()); for (int i = 0; i < allFolders.size(); i++) { String folderUri = ((Folder) allFolders.get(i)).getURIString(); wrapper.getAllFolders().add(folderUri); } } public Event handleTypeSelection(RequestContext context) throws Exception { ReportDataSourceWrapper formObject = (ReportDataSourceWrapper) getFormObject(context); //If the object instance held by ReportDataSource is not the type selected copy common things log("Type=" + formObject.getType()); String dsType = formObject.getType(); ReportDataSource ds = formObject.getReportDataSource(); if (ds == null) { // We are starting a new data source ds = newReportDataSource(dsType); formObject.setReportDataSource(ds); // } else { // formObject.setReportDataSource(newReportDataSource(dsType, ds)); } if (JdbcReportDataSource.class.isAssignableFrom(ds.getClass())) { if (dsType.equals(JasperServerConstImpl.getJDBCDatasourceType())) { formObject.setReportDataSource(newReportDataSource(dsType, ds)); } else formObject.setReportDataSource(newReportDataSource(dsType)); } else if (JndiJdbcReportDataSource.class.isAssignableFrom(ds.getClass())) { // ReportDataSource holds an instance of JdbcReportDataSource if (dsType.equals(JasperServerConstImpl.getJNDIDatasourceType())) { formObject.setReportDataSource(newReportDataSource(dsType, ds)); } else formObject.setReportDataSource(newReportDataSource(dsType)); } else if (VirtualReportDataSource.class.isAssignableFrom(ds.getClass())) { // ReportDataSource holds an instance of JdbcReportDataSource if (dsType.equals(JasperServerConstImpl.getVirtualDatasourceType())) { formObject.setReportDataSource(newReportDataSource(dsType, ds)); } else formObject.setReportDataSource(newReportDataSource(dsType)); } else { // was BeanReportDataSource if (dsType.equals(JasperServerConstImpl.getBeanDatasourceType())) { formObject.setReportDataSource(newReportDataSource(dsType, ds)); } else formObject.setReportDataSource(newReportDataSource(dsType)); } formObject.getReportDataSource().setParentFolder((String) context.getFlowScope().get(PARENT_FOLDER_ATTR)); return success(); } public Event prepareChooseType(RequestContext context) throws Exception { List dataSourceTypes = configuration.getDataSourceTypes(); String queryLanguage = getQueryLanguage(context); if (queryLanguage != null) { Set supportedTypes = engine.getDataSourceTypes(JasperServerUtil.getExecutionContext(context), queryLanguage); for (Iterator iter = dataSourceTypes.iterator(); iter.hasNext();) { ConfigurationBean.DataSourceType type = (ConfigurationBean.DataSourceType) iter.next(); if (!supportedTypes.contains(type.getType())) { iter.remove(); } } } Map typeMap = new HashMap(); for (Iterator it = dataSourceTypes.iterator(); it.hasNext();) { ConfigurationBean.DataSourceType type = (ConfigurationBean.DataSourceType) it.next(); typeMap.put(type.getTypeValue(), messageSource.getMessage(type.getLabelMessage(), null, type.getTypeValue(), LocaleContextHolder.getLocale())); } // add custom types Iterator cdsi = customDataSourceFactory.getDefinitions().iterator(); while (cdsi.hasNext()) { CustomDataSourceDefinition cds = (CustomDataSourceDefinition) cdsi.next(); typeMap.put(cds.getName(), messageSource.getMessage(cds.getLabelName(), null, LocaleContextHolder.getLocale())); } // NEXT // new spring file with cds def // see if it shows up on menu (try w/o msg cat first, then add msg cat) // figure out how to do param screen // then persist params back & forth context.getRequestScope().put("allTypes", typeMap); return success(); } public Event preparePropsForm(RequestContext context) throws Exception { ReportDataSourceWrapper formObject = (ReportDataSourceWrapper) getFormObject(context); ReportDataSource ds = formObject.getReportDataSource(); Locale displayLocale = LocaleContextHolder.getLocale(); String selectedTimezone = null; if (ds instanceof JdbcReportDataSource) selectedTimezone = ((JdbcReportDataSource) ds).getTimezone(); if (ds instanceof JndiJdbcReportDataSource) selectedTimezone = ((JndiJdbcReportDataSource) ds).getTimezone(); List timezoneList = timezones.getTimeZones(displayLocale); timezoneList = new ArrayList(timezoneList); if (selectedTimezone != null && selectedTimezone.length() > 0) { TimeZone zone = TimeZone.getTimeZone(selectedTimezone); StringOption option = new StringOption(selectedTimezone, zone.getDisplayName(displayLocale)); if (!timezoneList.contains(option)) timezoneList.add(0, option); } context.getFlowScope().put("timezones", timezoneList); context.getFlowScope().put("selectedTimezone", selectedTimezone); // init report data source; set props to defaults if not present if (ds instanceof CustomReportDataSource) { CustomReportDataSource cds = (CustomReportDataSource) ds; // look up definition & use it to init defaults & set prop defs CustomDataSourceDefinition customDef = customDataSourceFactory.getDefinition(cds); customDef.setDefaultValues(cds); formObject.setCustomProperties(customDef.getEditablePropertyDefinitions()); formObject.setCustomDatasourceLabel(customDef.getLabelName()); } return success(); } public Event saveLookup(RequestContext context) throws Exception { ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); log("user selected a reusable ReportDataSource"); String selectedUri = wrapper.getSelectedUri(); if (selectedUri != null && !selectedUri.equals("")) { Resource resource = repository.getResource(null, selectedUri); wrapper.setReportDataSource((ReportDataSource) resource); } return success(); } public Event saveNone(RequestContext context) throws Exception { ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); log("user selected no ReportDataSource"); wrapper.setReportDataSource(null); return success(); } public Event saveDatasource(RequestContext context) throws Exception { ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); log("Saving the datasource back "); if (wrapper.isStandAloneMode()) { if (wrapper.getType() != null) { ReportDataSource ds = wrapper.getReportDataSource(); log("Saving DataSource name=" + ds.getName() + " datasource desc=" + ds.getDescription() + " in folder=" + ds.getParentFolder()); if (ds.getName() != null) { try { repository.saveResource(null, ds); } catch (JSDuplicateResourceException e) { getFormErrors(context).rejectValue("reportDataSource.name", "ReportDataSourceValidator.error.duplicate"); return error(); } } } return yes(); } return success(); } public Event testJdbcDataSource(RequestContext context) throws Exception { ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); JdbcReportDataSource ds = (JdbcReportDataSource) wrapper.getReportDataSource(); Connection conn = null; try { if (log.isDebugEnabled()) { log.debug("CreateConnection about to load Driver class '" + ds.getDriverClass() + "' at com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJdbcDataSource\n"); } Class.forName(ds.getDriverClass()); if (log.isDebugEnabled()) { log.debug("CreateConnection loaded Driver class '" + ds.getDriverClass() + "' at com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJdbcDataSource\n"); } if (log.isDebugEnabled()) { log.debug("CreateConnection about to getConnection URL='" + ds.getConnectionUrl() + ", User Name='" + ds.getUsername() + "' Password='" + ds.getPassword() + "', at com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJdbcDataSource\n"); } conn = DriverManager.getConnection(ds.getConnectionUrl(), ds.getUsername(), ds.getPassword()); context.getRequestScope().put("connection.test", Boolean.valueOf(conn != null)); if (log.isDebugEnabled()) { log.debug( "CreateConnection successful at com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJdbcDataSource\n"); } } catch (Exception e) { log.warn("exception testing jdbc data source", e); context.getRequestScope().put("connection.test", Boolean.FALSE); } finally { if (conn != null) conn.close(); } return success(); } public Event testJndiDataSource(RequestContext context) throws Exception { ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); JndiJdbcReportDataSource ds = (JndiJdbcReportDataSource) wrapper.getReportDataSource(); Connection conn = null; try { Context ctx = new InitialContext(); if (log.isDebugEnabled()) { log.debug( "com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJndiDataSource About to look up DataSource at JNDI location: 'java:comp/env/" + ds.getJndiName() + "' \n"); } DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + ds.getJndiName()); if (log.isDebugEnabled()) { log.debug( "com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJndiDataSource look up success: DataSource at JNDI location: 'java:comp/env/" + ds.getJndiName() + "' \n" + " About to do: DataSource.getConnection \n"); } conn = TibcoDriverManagerImpl.getInstance().unlockConnection(dataSource); if (log.isDebugEnabled()) { log.debug( "com.jaspersoft.jasperserver.war.action.ReportDataSourceAction.testJndiDataSource DataSource.getConnection success. \n"); } context.getRequestScope().put("connection.test", Boolean.valueOf(conn != null)); } catch (Exception e) { context.getRequestScope().put("connection.test", Boolean.FALSE); } finally { if (conn != null) conn.close(); } return success(); } public Event testBeanDataSource(RequestContext context) throws Exception { ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); BeanReportDataSource ds = (BeanReportDataSource) wrapper.getReportDataSource(); try { Object bean = ctx.getBean(ds.getBeanName()); if (bean == null) { context.getRequestScope().put("connection.test", Boolean.FALSE); return success(); } if (ds.getBeanMethod() == null) { // The bean had better be a ReportDataSourceService context.getRequestScope().put("connection.test", Boolean.valueOf(bean instanceof ReportDataSourceService)); } else { // The method on this bean returns a ReportDataSourceService Method serviceMethod; try { serviceMethod = bean.getClass().getMethod(ds.getBeanMethod(), null); Object obj = serviceMethod.invoke(bean, null); context.getRequestScope().put("connection.test", Boolean.valueOf(obj != null)); } catch (SecurityException e) { context.getRequestScope().put("connection.test", Boolean.FALSE); } } } catch (Exception e) { context.getRequestScope().put("connection.test", Boolean.FALSE); } return success(); } public Event validateDataSource(RequestContext context) throws Exception { Errors errors = getFormErrors(context); ReportDataSourceWrapper wrapper = (ReportDataSourceWrapper) getFormObject(context); getValidator().validate(wrapper, errors); List fieldErrors = errors.getFieldErrors(); if (fieldErrors != null && !fieldErrors.isEmpty()) { FieldError error = (FieldError) fieldErrors.get(0); String field = error.getField(); if ("source".equals(field) || "selectedUri".equals(field)) { return result("chooseSource"); } else if ("type".equals(field)) { return result("chooseType"); } else if (JasperServerConstImpl.getJDBCDatasourceType().equals(wrapper.getType())) { return result("jdbcPropsForm"); } else if (JasperServerConstImpl.getJNDIDatasourceType().equals(wrapper.getType())) { return result("jndiPropsForm"); } else if (JasperServerConstImpl.getVirtualDatasourceType().equals(wrapper.getType())) { return result("virtualPropsForm"); } else if (JasperServerConstImpl.getBeanDatasourceType().equals(wrapper.getType())) { return result("beanPropsForm"); } else { return result("customPropsForm"); } } return success(); } public Object createFormObject(RequestContext context) { ReportDataSourceWrapper formObject = new ReportDataSourceWrapper(); String resourceUri = context.getRequestParameters().get(DATASOURCEURI_PARAM); if (resourceUri != null && resourceUri.trim().length() != 0) { Resource resource = (Resource) repository.getResource(null, resourceUri); if (resource == null) throw new JSException("jsexception.could.not.find.resource.with.uri", new Object[] { resourceUri }); log("Found resource with uri=" + resourceUri); formObject.setMode(BaseDTO.MODE_STAND_ALONE_EDIT); ReportDataSource dataSource = (ReportDataSource) resource; formObject.setType(getDataSourceMappings().getIdForClass(dataSource.getClass())); /* if(JdbcReportDataSource.class.isAssignableFrom(dataSource.getClass())){ formObject.setType(constants.getJDBCDatasourceType()); }else if(JndiJdbcReportDataSource.class.isAssignableFrom(dataSource.getClass())) formObject.setType(constants.getJNDIDatasourceType()); else formObject.setType(constants.getBeanDatasourceType()); */ formObject.setReportDataSource(dataSource); } if (formObject.getReportDataSource() == null) { String parentFolder = (String) context.getFlowScope().get(PARENT_FOLDER_ATTR); if (parentFolder == null) { parentFolder = (String) context.getRequestParameters().get("ParentFolderUri"); context.getFlowScope().put(PARENT_FOLDER_ATTR, parentFolder); } if (parentFolder == null || parentFolder.trim().length() == 0) parentFolder = "/"; log("Datasource flow: Stand alone new mode"); formObject.setMode(BaseDTO.MODE_STAND_ALONE_NEW); // set default options for datasource type formObject.setType(JasperServerConstImpl.getJNDIDatasourceType()); formObject.setSource(JasperServerConstImpl.getFieldChoiceLocal()); ReportDataSource jndiSource = (ReportDataSource) newReportDataSource( JasperServerConstImpl.getJNDIDatasourceType()); jndiSource.setParentFolder(parentFolder); jndiSource.setVersion(Resource.VERSION_NEW); formObject.setReportDataSource(jndiSource); } return formObject; } private ReportDataSource newReportDataSource(String dsType) { /** * if this is any of the custom data sources, create a custom data source and set it up */ if (customDataSourceFactory != null) { CustomDataSourceDefinition cdsd = customDataSourceFactory.getDefinitionByName(dsType); if (cdsd != null) { return customDataSourceFactory.createDataSource(dsType); } } return (ReportDataSource) getDataSourceMappings().newResource(null, dsType); } private ReportDataSource newReportDataSource(String dsType, ReportDataSource oldDS) { ReportDataSource newDS = newReportDataSource(dsType); newDS.setParentFolder(oldDS.getParentFolder()); newDS.setName(oldDS.getName()); newDS.setLabel(oldDS.getLabel()); newDS.setDescription(oldDS.getDescription()); newDS.setVersion(oldDS.getVersion()); if (oldDS instanceof JdbcReportDataSource) { JdbcReportDataSource oldJdbc = (JdbcReportDataSource) oldDS; JdbcReportDataSource newJdbc = (JdbcReportDataSource) newDS; newJdbc.setDriverClass(oldJdbc.getDriverClass()); newJdbc.setConnectionUrl(oldJdbc.getConnectionUrl()); newJdbc.setPassword(oldJdbc.getPassword()); newJdbc.setTimezone(oldJdbc.getTimezone()); newJdbc.setUsername(oldJdbc.getUsername()); } else if (oldDS instanceof JndiJdbcReportDataSource) { JndiJdbcReportDataSource oldJndi = (JndiJdbcReportDataSource) oldDS; JndiJdbcReportDataSource newJndi = (JndiJdbcReportDataSource) newDS; newJndi.setJndiName(oldJndi.getJndiName()); newJndi.setTimezone(oldJndi.getTimezone()); } else if (oldDS instanceof BeanReportDataSource) { BeanReportDataSource oldBean = (BeanReportDataSource) oldDS; BeanReportDataSource newBean = (BeanReportDataSource) newDS; newBean.setBeanMethod(oldBean.getBeanMethod()); newBean.setBeanName(oldBean.getBeanName()); } return newDS; } public JdkTimeZonesList getTimezones() { return timezones; } public void setTimezones(JdkTimeZonesList timezones) { this.timezones = timezones; } public RepositoryService getRepository() { return repository; } public void setRepository(RepositoryService repository) { this.repository = repository; } public ConfigurationBean getConfiguration() { return configuration; } public void setConfiguration(ConfigurationBean configuration) { this.configuration = configuration; } /** * @return Returns the dataSourceMappings. */ public ResourceFactory getDataSourceMappings() { return dataSourceMappings; } /** * @param dataSourceMappings The dataSourceMappings to set. */ public void setDataSourceMappings(ResourceFactory dataSourceMappings) { this.dataSourceMappings = dataSourceMappings; } /** * Helper method to facilitate easy logging level change * * @param text */ private void log(String text) { log.debug(text); } public static String getDATASOURCEURI_PARAM() { return DATASOURCEURI_PARAM; } public static String getFORM_OBJECT_KEY() { return FORM_OBJECT_KEY; } protected void initBinder(RequestContext requestContext, DataBinder binder) { super.initBinder(requestContext, binder); binder.registerCustomEditor(String.class, "reportDataSource.beanMethod", new StringTrimmerEditor(true)); binder.registerCustomEditor(String.class, "reportDataSource.timezone", new StringTrimmerEditor(true)); } protected String getQueryLanguage(RequestContext context) { return context.getFlowScope().getString(getQueryLanguageFlowAttribute()); } public String getQueryLanguageFlowAttribute() { return queryLanguageFlowAttribute; } public void setQueryLanguageFlowAttribute(String queryLanguageFlowAttribute) { this.queryLanguageFlowAttribute = queryLanguageFlowAttribute; } public EngineService getEngine() { return engine; } public void setEngine(EngineService engine) { this.engine = engine; } public MessageSource getMessageSource() { return messageSource; } public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } public CustomReportDataSourceServiceFactory getCustomDataSourceFactory() { return customDataSourceFactory; } public void setCustomDataSourceFactory(CustomReportDataSourceServiceFactory customDataSourceFactory) { this.customDataSourceFactory = customDataSourceFactory; } public void setDataSourceTreeDataProvider(TreeDataProvider typedTreeDataProvider) { this.typedTreeDataProvider = typedTreeDataProvider; } }