/* * ************************************************************************ * * 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 * * 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 = (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 = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, xInterface); } catch (com.sun.star.uno.Exception e) { GlobalLogWriter.get().println("ERROR: uno.Exception caught"); GlobalLogWriter.get().println("Message: " + e.getMessage()); } } return m_xDesktop; } private void showElements(XNameAccess _xNameAccess) { if (_xNameAccess != null) { String[] sElementNames = _xNameAccess.getElementNames(); for(int i=0;i= 0) // // { // // startTestForFile(sDocument, WRITER); // // } // // else if (sDocument.toLowerCase().indexOf("calc") >= 0) // // { // // startTestForFile(sDocument, CALC); // // } // // else // // { // // assure("Can't identify the document no 'writer' nor 'calc' in it's name given.", false); // // } // } // catch (AssureException e) // { // // stopOffice(); // // throw new AssureException(e.getMessage()); // } // // // ------------------------------ Office shutdown ------------------------------ // // stopOffice(); // } // ----------------------------------------------------------------------------- public ArrayList 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.get().println("File URL: " + sFileURL); ArrayList aPropertyList = new ArrayList(); // 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.get().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 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.get().println("createInstance com.sun.star.sdb.DatabaseContext done"); // XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, x); // showElements(xNameAccess); // Object aObj = xNameAccess.getByName(sFileURL); // GlobalLogWriter.get().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 = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDocComponent); // XOfficeDatabaseDocument xOfficeDBDoc = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDataSource); assure("can't access DatabaseDocument", xOfficeDBDoc != null); // GlobalLogWriter.get().println("2"); XModel xDBSource = (XModel)UnoRuntime.queryInterface(XModel.class, xOfficeDBDoc); Object aController = xDBSource.getCurrentController(); assure("Controller of xOfficeDatabaseDocument is empty!", aController != null); // GlobalLogWriter.get().println("3"); XDatabaseDocumentUI aDBDocUI = (XDatabaseDocumentUI)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 = (XReportDocumentsSupplier)UnoRuntime.queryInterface(XReportDocumentsSupplier.class, xOfficeDBDoc); XNameAccess xNameAccess = xSupplier.getReportDocuments(); assure("xOfficeDatabaseDocument returns no Report Document", xNameAccess != null); // GlobalLogWriter.get().println("5"); showElements(xNameAccess); // Object aActiveConnectionObj = aHelper.getPropertyValueAsObject("ActiveConnection"); Object aActiveConnectionObj = aDBDocUI.getActiveConnection(); assure("ActiveConnection is empty", aActiveConnectionObj != null); // GlobalLogWriter.get().println("5"); ArrayList aPropertyList2 = new ArrayList(); 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.get().println("ERROR: Exception caught"); GlobalLogWriter.get().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.get().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 loadAndStoreReports(XNameAccess _xNameAccess, ArrayList _aPropertyList /*, int _nType*/ ) { ArrayList aList = new ArrayList(); if (_xNameAccess != null) { String[] sElementNames = _xNameAccess.getElementNames(); for(int i=0;i