diff options
Diffstat (limited to 'framework/qa/complex/accelerators/AcceleratorsConfigurationTest.java')
-rw-r--r-- | framework/qa/complex/accelerators/AcceleratorsConfigurationTest.java | 859 |
1 files changed, 859 insertions, 0 deletions
diff --git a/framework/qa/complex/accelerators/AcceleratorsConfigurationTest.java b/framework/qa/complex/accelerators/AcceleratorsConfigurationTest.java new file mode 100644 index 000000000000..b0d89ad81858 --- /dev/null +++ b/framework/qa/complex/accelerators/AcceleratorsConfigurationTest.java @@ -0,0 +1,859 @@ +/************************************************************************* + * + * 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 complex.accelerators; + +// imports +import com.sun.star.awt.KeyEvent; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.XNameAccess; +import com.sun.star.container.XNameContainer; +import com.sun.star.embed.XStorage; +import com.sun.star.embed.XTransactedObject; +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.ui.XAcceleratorConfiguration; +import com.sun.star.ui.XUIConfigurationManager; +import com.sun.star.ui.XUIConfigurationPersistence; +import com.sun.star.ui.XUIConfigurationStorage; +import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.XInterface; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.util.XChangesBatch; + +// import complex.accelerators.KeyMapping; + + +// ---------- 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.FileHelper; +import org.openoffice.test.OfficeConnection; +import static org.junit.Assert.*; +// ------------------------------------------ +//----------------------------------------------- + +/** @short todo document me + */ +public class AcceleratorsConfigurationTest +{ + + /** points to the global uno service manager. */ + private XMultiServiceFactory m_xSmgr = null; + /** the accelerator configuration for testing. */ + private XAcceleratorConfiguration m_xGlobalAccelCfg = null; + private XAcceleratorConfiguration m_xModuleAccelCfg = null; + private XAcceleratorConfiguration m_xDocumentAccelCfg = null; + /** XCS/XCU based accelerator configuration. */ + private XNameAccess m_xConfig = null; + private XNameAccess m_xPrimaryKeys = null; + private XNameAccess m_xSecondaryKeys = null; + + //------------------------------------------- + // test environment + //----------------------------------------------- + /** @short todo document me + */ +// public String[] getTestMethodNames() +// { +// return new String[] +// { +// "checkGlobalAccelCfg", +// "checkModuleAccelCfg", +// "checkDocumentAccelCfg" +// }; +// } + //----------------------------------------------- + /** @short Create the environment for following tests. + */ + @Before + public void before() + throws java.lang.Exception + { + // get uno service manager from global test environment + m_xSmgr = getMSF(); + + m_xGlobalAccelCfg = UnoRuntime.queryInterface(XAcceleratorConfiguration.class, m_xSmgr.createInstance("com.sun.star.ui.GlobalAcceleratorConfiguration")); + m_xModuleAccelCfg = UnoRuntime.queryInterface(XAcceleratorConfiguration.class, m_xSmgr.createInstance("com.sun.star.ui.ModuleAcceleratorConfiguration")); + m_xDocumentAccelCfg = UnoRuntime.queryInterface(XAcceleratorConfiguration.class, m_xSmgr.createInstance("com.sun.star.ui.DocumentAcceleratorConfiguration")); + + String sConfigPath = "org.openoffice.Office.Accelerators"; + boolean bReadOnly = false; + XNameAccess m_xConfig2 = openConfig(m_xSmgr, sConfigPath, bReadOnly); + if (m_xConfig2 != null) + { + m_xPrimaryKeys = UnoRuntime.queryInterface(XNameAccess.class, m_xConfig2.getByName("PrimaryKeys")); + m_xSecondaryKeys = UnoRuntime.queryInterface(XNameAccess.class, m_xConfig2.getByName("SecondaryKeys")); + } + } + + //------------------------------------------- + /** @short close the environment. + */ + @After + public void after() + throws java.lang.Exception + { + m_xConfig = null; + m_xGlobalAccelCfg = null; + m_xModuleAccelCfg = null; + m_xDocumentAccelCfg = null; + m_xSmgr = null; + } + + //------------------------------------------- + /** @todo document me. + */ + @Test + public void checkGlobalAccelCfg() + throws java.lang.Exception + { + System.out.println("\n---- check Global accelerator configuration: ----"); + + String[] sKeys; + XNameAccess xPrimaryAccess = UnoRuntime.queryInterface(XNameAccess.class, m_xPrimaryKeys.getByName("Global")); + XNameAccess xSecondaryAccess = UnoRuntime.queryInterface(XNameAccess.class, m_xSecondaryKeys.getByName("Global")); + + sKeys = new String[] + { + "A_MOD1" + }; + impl_checkGetKeyCommands(m_xGlobalAccelCfg, xPrimaryAccess, sKeys); + + sKeys = new String[] + { + "PASTE", "X_SHIFT" + }; + String[] sCommands = new String[] + { + ".uno:test", ".uno:test" + }; + impl_checkSetKeyCommands(m_xGlobalAccelCfg, xPrimaryAccess, xSecondaryAccess, sKeys, sCommands); + + sKeys = new String[] + { + "C_MOD1", "CUT" + }; + impl_checkRemoveKeyCommands(m_xGlobalAccelCfg, xPrimaryAccess, xSecondaryAccess, sKeys); + + String[] sCommandList = new String[] + { + ".uno:Paste", ".uno:CloseWin" + }; + impl_checkGetPreferredKeyEventsForCommandList(m_xGlobalAccelCfg, xPrimaryAccess, sCommandList); + } + + //------------------------------------------- + /** @todo document me. + */ + @Test + public void checkModuleAccelCfg() + throws java.lang.Exception + { + String[] sModules = new String[] + { + "com.sun.star.frame.StartModule", + "com.sun.star.drawing.DrawingDocument", + "com.sun.star.presentation.PresentationDocument", + "com.sun.star.sheet.SpreadsheetDocument", + "com.sun.star.text.TextDocument", + // add other modules here + }; + + for (int i = 0; i < sModules.length; ++i) + { + System.out.println("\n---- check accelerator configuration depending module: " + sModules[i] + " ----"); + + PropertyValue[] aProp = new PropertyValue[2]; + aProp[0] = new PropertyValue(); + aProp[0].Name = "ModuleIdentifier"; + aProp[0].Value = sModules[i]; + aProp[1] = new PropertyValue(); + aProp[1].Name = "Locale"; + aProp[1].Value = "en-US"; + + XInitialization xInit = UnoRuntime.queryInterface(XInitialization.class, m_xModuleAccelCfg); + xInit.initialize(aProp); // to fill cache + + XNameAccess xPrimaryModules = UnoRuntime.queryInterface(XNameAccess.class, m_xPrimaryKeys.getByName("Modules")); + XNameAccess xSecondaryModules = UnoRuntime.queryInterface(XNameAccess.class, m_xSecondaryKeys.getByName("Modules")); + + String[] sKeys; + XNameAccess xPrimaryAccess = UnoRuntime.queryInterface(XNameAccess.class, xPrimaryModules.getByName(sModules[i])); + XNameAccess xSecondaryAccess = UnoRuntime.queryInterface(XNameAccess.class, xSecondaryModules.getByName(sModules[i])); + + //-------------------------------------------- + if (sModules[i].equals("com.sun.star.presentation.PresentationDocument")) + { + sKeys = new String[] + { + "A_SHIFT_MOD1_MOD2" + }; + } + else if (sModules[i].equals("com.sun.star.sheet.SpreadsheetDocument")) + { + sKeys = new String[] + { + "B_MOD1" + }; + } + else if (sModules[i].equals("com.sun.star.text.TextDocument")) + { + sKeys = new String[] + { + "F11_MOD1" + }; + } + else + { + sKeys = new String[] + { + "A_MOD1" + }; + } + impl_checkGetKeyCommands(m_xModuleAccelCfg, xPrimaryAccess, sKeys); + + //-------------------------------------------- + String[] sCommands; + if (sModules[i].equals("com.sun.star.presentation.PresentationDocument")) + { + sKeys = new String[] + { + "A_SHIFT_MOD1_MOD2" + }; + sCommands = new String[] + { + ".uno:test" + }; + } + else if (sModules[i].equals("com.sun.star.sheet.SpreadsheetDocument")) + { + sKeys = new String[] + { + "B_MOD1" + }; + sCommands = new String[] + { + ".uno:test" + }; + } + else if (sModules[i].equals("com.sun.star.text.TextDocument")) + { + sKeys = new String[] + { + "F11_MOD1" + }; + sCommands = new String[] + { + ".uno:test" + }; + } + else + { + sKeys = new String[] + { + "PASTE" + }; + sCommands = new String[] + { + ".uno:test" + }; + } + impl_checkSetKeyCommands(m_xModuleAccelCfg, xPrimaryAccess, xSecondaryAccess, sKeys, sCommands); + + //-------------------------------------------- + if (sModules[i].equals("com.sun.star.presentation.PresentationDocument")) + { + sKeys = new String[] + { + "A_SHIFT_MOD1_MOD2" + }; + } + else if (sModules[i].equals("com.sun.star.sheet.SpreadsheetDocument")) + { + sKeys = new String[] + { + "F5_SHIFT_MOD1" + }; + } + else if (sModules[i].equals("com.sun.star.text.TextDocument")) + { + sKeys = new String[] + { + "BACKSPACE_MOD2" + }; + } + else + { + sKeys = new String[] + { + "C_MOD1" + }; + } + impl_checkRemoveKeyCommands(m_xModuleAccelCfg, xPrimaryAccess, xSecondaryAccess, sKeys); + + //-------------------------------------------- + String[] sCommandList; + if (sModules[i].equals("com.sun.star.presentation.PresentationDocument")) + { + sCommandList = new String[] + { + ".uno:Presentation" + }; + } + else if (sModules[i].equals("com.sun.star.sheet.SpreadsheetDocument")) + { + sCommandList = new String[] + { + ".uno:InsertCell" + }; + } + else if (sModules[i].equals("com.sun.star.text.TextDocument")) + { + sCommandList = new String[] + { + ".uno:SelectionModeBlock" + }; + } + else + { + sCommandList = new String[] + { + ".uno:Cut" + }; + } + impl_checkGetPreferredKeyEventsForCommandList(m_xModuleAccelCfg, xPrimaryAccess, sCommandList); + } + } + + //------------------------------------------- + /** @todo document me. + */ + @Test + public void checkDocumentAccelCfg() + throws java.lang.Exception + { + System.out.println("\n---- check Document accelerator configuration: ----"); + + String sDocCfgName; + + String tempDirURL = util.utils.getOfficeTemp/*Dir*/(getMSF()); + sDocCfgName = FileHelper.appendPath(tempDirURL, "test.cfg"); + // sDocCfgName = "file:///c:/test.cfg"; + SaveDocumentAcceleratorConfiguration(sDocCfgName); + + // sDocCfgName = "file:///c:/test.cfg"; + LoadDocumentAcceleratorConfiguration(sDocCfgName); + } + + //------------------------------------------- + /** @todo document me. + */ + private void impl_checkGetKeyCommands(XAcceleratorConfiguration xAccelCfg, XNameAccess xAccess, String[] sKeys) + throws java.lang.Exception + { + System.out.println("check getKeyCommands..."); + + for (int i = 0; i < sKeys.length; ++i) + { + if (xAccess.hasByName(sKeys[i]) && getCommandFromConfiguration(xAccess, sKeys[i]).length() > 0) + { + System.out.println("** get command by " + sKeys[i] + " **"); + + String sCmdFromCache = new String(); // get a value using XAcceleratorConfiguration API + String sCmdFromConfiguration = new String(); // get a value using configuration API + + // GET shortcuts/commands using XAcceleratorConfiguration API + sCmdFromCache = xAccelCfg.getCommandByKeyEvent(convertShortcut2AWTKey(sKeys[i])); + System.out.println(sKeys[i] + "-->" + sCmdFromCache + ", by XAcceleratorConfiguration API"); + + // GET shortcuts/commands using configuration API + sCmdFromConfiguration = getCommandFromConfiguration(xAccess, sKeys[i]); + System.out.println(sKeys[i] + "-->" + sCmdFromConfiguration + ", by configuration API"); + + assertTrue("values are different by XAcceleratorConfiguration API and configuration API!", sCmdFromCache.equals(sCmdFromConfiguration)); + + String sLocale = "es"; + setOfficeLocale(sLocale); + sCmdFromConfiguration = getCommandFromConfiguration(xAccess, sKeys[i]); + System.out.println(sKeys[i] + "-->" + sCmdFromConfiguration + ", by configuration API" + " for locale:" + getOfficeLocale()); + + sLocale = "en-US"; + setOfficeLocale(sLocale); //reset to default locale + } + else + { + System.out.println(sKeys[i] + " doesn't exist!"); + } + } + } + + //------------------------------------------- + /** @todo document me. + */ + private void impl_checkSetKeyCommands(XAcceleratorConfiguration xAccelCfg, XNameAccess xPrimaryAccess, XNameAccess xSecondaryAccess, String[] sKeys, String[] sCommands) + throws java.lang.Exception + { + System.out.println("check setKeyCommands..."); + + for (int i = 0; i < sKeys.length; ++i) + { + if (!xPrimaryAccess.hasByName(sKeys[i]) && !xSecondaryAccess.hasByName(sKeys[i])) + { + xAccelCfg.setKeyEvent(convertShortcut2AWTKey(sKeys[i]), sCommands[i]); + xAccelCfg.store(); + if (xPrimaryAccess.hasByName(sKeys[i])) + { + System.out.println("add " + sKeys[i] + " successfully!"); + } + else + { + System.out.println("add " + sKeys[i] + " failed!"); + } + } + else if (xPrimaryAccess.hasByName(sKeys[i])) + { + String sOriginalCommand = getCommandFromConfiguration(xPrimaryAccess, sKeys[i]); + if (!sCommands[i].equals(sOriginalCommand)) + { + xAccelCfg.setKeyEvent(convertShortcut2AWTKey(sKeys[i]), sCommands[i]); + xAccelCfg.store(); + + String sChangedCommand = getCommandFromConfiguration(xPrimaryAccess, sKeys[i]); + if (sCommands[i].equals(sChangedCommand)) + { + System.out.println("change " + sKeys[i] + " successfully!"); + } + else + { + System.out.println("change " + sKeys[i] + " failed!"); + } + } + else + { + System.out.println(sKeys[i] + " already exist!"); + } + } + else if (xSecondaryAccess.hasByName(sKeys[i])) + { + String sOriginalCommand = getCommandFromConfiguration(xSecondaryAccess, sKeys[i]); + if (!sCommands[i].equals(sOriginalCommand)) + { + xAccelCfg.setKeyEvent(convertShortcut2AWTKey(sKeys[i]), sCommands[i]); + xAccelCfg.store(); + + String sChangedCommand = getCommandFromConfiguration(xPrimaryAccess, sKeys[i]); + if (sCommands[i].equals(sChangedCommand)) + { + System.out.println("change " + sKeys[i] + " successfully!"); + } + else + { + System.out.println("change " + sKeys[i] + " failed!"); + } + } + else + { + System.out.println(sKeys[i] + " already exist!"); + } + } + } + } + + //------------------------------------------- + /** @todo document me. + */ + private void impl_checkRemoveKeyCommands(XAcceleratorConfiguration xAccelCfg, XNameAccess xPrimaryAccess, XNameAccess xSecondaryAccess, String[] sKeys) + throws java.lang.Exception + { + System.out.println("check removeKeyCommands..."); + + for (int i = 0; i < sKeys.length; i++) + { + if (!xPrimaryAccess.hasByName(sKeys[i]) && !xSecondaryAccess.hasByName(sKeys[i])) + { + System.out.println(sKeys[i] + " doesn't exist!"); + } + else if (xPrimaryAccess.hasByName(sKeys[i])) + { + xAccelCfg.removeKeyEvent(convertShortcut2AWTKey(sKeys[i])); + xAccelCfg.store(); + if (!xPrimaryAccess.hasByName(sKeys[i])) + { + System.out.println("Remove " + sKeys[i] + " successfully!"); + } + else + { + System.out.println("Remove " + sKeys[i] + " failed!"); + } + } + else if (xSecondaryAccess.hasByName(sKeys[i])) + { + xAccelCfg.removeKeyEvent(convertShortcut2AWTKey(sKeys[i])); + xAccelCfg.store(); + if (!xSecondaryAccess.hasByName(sKeys[i])) + { + System.out.println("Remove " + sKeys[i] + " successfully!"); + } + else + { + System.out.println("Remove " + sKeys[i] + " failed!"); + } + } + } + } + + //------------------------------------------- + /** @todo document me. + */ + private void impl_checkGetPreferredKeyEventsForCommandList(XAcceleratorConfiguration xAccelCfg, XNameAccess xPrimaryAccess, String[] sCommandList) + throws java.lang.Exception + { + System.out.println("check getPreferredKeyEventsForCommandList..."); + + Object[] oKeyEvents = xAccelCfg.getPreferredKeyEventsForCommandList(sCommandList); + for (int i = 0; i < oKeyEvents.length; i++) + { + System.out.println("get preferred key for command " + sCommandList[i] + ":"); + + KeyEvent aKeyEvent = (KeyEvent) AnyConverter.toObject(KeyEvent.class, oKeyEvents[i]); + String sKeyEvent = convertAWTKey2Shortcut(aKeyEvent); + System.out.println(sKeyEvent); + + String sCmdFromConfiguration = getCommandFromConfiguration(xPrimaryAccess, sKeyEvent); + System.out.println(sCmdFromConfiguration); + if (sCommandList[i].equals(sCmdFromConfiguration)) + { + System.out.println("get preferred key correctly!"); + } + else + { + System.out.println("get preferred key failed!"); + } + } + } + + //------------------------------------------- + /** @todo document me. + */ + private String getCommandFromConfiguration(XNameAccess xAccess, String sKey) + throws java.lang.Exception + { + String sCommand = new String(); + + if (xAccess.hasByName(sKey)) + { + XNameAccess xKey = UnoRuntime.queryInterface(XNameAccess.class, xAccess.getByName(sKey)); + XNameAccess xCommand = UnoRuntime.queryInterface(XNameAccess.class, xKey.getByName("Command")); + + String sLocale = getOfficeLocale(); + if (xCommand.hasByName(sLocale)) + { + sCommand = UnoRuntime.queryInterface(String.class, xCommand.getByName(sLocale)); + } + } + + return sCommand; + } + + //------------------------------------------- + /** @todo document me. + */ + private void insertKeyToConfiguration(XNameAccess xAccess, String sKey, String sCommand) + throws java.lang.Exception + { + XNameContainer xContainer = UnoRuntime.queryInterface(XNameContainer.class, xAccess); + if (!xContainer.hasByName(sKey)) + { + XSingleServiceFactory xFac = UnoRuntime.queryInterface(XSingleServiceFactory.class, xContainer); + XInterface xInst = UnoRuntime.queryInterface(XInterface.class, xFac.createInstance()); + xContainer.insertByName(sKey, xInst); + } + + XNameAccess xKey = UnoRuntime.queryInterface(XNameAccess.class, xContainer.getByName(sKey)); + XNameContainer xCommand = UnoRuntime.queryInterface(XNameContainer.class, xKey.getByName("Command")); + String sLocale = getOfficeLocale(); + if (xCommand.hasByName(sLocale)) + { + xCommand.insertByName(sLocale, sCommand); + } + else + { + xCommand.replaceByName(sLocale, sCommand); + } + } + + //------------------------------------------- + /** @todo document me. + */ + private void removeKeyFromConfiguration(XNameAccess xAccess, String sKey) + throws java.lang.Exception + { + XNameContainer xContainer = UnoRuntime.queryInterface(XNameContainer.class, xAccess); + if (xContainer.hasByName(sKey)) + { + xContainer.removeByName(sKey); + } + } + + //------------------------------------------- + /** @todo document me. + */ + private void LoadDocumentAcceleratorConfiguration(String sDocCfgName) + throws java.lang.Exception + { + XSingleServiceFactory xStorageFactory = UnoRuntime.queryInterface(XSingleServiceFactory.class, m_xSmgr.createInstance("com.sun.star.embed.StorageFactory")); + + Object aArgs[] = new Object[2]; + aArgs[0] = sDocCfgName; + aArgs[1] = new Integer(com.sun.star.embed.ElementModes.READ); + XStorage xRootStorage = UnoRuntime.queryInterface(XStorage.class, xStorageFactory.createInstanceWithArguments(aArgs)); + + XStorage xUIConfig = xRootStorage.openStorageElement("Configurations2", com.sun.star.embed.ElementModes.READ); + + PropertyValue aProp = new PropertyValue(); + aProp.Name = "DocumentRoot"; + aProp.Value = xUIConfig; + Object[] lArgs = new Object[1]; + lArgs[0] = aProp; + + XInitialization xInit = UnoRuntime.queryInterface(XInitialization.class, m_xDocumentAccelCfg); + xInit.initialize(lArgs); + + // TODO: throws css::container::NoSuchElementException + try + { + String test = m_xDocumentAccelCfg.getCommandByKeyEvent(convertShortcut2AWTKey("F2")); + System.out.println(test); + } + catch(com.sun.star.container.NoSuchElementException e) + { + System.out.println("NoSuchElementException caught: " + e.getMessage()); + } + } + + //------------------------------------------- + /** @todo document me. + */ + private void SaveDocumentAcceleratorConfiguration(String sDocCfgName) + throws java.lang.Exception + { + XSingleServiceFactory xStorageFactory = UnoRuntime.queryInterface(XSingleServiceFactory.class, m_xSmgr.createInstance("com.sun.star.embed.StorageFactory")); + + Object aArgs[] = new Object[2]; + aArgs[0] = sDocCfgName; + aArgs[1] = new Integer(com.sun.star.embed.ElementModes.WRITE); + XStorage xRootStorage = UnoRuntime.queryInterface(XStorage.class, xStorageFactory.createInstanceWithArguments(aArgs)); + + XStorage xUIConfig = xRootStorage.openStorageElement("Configurations2", com.sun.star.embed.ElementModes.WRITE); + + XUIConfigurationManager xCfgMgr = UnoRuntime.queryInterface(XUIConfigurationManager.class, m_xSmgr.createInstance("com.sun.star.ui.UIConfigurationManager")); + + XUIConfigurationStorage xUICfgStore = UnoRuntime.queryInterface(XUIConfigurationStorage.class, xCfgMgr); + xUICfgStore.setStorage(xUIConfig); + + XPropertySet xUIConfigProps = UnoRuntime.queryInterface(XPropertySet.class, xUIConfig); + xUIConfigProps.setPropertyValue("MediaType", "application/vnd.sun.xml.ui.configuration"); + + if (xCfgMgr != null) + { + XAcceleratorConfiguration xTargetAccMgr = UnoRuntime.queryInterface(XAcceleratorConfiguration.class, xCfgMgr.getShortCutManager()); + XUIConfigurationPersistence xCommit1 = UnoRuntime.queryInterface(XUIConfigurationPersistence.class, xTargetAccMgr); + XUIConfigurationPersistence xCommit2 = UnoRuntime.queryInterface(XUIConfigurationPersistence.class, xCfgMgr); + xCommit1.store(); + xCommit2.store(); + + XTransactedObject xCommit3 = UnoRuntime.queryInterface(XTransactedObject.class, xRootStorage); + xCommit3.commit(); + } + } + + //------------------------------------------- + /** @todo document me. + */ + private com.sun.star.awt.KeyEvent convertShortcut2AWTKey(String sShortcut) + throws java.lang.Exception + { + com.sun.star.awt.KeyEvent aKeyEvent = new com.sun.star.awt.KeyEvent(); + KeyMapping aKeyMapping = new KeyMapping(); + String[] sShortcutSplits = sShortcut.split("_"); + + aKeyEvent.KeyCode = aKeyMapping.mapIdentifier2Code(sShortcutSplits[0]); + for (int i = 1; i < sShortcutSplits.length; i++) + { + if (sShortcutSplits[i].equals("SHIFT")) + { + aKeyEvent.Modifiers |= com.sun.star.awt.KeyModifier.SHIFT; + } + else if (sShortcutSplits[i].equals("MOD1")) + { + aKeyEvent.Modifiers |= com.sun.star.awt.KeyModifier.MOD1; + } + else if (sShortcutSplits[i].equals("MOD2")) + { + aKeyEvent.Modifiers |= com.sun.star.awt.KeyModifier.MOD2; + } + } + + return aKeyEvent; + } + + //------------------------------------------- + /** @todo document me. + */ + private String convertAWTKey2Shortcut(com.sun.star.awt.KeyEvent aKeyEvent) + throws java.lang.Exception + { + String sShortcut; + + KeyMapping aKeyMapping = new KeyMapping(); + sShortcut = aKeyMapping.mapCode2Identifier(aKeyEvent.KeyCode); + + if ((aKeyEvent.Modifiers & com.sun.star.awt.KeyModifier.SHIFT) == com.sun.star.awt.KeyModifier.SHIFT) + { + sShortcut += "_SHIFT"; + } + if ((aKeyEvent.Modifiers & com.sun.star.awt.KeyModifier.MOD1) == com.sun.star.awt.KeyModifier.MOD1) + { + sShortcut += "_MOD1"; + } + if ((aKeyEvent.Modifiers & com.sun.star.awt.KeyModifier.MOD2) == com.sun.star.awt.KeyModifier.MOD2) + { + sShortcut += "_MOD2"; + } + + return sShortcut; + } + + //------------------------------------------- + /** @todo document me. + */ + private String getOfficeLocale() + throws java.lang.Exception + { + String sLocale = new String(); + + String sConfigPath = "org.openoffice.Setup"; + boolean bReadOnly = true; + XNameAccess xRootConfig = openConfig(m_xSmgr, sConfigPath, bReadOnly); + + if (xRootConfig != null) + { + XNameAccess xLocale = UnoRuntime.queryInterface(XNameAccess.class, xRootConfig.getByName("L10N")); + XPropertySet xSet = UnoRuntime.queryInterface(XPropertySet.class, xLocale); + sLocale = (String) xSet.getPropertyValue("ooLocale"); + } + + return sLocale; + } + + //------------------------------------------- + /** @todo document me. + */ + private void setOfficeLocale(String sLocale) + throws java.lang.Exception + { + String sConfigPath = "org.openoffice.Setup"; + boolean bReadOnly = false; + XNameAccess xRootConfig = openConfig(m_xSmgr, sConfigPath, bReadOnly); + + if (xRootConfig != null) + { + XNameAccess xLocale = UnoRuntime.queryInterface(XNameAccess.class, xRootConfig.getByName("L10N")); + XPropertySet xSet = UnoRuntime.queryInterface(XPropertySet.class, xLocale); + xSet.setPropertyValue("ooLocale", sLocale); + XChangesBatch xBatch = UnoRuntime.queryInterface(XChangesBatch.class, xRootConfig); + xBatch.commitChanges(); + } + } + + //------------------------------------------- + /** @todo document me. + */ + private XNameAccess openConfig(XMultiServiceFactory xSMGR, + String sConfigPath, + boolean bReadOnly) + throws java.lang.Exception + { + XMultiServiceFactory xConfigRoot = UnoRuntime.queryInterface(XMultiServiceFactory.class, xSMGR.createInstance("com.sun.star.configuration.ConfigurationProvider")); + + PropertyValue[] lParams = new PropertyValue[2]; + lParams[0] = new PropertyValue(); + lParams[0].Name = "nodepath"; + lParams[0].Value = sConfigPath; + + lParams[1] = new PropertyValue(); + lParams[1].Name = "locale"; + lParams[1].Value = "*"; + + Object aConfig; + if (bReadOnly) + { + aConfig = xConfigRoot.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", lParams); + } + else + { + aConfig = xConfigRoot.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", lParams); + } + + XNameAccess xConfig = UnoRuntime.queryInterface(XNameAccess.class, aConfig); + + if (xConfig == null) + { + throw new com.sun.star.uno.Exception("Could not open configuration \"" + sConfigPath + "\""); + } + + return xConfig; + } + + 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(); +} |