summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertram Nolte <bnolte@openoffice.org>2001-11-09 08:07:28 +0000
committerBertram Nolte <bnolte@openoffice.org>2001-11-09 08:07:28 +0000
commit044e891feb7dc0ad1ca028e1230ed81ca5da810f (patch)
tree22aea32ef337b3053154639dd75a39c3fe24a24e
parenta60ad11eb28c0eeb3f90f1aa56c962e5694b161d (diff)
#87796# Added an example for a minimal UNO component.
-rw-r--r--odk/examples/java/MinimalComponent/MinimalComponent.idl73
-rw-r--r--odk/examples/java/MinimalComponent/MinimalComponent.java240
-rw-r--r--odk/examples/java/MinimalComponent/TestMinimalComponent.java51
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 );
+ }
+ }
+}