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