1ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5ef39d40dSAndrew Rist  * distributed with this work for additional information
6ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10ef39d40dSAndrew Rist  *
11ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12ef39d40dSAndrew Rist  *
13ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18ef39d40dSAndrew Rist  * under the License.
19ef39d40dSAndrew Rist  *
20ef39d40dSAndrew Rist  *************************************************************/
21ef39d40dSAndrew Rist 
22ef39d40dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package mod._fwk;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
27cdf0e10cSrcweir import com.sun.star.container.XIndexAccess;
28cdf0e10cSrcweir import com.sun.star.container.XIndexContainer;
29cdf0e10cSrcweir import com.sun.star.container.XNameAccess;
30cdf0e10cSrcweir import com.sun.star.embed.ElementModes;
31cdf0e10cSrcweir import com.sun.star.embed.XStorage;
32cdf0e10cSrcweir import com.sun.star.embed.XTransactedObject;
33cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory;
34cdf0e10cSrcweir import com.sun.star.lang.XSingleServiceFactory;
35cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
36cdf0e10cSrcweir import com.sun.star.uno.XInterface;
37cdf0e10cSrcweir import com.sun.star.ui.XModuleUIConfigurationManagerSupplier;
38cdf0e10cSrcweir import ifc.ui._XUIConfiguration;
39cdf0e10cSrcweir import java.io.PrintWriter;
40cdf0e10cSrcweir import com.sun.star.lang.EventObject;
41cdf0e10cSrcweir import com.sun.star.text.XTextDocument;
42cdf0e10cSrcweir import com.sun.star.util.XCloseable;
43cdf0e10cSrcweir import com.sun.star.ui.ConfigurationEvent;
44cdf0e10cSrcweir import com.sun.star.ui.XUIConfigurationManager;
45cdf0e10cSrcweir import ifc.ui._XUIConfigurationManager;
46cdf0e10cSrcweir import lib.StatusException;
47cdf0e10cSrcweir import lib.TestCase;
48cdf0e10cSrcweir import lib.TestEnvironment;
49cdf0e10cSrcweir import lib.TestParameters;
50cdf0e10cSrcweir import util.WriterTools;
51cdf0e10cSrcweir import util.utils;
52cdf0e10cSrcweir 
53cdf0e10cSrcweir /**
54cdf0e10cSrcweir  */
55cdf0e10cSrcweir public class ModuleUIConfigurationManager extends TestCase {
56cdf0e10cSrcweir     XInterface oObj = null;
57cdf0e10cSrcweir     XMultiServiceFactory xMSF = null;
58cdf0e10cSrcweir     XTextDocument xTextDoc = null;
59cdf0e10cSrcweir     XStorage xStore = null;
60cdf0e10cSrcweir 
61cdf0e10cSrcweir     /**
62cdf0e10cSrcweir      * Cleanup: close the created document
63cdf0e10cSrcweir      * @param tParam The test parameters.
64*e6b649b5SPedro Giffuni      * @param log The log writer.
65cdf0e10cSrcweir      */
cleanup(TestParameters tParam, PrintWriter log)66cdf0e10cSrcweir     protected void cleanup(TestParameters tParam, PrintWriter log) {
67cdf0e10cSrcweir         log.println("    disposing xTextDoc ");
68cdf0e10cSrcweir         if (xTextDoc != null) {
69cdf0e10cSrcweir             try {
70cdf0e10cSrcweir                 XCloseable closer = (XCloseable) UnoRuntime.queryInterface(
71cdf0e10cSrcweir                     XCloseable.class, xTextDoc);
72cdf0e10cSrcweir                 closer.close(true);
73cdf0e10cSrcweir             } catch (com.sun.star.util.CloseVetoException e) {
74cdf0e10cSrcweir                 log.println("couldn't close document");
75cdf0e10cSrcweir             } catch (com.sun.star.lang.DisposedException e) {
76cdf0e10cSrcweir                 log.println("couldn't close document");
77cdf0e10cSrcweir             }
78cdf0e10cSrcweir         }
79cdf0e10cSrcweir         log.println("   disposing storage");
80cdf0e10cSrcweir         if (xStore != null) {
81cdf0e10cSrcweir             xStore.dispose();
82cdf0e10cSrcweir         }
83cdf0e10cSrcweir     }
84cdf0e10cSrcweir 
85cdf0e10cSrcweir     /**
86cdf0e10cSrcweir      * Create environment.
87cdf0e10cSrcweir      */
createTestEnvironment(TestParameters tParam, PrintWriter log)88cdf0e10cSrcweir     protected TestEnvironment createTestEnvironment(TestParameters tParam, PrintWriter log) {
89cdf0e10cSrcweir         TestEnvironment tEnv = null;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         try {
92cdf0e10cSrcweir             xMSF = (XMultiServiceFactory)tParam.getMSF();
93cdf0e10cSrcweir 
94cdf0e10cSrcweir             log.println("Creating instance...");
95cdf0e10cSrcweir             xTextDoc = WriterTools.createTextDoc(xMSF);
96cdf0e10cSrcweir 
97cdf0e10cSrcweir             Object o = (XInterface)xMSF.createInstance("com.sun.star.ui.ModuleUIConfigurationManagerSupplier");
98cdf0e10cSrcweir             XModuleUIConfigurationManagerSupplier xMUICMS = (XModuleUIConfigurationManagerSupplier)
99cdf0e10cSrcweir             UnoRuntime.queryInterface(XModuleUIConfigurationManagerSupplier.class, o);
100cdf0e10cSrcweir 
101cdf0e10cSrcweir             util.dbg.printInterfaces(xMUICMS);
102cdf0e10cSrcweir             oObj = xMUICMS.getUIConfigurationManager("com.sun.star.text.TextDocument");
103cdf0e10cSrcweir 
104cdf0e10cSrcweir             log.println("TestObject: " + utils.getImplName(oObj));
105cdf0e10cSrcweir             tEnv = new TestEnvironment(oObj);
106cdf0e10cSrcweir 
107cdf0e10cSrcweir             XNameAccess xMM = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, xMSF.createInstance("com.sun.star.comp.framework.ModuleManager"));
108cdf0e10cSrcweir             String[] names = xMM.getElementNames();
109cdf0e10cSrcweir 
110cdf0e10cSrcweir             o = xMSF.createInstance("com.sun.star.embed.StorageFactory");
111cdf0e10cSrcweir             XSingleServiceFactory xStorageService = (XSingleServiceFactory)
112cdf0e10cSrcweir                     UnoRuntime.queryInterface(XSingleServiceFactory.class, o);
113cdf0e10cSrcweir             Object[]props = new Object[2];
114cdf0e10cSrcweir 
115cdf0e10cSrcweir             String aFile = util.utils.getOfficeTempDir(xMSF) + "dummyFile.dat";
116cdf0e10cSrcweir             log.println("storage file : '"+ aFile + "'");
117cdf0e10cSrcweir 
118cdf0e10cSrcweir             props[0] = aFile;
119cdf0e10cSrcweir             props[1] = new Integer(ElementModes.READWRITE);
120cdf0e10cSrcweir             xStore = (XStorage)UnoRuntime.queryInterface(XStorage.class, xStorageService.createInstanceWithArguments(props));
121cdf0e10cSrcweir 
122cdf0e10cSrcweir             PropertyValue[] initProps = new PropertyValue[4];
123cdf0e10cSrcweir             PropertyValue propVal = new PropertyValue();
124cdf0e10cSrcweir             propVal.Name = "DefaultConfigStorage";
125cdf0e10cSrcweir             propVal.Value = xStore;
126cdf0e10cSrcweir             initProps[0] = propVal;
127cdf0e10cSrcweir             propVal = new PropertyValue();
128cdf0e10cSrcweir             propVal.Name = "UserConfigStorage";
129cdf0e10cSrcweir             propVal.Value = xStore;
130cdf0e10cSrcweir             initProps[1] = propVal;
131cdf0e10cSrcweir             propVal = new PropertyValue();
132cdf0e10cSrcweir             propVal.Name = "ModuleIdentifier";
133cdf0e10cSrcweir             propVal.Value = "swriter";
134cdf0e10cSrcweir             initProps[2] = propVal;
135cdf0e10cSrcweir             propVal = new PropertyValue();
136cdf0e10cSrcweir             propVal.Name = "UserRootCommit";
137cdf0e10cSrcweir             propVal.Value = (XTransactedObject)UnoRuntime.queryInterface(XTransactedObject.class, xStore);
138cdf0e10cSrcweir             initProps[3] = propVal;
139cdf0e10cSrcweir 
140cdf0e10cSrcweir 
141cdf0e10cSrcweir             tEnv.addObjRelation("XInitialization.args", initProps);
142cdf0e10cSrcweir 
143cdf0e10cSrcweir             // the short cut manager service name
144cdf0e10cSrcweir             // 2do: correct the service name when it's no longer in
145cdf0e10cSrcweir             tEnv.addObjRelation("XConfigurationManager.ShortCutManager",
146cdf0e10cSrcweir                 "com.sun.star.ui.ModuleAcceleratorConfiguration");
147cdf0e10cSrcweir 
148cdf0e10cSrcweir             // the resourceURL
149cdf0e10cSrcweir             tEnv.addObjRelation("XModuleUIConfigurationManager.ResourceURL",
150cdf0e10cSrcweir                                             "private:resource/menubar/menubar");
151cdf0e10cSrcweir             tEnv.addObjRelation("XUIConfiguration.XUIConfigurationListenerImpl",
152cdf0e10cSrcweir                             new ConfigurationListener(log,
153cdf0e10cSrcweir                             (XUIConfigurationManager)UnoRuntime.queryInterface(
154cdf0e10cSrcweir                             XUIConfigurationManager.class, oObj), xMSF));
155cdf0e10cSrcweir             tEnv.addObjRelation("XModuleUIConfigurationManagerSupplier.ConfigManagerImplementationName",
156cdf0e10cSrcweir                         "com.sun.star.comp.framework.ModuleUIConfigurationManager");
157cdf0e10cSrcweir         }
158cdf0e10cSrcweir         catch(com.sun.star.uno.Exception e) {
159cdf0e10cSrcweir             e.printStackTrace(log);
160cdf0e10cSrcweir             throw new StatusException("Cannot create test object", e);
161cdf0e10cSrcweir         }
162cdf0e10cSrcweir         return tEnv;
163cdf0e10cSrcweir     }
164cdf0e10cSrcweir 
165cdf0e10cSrcweir     /**
166cdf0e10cSrcweir      * An implementation of the _XUIConfiguration.XUIConfigurationListenerImpl
167cdf0e10cSrcweir      * interface to trigger the event for a listener call.
168cdf0e10cSrcweir      * @see ifc.ui._XUIConfiguration
169cdf0e10cSrcweir      */
170cdf0e10cSrcweir     public static class ConfigurationListener implements _XUIConfiguration.XUIConfigurationListenerImpl {
171cdf0e10cSrcweir         private boolean triggered = false;
172cdf0e10cSrcweir         private PrintWriter log = null;
173cdf0e10cSrcweir         private XUIConfigurationManager xUIManager = null;
174cdf0e10cSrcweir         private XMultiServiceFactory xMSF = null;
175cdf0e10cSrcweir 
ConfigurationListener(PrintWriter _log, XUIConfigurationManager xUIManager, XMultiServiceFactory xMSF)176cdf0e10cSrcweir         public ConfigurationListener(PrintWriter _log, XUIConfigurationManager xUIManager, XMultiServiceFactory xMSF) {
177cdf0e10cSrcweir             log = _log;
178cdf0e10cSrcweir             this.xUIManager = xUIManager;
179cdf0e10cSrcweir             this.xMSF = xMSF;
180cdf0e10cSrcweir         }
reset()181cdf0e10cSrcweir         public void reset(){
182cdf0e10cSrcweir             triggered = false;
183cdf0e10cSrcweir         }
fireEvent()184cdf0e10cSrcweir         public void fireEvent() {
185cdf0e10cSrcweir             try {
186cdf0e10cSrcweir                 XIndexAccess xMenuBarSettings = xUIManager.getSettings(
187cdf0e10cSrcweir                                         "private:resource/menubar/menubar", true);
188cdf0e10cSrcweir 
189cdf0e10cSrcweir                 PropertyValue[]prop = _XUIConfigurationManager.createMenuBarEntry(
190cdf0e10cSrcweir                                         "Trigger Event", xMenuBarSettings, xMSF, log);
191cdf0e10cSrcweir                 _XUIConfigurationManager.createMenuBarItem("Click for Macro",
192cdf0e10cSrcweir                                 (XIndexContainer)UnoRuntime.queryInterface(
193cdf0e10cSrcweir                                 XIndexContainer.class, prop[3].Value), log);
194cdf0e10cSrcweir                 XIndexContainer x = (XIndexContainer)UnoRuntime.queryInterface(XIndexContainer.class, xMenuBarSettings);
195cdf0e10cSrcweir                 x.insertByIndex(x.getCount(), prop);
196cdf0e10cSrcweir                 xUIManager.replaceSettings("private:resource/menubar/menubar", xMenuBarSettings);
197cdf0e10cSrcweir                 xUIManager.reset();
198cdf0e10cSrcweir             }
199cdf0e10cSrcweir             catch(com.sun.star.container.NoSuchElementException e) {
200cdf0e10cSrcweir                 log.println("_XUIConfiguration.XUIConfigurationListenerImpl: Exception.");
201cdf0e10cSrcweir                 e.printStackTrace(log);
202cdf0e10cSrcweir             }
203cdf0e10cSrcweir             catch(com.sun.star.lang.IllegalArgumentException e) {
204cdf0e10cSrcweir                 log.println("_XUIConfiguration.XUIConfigurationListenerImpl: Exception.");
205cdf0e10cSrcweir                 e.printStackTrace(log);
206cdf0e10cSrcweir             }
207cdf0e10cSrcweir             catch(com.sun.star.lang.IllegalAccessException e) {
208cdf0e10cSrcweir                 log.println("_XUIConfiguration.XUIConfigurationListenerImpl: Exception.");
209cdf0e10cSrcweir                 e.printStackTrace(log);
210cdf0e10cSrcweir             }
211cdf0e10cSrcweir             catch(com.sun.star.lang.IndexOutOfBoundsException e) {
212cdf0e10cSrcweir                 log.println("_XUIConfiguration.XUIConfigurationListenerImpl: Exception.");
213cdf0e10cSrcweir                 e.printStackTrace(log);
214cdf0e10cSrcweir             }
215cdf0e10cSrcweir             catch(com.sun.star.lang.WrappedTargetException e) {
216cdf0e10cSrcweir                 log.println("_XUIConfiguration.XUIConfigurationListenerImpl: Exception.");
217cdf0e10cSrcweir                 e.printStackTrace(log);
218cdf0e10cSrcweir             }
219cdf0e10cSrcweir         }
actionWasTriggered()220cdf0e10cSrcweir         public boolean actionWasTriggered(){
221cdf0e10cSrcweir             return triggered;
222cdf0e10cSrcweir         }
disposing(EventObject e)223cdf0e10cSrcweir         public void disposing(EventObject e) {
224cdf0e10cSrcweir             log.println("_XUIConfiguration.XUIConfigurationListenerImpl.disposing the listener.");
225cdf0e10cSrcweir         }
elementInserted(ConfigurationEvent configEvent)226cdf0e10cSrcweir         public void elementInserted(ConfigurationEvent configEvent) {
227cdf0e10cSrcweir             triggered = true;
228cdf0e10cSrcweir             log.println("_XUIConfiguration.XUIConfigurationListenerImpl.elementInserted.");
229cdf0e10cSrcweir         }
elementRemoved(ConfigurationEvent configEvent)230cdf0e10cSrcweir         public void elementRemoved(ConfigurationEvent configEvent) {
231cdf0e10cSrcweir             triggered = true;
232cdf0e10cSrcweir             log.println("_XUIConfiguration.XUIConfigurationListenerImpl.elementRemoved.");
233cdf0e10cSrcweir         }
elementReplaced(ConfigurationEvent configEvent)234cdf0e10cSrcweir         public void elementReplaced(ConfigurationEvent configEvent) {
235cdf0e10cSrcweir             triggered = true;
236cdf0e10cSrcweir             log.println("_XUIConfiguration.XUIConfigurationListenerImpl.elementReplaced.");
237cdf0e10cSrcweir         }
238cdf0e10cSrcweir     }
239cdf0e10cSrcweir 
240cdf0e10cSrcweir }
241