diff options
author | Bertram Nolte <bnolte@openoffice.org> | 2001-11-09 08:07:28 +0000 |
---|---|---|
committer | Bertram Nolte <bnolte@openoffice.org> | 2001-11-09 08:07:28 +0000 |
commit | 044e891feb7dc0ad1ca028e1230ed81ca5da810f (patch) | |
tree | 22aea32ef337b3053154639dd75a39c3fe24a24e | |
parent | a60ad11eb28c0eeb3f90f1aa56c962e5694b161d (diff) |
#87796# Added an example for a minimal UNO component.
3 files changed, 364 insertions, 0 deletions
diff --git a/odk/examples/java/MinimalComponent/MinimalComponent.idl b/odk/examples/java/MinimalComponent/MinimalComponent.idl new file mode 100644 index 00000000..d1484d59 --- /dev/null +++ b/odk/examples/java/MinimalComponent/MinimalComponent.idl @@ -0,0 +1,73 @@ +/************************************************************************* + * + * $RCSfile: MinimalComponent.idl,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: bnolte $ $Date: 2001-11-09 09:07:01 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ +#ifndef __org_OpenOffice_MinimalComponent_idl__ +#define __org_OpenOffice_MinimalComponent_idl__ + +#include <com/sun/star/uno/XInterface.idl> + +module org { + module OpenOffice { + service MinimalComponent { + }; + }; +}; + +#endif diff --git a/odk/examples/java/MinimalComponent/MinimalComponent.java b/odk/examples/java/MinimalComponent/MinimalComponent.java new file mode 100644 index 00000000..cf2adb79 --- /dev/null +++ b/odk/examples/java/MinimalComponent/MinimalComponent.java @@ -0,0 +1,240 @@ +/************************************************************************* + * + * $RCSfile: MinimalComponent.java,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: bnolte $ $Date: 2001-11-09 09:07:08 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser cp 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): _______________________________________ + * + * + ************************************************************************/ + +import com.sun.star.comp.loader.FactoryHelper; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.registry.XRegistryKey; +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.XTypeProvider; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.uno.Type; + +/** This class capsulates the class, that implements the minimal component, a + * factory for creating the service (<CODE>__getServiceFactory</CODE>) and a + * method, that writes the information into the given registry key + * (<CODE>__writeRegistryServiceInfo</CODE>). + * @version $Date: 2001-11-09 09:07:08 $ + * @author Bertram Nolte + */ +public class MinimalComponent { + /** This class implements the component. At least the interfaces XServiceInfo, + * XTypeProvider, and XInitialization should be provided by the service. + */ + public static class MinimalComponentImplementation implements XInitialization, + XTypeProvider, XServiceInfo { + /** The service name, that must be used to get an instance of this service. + */ + static private final String __serviceName = + "org.OpenOffice.MinimalComponent"; + + /** The service manager, that gives access to all registered services. + */ + private XMultiServiceFactory xmultiservicefactory; + + /** The constructor of the inner class has a XMultiServiceFactory parameter. + * @param xmultiservicefactoryInitialization A special service factory + * could be introduced while initializing. + */ + public MinimalComponentImplementation( + XMultiServiceFactory xmultiservicefactoryInitialization ) { + xmultiservicefactory = xmultiservicefactoryInitialization; + } + + /** This method is a member of the interface for initializing an object + * directly after its creation. + * @param object This array of arbitrary objects will be passed to the + * component after its creation. + * @throws Exception Every exception will not be handled, but will be + * passed to the caller. + */ + public void initialize( Object[] object ) + throws com.sun.star.uno.Exception { + xmultiservicefactory = ( XMultiServiceFactory ) UnoRuntime.queryInterface( + XMultiServiceFactory.class, object[ 0 ] ); + } + + /** Provides a sequence of all types (usually interface types) + * provided by the object. + * @return Sequence of all types (usually interface types) provided by the + * service. + */ + public Type[] getTypes() { + Type[] typeReturn = {}; + + try { + typeReturn = new Type[] { + new Type( XTypeProvider.class ), + new Type( XServiceInfo.class ), + new Type( XInitialization.class ) + }; + } catch( Exception exception ) { + System.err.println( exception ); + } + + return( typeReturn ); + } + + /** This method returns an array of all supported service names. + * @return Array of supported service names. + */ + public String[] getSupportedServiceNames() { + String []stringSupportedServiceNames = new String[ 1 ]; + + stringSupportedServiceNames[ 0 ] = __serviceName; + + return( stringSupportedServiceNames ); + } + + /** This method returns true, if the given service will be + * supported by the component. + * @param stringService Service name. + * @return True, if the given service name will be supported. + */ + public boolean supportsService( String stringService ) { + boolean booleanSupportsService = false; + + if ( stringService.equals( __serviceName ) ) { + booleanSupportsService = true; + } + + return( booleanSupportsService ); + } + + /** Return the class name of the component. + * @return Class name of the component. + */ + public String getImplementationName() { + return( MinimalComponentImplementation.class.getName() ); + } + + /** This method returns an array of bytes, that can be used to + * unambiguously distinguish between two sets of types, e.g. + * to realise hashing functionality when the object is introspected. + * Two objects that return the same ID also have to return + * the same set of types in getTypes(). If an unique + * implementation Id cannot be provided this method has to + * return an empty sequence. Important: If the object + * aggregates other objects the ID has to be unique for the + * whole combination of objects. + * @return Array of bytes, in order to distinguish between two sets. + */ + public byte[] getImplementationId() { + byte[] byteReturn = {}; + + try { + byteReturn = new String( "" + this.hashCode() ).getBytes(); + } catch( Exception exception ) { + System.err.println( exception ); + } + + return( byteReturn ); + } + } + + + /** 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. + * @see com.sun.star.comp.loader.JavaLoader# + * @param stringImplementationName The implementation name of the component. + * @param xmultiservicefactory The service manager, who gives access to every + * known service. + * @param xregistrykey Makes structural information (except regarding tree + * structures) of a single + * registry key accessible. + */ + public static XSingleServiceFactory __getServiceFactory( + String stringImplementationName, + XMultiServiceFactory xmultiservicefactory, + XRegistryKey xregistrykey ) { + XSingleServiceFactory xsingleservicefactory = null; + + if ( stringImplementationName.equals( + MinimalComponentImplementation.class.getName() ) ) + xsingleservicefactory = FactoryHelper.getServiceFactory( + MinimalComponentImplementation.class, + MinimalComponentImplementation.__serviceName, + xmultiservicefactory, + xregistrykey ); + + return xsingleservicefactory; + } + + /** Writes the service information into the given registry key. + * This method is called by the <code>JavaLoader</code>. + * @return returns true if the operation succeeded + * @see com.sun.star.comp.loader.JavaLoader# + * @param xregistrykey Makes structural information (except regarding tree + * structures) of a single + * registry key accessible. + */ + public static boolean __writeRegistryServiceInfo( + XRegistryKey xregistrykey ) { + return FactoryHelper.writeRegistryServiceInfo( + MinimalComponentImplementation.class.getName(), + MinimalComponentImplementation.__serviceName, + xregistrykey ); + } +} diff --git a/odk/examples/java/MinimalComponent/TestMinimalComponent.java b/odk/examples/java/MinimalComponent/TestMinimalComponent.java new file mode 100644 index 00000000..d6ebcd53 --- /dev/null +++ b/odk/examples/java/MinimalComponent/TestMinimalComponent.java @@ -0,0 +1,51 @@ +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.container.XSet; +import com.sun.star.lang.XServiceInfo; + +import MinimalComponent; + + +public class TestMinimalComponent { + public static void main(String args[]) { + try { + /* Bootstraps a servicemanager with the jurt base components + registered */ + XMultiServiceFactory xmultiservicefactory = + com.sun.star.comp.helper.Bootstrap.createSimpleServiceManager(); + + // Querying for the interface XSet on XMultiServiceFactory + XSet xsetMultiServiceFactory = ( XSet ) UnoRuntime.queryInterface( + XSet.class, xmultiservicefactory ); + + // Getting the XSingleServiceFactory for the minimal component + XSingleServiceFactory xsingleservicefactoryMinimalComponent = + MinimalComponent.__getServiceFactory( + "MinimalComponent$MinimalComponentImplementation", xmultiservicefactory, + null ); + + // Inserting the XSingleServiceFactory into the container + xsetMultiServiceFactory.insert( xsingleservicefactoryMinimalComponent ); + + // Creating an instance of the minimal component + Object objectMinimalComponent = xmultiservicefactory.createInstance( + "org.OpenOffice.MinimalComponent" ); + + XServiceInfo xserviceinfoMinimalComponent = ( XServiceInfo ) + UnoRuntime.queryInterface( XServiceInfo.class, + objectMinimalComponent ); + + System.out.println( + xserviceinfoMinimalComponent.getImplementationName() ); + + // Removing the XSingleServiceFactory of the minimal Component from the container + xsetMultiServiceFactory.remove( xsingleservicefactoryMinimalComponent ); + + System.exit(0); + } + catch( Exception exception ) { + System.err.println( exception ); + } + } +} |