xref: /AOO41X/main/jurt/com/sun/star/comp/urlresolver/UrlResolver.java (revision 2be432768a66cc90838f6a32e76ec156f587e741)
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 
23 
24 package com.sun.star.comp.urlresolver;
25 
26 
27 import com.sun.star.bridge.XBridge;
28 import com.sun.star.bridge.XBridgeFactory;
29 import com.sun.star.bridge.XUnoUrlResolver;
30 
31 import com.sun.star.comp.loader.FactoryHelper;
32 
33 import com.sun.star.connection.ConnectionSetupException;
34 import com.sun.star.connection.NoConnectException;
35 import com.sun.star.connection.XConnection;
36 import com.sun.star.connection.XConnector;
37 
38 import com.sun.star.lang.IllegalArgumentException;
39 import com.sun.star.lang.XMultiServiceFactory;
40 import com.sun.star.lang.XSingleServiceFactory;
41 
42 import com.sun.star.registry.XRegistryKey;
43 
44 import com.sun.star.uno.UnoRuntime;
45 
46 
47 /**
48  * This component gives a factory for an <code>UnoUrlResolver</code> service.
49  * <p>
50  * @version     $Revision: 1.6 $ $ $Date: 2008-04-11 11:12:25 $
51  * @author      Kay Ramme
52  * @see         com.sun.star.brige.XBrideFactory
53  * @see         com.sun.star.connection.Connector
54  * @since       UDK1.0
55  */
56 public class UrlResolver {
57     static private final boolean DEBUG = false;
58 
59 
60     static public class _UrlResolver implements XUnoUrlResolver {
61         static private final String __serviceName = "com.sun.star.bridge.UnoUrlResolver";
62 
63         private XMultiServiceFactory _xMultiServiceFactory;
64 
_UrlResolver(XMultiServiceFactory xMultiServiceFactory)65         public _UrlResolver(XMultiServiceFactory xMultiServiceFactory) {
66             _xMultiServiceFactory = xMultiServiceFactory;
67         }
68 
resolve( String dcp)69         public Object resolve(/*IN*/String dcp) throws NoConnectException, ConnectionSetupException, IllegalArgumentException, com.sun.star.uno.RuntimeException {
70             String conDcp  ;
71             String protDcp  ;
72             String rootOid  ;
73 
74             if(dcp.indexOf(';') == -1) {// use old style
75                 conDcp = dcp;
76                 protDcp = "iiop";
77                 rootOid = "classic_uno";
78             }
79             else { // new style
80                 int index = dcp.indexOf(':');
81                 String url = dcp.substring(0, index).trim();
82                 dcp = dcp.substring(index + 1).trim();
83 
84                 index = dcp.indexOf(';');
85                 conDcp = dcp.substring(0, index).trim();
86                 dcp = dcp.substring(index + 1).trim();
87 
88                 index = dcp.indexOf(';');
89                 protDcp = dcp.substring(0, index).trim();
90                 dcp = dcp.substring(index + 1).trim();
91 
92                 rootOid = dcp.trim().trim();
93             }
94 
95             Object rootObject  ;
96             XBridgeFactory xBridgeFactory ;
97             try {
98                 xBridgeFactory = UnoRuntime.queryInterface(XBridgeFactory.class,
99                                                                           _xMultiServiceFactory.createInstance("com.sun.star.bridge.BridgeFactory"));
100             } catch (com.sun.star.uno.Exception e) {
101                 throw new com.sun.star.uno.RuntimeException(e.getMessage());
102             }
103             XBridge xBridge = xBridgeFactory.getBridge(conDcp + ";" + protDcp);
104 
105             if(xBridge == null) {
106                 Object connector ;
107                 try {
108                     connector = _xMultiServiceFactory.createInstance("com.sun.star.connection.Connector");
109                 } catch (com.sun.star.uno.Exception e) {
110                         throw new com.sun.star.uno.RuntimeException(e.getMessage());
111                 }
112 
113                 XConnector connector_xConnector = UnoRuntime.queryInterface(XConnector.class, connector);
114 
115                 // connect to the server
116                 XConnection xConnection = connector_xConnector.connect(conDcp);
117                 try {
118                     xBridge = xBridgeFactory.createBridge(conDcp + ";" + protDcp, protDcp, xConnection, null);
119                 } catch (com.sun.star.bridge.BridgeExistsException e) {
120                     throw new com.sun.star.uno.RuntimeException(e.getMessage());
121                 }
122             }
123             rootObject = xBridge.getInstance(rootOid);
124             return rootObject;
125         }
126     }
127 
128 
129     /**
130      * Gives a factory for creating the service.
131      * This method is called by the <code>JavaLoader</code>
132      * <p>
133      * @return  returns a <code>XSingleServiceFactory</code> for creating the component
134      * @param   implName     the name of the implementation for which a service is desired
135      * @param   multiFactory the service manager to be uses if needed
136      * @param   regKey       the registryKey
137      * @see                  com.sun.star.comp.loader.JavaLoader
138      */
__getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey)139     public static XSingleServiceFactory __getServiceFactory(String implName,
140                                                             XMultiServiceFactory multiFactory,
141                                                             XRegistryKey regKey)
142     {
143         XSingleServiceFactory xSingleServiceFactory = null;
144 
145         if (implName.equals(UrlResolver.class.getName()) )
146             xSingleServiceFactory = FactoryHelper.getServiceFactory(_UrlResolver.class,
147                                                                     _UrlResolver.__serviceName,
148                                                                     multiFactory,
149                                                                     regKey);
150 
151         return xSingleServiceFactory;
152     }
153 }
154