| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the 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(); |
| } |
| } |
| |
| |