summaryrefslogtreecommitdiff
path: root/qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java
diff options
context:
space:
mode:
Diffstat (limited to 'qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java')
-rw-r--r--qadevOOo/runner/basicrunner/basichelper/ThreadRunner.java254
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();
+ }
+}
+
+