/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package complex.ModuleManager; import com.sun.star.beans.*; import com.sun.star.frame.*; import com.sun.star.lang.*; import com.sun.star.uno.AnyConverter; import com.sun.star.uno.UnoRuntime; import com.sun.star.util.*; import com.sun.star.container.*; // ---------- junit imports ----------------- import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openoffice.test.OfficeConnection; import static org.junit.Assert.*; // ------------------------------------------ //----------------------------------------------- /** @short todo document me */ public class CheckXModuleManager { //------------------------------------------- // some const //------------------------------------------- // member /** points to the global uno service manager. */ private XMultiServiceFactory m_xSmgr = null; /** the module manager for testing. */ private XModuleManager m_xMM = null; /** a special frame used to load documents there. */ private XComponentLoader m_xLoader = null; //------------------------------------------- // test environment //------------------------------------------- /** @short A function to tell the framework, which test functions are available. @return All test methods. @todo Think about selection of tests from outside ... */ // public String[] getTestMethodNames() // { // return new String[] // { // "checkModuleIdentification" , // "checkModuleConfigurationReadable" , // "checkModuleConfigurationWriteable", // "checkModuleConfigurationQueries" // }; // } //------------------------------------------- /** @short Create the environment for following tests. @descr Use either a component loader from desktop or from frame */ @Before public void before() throws java.lang.Exception { // get uno service manager from global test environment m_xSmgr = getMSF(); // create module manager m_xMM = UnoRuntime.queryInterface(XModuleManager.class, m_xSmgr.createInstance("com.sun.star.frame.ModuleManager")); // create desktop instance to create a special frame to load documents there. XFrame xDesktop = UnoRuntime.queryInterface(XFrame.class, m_xSmgr.createInstance("com.sun.star.frame.Desktop")); m_xLoader = UnoRuntime.queryInterface(XComponentLoader.class, xDesktop.findFrame("_blank", 0)); } //------------------------------------------- /** @short close the environment. */ @After public void after() throws java.lang.Exception { XCloseable xClose = UnoRuntime.queryInterface(XCloseable.class, m_xLoader); xClose.close(false); m_xLoader = null; m_xMM = null; m_xSmgr = null; } //------------------------------------------- /** @todo document me */ @Test public void checkModuleIdentification() throws java.lang.Exception { impl_identifyModulesBasedOnDocs("com.sun.star.text.TextDocument" ); impl_identifyModulesBasedOnDocs("com.sun.star.text.WebDocument" ); impl_identifyModulesBasedOnDocs("com.sun.star.text.GlobalDocument" ); impl_identifyModulesBasedOnDocs("com.sun.star.formula.FormulaProperties" ); impl_identifyModulesBasedOnDocs("com.sun.star.sheet.SpreadsheetDocument" ); impl_identifyModulesBasedOnDocs("com.sun.star.drawing.DrawingDocument" ); impl_identifyModulesBasedOnDocs("com.sun.star.presentation.PresentationDocument"); impl_identifyModulesBasedOnDocs("com.sun.star.sdb.OfficeDatabaseDocument" ); // TODO: fails // impl_identifyModulesBasedOnDocs("com.sun.star.chart.ChartDocument" ); } //------------------------------------------- /** @todo document me */ @Test public void checkModuleConfigurationReadable() throws java.lang.Exception { } //------------------------------------------- /** @todo document me */ @Test public void checkModuleConfigurationWriteable() throws java.lang.Exception { // modules supporting real documents impl_checkReadOnlyPropsOfModule("com.sun.star.text.TextDocument" ); impl_checkReadOnlyPropsOfModule("com.sun.star.text.WebDocument" ); impl_checkReadOnlyPropsOfModule("com.sun.star.text.GlobalDocument" ); impl_checkReadOnlyPropsOfModule("com.sun.star.formula.FormulaProperties" ); impl_checkReadOnlyPropsOfModule("com.sun.star.sheet.SpreadsheetDocument" ); impl_checkReadOnlyPropsOfModule("com.sun.star.drawing.DrawingDocument" ); impl_checkReadOnlyPropsOfModule("com.sun.star.presentation.PresentationDocument"); impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.OfficeDatabaseDocument" ); impl_checkReadOnlyPropsOfModule("com.sun.star.chart.ChartDocument" ); // other modules impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.FormDesign" ); impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.TextReportDesign" ); impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.RelationDesign" ); impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.QueryDesign" ); impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.TableDesign" ); impl_checkReadOnlyPropsOfModule("com.sun.star.sdb.DataSourceBrowser"); impl_checkReadOnlyPropsOfModule("com.sun.star.frame.Bibliography" ); impl_checkReadOnlyPropsOfModule("com.sun.star.script.BasicIDE" ); impl_checkReadOnlyPropsOfModule("com.sun.star.frame.StartModule" ); } //------------------------------------------- /** @todo document me */ @Test public void checkModuleConfigurationQueries() throws java.lang.Exception { impl_searchModulesByDocumentService("com.sun.star.text.TextDocument" ); impl_searchModulesByDocumentService("com.sun.star.text.WebDocument" ); impl_searchModulesByDocumentService("com.sun.star.text.GlobalDocument" ); impl_searchModulesByDocumentService("com.sun.star.formula.FormulaProperties" ); impl_searchModulesByDocumentService("com.sun.star.sheet.SpreadsheetDocument" ); impl_searchModulesByDocumentService("com.sun.star.drawing.DrawingDocument" ); impl_searchModulesByDocumentService("com.sun.star.presentation.PresentationDocument"); impl_searchModulesByDocumentService("com.sun.star.sdb.OfficeDatabaseDocument" ); impl_searchModulesByDocumentService("com.sun.star.chart.ChartDocument" ); } //------------------------------------------- /** @todo document me */ private void impl_searchModulesByDocumentService(String sDocumentService) throws java.lang.Exception { System.out.println("search modules matching document service '"+sDocumentService+"' ..."); NamedValue[] lProps = new NamedValue[1]; lProps[0] = new NamedValue(); lProps[0].Name = "ooSetupFactoryDocumentService"; lProps[0].Value = sDocumentService; XContainerQuery xMM = UnoRuntime.queryInterface(XContainerQuery.class, m_xMM); XEnumeration xResult = xMM.createSubSetEnumerationByProperties(lProps); while(xResult.hasMoreElements()) { PropertyValue[] lModuleProps = (PropertyValue[])AnyConverter.toArray(xResult.nextElement()); int c = lModuleProps.length; int i = 0; String sFoundModule = ""; String sFoundDocService = ""; for (i=0; i<c; ++i) { if (lModuleProps[i].Name.equals("ooSetupFactoryModuleIdentifier")) { sFoundModule = AnyConverter.toString(lModuleProps[i].Value); } if (lModuleProps[i].Name.equals("ooSetupFactoryDocumentService")) { sFoundDocService = AnyConverter.toString(lModuleProps[i].Value); } } if (sFoundModule.length() < 1) { fail("Miss module identifier in result set. Returned data are incomplete."); } if ( ! sFoundDocService.equals(sDocumentService)) { fail("Query returned wrong module '" + sFoundModule + "' with DocumentService='" + sFoundDocService + "'."); } System.out.println("Found module '"+sFoundModule+"'."); } } //------------------------------------------- /** @todo document me */ private void impl_identifyModulesBasedOnDocs(String sModule) throws java.lang.Exception { System.out.println("check identification of module '"+sModule+"' ..."); XNameAccess xMM = UnoRuntime.queryInterface(XNameAccess.class, m_xMM); PropertyValue[] lModuleProps = (PropertyValue[])AnyConverter.toArray(xMM.getByName(sModule)); int c = lModuleProps.length; int i = 0; String sFactoryURL = ""; for (i=0; i<c; ++i) { if (lModuleProps[i].Name.equals("ooSetupFactoryEmptyDocumentURL")) { sFactoryURL = AnyConverter.toString(lModuleProps[i].Value); break; } } PropertyValue[] lArgs = new PropertyValue[1]; lArgs[0] = new PropertyValue(); lArgs[0].Name = "Hidden"; lArgs[0].Value = Boolean.TRUE; XComponent xModel = m_xLoader.loadComponentFromURL(sFactoryURL, "_self", 0, lArgs); XFrame xFrame = UnoRuntime.queryInterface(XFrame.class, m_xLoader); XController xController = xFrame.getController(); String sModuleFrame = m_xMM.identify(xFrame ); String sModuleController = m_xMM.identify(xController); String sModuleModel = m_xMM.identify(xModel ); if ( ! sModuleFrame.equals(sModule)) { fail("Identification of module '" + sModule + "' failed if frame was used as entry point."); } if ( ! sModuleController.equals(sModule)) { fail("Identification of module '" + sModule + "' failed if controller was used as entry point."); } if ( ! sModuleModel.equals(sModule)) { fail("Identification of module '" + sModule + "' failed if model was used as entry point."); } } //------------------------------------------- /** @todo document me */ private void impl_checkReadOnlyPropsOfModule(String sModule) throws java.lang.Exception { XNameReplace xWrite = UnoRuntime.queryInterface(XNameReplace.class, m_xMM); impl_checkReadOnlyPropOfModule(xWrite, sModule, "ooSetupFactoryDocumentService" , "test"); impl_checkReadOnlyPropOfModule(xWrite, sModule, "ooSetupFactoryActualFilter" , "test"); impl_checkReadOnlyPropOfModule(xWrite, sModule, "ooSetupFactoryActualTemplateFilter", "test"); impl_checkReadOnlyPropOfModule(xWrite, sModule, "ooSetupFactoryEmptyDocumentURL" , "test"); } //------------------------------------------- /** @todo document me */ private void impl_checkReadOnlyPropOfModule(XNameReplace xMM , String sModule , String sPropName , Object aPropValue ) throws java.lang.Exception { PropertyValue[] lChanges = new PropertyValue[1]; lChanges[0] = new PropertyValue(); lChanges[0].Name = sPropName; lChanges[0].Value = aPropValue; // Note: Exception is expected ! System.out.println("check readonly state of module '"+sModule+"' for property '"+sPropName+"' ..."); try { xMM.replaceByName(sModule, lChanges); fail("Was able to write READONLY property '"+sPropName+"' of module '"+sModule+"' configuration."); } catch(Throwable ex) {} } private XMultiServiceFactory getMSF() { final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); return xMSF1; } // setup and close connections @BeforeClass public static void setUpConnection() throws Exception { System.out.println("setUpConnection()"); connection.setUp(); } @AfterClass public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception { System.out.println("tearDownConnection()"); connection.tearDown(); } private static final OfficeConnection connection = new OfficeConnection(); }