1*1b0aaa91SAndrew Rist /************************************************************** 2*1b0aaa91SAndrew Rist * 3*1b0aaa91SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*1b0aaa91SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*1b0aaa91SAndrew Rist * distributed with this work for additional information 6*1b0aaa91SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*1b0aaa91SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*1b0aaa91SAndrew Rist * "License"); you may not use this file except in compliance 9*1b0aaa91SAndrew Rist * with the License. You may obtain a copy of the License at 10*1b0aaa91SAndrew Rist * 11*1b0aaa91SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*1b0aaa91SAndrew Rist * 13*1b0aaa91SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*1b0aaa91SAndrew Rist * software distributed under the License is distributed on an 15*1b0aaa91SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*1b0aaa91SAndrew Rist * KIND, either express or implied. See the License for the 17*1b0aaa91SAndrew Rist * specific language governing permissions and limitations 18*1b0aaa91SAndrew Rist * under the License. 19*1b0aaa91SAndrew Rist * 20*1b0aaa91SAndrew Rist *************************************************************/ 21*1b0aaa91SAndrew Rist 22cdf0e10cSrcweir // base classes 23cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 24cdf0e10cSrcweir 25cdf0e10cSrcweir // factory for creating components 26cdf0e10cSrcweir import com.sun.star.beans.PropertyValue; 27cdf0e10cSrcweir import com.sun.star.bridge.XUnoUrlResolver; 28cdf0e10cSrcweir import com.sun.star.frame.XComponentLoader; 29cdf0e10cSrcweir import com.sun.star.frame.XDesktop; 30cdf0e10cSrcweir import com.sun.star.frame.XModel; 31cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 32cdf0e10cSrcweir import com.sun.star.uno.XInterface; 33cdf0e10cSrcweir 34cdf0e10cSrcweir // Exceptions 35cdf0e10cSrcweir import com.sun.star.uno.RuntimeException; 36cdf0e10cSrcweir 37cdf0e10cSrcweir 38cdf0e10cSrcweir /** @descr This class establishes a connection to a StarOffice application. 39cdf0e10cSrcweir */ 40cdf0e10cSrcweir public class OfficeConnection 41cdf0e10cSrcweir { 42cdf0e10cSrcweir public OfficeConnection (int nPortNumber) 43cdf0e10cSrcweir { 44cdf0e10cSrcweir mnDefaultPort = nPortNumber; 45cdf0e10cSrcweir connect (); 46cdf0e10cSrcweir } 47cdf0e10cSrcweir 48cdf0e10cSrcweir /** @descr Return the service manager that represents the connected 49cdf0e10cSrcweir StarOffice application 50cdf0e10cSrcweir */ 51cdf0e10cSrcweir public XMultiServiceFactory getServiceManager () 52cdf0e10cSrcweir { 53cdf0e10cSrcweir if ( ! mbInitialized) 54cdf0e10cSrcweir connect (); 55cdf0e10cSrcweir return maServiceManager; 56cdf0e10cSrcweir } 57cdf0e10cSrcweir 58cdf0e10cSrcweir /** @descr Return a flag that indicates if the constructor has been able to 59cdf0e10cSrcweir establish a valid connection. 60cdf0e10cSrcweir */ 61cdf0e10cSrcweir public boolean connectionIsValid () 62cdf0e10cSrcweir { 63cdf0e10cSrcweir return getServiceManager() != null; 64cdf0e10cSrcweir } 65cdf0e10cSrcweir 66cdf0e10cSrcweir /** @descr Connect to a already running StarOffice application. 67cdf0e10cSrcweir */ 68cdf0e10cSrcweir private void connect () 69cdf0e10cSrcweir { 70cdf0e10cSrcweir connect (msDefaultHost, mnDefaultPort); 71cdf0e10cSrcweir } 72cdf0e10cSrcweir 73cdf0e10cSrcweir private void connect (String hostname) 74cdf0e10cSrcweir { 75cdf0e10cSrcweir connect (hostname, mnDefaultPort); 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir /** @descr Connect to a already running StarOffice application that has 79cdf0e10cSrcweir been started with a command line argument like 80cdf0e10cSrcweir "-accept=socket,host=localhost,port=5678;urp;" 81cdf0e10cSrcweir */ 82cdf0e10cSrcweir private void connect (String hostname, int portnumber) 83cdf0e10cSrcweir { 84cdf0e10cSrcweir mbInitialized = true; 85cdf0e10cSrcweir // Set up connection string. 86cdf0e10cSrcweir String sConnectString = "uno:socket,host=" + hostname + ",port=" + portnumber 87cdf0e10cSrcweir + ";urp;StarOffice.ServiceManager"; 88cdf0e10cSrcweir 89cdf0e10cSrcweir 90cdf0e10cSrcweir // connect to a running office and get the ServiceManager 91cdf0e10cSrcweir try 92cdf0e10cSrcweir { 93cdf0e10cSrcweir // Create a URL Resolver. 94cdf0e10cSrcweir XMultiServiceFactory aLocalServiceManager = 95cdf0e10cSrcweir com.sun.star.comp.helper.Bootstrap.createSimpleServiceManager(); 96cdf0e10cSrcweir XUnoUrlResolver aURLResolver = (XUnoUrlResolver) UnoRuntime.queryInterface ( 97cdf0e10cSrcweir XUnoUrlResolver.class, 98cdf0e10cSrcweir aLocalServiceManager.createInstance ("com.sun.star.bridge.UnoUrlResolver") 99cdf0e10cSrcweir ); 100cdf0e10cSrcweir 101cdf0e10cSrcweir maServiceManager = (XMultiServiceFactory) UnoRuntime.queryInterface ( 102cdf0e10cSrcweir XMultiServiceFactory.class, 103cdf0e10cSrcweir aURLResolver.resolve (sConnectString) 104cdf0e10cSrcweir ); 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir catch (Exception e) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir MessageArea.println ("Could not connect with " + sConnectString + " : " + e); 110cdf0e10cSrcweir MessageArea.println ("Please start OpenOffice/StarOffice with " 111cdf0e10cSrcweir + "\"-accept=socket,host=localhost,port=5678;urp;\""); 112cdf0e10cSrcweir } 113cdf0e10cSrcweir } 114cdf0e10cSrcweir 115cdf0e10cSrcweir private int mnDefaultPort = 5678; 116cdf0e10cSrcweir private final String msDefaultHost = "localhost"; 117cdf0e10cSrcweir private XMultiServiceFactory maServiceManager = null; 118cdf0e10cSrcweir 119cdf0e10cSrcweir /** A value of true just indicates that it has been tried to establish a connection, 120cdf0e10cSrcweir not that that has been successfull. 121cdf0e10cSrcweir */ 122cdf0e10cSrcweir private boolean mbInitialized = false; 123cdf0e10cSrcweir } 124