diff options
Diffstat (limited to 'reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java')
-rw-r--r-- | reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java | 448 |
1 files changed, 0 insertions, 448 deletions
diff --git a/reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java b/reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java deleted file mode 100644 index ab87cb3..0000000 --- a/reportbuilder/java/com/sun/star/report/pentaho/SOReportJobFactory.java +++ /dev/null @@ -1,448 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.report.pentaho; - -import com.sun.star.beans.NamedValue; -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertyChangeListener; -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.XVetoableChangeListener; -import com.sun.star.container.XChild; -import com.sun.star.embed.XStorage; -import com.sun.star.frame.XModel; -import com.sun.star.lang.IllegalArgumentException; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lang.XInitialization; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.lib.uno.helper.Factory; -import com.sun.star.lib.uno.helper.PropertySetMixin; -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.registry.InvalidRegistryException; -import com.sun.star.registry.InvalidValueException; -import com.sun.star.registry.XRegistryKey; -import com.sun.star.registry.XSimpleRegistry; -import com.sun.star.report.DataSourceFactory; -import com.sun.star.report.JobProperties; -import com.sun.star.report.ReportEngineParameterNames; -import com.sun.star.report.ReportExecutionException; -import com.sun.star.report.ReportJob; -import com.sun.star.report.ReportJobDefinition; -import com.sun.star.report.ReportJobFactory; -import com.sun.star.report.SDBCReportDataFactory; -import com.sun.star.report.SOImageService; -import com.sun.star.report.StorageRepository; -import com.sun.star.report.XReportDefinition; -import com.sun.star.sdb.XDocumentDataSource; -import com.sun.star.sdbc.XConnection; -import com.sun.star.sdbc.XRowSet; -import com.sun.star.task.XJob; -import com.sun.star.uno.Exception; -import com.sun.star.uno.Type; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * This class capsulates the class, that implements the minimal component, a factory for creating the service - * (<CODE>__getComponentFactory</CODE>) and a method, that writes the information into the given registry key - * (<CODE>__writeRegistryServiceInfo</CODE>). - */ -public class SOReportJobFactory -{ - - private SOReportJobFactory() - { - } - - public static class _SOReportJobFactory extends WeakBase implements XInitialization, XServiceInfo, XJob, XPropertySet, ReportJobFactory - { - - private static final Log LOGGER = LogFactory.getLog(_SOReportJobFactory.class); - /** - * The service name, that must be used to get an instance of this service. - */ - private static final String __serviceName = - "com.sun.star.report.pentaho.SOReportJobFactory"; - private final PropertySetMixin m_prophlp; - /** - * The initial component contextr, that gives access to the service manager, supported singletons, ... It's - * often later used - */ - private final XComponentContext m_cmpCtx; - private XConnection activeConnection; - private XReportDefinition report; - - public _SOReportJobFactory(final XComponentContext xCompContext) - { - m_cmpCtx = xCompContext; - m_prophlp = new PropertySetMixin(m_cmpCtx, this, - new Type(XJob.class), - null); // no optionals - } - - /** - * This method is a member of the interface for initializing an object directly after its creation. - * - * @param object This array of arbitrary objects will be passed to the component after its creation. - * @throws Exception Every exception will not be handled, but will be passed to the caller. - */ - public void initialize(final Object[] object) - throws com.sun.star.uno.Exception - { - /* The component describes what arguments its expected and in which - * order!At this point you can read the objects and can intialize - * your component using these objects. - */ - } - - /** - * This method returns an array of all supported service names. - * - * @return Array of supported service names. - */ - public String[] getSupportedServiceNames() - { - return getServiceNames(); - } - - /** - * This method is a simple helper function to used in the static component initialisation functions as well as - * in getSupportedServiceNames. - * @return - */ - public static String[] getServiceNames() - { - return new String[] - { - __serviceName - }; - } - - /** - * This method returns true, if the given service will be supported by the component. - * - * @param sServiceName Service name. - * @return True, if the given service name will be supported. - */ - public boolean supportsService(final String sServiceName) - { - return sServiceName.equals(__serviceName); - } - - /** - * Return the class name of the component. - * - * @return Class name of the component. - */ - public String getImplementationName() - { - return SOReportJobFactory.class.getName(); - } - - private String getLocaleFromRegistry(final XSimpleRegistry simpleReg, final String path, final String value) - { - String currentLocale = null; - try - { - simpleReg.open(path, true, false); - final XRegistryKey xRegistryRootKey = simpleReg.getRootKey(); - // read locale - final XRegistryKey locale = xRegistryRootKey.openKey(value); - if (locale != null) - { - final String newLocale = locale.getStringValue(); - if (newLocale != null) - { - currentLocale = newLocale.replace('-', '_'); - } - } - } - catch (InvalidValueException ex) - { - Logger.getLogger(SOReportJobFactory.class.getName()).log(Level.SEVERE, null, ex); - } - catch (InvalidRegistryException ex) - { - Logger.getLogger(SOReportJobFactory.class.getName()).log(Level.SEVERE, null, ex); - } - - return currentLocale; - } - - public Object execute(final NamedValue[] namedValue) - throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception - { - final ClassLoader cl = java.lang.Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - try - { - final XSimpleRegistry simpleReg = (XSimpleRegistry) UnoRuntime.queryInterface(XSimpleRegistry.class, - m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.configuration.ConfigurationRegistry", m_cmpCtx)); - - String currentLocale = getLocaleFromRegistry(simpleReg, "org.openoffice.Setup", "L10N/ooSetupSystemLocale"); - if (currentLocale == null || "".equals(currentLocale)) - { - currentLocale = getLocaleFromRegistry(simpleReg, "org.openoffice.Office.Linguistic", "General/DefaultLocale"); - } - if (currentLocale != null && !"".equals(currentLocale)) - { - System.setProperty("org.pentaho.reporting.libraries.formula.locale", currentLocale); - } - final ReportJob job = createReportJob(namedValue); - job.execute(); - - } - catch (java.lang.Exception e) - { - LOGGER.error("ReportProcessing failed", e); - throw new com.sun.star.lang.WrappedTargetException(e.getMessage(), this, null); - } - catch (java.lang.IncompatibleClassChangeError e2) - { - LOGGER.error("Detected an IncompatibleClassChangeError"); - throw new com.sun.star.lang.WrappedTargetException("caught a " + e2.getClass().getName(), this, new com.sun.star.uno.Exception(e2.getLocalizedMessage())); - } - Thread.currentThread().setContextClassLoader(cl); - - return null; - } - - public ReportJob createReportJob(final NamedValue[] namedValue) throws IllegalArgumentException, ReportExecutionException, Exception - { - XStorage input = null; - XStorage output = null; - XRowSet rowSet = null; - String mimetype = null; - String author = null; - String title = null; - Integer maxRows = null; - - for (int i = 0; i < namedValue.length; ++i) - { - final NamedValue aProps = namedValue[i]; - if ("ActiveConnection".equalsIgnoreCase(aProps.Name)) - { - activeConnection = (XConnection) UnoRuntime.queryInterface(XConnection.class, aProps.Value); - } - else if ("ReportDefinition".equalsIgnoreCase(aProps.Name)) - { - report = (XReportDefinition) UnoRuntime.queryInterface(XReportDefinition.class, aProps.Value); - } - else if ("InputStorage".equalsIgnoreCase(aProps.Name)) - { - input = (XStorage) UnoRuntime.queryInterface(XStorage.class, aProps.Value); - } - else if ("OutputStorage".equalsIgnoreCase(aProps.Name)) - { - output = (XStorage) UnoRuntime.queryInterface(XStorage.class, aProps.Value); - } - else if ("RowSet".equalsIgnoreCase(aProps.Name)) - { - rowSet = (XRowSet) UnoRuntime.queryInterface(XRowSet.class, aProps.Value); - } - else if ("mimetype".equalsIgnoreCase(aProps.Name)) - { - mimetype = (String) aProps.Value; - } - else if ("MaxRows".equalsIgnoreCase(aProps.Name)) - { - maxRows = (Integer) aProps.Value; - } - else if (ReportEngineParameterNames.AUTHOR.equalsIgnoreCase(aProps.Name)) - { - author = (String) aProps.Value; - } - else if (ReportEngineParameterNames.TITLE.equalsIgnoreCase(aProps.Name)) - { - title = (String) aProps.Value; - } - } - - if (input == null || output == null) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - - if (rowSet == null) - { - if (report == null || activeConnection == null) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - mimetype = report.getMimeType(); - } - else - { - final XPropertySet set = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, rowSet); - if (set == null) - { - throw new com.sun.star.lang.IllegalArgumentException(); - } - activeConnection = (XConnection) UnoRuntime.queryInterface(XConnection.class, set.getPropertyValue("ActiveConnection")); - } - if (mimetype == null) - { - mimetype = PentahoReportEngineMetaData.OPENDOCUMENT_TEXT; - } - - final XChild child = UnoRuntime.queryInterface(XChild.class, activeConnection); - final XDocumentDataSource docSource = UnoRuntime.queryInterface(XDocumentDataSource.class, child.getParent()); - final XModel model = UnoRuntime.queryInterface(XModel.class, docSource.getDatabaseDocument()); - final DataSourceFactory dataFactory = new SDBCReportDataFactory(m_cmpCtx, activeConnection); - final StorageRepository storageRepository = new StorageRepository(input, output, model.getURL()); - - final String inputName = "content.xml"; - final String outputName = "content.xml"; - - final PentahoReportEngine engine = new PentahoReportEngine(); - final ReportJobDefinition definition = engine.createJobDefinition(); - final JobProperties procParms = definition.getProcessingParameters(); - procParms.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, storageRepository); - procParms.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, storageRepository); - procParms.setProperty(ReportEngineParameterNames.INPUT_NAME, inputName); - procParms.setProperty(ReportEngineParameterNames.OUTPUT_NAME, outputName); - procParms.setProperty(ReportEngineParameterNames.CONTENT_TYPE, mimetype); - procParms.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataFactory); - procParms.setProperty(ReportEngineParameterNames.IMAGE_SERVICE, new SOImageService(m_cmpCtx)); - procParms.setProperty(ReportEngineParameterNames.INPUT_REPORTJOB_FACTORY, this); - procParms.setProperty(ReportEngineParameterNames.MAXROWS, maxRows); - if (author != null) - { - procParms.setProperty(ReportEngineParameterNames.AUTHOR, author); - } - if (title != null) - { - procParms.setProperty(ReportEngineParameterNames.TITLE, title); - } - - return engine.createJob(definition); - } - - // com.sun.star.beans.XPropertySet: - public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() - { - return m_prophlp.getPropertySetInfo(); - } - - public void setPropertyValue(final String aPropertyName, final Object aValue) - throws UnknownPropertyException, PropertyVetoException, com.sun.star.lang.IllegalArgumentException, - WrappedTargetException - { - m_prophlp.setPropertyValue(aPropertyName, aValue); - } - - public Object getPropertyValue(final String aPropertyName) - throws UnknownPropertyException, WrappedTargetException - { - return m_prophlp.getPropertyValue(aPropertyName); - } - - public void addPropertyChangeListener(final String aPropertyName, final XPropertyChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.addPropertyChangeListener(aPropertyName, xListener); - } - - public void removePropertyChangeListener(final String aPropertyName, final XPropertyChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.removePropertyChangeListener(aPropertyName, xListener); - } - - public void addVetoableChangeListener(final String aPropertyName, final XVetoableChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.addVetoableChangeListener(aPropertyName, xListener); - } - - public void removeVetoableChangeListener(final String aPropertyName, final XVetoableChangeListener xListener) - throws UnknownPropertyException, WrappedTargetException - { - m_prophlp.removeVetoableChangeListener(aPropertyName, xListener); - } - } - - /** - * Gives a factory for creating the service. This method is called by the <code>JavaLoader</code> - * <p/> - * - * @param sImplName the name of the implementation for which a service is desired - * @return returns a <code>XSingleComponentFactory</code> for creating the component - * @see com.sun.star.comp.loader.JavaLoader - */ - public static XSingleComponentFactory __getComponentFactory(final String sImplName) - { - XSingleComponentFactory xFactory = null; - - try - { - if (sImplName.equals(_SOReportJobFactory.class.getName())) - { - xFactory = Factory.createComponentFactory(_SOReportJobFactory.class, _SOReportJobFactory.getServiceNames()); - } - else if (sImplName.equals(SOFunctionManager.class.getName())) - { - xFactory = Factory.createComponentFactory(SOFunctionManager.class, SOFunctionManager.getServiceNames()); - } - else if (sImplName.equals(SOFormulaParser.class.getName())) - { - xFactory = Factory.createComponentFactory(SOFormulaParser.class, SOFormulaParser.getServiceNames()); - } - } - catch (java.lang.IncompatibleClassChangeError e2) - { - } - - return xFactory; - } - - /** - * Writes the service information into the given registry key. This method is called by the <code>JavaLoader</code> - * <p/> - * - * @param regKey the registryKey - * @return returns true if the operation succeeded - * @see com.sun.star.comp.loader.JavaLoader - */ - public static boolean __writeRegistryServiceInfo(final XRegistryKey regKey) - { - return Factory.writeRegistryServiceInfo(SOFunctionManager.class.getName(), - SOFunctionManager.getServiceNames(), - regKey) && Factory.writeRegistryServiceInfo(_SOReportJobFactory.class.getName(), - _SOReportJobFactory.getServiceNames(), - regKey) && Factory.writeRegistryServiceInfo(SOFormulaParser.class.getName(), - SOFormulaParser.getServiceNames(), - regKey); - } -} |