diff options
Diffstat (limited to 'qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java')
-rw-r--r-- | qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java b/qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java new file mode 100644 index 000000000000..ec8957e01a6f --- /dev/null +++ b/qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java @@ -0,0 +1,254 @@ +/************************************************************************* + * + * 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 basicrunner.basichelper; + +import com.sun.star.beans.PropertyValue; +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lang.XTypeProvider; +import com.sun.star.uno.Type; +import com.sun.star.frame.XDispatch; +import com.sun.star.frame.XDispatchProvider; +import com.sun.star.frame.XModel; +import com.sun.star.util.XURLTransformer; +import com.sun.star.frame.XController; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.util.URL; +import com.sun.star.lang.XMultiServiceFactory; +import util.utils; +import com.sun.star.lang.XComponent; +import lib.StatusException; +import lib.Status; +import util.SOfficeFactory; +import com.sun.star.ui.dialogs.XExecutableDialog; + + +public class ThreadRunner implements XServiceInfo, XSingleServiceFactory { + static final String __serviceName = "basichelper.ThreadRunner"; + static ThreadRunnerImpl oThreadRunner = null; + + public ThreadRunner(XMultiServiceFactory xMSF) { + oThreadRunner = new ThreadRunnerImpl(xMSF); + } + + public Object createInstanceWithArguments(Object[] args) { + return oThreadRunner; + } + + public Object createInstance() { + return createInstanceWithArguments(null); + } + + public byte[] getImplementationId() { + return toString().getBytes(); + } + + public Type[] getTypes() { + Class interfaces[] = getClass().getInterfaces(); + Type types[] = new Type[interfaces.length]; + for(int i = 0; i < interfaces.length; ++ i) + types[i] = new Type(interfaces[i]); + return types; + } + + public boolean supportsService(String name) { + return __serviceName.equals(name); + } + + public String[] getSupportedServiceNames() { + return new String[] {__serviceName}; + } + + public String getImplementationName() { + return getClass().getName(); + } +} + + +class ThreadRunnerImpl implements XInitialization, XTypeProvider { + Object oDoc = null; + String actionType = null; + String actionParm = null; + XMultiServiceFactory oMSF = null; + + public ThreadRunnerImpl(XMultiServiceFactory MSF) { + oMSF = MSF; + } + + public void initialize(Object[] params) throws com.sun.star.uno.Exception { + boolean parmsOK = false; + + if (!(params[0] instanceof String)) { + throw new StatusException(Status.failed( + "Wrong first parameter for ThreadRunner, allowed values:" + + "'OpenToolkitDialog', 'OpenDialogFromFile', 'ExecuteDialog'")); + } + + actionType = (String) params[0]; + + if (actionType.equals("OpenToolkitDialog")) { + if (params.length != 3 || !(params[2] instanceof Object) || + !(params[1] instanceof String) ) { + throw new StatusException(Status.failed("Expected the " + + "following type of parameters for 'OpenToolkitDialog': " + + "String, Object")); + } + actionParm = (String)params[1]; + oDoc = (Object)params[2]; + ToolkitDialogThread aThread = + new ToolkitDialogThread(oMSF, oDoc, actionParm); + aThread.start(); + } else if (actionType.equals("OpenDialogFromFile")) { + if (params.length != 2 || !(params[1] instanceof String) ) { + throw new StatusException(Status.failed("Expected the " + + "following type of parameters for 'OpenDialogFromFile': " + + "String")); + } + actionParm = (String)params[1]; + DialogFromFileThread bThread = + new DialogFromFileThread(oMSF, actionParm); + bThread.start(); + } else if ( actionType.equals("ExecuteDialog")) { + if (params.length != 2 || !(params[1] instanceof String)) { + throw new StatusException(Status.failed("Expected the " + + "following type of parameters for 'ExecuteDialog': " + + "String")); + } + ExecuteDialogThread cThread = + new ExecuteDialogThread(oMSF, (String)params[1]); + cThread.start(); + } else { + System.out.println("Error! ThreadRunnerImpl.initialize(): " + + "Incorrect parameters!"); + } + } + + public byte[] getImplementationId() { + return toString().getBytes(); + } + + public Type[] getTypes() { + Class interfaces[] = getClass().getInterfaces(); + Type types[] = new Type[interfaces.length]; + for(int i = 0; i < interfaces.length; ++ i) + types[i] = new Type(interfaces[i]); + return types; + } +} + + +class ToolkitDialogThread extends Thread { + Object oDoc = null; + String url = null; + XMultiServiceFactory msf = null; + + public ToolkitDialogThread(XMultiServiceFactory xMSF, Object doc, String sUrl) { + oDoc = doc; + url = sUrl; + msf = xMSF; + } + + public void run() { + XModel aModel = (XModel) UnoRuntime.queryInterface(XModel.class, oDoc); + XController xController = aModel.getCurrentController(); + try { + XDispatchProvider xDispProv = (XDispatchProvider) + UnoRuntime.queryInterface( XDispatchProvider.class, xController ); + XURLTransformer xParser = (com.sun.star.util.XURLTransformer) + UnoRuntime.queryInterface(XURLTransformer.class, + msf.createInstance("com.sun.star.util.URLTransformer")); + URL[] aParseURL = new URL[1]; + aParseURL[0] = new URL(); + aParseURL[0].Complete = url; + xParser.parseStrict(aParseURL); + URL aURL = aParseURL[0]; + XDispatch xDispatcher = xDispProv.queryDispatch( aURL,"",0); + if( xDispatcher != null ) + xDispatcher.dispatch( aURL, null ); + } catch (com.sun.star.uno.Exception e) { + System.out.println("Couldn't open dialog!!!"); + throw new StatusException( "Couldn't open dialog!!!", e ); + } + } +} + + +class DialogFromFileThread extends Thread { + String url = null; + SOfficeFactory SOF = null; + XMultiServiceFactory myMSF = null; + + public DialogFromFileThread(XMultiServiceFactory xMSF, String sUrl) { + url = sUrl; + SOF = SOfficeFactory.getFactory(xMSF); + myMSF = xMSF; + } + + public void run() { + try { + PropertyValue[] args = new PropertyValue[1]; + args[0] = new PropertyValue(); + args[0].Name = "InteractionHandler"; + args[0].Value = myMSF.createInstance( + "com.sun.star.comp.uui.UUIInteractionHandler"); + + String testUrl= utils.getFullTestURL(url); + System.out.println("loading "+testUrl); + XComponent xDoc = SOF.loadDocument(testUrl, args); + } catch (com.sun.star.uno.Exception e) { + System.out.println("Couldn't create document!!!"); + throw new StatusException( "Couldn't create document!!!", e ); + } + } + +} + +class ExecuteDialogThread extends Thread { + XMultiServiceFactory xMSF = null; + String serviceName = null; + + public ExecuteDialogThread(XMultiServiceFactory xMSF, String serviceName) { + this.xMSF = xMSF; + this.serviceName = serviceName; + } + + public void run() { + Object dlg = null; + try { + dlg = xMSF.createInstance(serviceName); + } catch(com.sun.star.uno.Exception e) { + throw new StatusException(Status.failed("Couldn't create service")); + } + XExecutableDialog execDlg = (XExecutableDialog)UnoRuntime.queryInterface + (XExecutableDialog.class, dlg); + execDlg.execute(); + } +} + + |