diff options
Diffstat (limited to 'qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java')
-rw-r--r-- | qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java | 560 |
1 files changed, 560 insertions, 0 deletions
diff --git a/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java b/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java new file mode 100644 index 000000000000..69083df762c2 --- /dev/null +++ b/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java @@ -0,0 +1,560 @@ +/* + * ************************************************************************ + * + * 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 graphical; + +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.XNameAccess; +import com.sun.star.frame.FrameSearchFlag; +import com.sun.star.frame.XComponentLoader; +import com.sun.star.frame.XDesktop; +import com.sun.star.frame.XModel; +import com.sun.star.frame.XStorable; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.sdb.XOfficeDatabaseDocument; +import com.sun.star.sdb.XReportDocumentsSupplier; +import com.sun.star.sdb.application.XDatabaseDocumentUI; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XInterface; +import com.sun.star.util.XCloseable; +import complexlib.Assurance; +// import complexlib.ComplexTestCase.AssureException; +import helper.OfficeProvider; +import helper.PropertyHelper; +import helper.URLHelper; +import java.io.File; +import java.util.ArrayList; + +/** + * + * @author ll93751 + */ + +class PropertySetHelper +{ + XPropertySet m_xPropertySet; + public PropertySetHelper(Object _aObj) + { + m_xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, _aObj); + } + + /** + get a property and don't convert it + @param _sName the string name of the property + @return the object value of the property without any conversion + */ + public Object getPropertyValueAsObject(String _sName) + { + Object aObject = null; + + if (m_xPropertySet != null) + { + try + { + aObject = m_xPropertySet.getPropertyValue(_sName); + } + catch (com.sun.star.beans.UnknownPropertyException e) + { + System.out.println("ERROR: UnknownPropertyException caught. '" + _sName + "'"); + System.out.println("Message: " + e.getMessage()); + } + catch (com.sun.star.lang.WrappedTargetException e) + { + System.out.println("ERROR: WrappedTargetException caught."); + System.out.println("Message: " + e.getMessage()); + } + } + return aObject; + } +} + +public class OpenOfficeDatabaseReportExtractor extends Assurance +{ + private ParameterHelper m_aParameterHelper; + + public OpenOfficeDatabaseReportExtractor(ParameterHelper _aParameter) + { + m_aParameterHelper = _aParameter; + } + + private XDesktop m_xDesktop = null; + private XDesktop getXDesktop() + { + + if (m_xDesktop == null) + { + try + { + XInterface xInterface = (XInterface) getMultiServiceFactory().createInstance( "com.sun.star.frame.Desktop" ); + m_xDesktop = UnoRuntime.queryInterface(XDesktop.class, xInterface); + } + catch (com.sun.star.uno.Exception e) + { + GlobalLogWriter.println("ERROR: uno.Exception caught"); + GlobalLogWriter.println("Message: " + e.getMessage()); + } + } + return m_xDesktop; + } + + private void showElements(XNameAccess _xNameAccess) + { + if (_xNameAccess != null) + { + String[] sElementNames = _xNameAccess.getElementNames(); + for(int i=0;i<sElementNames.length; i++) + { + System.out.println("Value: [" + i + "] := " + sElementNames[i]); + } + } + else + { + System.out.println("Warning: Given object is null."); + } + } + + + private OfficeProvider m_aProvider = null; + private XMultiServiceFactory m_xMultiServiceFactory = null; + private XMultiServiceFactory getMultiServiceFactory() + { + if (m_xMultiServiceFactory == null) + { + m_xMultiServiceFactory = m_aParameterHelper.getMultiServiceFactory(); + } + return m_xMultiServiceFactory; + } +// private void startOffice() +// { +// // int tempTime = m_aParameterHelper.getTestParameters().getInt("SingleTimeOut"); +// param.put("TimeOut", new Integer(300000)); +// System.out.println("TimeOut: " + param.getInt("TimeOut")); +// System.out.println("ThreadTimeOut: " + param.getInt("ThreadTimeOut")); +// +// // OfficeProvider aProvider = null; +// m_aProvider = new OfficeProvider(); +// m_xXMultiServiceFactory = (XMultiServiceFactory) m_aProvider.getManager(param); +// param.put("ServiceFactory", m_xXMultiServiceFactory); +// } +// +// private void stopOffice() +// { +// if (m_aProvider != null) +// { +// m_aProvider.closeExistingOffice(param, true); +// m_aProvider = null; +// } +// TimeHelper.waitInSeconds(2, "Give close Office some time."); +// } + + private String m_sMailAddress = null; + private String m_sParentDistinct = null; + + // private String m_sUPDMinor; + // private String m_sCWS_WORK_STAMP; + + private static String m_sSourceVersion; + private static String m_sDestinationVersion; + private static String m_sSourceName; + private static String m_sDestinationName; + + private static final int WRITER = 1; + private static final int CALC = 2; + + /** + * This is the main test Function of current ReportDesignerTest + * @param _sDocument + * @return + */ + + public ArrayList<String> load(String _sDocument /*, int _nType*/) + { + // We need to copy the database file to a place where we have write access, NEVER use the docpool for this + String sOutputPath = m_aParameterHelper.getOutputPath(); + File aOutputPath = new File(sOutputPath); + aOutputPath.mkdirs(); + + String sFilename = FileHelper.getBasename(_sDocument); + String sDestinationFile = FileHelper.appendPath(sOutputPath, sFilename); + FileHelper.copy(_sDocument, sDestinationFile); + + // now the fix reference of the AbsoluteReferenceFile should exist. + assure("There exists no file: " + sDestinationFile, FileHelper.exists(sDestinationFile)); + + String sFileURL = URLHelper.getFileURLFromSystemPath(sDestinationFile); + GlobalLogWriter.println("File URL: " + sFileURL); + + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); + + // FYI: it is not allowed to open the document read only +// PropertyValue aReadOnly = new PropertyValue(); // always overwrite already exist files +// aReadOnly.Name = "ReadOnly"; +// aReadOnly.Value = Boolean.TRUE; +// aPropertyList.add(aReadOnly); + + XComponent xDocComponent = loadComponent(sFileURL, getXDesktop(), aPropertyList); + + GlobalLogWriter.println("Load done"); +// context = createUnoService("com.sun.star.sdb.DatabaseContext") +// oDataBase = context.getByName("hh") +// oDBDoc = oDataBase.DatabaseDocument +// +// dim args(1) as new com.sun.star.beans.PropertyValue +// args(0).Name = "ActiveConnection" +// args(0).Value = oDBDoc.getCurrentController().getPropertyValue("ActiveConnection") +// reportContainer = oDBDoc.getReportDocuments() +// report = reportContainer.loadComponentFromURL("Report40","",0,args) + + ArrayList<String> aList = null; + try + { +// XInterface x = (XInterface)getMultiServiceFactory().createInstance("com.sun.star.sdb.DatabaseContext"); +// assure("can't create instance of com.sun.star.sdb.DatabaseContext", x != null); +// GlobalLogWriter.println("createInstance com.sun.star.sdb.DatabaseContext done"); + +// XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, x); +// showElements(xNameAccess); +// Object aObj = xNameAccess.getByName(sFileURL); +// GlobalLogWriter.println("1"); + +// PropertySetHelper aHelper = new PropertySetHelper(aObj); +// XDocumentDataSource xDataSource = (XDocumentDataSource)UnoRuntime.queryInterface(XDocumentDataSource.class, aObj); +// Object aDatabaseDocument = aHelper.getPropertyValueAsObject("DatabaseDocument"); +// XOfficeDatabaseDocument xOfficeDBDoc = xDataSource.getDatabaseDocument(); + + XOfficeDatabaseDocument xOfficeDBDoc = UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDocComponent); + +// XOfficeDatabaseDocument xOfficeDBDoc = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDataSource); + assure("can't access DatabaseDocument", xOfficeDBDoc != null); +// GlobalLogWriter.println("2"); + + XModel xDBSource = UnoRuntime.queryInterface(XModel.class, xOfficeDBDoc); + Object aController = xDBSource.getCurrentController(); + assure("Controller of xOfficeDatabaseDocument is empty!", aController != null); +// GlobalLogWriter.println("3"); + + XDatabaseDocumentUI aDBDocUI = UnoRuntime.queryInterface(XDatabaseDocumentUI.class, aController); + aDBDocUI.connect(); + boolean isConnect = aDBDocUI.isConnected(); + if (isConnect) + { + GlobalLogWriter.println("Connection is true"); + } + else + { + GlobalLogWriter.println("Connection is false"); + } + + // aHelper = new PropertySetHelper(aController); + + XReportDocumentsSupplier xSupplier = UnoRuntime.queryInterface(XReportDocumentsSupplier.class, xOfficeDBDoc); + XNameAccess xNameAccess = xSupplier.getReportDocuments(); + assure("xOfficeDatabaseDocument returns no Report Document", xNameAccess != null); +// GlobalLogWriter.println("5"); + + showElements(xNameAccess); + + // Object aActiveConnectionObj = aHelper.getPropertyValueAsObject("ActiveConnection"); + Object aActiveConnectionObj = aDBDocUI.getActiveConnection(); + assure("ActiveConnection is empty", aActiveConnectionObj != null); +// GlobalLogWriter.println("5"); + + ArrayList<PropertyValue> aPropertyList2 = new ArrayList<PropertyValue>(); + + PropertyValue aActiveConnection = new PropertyValue(); + aActiveConnection.Name = "ActiveConnection"; + aActiveConnection.Value = aActiveConnectionObj; + aPropertyList2.add(aActiveConnection); + + aList = loadAndStoreReports(xNameAccess, aPropertyList2 /*, _nType*/ ); + createDBEntry(/*_nType*/); + } + catch(Exception/*com.sun.star.uno.Exception*/ e) + { + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Message: " + e.getMessage()); + } + + // String mTestDocumentPath = (String) param.get("TestDocumentPath"); + // System.out.println("mTestDocumentPath: '" + mTestDocumentPath + "'"); + // // workaround for issue using deprecated "DOCPTH" prop + // System.setProperty("DOCPTH", mTestDocumentPath); + + // Close the document + // util.utils.shortWait(2000); + + closeComponent(xDocComponent); + return aList; + } + + private String getDocumentPoolName(/*int _nType*/) + { + return "AutogenReportDesignTest"; + // return getFileFormat(_nType); + } + +// ----------------------------------------------------------------------------- + private void createDBEntry(/*int _nType*/) + { + // try to connect the database + String sDBConnection = (String)m_aParameterHelper.getTestParameters().get( convwatch.PropertyName.DB_CONNECTION_STRING ); + if (sDBConnection != null && sDBConnection.length() > 0) + { + GlobalLogWriter.println("DBConnection: " + sDBConnection); +// TODO: DB +// DB.init(sDBConnection); + + // String sFixRefSubDirectory = "ReportDesign_qa_complex_" + getFileFormat(_nType); + String sFixRefSubDirectory = "ReportDesignFixRef"; + + String sSourceVersion = m_sSourceVersion; + // String sSourceVersion = sFixRefSubDirectory; + String sSourceName = m_sSourceName; + // String sSourceCreatorType = "fixref"; + String sSourceCreatorType = ""; + String sDestinationVersion = m_sDestinationVersion; + // if (sDestinationVersion.length() == 0) + // { + // sDestinationVersion = m_sUPDMinor; + // } + String sDestinationName = m_sDestinationName; + String sDestinationCreatorType = ""; + String sDocumentPoolDir = getOutputPath(/*_nType*/); + String sDocumentPoolName = getDocumentPoolName(/*_nType*/); + String sSpecial = ""; + +// TODO: DB +// DB.insertinto_documentcompare(sSourceVersion, sSourceName, sSourceCreatorType, +// m_sDestinationVersion, sDestinationName, sDestinationCreatorType, +// sDocumentPoolDir, sDocumentPoolName, m_sMailAddress, +// sSpecial, m_sParentDistinct); + TimeHelper.waitInSeconds(1, "wait for DB."); + // DB.test(); + // System.exit(1); + } + } + + private ArrayList<String> loadAndStoreReports(XNameAccess _xNameAccess, ArrayList<PropertyValue> _aPropertyList /*, int _nType*/ ) + { + ArrayList<String> aList = new ArrayList<String>(); + if (_xNameAccess != null) + { + String[] sElementNames = _xNameAccess.getElementNames(); + for(int i=0;i<sElementNames.length; i++) + { + String sReportName = sElementNames[i]; + XComponent xDoc = loadComponent(sReportName, _xNameAccess, _aPropertyList); +// util.utils.shortWait(1000); + // print? or store? + String sDocumentPathName = storeComponent(sReportName, xDoc /*, _nType*/); + aList.add(sDocumentPathName); +// util.utils.shortWait(1000); + closeComponent(xDoc); +// util.utils.shortWait(1000); + // sBackPath contains the path where to find the extracted ODB Document + } + } + return aList; + } + + private String getFormatExtension(Object _xComponent /* int _nType*/ ) + { + String sExtension; + XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, _xComponent ); + if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) ) + { + // calc + sExtension = ".ods"; + } + else if (xServiceInfo.supportsService("com.sun.star.text.TextDocument")) + { + //writer + sExtension = ".odt"; + } + else + { + sExtension = ".UNKNOWN"; + } + return sExtension; + } + + // switch(_nType) + // { + // case WRITER: + // sExtension = ".odt"; + // break; + // case CALC: + // sExtension = ".ods"; + // break; + // default: + // sExtension = ".UNKNOWN"; + // } + // return sExtension; + // } + // private String getFileFormat(int _nType) + // { + // String sFileType; + // switch(_nType) + // { + // case WRITER: + // sFileType = "writer8"; + // break; + // case CALC: + // sFileType = "calc8"; + // break; + // default: + // sFileType = "UNKNOWN"; + // } + // return sFileType; + // } + + private String m_sOutputPath = null; + + private String getOutputPath(/*int _nType*/) + { + if (m_sOutputPath == null) + { + String sOutputPath = (String)m_aParameterHelper.getTestParameters().get( convwatch.PropertyName.DOC_COMPARATOR_OUTPUT_PATH ); + sOutputPath = helper.StringHelper.removeQuoteIfExists(sOutputPath); + + // sOutputPath += "tmp_123"; + sOutputPath = FileHelper.appendPath(sOutputPath, DateHelper.getDateTimeForFilename()); + // sOutputPath += System.getProperty("file.separator"); + + // sOutputPath += getFileFormat(_nType); + // sOutputPath += System.getProperty("file.separator"); + + File aOutputFile = new File(sOutputPath); // create the directory of the given output path + aOutputFile.mkdirs(); + m_sOutputPath = sOutputPath; + } + return m_sOutputPath; + } + + /* + store given _xComponent under the given Name in DOC_COMPARATOR_INPUTPATH + */ + private String storeComponent(String _sName, Object _xComponent /*, int _nType*/ ) + { + String sOutputPath = getOutputPath(/*_nType*/); + +// // add DocumentPoolName +// sOutputPath = FileHelper.appendPath(sOutputPath, getDocumentPoolName(/*_nType*/)); +// // sOutputPath += System.getProperty("file.separator"); +// +// File aOutputFile = new File(sOutputPath); // create the directory of the given output path +// aOutputFile.mkdirs(); + + + String sName = _sName + getFormatExtension(_xComponent /*_nType*/); + sOutputPath = FileHelper.appendPath(sOutputPath, sName); + + // we need the name and path + String sBackPathName = sOutputPath; + + String sOutputURL = URLHelper.getFileURLFromSystemPath(sOutputPath); + + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // set some properties for storeAsURL + + // PropertyValue aFileFormat = new PropertyValue(); + // aFileFormat.Name = "FilterName"; + // aFileFormat.Value = getFileFormat(_nType); + // aPropertyList.add(aFileFormat); + + PropertyValue aOverwrite = new PropertyValue(); // always overwrite already exist files + aOverwrite.Name = "Overwrite"; + aOverwrite.Value = Boolean.TRUE; + aPropertyList.add(aOverwrite); + + // store the document in an other directory + XStorable aStorable = UnoRuntime.queryInterface( XStorable.class, _xComponent); + if (aStorable != null) + { + GlobalLogWriter.println("store document as URL: '" + sOutputURL + "'"); + try + { + aStorable.storeAsURL(sOutputURL, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); + } + catch (com.sun.star.io.IOException e) + { + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Can't write document URL: '" + sOutputURL + "'"); + GlobalLogWriter.println("Message: " + e.getMessage()); + } + } + return sBackPathName; + } + + private XComponent loadComponent(String _sName, Object _xComponent, ArrayList _aPropertyList) + { + XComponent xDocComponent = null; + XComponentLoader xComponentLoader = UnoRuntime.queryInterface( XComponentLoader.class, _xComponent ); + + try + { + PropertyValue[] aLoadProperties = PropertyHelper.createPropertyValueArrayFormArrayList(_aPropertyList); + GlobalLogWriter.println("Load component: '" + _sName + "'"); + xDocComponent = xComponentLoader.loadComponentFromURL(_sName, "_blank", FrameSearchFlag.ALL, aLoadProperties); + GlobalLogWriter.println("Load component: '" + _sName + "' done"); + } + catch (com.sun.star.io.IOException e) + { + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Can't load document '" + _sName + "'"); + GlobalLogWriter.println("Message: " + e.getMessage()); + } + catch (com.sun.star.lang.IllegalArgumentException e) + { + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Illegal Arguments given to loadComponentFromURL."); + GlobalLogWriter.println("Message: " + e.getMessage()); + } + return xDocComponent; + } + + private void closeComponent(XComponent _xDoc) + { + // Close the document + XCloseable xCloseable = UnoRuntime.queryInterface(XCloseable.class, _xDoc); + try + { + xCloseable.close(true); + } + catch (com.sun.star.util.CloseVetoException e) + { + GlobalLogWriter.println("ERROR: CloseVetoException caught"); + GlobalLogWriter.println("CloseVetoException occurred Can't close document."); + GlobalLogWriter.println("Message: " + e.getMessage()); + } + } + +} |