1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski package helper; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import com.sun.star.comp.helper.Bootstrap; 26*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 27*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 28*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 29*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 30*b1cdbd2cSJim Jagielski import java.util.Hashtable; 31*b1cdbd2cSJim Jagielski import lib.TestParameters; 32*b1cdbd2cSJim Jagielski import util.PropertyName; 33*b1cdbd2cSJim Jagielski import util.utils; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski /** 36*b1cdbd2cSJim Jagielski * Bootstrap UNO from a Java environment. 37*b1cdbd2cSJim Jagielski * Needed parameters: 38*b1cdbd2cSJim Jagielski * <ol> 39*b1cdbd2cSJim Jagielski * <li> 40*b1cdbd2cSJim Jagielski * <ul> 41*b1cdbd2cSJim Jagielski * <li>UNORC - complete path to the unorc file</li> 42*b1cdbd2cSJim Jagielski * </ul> 43*b1cdbd2cSJim Jagielski * </li> 44*b1cdbd2cSJim Jagielski * <li> 45*b1cdbd2cSJim Jagielski * <ul> 46*b1cdbd2cSJim Jagielski * <li>AppExecutionCommand - path to the soffice executable</li> 47*b1cdbd2cSJim Jagielski * <li>OS - the operating system in case it's Windows, because the 48*b1cdbd2cSJim Jagielski * unorc is called uno.ini</li> 49*b1cdbd2cSJim Jagielski * </ul> 50*b1cdbd2cSJim Jagielski * </li> 51*b1cdbd2cSJim Jagielski * </ol> 52*b1cdbd2cSJim Jagielski */ 53*b1cdbd2cSJim Jagielski public class UnoProvider implements AppProvider { 54*b1cdbd2cSJim Jagielski UnoProvider()55*b1cdbd2cSJim Jagielski public UnoProvider(){ 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski } 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski /** 60*b1cdbd2cSJim Jagielski * Close existing office: calls disposeManager() 61*b1cdbd2cSJim Jagielski * @param param The test parameters. 62*b1cdbd2cSJim Jagielski * @param closeIfPossible Not needed, since UNO is bootstrapped by this 63*b1cdbd2cSJim Jagielski * class in every case. 64*b1cdbd2cSJim Jagielski * @return True, if bootstrapping worked. 65*b1cdbd2cSJim Jagielski */ closeExistingOffice(TestParameters param, boolean closeIfPossible)66*b1cdbd2cSJim Jagielski public boolean closeExistingOffice(TestParameters param, 67*b1cdbd2cSJim Jagielski boolean closeIfPossible) { 68*b1cdbd2cSJim Jagielski return disposeManager(param); 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski /** 72*b1cdbd2cSJim Jagielski * Dispose the UNO environment: just clears the bootstrapped 73*b1cdbd2cSJim Jagielski * MultiServiceFactory 74*b1cdbd2cSJim Jagielski * @param param The test parameters. 75*b1cdbd2cSJim Jagielski * @return True, if bootstrapping worked. 76*b1cdbd2cSJim Jagielski */ disposeManager(TestParameters param)77*b1cdbd2cSJim Jagielski public boolean disposeManager(TestParameters param) { 78*b1cdbd2cSJim Jagielski XMultiServiceFactory xMSF = 79*b1cdbd2cSJim Jagielski (XMultiServiceFactory)param.remove("ServiceManager"); 80*b1cdbd2cSJim Jagielski xMSF = null; 81*b1cdbd2cSJim Jagielski System.gc(); 82*b1cdbd2cSJim Jagielski try { 83*b1cdbd2cSJim Jagielski Thread.sleep(1000); 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski catch(java.lang.InterruptedException e) {} 86*b1cdbd2cSJim Jagielski return true; 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski /** 90*b1cdbd2cSJim Jagielski * Bootstrap UNO and return the created MultiServiceFactory. 91*b1cdbd2cSJim Jagielski * @param param The test parameters. 92*b1cdbd2cSJim Jagielski * @return A created MultiServiceFactory. 93*b1cdbd2cSJim Jagielski */ getManager(TestParameters param)94*b1cdbd2cSJim Jagielski public Object getManager(TestParameters param) { 95*b1cdbd2cSJim Jagielski XMultiServiceFactory xMSF = (XMultiServiceFactory)param.getMSF(); 96*b1cdbd2cSJim Jagielski if (xMSF == null) { 97*b1cdbd2cSJim Jagielski // bootstrap UNO. 98*b1cdbd2cSJim Jagielski String unorcName = getUnorcName(param); 99*b1cdbd2cSJim Jagielski Hashtable env = new Hashtable(); 100*b1cdbd2cSJim Jagielski env.put("SYSBINDIR", getSysBinDir(param)); 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski XComponentContext xContext = null; 103*b1cdbd2cSJim Jagielski try { 104*b1cdbd2cSJim Jagielski xContext = Bootstrap.defaultBootstrap_InitialComponentContext( 105*b1cdbd2cSJim Jagielski unorcName, env); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski catch(Exception e) { 108*b1cdbd2cSJim Jagielski e.printStackTrace(); 109*b1cdbd2cSJim Jagielski System.out.println("Could not get XComponentContext. Maybe you must add program folder to LD_LIBRARY_PATH"); 110*b1cdbd2cSJim Jagielski return null; 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski XMultiComponentFactory xMCF = xContext.getServiceManager(); 113*b1cdbd2cSJim Jagielski xMSF = (XMultiServiceFactory)UnoRuntime.queryInterface( 114*b1cdbd2cSJim Jagielski XMultiServiceFactory.class, xMCF); 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski return xMSF; 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski getUnorcName(TestParameters param)119*b1cdbd2cSJim Jagielski private String getUnorcName(TestParameters param) { 120*b1cdbd2cSJim Jagielski String unorcName = (String)param.get("UNORC"); 121*b1cdbd2cSJim Jagielski if (unorcName == null) { 122*b1cdbd2cSJim Jagielski String office = (String)param.get("AppExecutionCommand"); 123*b1cdbd2cSJim Jagielski // determine unorc name: unorc or uno.ini on windows 124*b1cdbd2cSJim Jagielski String opSystem = (String)param.get(PropertyName.OPERATING_SYSTEM); 125*b1cdbd2cSJim Jagielski if ( opSystem != null && opSystem.equalsIgnoreCase(PropertyName.WNTMSCI)) { 126*b1cdbd2cSJim Jagielski unorcName = "uno.ini"; 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski else { 129*b1cdbd2cSJim Jagielski unorcName = "unorc"; 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski if (office == null) 132*b1cdbd2cSJim Jagielski return null; 133*b1cdbd2cSJim Jagielski // use '/', because this will be a URL in any case. 134*b1cdbd2cSJim Jagielski unorcName = office.substring(0, office.indexOf("program")+7) + 135*b1cdbd2cSJim Jagielski "/" + unorcName; 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski unorcName = utils.getFullURL(unorcName); 138*b1cdbd2cSJim Jagielski if (param.DebugIsActive) { 139*b1cdbd2cSJim Jagielski System.out.println("UnoUcr: " + unorcName); 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski return unorcName; 142*b1cdbd2cSJim Jagielski } 143*b1cdbd2cSJim Jagielski getSysBinDir(TestParameters param)144*b1cdbd2cSJim Jagielski private String getSysBinDir(TestParameters param) { 145*b1cdbd2cSJim Jagielski String base = (String)param.get("AppExecutionCommand"); 146*b1cdbd2cSJim Jagielski if (base == null) 147*b1cdbd2cSJim Jagielski base = (String)param.get("UNORC"); 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski if (base == null) 150*b1cdbd2cSJim Jagielski return null; 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski String sysbindir = base.substring(0, 153*b1cdbd2cSJim Jagielski base.indexOf("program")+7); 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski sysbindir = utils.getFullURL(sysbindir); 156*b1cdbd2cSJim Jagielski if (param.DebugIsActive) { 157*b1cdbd2cSJim Jagielski System.out.println("SysBinDir: " + sysbindir); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski return sysbindir; 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski } 162