diff options
author | Kay Ramme <kr@openoffice.org> | 2000-09-27 08:30:27 +0000 |
---|---|---|
committer | Kay Ramme <kr@openoffice.org> | 2000-09-27 08:30:27 +0000 |
commit | 30177bc88fe264fb00e336ecd12d175197301c37 (patch) | |
tree | 4805fe712eb094e48c25757870efba636cb80e88 /jut | |
parent | 9bd4bb4bc78127ec67d20192fa1a3ec8dd0c95b6 (diff) |
Java Uno Tools
Diffstat (limited to 'jut')
-rw-r--r-- | jut/com/sun/star/tools/uno/RegistryKey.java | 272 | ||||
-rw-r--r-- | jut/com/sun/star/tools/uno/UnoApp.java | 689 | ||||
-rw-r--r-- | jut/com/sun/star/tools/uno/makefile.mk | 89 | ||||
-rw-r--r-- | jut/prj/d.lst | 1 | ||||
-rw-r--r-- | jut/util/makefile.mk | 77 | ||||
-rw-r--r-- | jut/util/makefile.pmk | 77 |
6 files changed, 1205 insertions, 0 deletions
diff --git a/jut/com/sun/star/tools/uno/RegistryKey.java b/jut/com/sun/star/tools/uno/RegistryKey.java new file mode 100644 index 000000000000..6de936e42988 --- /dev/null +++ b/jut/com/sun/star/tools/uno/RegistryKey.java @@ -0,0 +1,272 @@ +/************************************************************************* + * + * $RCSfile: RegistryKey.java,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: kr $ $Date: 2000-09-27 09:30:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +package com.sun.star.tools.uno; + + +import java.util.Enumeration; +import java.util.Hashtable; + + +import com.sun.star.registry.InvalidRegistryException; +import com.sun.star.registry.InvalidValueException; +import com.sun.star.registry.RegistryKeyType; +import com.sun.star.registry.RegistryValueType; +import com.sun.star.registry.XRegistryKey; + + +/** + * This is a dummy registry implementation, + * which only implmenets the needed methods. + */ +class RegistryKey implements XRegistryKey { + protected RegistryValueType _registryValueType = RegistryValueType.NOT_DEFINED; + + protected String _name; + protected Hashtable _keys = new Hashtable(); + + protected int _long; + protected int _long_list[]; + protected String _ascii; + protected String _ascii_list[]; + protected String _string; + protected String _string_list[]; + protected byte _binary[]; + + public RegistryKey(String name) { + _name = name; + } + + + // XRegistryKey Attributes + public String getKeyName() throws com.sun.star.uno.RuntimeException { + return _name; + } + + // XRegistryKey Methods + public boolean isReadOnly() throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return false; + } + + public boolean isValid() throws com.sun.star.uno.RuntimeException { + return true; + } + + public RegistryKeyType getKeyType( /*IN*/String rKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return RegistryKeyType.KEY; + } + + public RegistryValueType getValueType() throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return _registryValueType; + } + + public int getLongValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.LONG) + throw new InvalidValueException("long"); + + return _long; + } + + public void setLongValue( /*IN*/int value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.LONG; + + _long = value; + } + + public int[] getLongListValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.LONGLIST) + throw new InvalidValueException("longlist"); + + return _long_list; + } + + public void setLongListValue( /*IN*/int[] seqValue ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.LONGLIST; + + _long_list = seqValue; + } + + public String getAsciiValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.ASCII) + throw new InvalidValueException("ascii"); + + return _ascii; + } + + public void setAsciiValue( /*IN*/String value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.ASCII; + + _ascii = value; + } + + public String[] getAsciiListValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.ASCIILIST) + throw new InvalidValueException("asciilist"); + + return _ascii_list; + } + + public void setAsciiListValue( /*IN*/String[] seqValue ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.ASCIILIST; + + _ascii_list = seqValue; + } + + public String getStringValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.STRING) + throw new InvalidValueException("string"); + + return _string; + } + + public void setStringValue( /*IN*/String value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.STRING; + + _string = value; + } + + public String[] getStringListValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.STRINGLIST) + throw new InvalidValueException("string_list"); + + return _string_list; + } + + public void setStringListValue( /*IN*/String[] seqValue ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.STRINGLIST; + + _string_list = seqValue; + } + + public byte[] getBinaryValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException { + if(_registryValueType != RegistryValueType.BINARY) + throw new InvalidValueException("longlist"); + + return _binary; + } + + public void setBinaryValue( /*IN*/byte[] value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _registryValueType = RegistryValueType.BINARY; + + _binary = value; + } + + public XRegistryKey openKey( /*IN*/String aKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return (XRegistryKey)_keys.get(aKeyName); + } + + public XRegistryKey createKey( /*IN*/String aKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + XRegistryKey xRegistryKey = openKey(aKeyName); + + if(xRegistryKey == null) { + xRegistryKey = new RegistryKey(aKeyName); + _keys.put(aKeyName, xRegistryKey); + } + + return xRegistryKey; + } + + public void closeKey() throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + } + + public void deleteKey( /*IN*/String rKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + _keys.remove(rKeyName); + } + + public synchronized XRegistryKey[] openKeys() throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + RegistryKey registryKeys[] = new RegistryKey[_keys.size()]; + + Enumeration elements = _keys.elements(); + int i = 0; + while(elements.hasMoreElements()) { + registryKeys[i ++] = (RegistryKey)elements.nextElement(); + } + + return registryKeys; + } + + public synchronized String[] getKeyNames() throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + String strings[] = new String[_keys.size()]; + + Enumeration elements = _keys.keys(); + int i = 0; + while(elements.hasMoreElements()) { + strings[i ++] = (String)elements.nextElement(); + } + + return strings; + } + + public boolean createLink( /*IN*/String aLinkName, /*IN*/String aLinkTarget ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return false; + } + + public void deleteLink( /*IN*/String rLinkName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + } + + public String getLinkTarget( /*IN*/String rLinkName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return null; + } + + public String getResolvedName( /*IN*/String aKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException { + return null; + } +} diff --git a/jut/com/sun/star/tools/uno/UnoApp.java b/jut/com/sun/star/tools/uno/UnoApp.java new file mode 100644 index 000000000000..4ba5e9149526 --- /dev/null +++ b/jut/com/sun/star/tools/uno/UnoApp.java @@ -0,0 +1,689 @@ +/************************************************************************* + * + * $RCSfile: UnoApp.java,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: kr $ $Date: 2000-09-27 09:30:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +package com.sun.star.tools.uno; + + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + + +import com.sun.star.bridge.XBridge; +import com.sun.star.bridge.XBridgeFactory; +import com.sun.star.bridge.XInstanceProvider; +import com.sun.star.bridge.XUnoUrlResolver; + +import com.sun.star.comp.helper.RegistryServiceFactory; + +import com.sun.star.comp.loader.JavaLoader; + +import com.sun.star.connection.XAcceptor; +import com.sun.star.connection.XConnection; + +import com.sun.star.container.XSet; + +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lang.XSingleServiceFactory; + +import com.sun.star.loader.XImplementationLoader; + +import com.sun.star.registry.XRegistryKey; + +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.Type; + + +/** + * <code>UnoApp</code> is the generic UNO application for java. + * It removes the need for writing UNO applications in Java. + * <p> + */ +public class UnoApp { + /** + * Bootstraps a servicemanager with some base components registered. + * <p> + * @return a freshly boostrapped service manager + * @see com.sun.star.lang.ServiceManager + */ + static public XMultiServiceFactory createSimpleServiceManager() throws Exception { + JavaLoader loader = new JavaLoader(); + + XImplementationLoader xImpLoader = (XImplementationLoader)UnoRuntime.queryInterface(XImplementationLoader.class, loader); + + // Get the factory for the ServiceManager + Object loaderobj = xImpLoader.activate("com.sun.star.comp.servicemanager.ServiceManager", null, null, null); + + // Ensure that we have got a factory + XSingleServiceFactory xManagerFac = (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, loaderobj); + // Create an instance of the ServiceManager + XMultiServiceFactory xMultiFac = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, + xManagerFac.createInstance()); + + // set the ServiceManager at the JavaLoader with the XInitialization interface + XInitialization xInit = (XInitialization) UnoRuntime.queryInterface(XInitialization.class, xImpLoader); + Object[] iniargs = { xMultiFac }; + xInit.initialize( iniargs ); + + + // now use the XSet interface at the ServiceManager to add the factory of the loader + XSet xSet = (XSet) UnoRuntime.queryInterface(XSet.class, xMultiFac); + + // Get the factory of the loader + XSingleServiceFactory xSingleServiceFactory = (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, + xImpLoader.activate("com.sun.star.comp.loader.JavaLoader", null, null, null)); + + // add the javaloader + xSet.insert(xSingleServiceFactory); + + // add the service manager + xSet.insert(xManagerFac); + + // Get the factory of the URLResolver + xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, + xImpLoader.activate("com.sun.star.comp.urlresolver.UrlResolver", null, null, null)); + xSet.insert(xSingleServiceFactory); + + // add the bridgefactory + xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, + xImpLoader.activate("com.sun.star.comp.bridgefactory.BridgeFactory", null, null, null)); + xSet.insert(xSingleServiceFactory); + + // add the connector + xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, + xImpLoader.activate("com.sun.star.comp.connections.Connector", null, null, null)); + xSet.insert(xSingleServiceFactory); + + // add the acceptor + xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, + xImpLoader.activate("com.sun.star.comp.connections.Acceptor", null, null, null)); + xSet.insert(xSingleServiceFactory); + + return xMultiFac; + } + + + /** + * An XInstanceProvider implementation, which allows simple object export. + * <p> + * @see com.sun.star.bridge.XBridgeFactory + * @see com.sun.star.bridge.XInstanceProvider + */ + static class InstanceProvider implements XInstanceProvider { + private String _name; + private Object _component; + + InstanceProvider(String name, Object component) { + _name = name; + _component = component; + } + + public Object getInstance( /*IN*/String sInstanceName ) throws com.sun.star.container.NoSuchElementException, com.sun.star.uno.RuntimeException { + Object object = null; + + if(sInstanceName.equals(_name)) + object = _component; + + return object; + } + } + + /** + * Exports the given object via the given url while the using + * the <code>xMultiServiceFactory</code>. + * <p> + * @param xMultiServiceFactory the service manager to use + * @param dcp a uno url, which describes how to export + * @param object the object to export + * @see com.sun.star.bridge.XBridge + * @see com.sun.star.bridge.XBridgeFactory + * @see com.sun.star.bridge.XInstanceProvider + */ + static public void export(XMultiServiceFactory xMultiServiceFactory, String dcp, Object object) throws Exception { + String conDcp = null; + String protDcp = null; + String rootOid = null; + + // split the description into tokens + 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(); + + // get an acceptor + XAcceptor xAcceptor = (XAcceptor)UnoRuntime.queryInterface(XAcceptor.class, + xMultiServiceFactory.createInstance("com.sun.star.connection.Acceptor")); + + System.err.println("waiting for connect..."); + XConnection xConnection = xAcceptor.accept(conDcp); + + + // get a bridgefactory + XBridgeFactory xBridgeFactory = (XBridgeFactory)UnoRuntime.queryInterface(XBridgeFactory.class, + xMultiServiceFactory.createInstance("com.sun.star.bridge.BridgeFactory")); + + // create the bridge + XBridge xBridge = xBridgeFactory.createBridge(conDcp + ";" + protDcp, protDcp, xConnection, new InstanceProvider(rootOid, object)); + } + + + + /** + * Parses the given string a makes words of according to the following rules: + * - words embraced by " are recognized as one word + * - charachters preceded by \ are quoted (e.g. " or spaces) + * <p> + * @return an array of words + * @param string the string to parse + */ + static String []parseString(String string) { + Vector vector = new Vector(); + + boolean inString = false; + boolean quote = false; + String word = ""; + int i = 0; + while(i < string.length()) { + if(string.charAt(i) == '\"' && !quote) { + inString = !inString; + } + else if(string.charAt(i) == '\\' && !quote) { + quote = true; + } + else if(Character.isSpace(string.charAt(i)) && !quote && !inString) { + if(word.length() > 0) { + vector.addElement(word); + word = ""; + } + } + else { + word += string.charAt(i); + quote = false; + } + + ++ i; + } + + vector.addElement(word); + + String args[] = new String[vector.size()]; + for(i = 0; i < args.length; ++ i) + args[i] = (String)vector.elementAt(i); + + return args; + } + + /** + * Takes a <code>String</code> array and concatenates the words + * to one string. + * <p> + * @return the concatenated string + * @param args the words to concatenate + */ + static String mergeString(String args[]) { + String string = ""; + + for(int i = 0; i < args.length; ++ i) + string += " " + args[i]; + + return string; + } + + /** + * This is the base class for options for <code>UnoApp</code>. + * Every option has to be derived from this class and has to implement + * the <code>set</code> method, which is called while parsing the arguments. + * <p> + * Options which create the result object should also overwrite the + * create method. + */ + static abstract class Option { + String _key; + String _help; + + /** + * Constructor, which has to be called with option key (e.g. -l) + * and a description of the option. + * <p> + * @param key the key of this option + * @param help a description of the option, which is printed when calling -h + */ + protected Option(String key, String help) { + _key = key; + _help = help; + } + + /** + * <code>set</code> is called while parsing the arguments. + * <p> + * @param unoApp the <code>unoApp</code> to use for this option + * @param args an <code>String</code> array with the arguments + * @param index the index of the current argument + */ + abstract void set(UnoApp unoApp, String args[], int index[]) throws Exception; + + /** + * Create is called while trying to get the result object. + * <p> + * @param context the context for this create, should have been set by set + * @param xMultiServiceFactory the service manager to use + * @param args the args for the object instantiation + */ + Object create(Object context, XMultiServiceFactory xMultiServiceFactory, Object args[]) throws Exception { + throw new Exception("not implemented"); + } + } + + /** + * The result of applying this option is an instance of + * the named service. + */ + static class Service_Option extends Option { + static final String __key = "-s"; + + Service_Option() { + super(__key, "the service to be instantiated"); + } + + void set(UnoApp unoApp, String args[], int index[]) throws Exception { + String serviceName = args[index[0] ++]; + + unoApp._context = serviceName; + unoApp._creator = this; + } + + Object create(Object context, XMultiServiceFactory xMultiServiceFactory, Object args[]) throws Exception { + Object object = null; + + if(args != null && args.length != 0) + object = xMultiServiceFactory.createInstanceWithArguments((String)context, args); + + else + object = xMultiServiceFactory.createInstance((String)context); + + return object; + } + } + + /** + * The result of applying this option is a registry + * servicemanager. + */ + static class Registry_Option extends Option { + static final String __key = "-r"; + + Registry_Option() { + super(__key, "the registry to use"); + } + + void set(UnoApp unoApp, String args[], int index[]) throws Exception { + unoApp._context = RegistryServiceFactory.create(args[index[0] ++]); + unoApp._creator = this; + + System.err.println("got RegistryServiceFactory:" + unoApp._context); + } + + Object create(Object context, XMultiServiceFactory xMultiServiceFactory, Object args[]) throws Exception { + return context; + } + + } + + /** + * The result of applying this option is the import + * of the described object. + */ + static class Import_Option extends Option { + static final String __key = "-u"; + + Import_Option() { + super(__key, "import object from this url"); + } + + void set(UnoApp unoApp, String args[], int index[]) throws Exception { + unoApp._context = args[index[0] ++]; + unoApp._uno_url = (String)unoApp._context; + unoApp._creator = this; + } + + Object create(Object context, XMultiServiceFactory xMultiServiceFactory, Object args[]) throws Exception { + XMultiServiceFactory smgr = createSimpleServiceManager(); + + XUnoUrlResolver urlResolver = (XUnoUrlResolver)UnoRuntime.queryInterface(XUnoUrlResolver.class, smgr.createInstance("com.sun.star.bridge.UnoUrlResolver")); + + return urlResolver.resolve((String)context); + } + } + + /** + * The result of applying this option is a multiservicefactory + * for the given component. + */ + static class Component_Option extends Option { + static final String __key = "-c"; + + Component_Option() { + super(__key, "add the a component"); + } + + void set(UnoApp unoApp, String args[], int index[]) throws Exception { + unoApp._context = args[index[0] ++]; + unoApp._creator = this; + } + + Object create(Object context, XMultiServiceFactory xMultiServiceFactory, Object args[]) throws Exception { + String componentName = (String)context; + + XImplementationLoader loader = (XImplementationLoader)UnoRuntime.queryInterface(XImplementationLoader.class, + xMultiServiceFactory.createInstance("com.sun.star.loader.Java")); + + Object serviceManager = xMultiServiceFactory.createInstance("com.sun.star.lang.ServiceManager"); + XSet serviceManager_xSet = (XSet)UnoRuntime.queryInterface(XSet.class, serviceManager); + + XRegistryKey xRegistryKey = new RegistryKey("ROOT"); + + loader.writeRegistryInfo(xRegistryKey, null, componentName); + + String keys[] = xRegistryKey.getKeyNames(); + for(int j = 0; j < keys.length; ++ j) { + String implName = keys[j].substring(1); + implName = implName.substring(0, implName.length() - "/UNO/SERVICES".length()); + + Object factory = loader.activate(implName, null, componentName, xRegistryKey); + XSingleServiceFactory xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, + factory); + + if (xSingleServiceFactory == null) + throw new com.sun.star.loader.CannotActivateFactoryException("Can not get factory for " + implName); + + serviceManager_xSet.insert(xSingleServiceFactory); + } + + return serviceManager; + } + } + + /** + * The -smgr option takes the given objects as <code>XSingleServiceFactory</code> + * or as <code>XMultiServiceFactory</code> and inserts them into the given service manager. + */ + static class ServiceManager_Option extends Option { + static final String __key = "-smgr"; + + class MySingleServiceFactory implements XSingleServiceFactory, XServiceInfo { + XMultiServiceFactory _xMultiServiceFactory; + String _serviceName; + + MySingleServiceFactory(XMultiServiceFactory xMultiServiceFactory, String serviceName) { + _xMultiServiceFactory = xMultiServiceFactory; + _serviceName = serviceName; + } + + public Object createInstance( ) throws com.sun.star.uno.Exception, com.sun.star.uno.RuntimeException { + return _xMultiServiceFactory.createInstance(_serviceName); + } + public Object createInstanceWithArguments( /*IN*/java.lang.Object[] aArguments ) throws com.sun.star.uno.Exception, com.sun.star.uno.RuntimeException { + return _xMultiServiceFactory.createInstanceWithArguments(_serviceName, aArguments); + } + + // Methods + public String getImplementationName( ) throws com.sun.star.uno.RuntimeException { + return getClass().getName(); + } + + public boolean supportsService( /*IN*/String ServiceName ) throws com.sun.star.uno.RuntimeException { + return _serviceName.equals(ServiceName); + } + + public String[] getSupportedServiceNames( ) throws com.sun.star.uno.RuntimeException { + return new String[]{_serviceName}; + } + } + + ServiceManager_Option() { + super(__key, "\"[comp name]*\" the service manager to use"); + } + + void set(UnoApp unoApp, String args[], int index[]) throws Exception { + System.err.println("##### " + getClass().getName() + "set:" + unoApp + " " + args[index[0]]); + + String arg = args[index[0] ++]; + + if(arg.charAt(0) == '"') + arg = arg.substring(0, arg.length() - 1).substring(1); + + String comps[] = new String[]{arg}; + + + XMultiServiceFactory xMultiServiceFactory = unoApp._xMultiServiceFactory; + + // now use the XSet interface at the ServiceManager to add the factory of the loader + XSet xSet = (XSet) UnoRuntime.queryInterface(XSet.class, xMultiServiceFactory); + + for(int i = 0; i < comps.length; ++ i) { + Object object = new UnoApp(comps[i]).getObject(); + XSingleServiceFactory xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, + object); + if(xSingleServiceFactory == null) { + XMultiServiceFactory blaxMultiServiceFactory = (XMultiServiceFactory)UnoRuntime.queryInterface(XMultiServiceFactory.class, + object); + + String services[] = blaxMultiServiceFactory.getAvailableServiceNames(); + + for(int j = 0; j < services.length; ++ j) + xSet.insert(new MySingleServiceFactory(blaxMultiServiceFactory, services[j])); + } + else + xSet.insert(xSingleServiceFactory); + } + + unoApp._xMultiServiceFactory = xMultiServiceFactory; + } + } + + /** + * The Args option put the given objects into arg array, + * which is used when instantiating the result object. + */ + static class Args_Option extends Option { + static final String __key = "--"; + + Args_Option() { + super(__key, "the args for XInitialization"); + } + + void set(UnoApp unoApp, String args[], int index[]) throws Exception { + Object obj_args[] = new Object[args.length - index[0]]; + + int i = 0; + while(index[0] < args.length) + obj_args[i ++] = new UnoApp(args[index[0] ++]).getObject(); + + unoApp._args = obj_args; + } + } + + /** + * The help option prints a help message. + */ + static class Help_Option extends Option { + static final String __key = "-h"; + + Help_Option() { + super(__key, "this help"); + } + + void set(UnoApp unoApp, String args[], int index[]) { + System.out.println("usage: UnoApp [option]*"); + + Enumeration elements = __options.elements(); + while(elements.hasMoreElements()) { + Option option = (Option)elements.nextElement(); + System.out.println("\t" + option._key + "\t" + option._help); + } + } + } + + + // All options have to be inserted into this table + static final Hashtable __options = new Hashtable(); + static { + __options.put(Service_Option.__key, new Service_Option()); + __options.put(Import_Option.__key, new Import_Option()); + __options.put(Registry_Option.__key, new Registry_Option()); + __options.put(ServiceManager_Option.__key, new ServiceManager_Option()); + __options.put(Args_Option.__key, new Args_Option()); + __options.put(Component_Option.__key, new Component_Option()); + __options.put(Help_Option.__key, new Help_Option()); + }; + + + /** + * The is the main method, which is called from java. + */ + static public void main(String args[]) throws Exception { + // We have to do this, cause the jdb under solaris does not allow to pass + // arguments with included spaces. + String arg = mergeString(args); + + UnoApp unoApp = new UnoApp(arg); + + if(unoApp._uno_url != null) // see, if we have to export the object + export(unoApp._xMultiServiceFactory, unoApp._uno_url, unoApp.getObject()); + else + System.err.println("result: " + unoApp.getObject()); + } + + + Option _creator = null; // the creator gets set by option which provide objects + Object _context = null; // the context for object creation + Object _args[] = null; // the args for object creation + String _uno_url = null; // the url for object export + XMultiServiceFactory _xMultiServiceFactory; // the service manager for object creation + + /** + * Initializes <code>UnoApp</code>. + * If string only is one word and the does not start with "-" + * set the context with string. + * <p> + * @param string the arguments + */ + UnoApp(String string) throws Exception { + _xMultiServiceFactory = createSimpleServiceManager(); + + String args[] = parseString(string); + + if(args.length == 1 && args[0].charAt(0) != '-') + _context = string; + else + parseArgs(args); + } + + /** + * Interprets the args as a sequence of option names + * followed by option parameters. + * <p> + * @param args the arguments + */ + protected void parseArgs(String args[]) throws Exception { + int i[] = new int[1]; + while(i[0] < args.length) { + Option option = (Option)__options.get(args[i[0]]); + if(option == null) { + System.err.println("unknown option:" + args[i[0]]); + return; + } + + ++ i[0]; + + option.set(this, args, i); + } + } + + /** + * Gets the object described by this <code>unoApp</code>. + * If no creator is set, returns the context as object. + * <p> + * @return the object + */ + Object getObject () throws Exception { + Object object = null; + + if(_creator == null) + object = _context; + + else + object = _creator.create(_context, _xMultiServiceFactory, _args); + + return object; + } +} diff --git a/jut/com/sun/star/tools/uno/makefile.mk b/jut/com/sun/star/tools/uno/makefile.mk new file mode 100644 index 000000000000..56771ff789b1 --- /dev/null +++ b/jut/com/sun/star/tools/uno/makefile.mk @@ -0,0 +1,89 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: kr $ $Date: 2000-09-27 09:30:27 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (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.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + + +PRJ = ..$/..$/..$/..$/.. +PRJNAME = jurt +PACKAGE = com$/sun$/star$/tools$/uno +TARGET = com_sun_star_tools_uno + +# --- Settings ----------------------------------------------------- + +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +# --- Files -------------------------------------------------------- + +GENJAVAFILES = \ + $(MISC)$/java$/com$/sun$/star$/registry$/XRegistryKey.java \ + $(MISC)$/java$/com$/sun$/star$/uno$/Exception.java \ + $(MISC)$/java$/com$/sun$/star$/uno$/RuntimeException.java \ + $(MISC)$/java$/com$/sun$/star$/uno$/TypeClass.java \ + $(MISC)$/java$/com$/sun$/star$/uno$/Uik.java \ + $(MISC)$/java$/com$/sun$/star$/uno$/XInterface.java + +JAVACLASSFILES= \ + $(CLASSDIR)$/$(PACKAGE)$/RegistryKey.class \ + $(CLASSDIR)$/$(PACKAGE)$/UnoApp.class + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk diff --git a/jut/prj/d.lst b/jut/prj/d.lst new file mode 100644 index 000000000000..6632ae906b9e --- /dev/null +++ b/jut/prj/d.lst @@ -0,0 +1 @@ +..\%__SRC%\class\jut.jar %_DEST%\bin%_EXT%\jut.jar diff --git a/jut/util/makefile.mk b/jut/util/makefile.mk new file mode 100644 index 000000000000..08c793053dd2 --- /dev/null +++ b/jut/util/makefile.mk @@ -0,0 +1,77 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: kr $ $Date: 2000-09-27 09:30:27 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (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.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +PRJ = .. +PRJNAME = jut +TARGET = jut + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +JARCLASSDIRS = com +JARTARGET = $(TARGET).jar +JARCOMPRESS = TRUE + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk diff --git a/jut/util/makefile.pmk b/jut/util/makefile.pmk new file mode 100644 index 000000000000..4e7508992aca --- /dev/null +++ b/jut/util/makefile.pmk @@ -0,0 +1,77 @@ +#************************************************************************* +# +# $RCSfile: makefile.pmk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: kr $ $Date: 2000-09-27 09:30:27 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (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.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +JARFILES = jurt.jar juh.jar +CLASSGENDIR = $(OUT)$/classgen +#classpath if jarfiles not set +XCLASSPATH := $(XCLASSPATH)$(PATH_SEPERATOR)$(MISC)$/java +#XCLASSPATH = $(XCLASSPATH)$(PATH_SEPERATOR)$(CLASSGENDIR) +RDB = $(SOLARBINDIR)$/applicat.rdb +JAVAFILES = $(subst,$(CLASSDIR)$/$(PACKAGE)$/, $(subst,.class,.java $(JAVACLASSFILES))) + + +%.java: + javamaker -BUCR -O$(OUT)$/misc$/java $(subst,$/,. $(subst,$(OUT)$/misc$/java$/,-T $*)) $(RDB) |