| /************************************************************** |
| * |
| * 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 com.sun.star.comp.urlresolver; |
| |
| |
| import com.sun.star.bridge.XBridge; |
| import com.sun.star.bridge.XBridgeFactory; |
| import com.sun.star.bridge.XUnoUrlResolver; |
| |
| import com.sun.star.comp.loader.FactoryHelper; |
| |
| import com.sun.star.connection.ConnectionSetupException; |
| import com.sun.star.connection.NoConnectException; |
| import com.sun.star.connection.XConnection; |
| import com.sun.star.connection.XConnector; |
| |
| import com.sun.star.lang.IllegalArgumentException; |
| import com.sun.star.lang.XMultiServiceFactory; |
| import com.sun.star.lang.XSingleServiceFactory; |
| |
| import com.sun.star.registry.XRegistryKey; |
| |
| import com.sun.star.uno.UnoRuntime; |
| |
| |
| /** |
| * This component gives a factory for an <code>UnoUrlResolver</code> service. |
| * <p> |
| * @version $Revision: 1.6 $ $ $Date: 2008-04-11 11:12:25 $ |
| * @author Kay Ramme |
| * @see com.sun.star.brige.XBrideFactory |
| * @see com.sun.star.connection.Connector |
| * @since UDK1.0 |
| */ |
| public class UrlResolver { |
| static private final boolean DEBUG = false; |
| |
| |
| static public class _UrlResolver implements XUnoUrlResolver { |
| static private final String __serviceName = "com.sun.star.bridge.UnoUrlResolver"; |
| |
| private XMultiServiceFactory _xMultiServiceFactory; |
| |
| public _UrlResolver(XMultiServiceFactory xMultiServiceFactory) { |
| _xMultiServiceFactory = xMultiServiceFactory; |
| } |
| |
| public Object resolve(/*IN*/String dcp) throws NoConnectException, ConnectionSetupException, IllegalArgumentException, com.sun.star.uno.RuntimeException { |
| String conDcp ; |
| String protDcp ; |
| String rootOid ; |
| |
| if(dcp.indexOf(';') == -1) {// use old style |
| conDcp = dcp; |
| protDcp = "iiop"; |
| rootOid = "classic_uno"; |
| } |
| else { // new style |
| int index = dcp.indexOf(':'); |
| String url = dcp.substring(0, index).trim(); |
| dcp = dcp.substring(index + 1).trim(); |
| |
| index = dcp.indexOf(';'); |
| conDcp = dcp.substring(0, index).trim(); |
| dcp = dcp.substring(index + 1).trim(); |
| |
| index = dcp.indexOf(';'); |
| protDcp = dcp.substring(0, index).trim(); |
| dcp = dcp.substring(index + 1).trim(); |
| |
| rootOid = dcp.trim().trim(); |
| } |
| |
| Object rootObject ; |
| XBridgeFactory xBridgeFactory ; |
| try { |
| xBridgeFactory = UnoRuntime.queryInterface(XBridgeFactory.class, |
| _xMultiServiceFactory.createInstance("com.sun.star.bridge.BridgeFactory")); |
| } catch (com.sun.star.uno.Exception e) { |
| throw new com.sun.star.uno.RuntimeException(e.getMessage()); |
| } |
| XBridge xBridge = xBridgeFactory.getBridge(conDcp + ";" + protDcp); |
| |
| if(xBridge == null) { |
| Object connector ; |
| try { |
| connector = _xMultiServiceFactory.createInstance("com.sun.star.connection.Connector"); |
| } catch (com.sun.star.uno.Exception e) { |
| throw new com.sun.star.uno.RuntimeException(e.getMessage()); |
| } |
| |
| XConnector connector_xConnector = UnoRuntime.queryInterface(XConnector.class, connector); |
| |
| // connect to the server |
| XConnection xConnection = connector_xConnector.connect(conDcp); |
| try { |
| xBridge = xBridgeFactory.createBridge(conDcp + ";" + protDcp, protDcp, xConnection, null); |
| } catch (com.sun.star.bridge.BridgeExistsException e) { |
| throw new com.sun.star.uno.RuntimeException(e.getMessage()); |
| } |
| } |
| rootObject = xBridge.getInstance(rootOid); |
| return rootObject; |
| } |
| } |
| |
| |
| /** |
| * Gives a factory for creating the service. |
| * This method is called by the <code>JavaLoader</code> |
| * <p> |
| * @return returns a <code>XSingleServiceFactory</code> for creating the component |
| * @param implName the name of the implementation for which a service is desired |
| * @param multiFactory the service manager to be uses if needed |
| * @param regKey the registryKey |
| * @see com.sun.star.comp.loader.JavaLoader |
| */ |
| public static XSingleServiceFactory __getServiceFactory(String implName, |
| XMultiServiceFactory multiFactory, |
| XRegistryKey regKey) |
| { |
| XSingleServiceFactory xSingleServiceFactory = null; |
| |
| if (implName.equals(UrlResolver.class.getName()) ) |
| xSingleServiceFactory = FactoryHelper.getServiceFactory(_UrlResolver.class, |
| _UrlResolver.__serviceName, |
| multiFactory, |
| regKey); |
| |
| return xSingleServiceFactory; |
| } |
| } |