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