diff options
author | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:57:40 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:57:40 +0100 |
commit | 2716f7dce26f16a2b677c178aa7d01cea096ae47 (patch) | |
tree | 9e9f67205cd5b72f1031721273e1534a3a1e5b0f /javaunohelper/com/sun | |
parent | 10ac9e750447fd57e3cef7993b0ad6c6538d6269 (diff) |
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'javaunohelper/com/sun')
29 files changed, 0 insertions, 6851 deletions
diff --git a/javaunohelper/com/sun/star/comp/JavaUNOHelperServices.java b/javaunohelper/com/sun/star/comp/JavaUNOHelperServices.java deleted file mode 100644 index 7df6497a1..000000000 --- a/javaunohelper/com/sun/star/comp/JavaUNOHelperServices.java +++ /dev/null @@ -1,64 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.comp; - -import com.sun.star.lib.uno.helper.Factory; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.comp.juhtest.SmoketestCommandEnvironment; - - -/** This class is the registration class for all services in this module. - * - * Note that not all files which can be used as service need to be registered - * by this class. - */ -public class JavaUNOHelperServices { - - static private final String __service_smoketestCommandEnv = - "com.sun.star.deployment.test.SmoketestCommandEnvironment"; - - /** - * Gives a factory for creating the service. - * This method is called by the <code>JavaLoader</code> - * <p> - * @return returns a <code>XSingleComponentFactory</code> for creating - * the component - * @param sImplName the name of the implementation for which a - * service is desired - * @see com.sun.star.comp.loader.JavaLoader - */ - public static XSingleComponentFactory __getComponentFactory(String sImplName) - { - XSingleComponentFactory xFactory = null; - - if ( sImplName.equals( SmoketestCommandEnvironment.class.getName() ) ) - xFactory = Factory.createComponentFactory(SmoketestCommandEnvironment.class, - SmoketestCommandEnvironment.getServiceNames()); - - return xFactory; - } -} diff --git a/javaunohelper/com/sun/star/comp/helper/Bootstrap.java b/javaunohelper/com/sun/star/comp/helper/Bootstrap.java deleted file mode 100644 index 3156bbabb..000000000 --- a/javaunohelper/com/sun/star/comp/helper/Bootstrap.java +++ /dev/null @@ -1,329 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.comp.helper; - -import com.sun.star.bridge.UnoUrlResolver; -import com.sun.star.bridge.XUnoUrlResolver; -import com.sun.star.comp.loader.JavaLoader; -import com.sun.star.container.XSet; -import com.sun.star.lang.XInitialization; -import com.sun.star.lang.XMultiServiceFactory; -import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.lib.util.NativeLibraryLoader; -import com.sun.star.loader.XImplementationLoader; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Random; - -/** Bootstrap offers functionality to obtain a context or simply - a service manager. - The service manager can create a few basic services, whose implementations are: - <ul> - <li>com.sun.star.comp.loader.JavaLoader</li> - <li>com.sun.star.comp.urlresolver.UrlResolver</li> - <li>com.sun.star.comp.bridgefactory.BridgeFactory</li> - <li>com.sun.star.comp.connections.Connector</li> - <li>com.sun.star.comp.connections.Acceptor</li> - <li>com.sun.star.comp.servicemanager.ServiceManager</li> - </ul> - - Other services can be inserted into the service manager by - using its XSet interface: - <pre> - XSet xSet = UnoRuntime.queryInterface( XSet.class, aMultiComponentFactory ); - // insert the service manager - xSet.insert( aSingleComponentFactory ); - </pre> -*/ -public class Bootstrap { - - private static void insertBasicFactories( - XSet xSet, XImplementationLoader xImpLoader ) - throws Exception - { - // insert the factory of the loader - xSet.insert( xImpLoader.activate( - "com.sun.star.comp.loader.JavaLoader", null, null, null ) ); - - // insert the factory of the URLResolver - xSet.insert( xImpLoader.activate( - "com.sun.star.comp.urlresolver.UrlResolver", null, null, null ) ); - - // insert the bridgefactory - xSet.insert( xImpLoader.activate( - "com.sun.star.comp.bridgefactory.BridgeFactory", null, null, null ) ); - - // insert the connector - xSet.insert( xImpLoader.activate( - "com.sun.star.comp.connections.Connector", null, null, null ) ); - - // insert the acceptor - xSet.insert( xImpLoader.activate( - "com.sun.star.comp.connections.Acceptor", null, null, null ) ); - } - - /** Bootstraps an initial component context with service manager and basic - jurt components inserted. - @param context_entries the hash table contains mappings of entry names (type string) to - context entries (type class ComponentContextEntry). - @return a new context. - */ - static public XComponentContext createInitialComponentContext( Hashtable context_entries ) - throws Exception - { - XImplementationLoader xImpLoader = UnoRuntime.queryInterface( - XImplementationLoader.class, new JavaLoader() ); - - // Get the factory of the ServiceManager - XSingleComponentFactory smgr_fac = UnoRuntime.queryInterface( - XSingleComponentFactory.class, xImpLoader.activate( - "com.sun.star.comp.servicemanager.ServiceManager", null, null, null ) ); - - // Create an instance of the ServiceManager - XMultiComponentFactory xSMgr = UnoRuntime.queryInterface( - XMultiComponentFactory.class, smgr_fac.createInstanceWithContext( null ) ); - - // post init loader - XInitialization xInit = UnoRuntime.queryInterface( - XInitialization.class, xImpLoader ); - Object[] args = new Object [] { xSMgr }; - xInit.initialize( args ); - - // initial component context - if (context_entries == null) - context_entries = new Hashtable( 1 ); - // add smgr - context_entries.put( - "/singletons/com.sun.star.lang.theServiceManager", - new ComponentContextEntry( null, xSMgr ) ); - // ... xxx todo: add standard entries - XComponentContext xContext = new ComponentContext( context_entries, null ); - - // post init smgr - xInit = UnoRuntime.queryInterface( - XInitialization.class, xSMgr ); - args = new Object [] { null, xContext }; // no registry, default context - xInit.initialize( args ); - - XSet xSet = UnoRuntime.queryInterface( XSet.class, xSMgr ); - // insert the service manager - xSet.insert( smgr_fac ); - // and basic jurt factories - insertBasicFactories( xSet, xImpLoader ); - - return xContext; - } - - /** - * Bootstraps a servicemanager with the jurt base components registered. - * <p> - * @return a freshly boostrapped service manager - * @see com.sun.star.lang.ServiceManager - */ - static public XMultiServiceFactory createSimpleServiceManager() throws Exception - { - return UnoRuntime.queryInterface( - XMultiServiceFactory.class, createInitialComponentContext( null ).getServiceManager() ); - } - - - /** Bootstraps the initial component context from a native UNO installation. - - @see "cppuhelper/defaultBootstrap_InitialComponentContext()" - */ - static public final XComponentContext defaultBootstrap_InitialComponentContext() - throws Exception - { - return defaultBootstrap_InitialComponentContext( null, null ); - } - /** Bootstraps the initial component context from a native UNO installation. - - @param ini_file - ini_file (may be null: uno.rc besides cppuhelper lib) - @param bootstrap_parameters - bootstrap parameters (maybe null) - - @see "cppuhelper/defaultBootstrap_InitialComponentContext()" - */ - static public final XComponentContext defaultBootstrap_InitialComponentContext( - String ini_file, Hashtable bootstrap_parameters ) - throws Exception - { - // jni convenience: easier to iterate over array than calling Hashtable - String pairs [] = null; - if (null != bootstrap_parameters) - { - pairs = new String [ 2 * bootstrap_parameters.size() ]; - Enumeration keys = bootstrap_parameters.keys(); - int n = 0; - while (keys.hasMoreElements()) - { - String name = (String)keys.nextElement(); - pairs[ n++ ] = name; - pairs[ n++ ] = (String)bootstrap_parameters.get( name ); - } - } - - if (! m_loaded_juh) - { - NativeLibraryLoader.loadLibrary( Bootstrap.class.getClassLoader(), "juh" ); - m_loaded_juh = true; - } - return UnoRuntime.queryInterface( - XComponentContext.class, - cppuhelper_bootstrap( - ini_file, pairs, Bootstrap.class.getClassLoader() ) ); - } - - static private boolean m_loaded_juh = false; - static private native Object cppuhelper_bootstrap( - String ini_file, String bootstrap_parameters [], ClassLoader loader ) - throws Exception; - - /** - * Bootstraps the component context from a UNO installation. - * - * @return a bootstrapped component context. - * - * @since UDK 3.1.0 - */ - public static final XComponentContext bootstrap() - throws BootstrapException { - - XComponentContext xContext = null; - - try { - // create default local component context - XComponentContext xLocalContext = - createInitialComponentContext( null ); - if ( xLocalContext == null ) - throw new BootstrapException( "no local component context!" ); - - // find office executable relative to this class's class loader - String sOffice = - System.getProperty( "os.name" ).startsWith( "Windows" ) ? - "soffice.exe" : "soffice"; - File fOffice = NativeLibraryLoader.getResource( - Bootstrap.class.getClassLoader(), sOffice ); - if ( fOffice == null ) - throw new BootstrapException( "no office executable found!" ); - - // create random pipe name - String sPipeName = "uno" + - Long.toString( (new Random()).nextLong() & 0x7fffffffffffffffL ); - - // create call with arguments - String[] cmdArray = new String[7]; - cmdArray[0] = fOffice.getPath(); - cmdArray[1] = "-nologo"; - cmdArray[2] = "-nodefault"; - cmdArray[3] = "-norestore"; - cmdArray[4] = "-nocrashreport"; - cmdArray[5] = "-nolockcheck"; - cmdArray[6] = "-accept=pipe,name=" + sPipeName + ";urp;"; - - // start office process - Process p = Runtime.getRuntime().exec( cmdArray ); - pipe( p.getInputStream(), System.out, "CO> " ); - pipe( p.getErrorStream(), System.err, "CE> " ); - - // initial service manager - XMultiComponentFactory xLocalServiceManager = - xLocalContext.getServiceManager(); - if ( xLocalServiceManager == null ) - throw new BootstrapException( "no initial service manager!" ); - - // create a URL resolver - XUnoUrlResolver xUrlResolver = - UnoUrlResolver.create( xLocalContext ); - - // connection string - String sConnect = "uno:pipe,name=" + sPipeName + - ";urp;StarOffice.ComponentContext"; - - // wait until office is started - for (int i = 0;; ++i) { - try { - // try to connect to office - Object context = xUrlResolver.resolve( sConnect ); - xContext = UnoRuntime.queryInterface( - XComponentContext.class, context); - if ( xContext == null ) - throw new BootstrapException( "no component context!" ); - break; - } catch ( com.sun.star.connection.NoConnectException ex ) { - // Wait 500 ms, then try to connect again, but do not wait - // longer than 5 min (= 600 * 500 ms) total: - if (i == 600) { - throw new BootstrapException(ex.toString()); - } - Thread.currentThread().sleep( 500 ); - } - } - } catch ( BootstrapException e ) { - throw e; - } catch ( java.lang.RuntimeException e ) { - throw e; - } catch ( java.lang.Exception e ) { - throw new BootstrapException( e ); - } - - return xContext; - } - - private static void pipe( - final InputStream in, final PrintStream out, final String prefix ) { - - new Thread( "Pipe: " + prefix) { - public void run() { - BufferedReader r = new BufferedReader( - new InputStreamReader( in ) ); - try { - for ( ; ; ) { - String s = r.readLine(); - if ( s == null ) { - break; - } - out.println( prefix + s ); - } - } catch ( java.io.IOException e ) { - e.printStackTrace( System.err ); - } - } - }.start(); - } -} diff --git a/javaunohelper/com/sun/star/comp/helper/BootstrapException.java b/javaunohelper/com/sun/star/comp/helper/BootstrapException.java deleted file mode 100644 index 3136358c2..000000000 --- a/javaunohelper/com/sun/star/comp/helper/BootstrapException.java +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.comp.helper; - -/** - * BootstrapException is a checked exception that wraps an exception - * thrown by the original target. - * - * @since UDK 3.1.0 - */ -public class BootstrapException extends java.lang.Exception { - - /** - * This field holds the target exception. - */ - private Exception m_target = null; - - /** - * Constructs a <code>BootstrapException</code> with <code>null</code> as - * the target exception. - */ - public BootstrapException() { - super(); - } - - /** - * Constructs a <code>BootstrapException</code> with the specified - * detail message. - * - * @param message the detail message - */ - public BootstrapException( String message ) { - super( message ); - } - - /** - * Constructs a <code>BootstrapException</code> with the specified - * detail message and a target exception. - * - * @param message the detail message - * @param target the target exception - */ - public BootstrapException( String message, Exception target ) { - super( message ); - m_target = target; - } - - /** - * Constructs a <code>BootstrapException</code> with a target exception. - * - * @param target the target exception - */ - public BootstrapException( Exception target ) { - super(); - m_target = target; - } - - /** - * Get the thrown target exception. - * - * @return the target exception - */ - public Exception getTargetException() { - return m_target; - } -} diff --git a/javaunohelper/com/sun/star/comp/helper/ComponentContext.java b/javaunohelper/com/sun/star/comp/helper/ComponentContext.java deleted file mode 100644 index 27c57adc5..000000000 --- a/javaunohelper/com/sun/star/comp/helper/ComponentContext.java +++ /dev/null @@ -1,310 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.comp.helper; - -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.Any; - -import com.sun.star.uno.XComponentContext; -import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.lang.XComponent; -import com.sun.star.lang.XEventListener; -import com.sun.star.lang.EventObject; - -import java.util.Hashtable; -import java.util.Enumeration; -import java.util.Vector; - - -//================================================================================================== -class Disposer implements XEventListener -{ - private XComponent m_xComp; - - //---------------------------------------------------------------------------------------------- - Disposer( XComponent xComp ) - { - m_xComp = xComp; - } - //______________________________________________________________________________________________ - public void disposing( EventObject Source ) - { - m_xComp.dispose(); - } -} - -/** Component context implementation. -*/ -public class ComponentContext implements XComponentContext, XComponent -{ - private static final boolean DEBUG = false; - private static final String SMGR_NAME = "/singletons/com.sun.star.lang.theServiceManager"; - private static final String TDMGR_NAME = "/singletons/com.sun.star.reflection.theTypeDescriptionManager"; - - private Hashtable m_table; - private XComponentContext m_xDelegate; - - private XMultiComponentFactory m_xSMgr; - private boolean m_bDisposeSMgr; - - private Vector m_eventListener; - - /** Ctor to create a component context passing a hashtable for values and a delegator - reference. Entries of the passed hashtable are either direct values or - ComponentContextEntry objects. - - @param table - entries - @param xDelegate - if values are not found, request is delegated to this object - */ - public ComponentContext( Hashtable table, XComponentContext xDelegate ) - { - m_eventListener = new Vector(); - m_table = table; - m_xDelegate = xDelegate; - m_xSMgr = null; - m_bDisposeSMgr = false; - - Object o = table.get( SMGR_NAME ); - if (o != null) - { - if (o instanceof ComponentContextEntry) - { - o = ((ComponentContextEntry)o).m_value; - } - m_xSMgr = UnoRuntime.queryInterface( - XMultiComponentFactory.class, o ); - } - if (m_xSMgr != null) - { - m_bDisposeSMgr = true; - } - else if (m_xDelegate != null) - { - m_xSMgr = m_xDelegate.getServiceManager(); - } - - // listen for delegate - XComponent xComp = UnoRuntime.queryInterface( - XComponent.class, m_xDelegate ); - if (xComp != null) - { - xComp.addEventListener( new Disposer( this ) ); - } - } - - // XComponentContext impl - //______________________________________________________________________________________________ - public Object getValueByName( String rName ) - { - Object o = m_table.get( rName ); - if (o != null) - { - if (o instanceof ComponentContextEntry) - { - ComponentContextEntry entry = (ComponentContextEntry)o; - if (entry.m_lateInit != null) - { - Object xInstance = null; - - try - { - String serviceName = (String)entry.m_lateInit; - if (serviceName != null) - { - if (m_xSMgr != null) - { - xInstance = m_xSMgr.createInstanceWithContext( serviceName, this ); - } - else - { - if (DEBUG) - System.err.println( "### no service manager instance for late init of singleton instance \"" + rName + "\"!" ); - } - } - else - { - XSingleComponentFactory xCompFac = - UnoRuntime.queryInterface( - XSingleComponentFactory.class, entry.m_lateInit ); - if (xCompFac != null) - { - xInstance = xCompFac.createInstanceWithContext( this ); - } - else - { - if (DEBUG) - System.err.println( "### neither service name nor service factory given for late init of singleton instance \"" + rName + "\"!" ); - } - } - } - catch (com.sun.star.uno.Exception exc) - { - if (DEBUG) - System.err.println( "### exception occurred on late init of singleton instance \"" + rName + "\": " + exc.getMessage() ); - } - - if (xInstance != null) - { - synchronized (entry) - { - if (entry.m_lateInit != null) - { - entry.m_value = xInstance; - entry.m_lateInit = null; - } - else // inited in the meantime - { - // dispose fresh service instance - XComponent xComp = UnoRuntime.queryInterface( - XComponent.class, xInstance ); - if (xComp != null) - { - xComp.dispose(); - } - } - } - } - else - { - if (DEBUG) - System.err.println( "### failed late init of singleton instance \"" + rName + "\"!" ); - } - } - return entry.m_value; - } - else // direct value in map - { - return o; - } - } - else if (m_xDelegate != null) - { - return m_xDelegate.getValueByName( rName ); - } - else - { - return Any.VOID; - } - } - //______________________________________________________________________________________________ - public XMultiComponentFactory getServiceManager() - { - return m_xSMgr; - } - - // XComponent impl - //______________________________________________________________________________________________ - public void dispose() - { - if (DEBUG) - System.err.print( "> disposing context " + this ); - - // fire events - EventObject evt = new EventObject( this ); - Enumeration eventListener = m_eventListener.elements(); - while (eventListener.hasMoreElements()) - { - XEventListener listener = (XEventListener)eventListener.nextElement(); - listener.disposing( evt ); - } - m_eventListener.removeAllElements(); - - XComponent tdmgr = null; - // dispose values, then service manager, then typdescription manager - Enumeration keys = m_table.keys(); - while (keys.hasMoreElements()) - { - String name = (String)keys.nextElement(); - if (! name.equals( SMGR_NAME )) - { - Object o = m_table.get( name ); - if (o instanceof ComponentContextEntry) - { - o = ((ComponentContextEntry)o).m_value; - } - - XComponent xComp = UnoRuntime.queryInterface( XComponent.class, o ); - if (xComp != null) - { - if (name.equals( TDMGR_NAME )) - { - tdmgr = xComp; - } - else - { - xComp.dispose(); - } - } - } - } - m_table.clear(); - - // smgr - if (m_bDisposeSMgr) - { - XComponent xComp = UnoRuntime.queryInterface( - XComponent.class, m_xSMgr ); - if (xComp != null) - { - xComp.dispose(); - } - } - m_xSMgr = null; - - // tdmgr - if (tdmgr != null) - { - tdmgr.dispose(); - } - - if (DEBUG) - System.err.println( "... finished" ); - } - //______________________________________________________________________________________________ - public void addEventListener( XEventListener xListener ) - { - if (xListener == null) - throw new com.sun.star.uno.RuntimeException( "Listener must not be null" ); - if (m_eventListener.contains( xListener )) - throw new com.sun.star.uno.RuntimeException( "Listener already registred." ); - - m_eventListener.addElement( xListener ); - } - //______________________________________________________________________________________________ - public void removeEventListener( XEventListener xListener ) - { - if (xListener == null) - throw new com.sun.star.uno.RuntimeException( "Listener must not be null" ); - if (! m_eventListener.contains( xListener )) - throw new com.sun.star.uno.RuntimeException( "Listener is not registered." ); - - m_eventListener.removeElement( xListener ); - } -} diff --git a/javaunohelper/com/sun/star/comp/helper/ComponentContextEntry.java b/javaunohelper/com/sun/star/comp/helper/ComponentContextEntry.java deleted file mode 100644 index 48e999d57..000000000 --- a/javaunohelper/com/sun/star/comp/helper/ComponentContextEntry.java +++ /dev/null @@ -1,73 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.comp.helper; - -/** Component context entry for constructing ComponentContext objects. - <p> - A ComponentContextEntry is separated into a late-init and direct-value - purpose. - The first one is commonly used for singleton objects of the component - context, that are raised on first-time retrieval of the key. - You have to pass a com.sun.star.lang.XSingleComponentFactory - or string (=> service name) object for this. - </p> -*/ -public class ComponentContextEntry -{ - /** if late init of service instance, set service name (String) or - component factory (XSingleComponentFactory), null otherwise - */ - public Object m_lateInit; - /** set entry value - */ - public Object m_value; - - /** Creating a late-init singleton entry component context entry. - The second parameter will be ignored and overwritten during - instanciation of the singleton instance. - - @param lateInit - object factory or service string - @param value - pass null (dummy separating from second ctor signature) - */ - public ComponentContextEntry( Object lateInit, Object value ) - { - this.m_lateInit = lateInit; - this.m_value = value; - } - /** Creating a direct value component context entry. - - @param value - pass null - */ - public ComponentContextEntry( Object value ) - { - this.m_lateInit = null; - this.m_value = value; - } -} diff --git a/javaunohelper/com/sun/star/comp/helper/RegistryServiceFactory.java b/javaunohelper/com/sun/star/comp/helper/RegistryServiceFactory.java deleted file mode 100644 index c748187ba..000000000 --- a/javaunohelper/com/sun/star/comp/helper/RegistryServiceFactory.java +++ /dev/null @@ -1,168 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -package com.sun.star.comp.helper; - - -import com.sun.star.lang.XMultiServiceFactory; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.RuntimeException; - -/** The class provides a set of methods which create instances of the - com.sun.star.lang.RegistryServiceManager service. - - @deprecated use class Bootstrap instead -*/ -public class RegistryServiceFactory { - static { - System.loadLibrary("juh"); - } - - private static native Object createRegistryServiceFactory( - String writeRegistryFile, - String readRegistryFile, - boolean readOnly, - ClassLoader loader); - - /** - * This bootstraps an initial service factory working on a registry. If the first or both - * parameters contain a value then the service factory is initialized with a simple registry - * or a nested registry. Otherwise the service factory must be initialized later with a valid - * registry. - *<BR> - * @param writeRegistryFile file name of the simple registry or the first registry file of - * the nested registry which will be opened with read/write rights. This - * file will be created if necessary. - * @param readRegistryFile file name of the second registry file of the nested registry - * which will be opened with readonly rights. - * @return a new RegistryServiceFactory. - */ - public static XMultiServiceFactory create(String writeRegistryFile, String readRegistryFile) - throws com.sun.star.uno.Exception - { - return create(writeRegistryFile, readRegistryFile, false); - } - - /** - * This bootstraps an initial service factory working on a registry. If the first or both - * parameters contain a value then the service factory is initialized with a simple registry - * or a nested registry. Otherwise the service factory must be initialized later with a valid - * registry. - *<BR> - * @param writeRegistryFile file name of the simple registry or the first registry file of - * the nested registry which will be opened with read/write rights. This - * file will be created if necessary. - * @param readRegistryFile file name of the second registry file of the nested registry - * which will be opened with readonly rights. - * @param readOnly flag which specify that the first registry file will be opened with - * readonly rights. Default is FALSE. If this flag is used the registry - * will not be created if not exist. - * - * @return a new RegistryServiceFactory - */ - public static XMultiServiceFactory create(String writeRegistryFile, String readRegistryFile, boolean readOnly) - throws com.sun.star.uno.Exception - { - // Ensure that we are on a native threads vm - // (binary UNO does use native threads). - String vm_info = System.getProperty("java.vm.info"); - if(vm_info != null && vm_info.indexOf("green") != -1) - throw new RuntimeException(RegistryServiceFactory.class.toString() + ".create - can't use binary UNO with green threads"); - - - if (writeRegistryFile == null && readRegistryFile == null) - throw new com.sun.star.uno.Exception("No registry is specified!"); - -// if (writeRegistryFile != null) { -// java.io.File file = new java.io.File(writeRegistryFile); - -// if (file.exists()) { -// if (!file.isFile()) -// throw new com.sun.star.uno.Exception(writeRegistryFile + " is not a file!"); -// } else -// throw new com.sun.star.uno.Exception(writeRegistryFile + " doese not exist!"); -// } - -// if (readRegistryFile != null) { -// java.io.File file = new java.io.File(readRegistryFile); - -// if (file.exists()) { -// if (!file.isFile()) -// throw new com.sun.star.uno.Exception(readRegistryFile + " is not a file!"); -// } else -// throw new com.sun.star.uno.Exception(readRegistryFile + " doese not exist!"); -// } - - Object obj = createRegistryServiceFactory( - writeRegistryFile, readRegistryFile, readOnly, - RegistryServiceFactory.class.getClassLoader() ); - return UnoRuntime.queryInterface( - XMultiServiceFactory.class, obj ); - } - - /** - * This bootstraps an initial service factory working on a registry file. - *<BR> - * @param registryFile file name of the registry to use/ create; if this is an empty - * string, the default registry is used instead - * - * @return a new RegistryServiceFactory. - */ - public static XMultiServiceFactory create(String registryFile) - throws com.sun.star.uno.Exception - { - return create(registryFile, null, false); - } - - /** - * This bootstraps an initial service factory working on a registry file. - *<BR> - * @param registryFile file name of the registry to use/ create; if this is an empty - * string, the default registry is used instead - * @param readOnly flag which specify that the registry file will be opened with - * readonly rights. Default is FALSE. If this flag is used the registry - * will not be created if not exist. - * - * @return a new RegistryServiceFactory. - */ - public static XMultiServiceFactory create(String registryFile, boolean readOnly) - throws com.sun.star.uno.Exception - { - return create(registryFile, null, readOnly); - } - - /** - * This bootstraps a service factory without initialize a registry. - *<BR> - * @return a new RegistryServiceFactory. - */ - public static XMultiServiceFactory create() throws com.sun.star.uno.Exception { - return create( null, null, false ); - } -} - diff --git a/javaunohelper/com/sun/star/comp/helper/SharedLibraryLoader.java b/javaunohelper/com/sun/star/comp/helper/SharedLibraryLoader.java deleted file mode 100644 index 590c6251f..000000000 --- a/javaunohelper/com/sun/star/comp/helper/SharedLibraryLoader.java +++ /dev/null @@ -1,159 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.comp.helper; - -import com.sun.star.uno.UnoRuntime; -import com.sun.star.lang.XMultiServiceFactory; -import com.sun.star.lang.XSingleServiceFactory; -import com.sun.star.registry.XRegistryKey; - -/** - * @deprecated use class Bootstrap bootstrapping a native UNO installation - * and use the shared library loader service. - * - * The <code>SharedLibraryLoader</code> class provides the functionality of the <code>com.sun.star.loader.SharedLibrary</code> - * service. - * <p> - * @see com.sun.star.loader.SharedLibrary - * @see "com.sun.star.comp.servicemanager.ServiceManager" - * @see com.sun.star.lang.ServiceManager - */ -public class SharedLibraryLoader { - /** - * The default library which contains the SharedLibraryLoader component - */ - public static final String DEFAULT_LIBRARY = "shlibloader.uno"; - - /** - * The default implementation name - */ - public static final String DEFAULT_IMPLEMENTATION = "com.sun.star.comp.stoc.DLLComponentLoader"; - - static { - System.loadLibrary("juh"); - } - - private static native boolean component_writeInfo( - String libName, XMultiServiceFactory smgr, XRegistryKey regKey, - ClassLoader loader ); - - private static native Object component_getFactory( - String libName, String implName, XMultiServiceFactory smgr, - XRegistryKey regKey, ClassLoader loader ); - - /** - * Supplies the ServiceFactory of the default SharedLibraryLoader. - * The defaults are "shlibloader.uno" - * for the library and "com.sun.star.comp.stoc.DLLComponentLoader" - * for the component name. - * <p> - * @return the factory for the "com.sun.star.comp.stoc.DLLComponentLoader" component. - * @param smgr the ServiceManager - * @param regKey the root registry key - * @see com.sun.star.loader.SharedLibrary - * @see com.sun.star.lang.ServiceManager - * @see com.sun.star.registry.RegistryKey - */ - public static XSingleServiceFactory getServiceFactory( - XMultiServiceFactory smgr, - XRegistryKey regKey ) - { - return UnoRuntime.queryInterface( - XSingleServiceFactory.class, - component_getFactory( - DEFAULT_LIBRARY, DEFAULT_IMPLEMENTATION, smgr, regKey, - SharedLibraryLoader.class.getClassLoader() ) ); - } - - /** - * Loads and returns a specific factory for a given library and implementation name. - * <p> - * @return the factory of the component - * @param libName the name of the shared library - * @param impName the implementation name of the component - * @param smgr the ServiceManager - * @param regKey the root registry key - * @see com.sun.star.loader.SharedLibrary - * @see com.sun.star.lang.ServiceManager - * @see com.sun.star.registry.RegistryKey - */ - public static XSingleServiceFactory getServiceFactory( - String libName, - String impName, - XMultiServiceFactory smgr, - XRegistryKey regKey ) - { - return UnoRuntime.queryInterface( - XSingleServiceFactory.class, - component_getFactory( - libName, impName, smgr, regKey, - SharedLibraryLoader.class.getClassLoader() ) ); - } - - /** - * Registers the SharedLibraryLoader under a RegistryKey. - * <p> - * @return true if the registration was successfull - otherwise false - * @param smgr the ServiceManager - * @param regKey the root key under that the component should be registered - * @see com.sun.star.loader.SharedLibrary - * @see com.sun.star.lang.ServiceManager - * @see com.sun.star.registry.RegistryKey - */ - public static boolean writeRegistryServiceInfo( - com.sun.star.lang.XMultiServiceFactory smgr, - com.sun.star.registry.XRegistryKey regKey ) - { - return component_writeInfo( - DEFAULT_LIBRARY, smgr, regKey, - SharedLibraryLoader.class.getClassLoader() ); - } - - /** - * Registers the SharedLibraryLoader under a RegistryKey. - * <p> - * @return true if the registration was successfull - otherwise false - * @param libName name of the shared library - * @param smgr the ServiceManager - * @param regKey the root key under that the component should be registered - * @see com.sun.star.loader.SharedLibrary - * @see com.sun.star.lang.ServiceManager - * @see com.sun.star.registry.RegistryKey - */ - public static boolean writeRegistryServiceInfo( - String libName, - com.sun.star.lang.XMultiServiceFactory smgr, - com.sun.star.registry.XRegistryKey regKey ) - - throws com.sun.star.registry.InvalidRegistryException, - com.sun.star.uno.RuntimeException - { - return component_writeInfo( - libName, smgr, regKey, SharedLibraryLoader.class.getClassLoader() ); - } -} - diff --git a/javaunohelper/com/sun/star/comp/helper/UnoInfo.java b/javaunohelper/com/sun/star/comp/helper/UnoInfo.java deleted file mode 100644 index 896974b9e..000000000 --- a/javaunohelper/com/sun/star/comp/helper/UnoInfo.java +++ /dev/null @@ -1,115 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.comp.helper; - -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; - -/** - * UnoInfo offers functionality to obtain the UNO jar files. - */ -public final class UnoInfo { - - /** - * do not instantiate - */ - private UnoInfo() {} - - /** - * Gets the URL base. - * - * @return the URL base - */ - private static String getBase() { - - final String JUHJAR = "/juh.jar"; - - String base = null; - - URLClassLoader cl = (URLClassLoader) UnoInfo.class.getClassLoader(); - URL[] urls = cl.getURLs(); - for ( int i = 0; i < urls.length; i++ ) { - String url = urls[i].toString(); - if ( url.endsWith( JUHJAR ) ) - { - int index = url.lastIndexOf( JUHJAR ); - if ( index >= 0 ) { - base = url.substring( 0, index + 1 ); - break; - } - } - } - - return base; - } - - /** - * Gets a list of URLs for the given jar files. - * - * @return the list of URLs - */ - private static URL[] getURLs( String[] jarFileNames ) { - - URL[] jars = new URL[jarFileNames.length]; - String base = getBase(); - for ( int i = 0; i < jarFileNames.length; i++ ) { - try { - jars[i] = new URL( base + jarFileNames[i] ); - } catch ( MalformedURLException e ) { - return null; - } - } - - return jars; - } - - /** - * Gets the UNO jar files. - * - * @return the UNO jar files - */ - public static URL[] getJars() { - - String[] jarFileNames = new String[] { - "jurt.jar", - "ridl.jar", - "juh.jar" }; - - return getURLs( jarFileNames ); - } - - /** - * Gets the extra UNO types. - * - * @return the extra UNO types - */ - public static URL[] getExtraTypes() { - return new URL[0]; - } -} diff --git a/javaunohelper/com/sun/star/comp/helper/makefile.mk b/javaunohelper/com/sun/star/comp/helper/makefile.mk deleted file mode 100644 index 3752abc7d..000000000 --- a/javaunohelper/com/sun/star/comp/helper/makefile.mk +++ /dev/null @@ -1,54 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org 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 version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/..$/..$/..$/.. - -PRJNAME = juhelper -PACKAGE = com$/sun$/star$/comp$/helper -TARGET = com_sun_star_comp_helper - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk -.INCLUDE: $(PRJ)$/util$/settings.pmk - -# --- Files -------------------------------------------------------- - -JAVAFILES= \ - ComponentContextEntry.java \ - ComponentContext.java \ - Bootstrap.java \ - SharedLibraryLoader.java \ - RegistryServiceFactory.java \ - BootstrapException.java \ - UnoInfo.java - -JAVACLASSFILES= $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class) - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/javaunohelper/com/sun/star/comp/juhtest/SmoketestCommandEnvironment.java b/javaunohelper/com/sun/star/comp/juhtest/SmoketestCommandEnvironment.java deleted file mode 100644 index a28d3a145..000000000 --- a/javaunohelper/com/sun/star/comp/juhtest/SmoketestCommandEnvironment.java +++ /dev/null @@ -1,151 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.comp.juhtest; - -import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.ucb.XCommandEnvironment; - -/** This service is for use by the smoketest which checks the installation of - * extensions. The service provides the XCommandEnvironment interface, which - * is needed for adding extensions. - */ -public class SmoketestCommandEnvironment extends WeakBase - implements XServiceInfo, XCommandEnvironment { - - static private final String __serviceName = - "com.sun.star.deployment.test.SmoketestCommandEnvironment"; - - private XComponentContext m_cmpCtx; - private XMultiComponentFactory m_xMCF; - - - public SmoketestCommandEnvironment(XComponentContext xCompContext) { - try { - m_cmpCtx = xCompContext; - m_xMCF = m_cmpCtx.getServiceManager(); - } - catch( Exception e ) { - e.printStackTrace(); - } - } - - public static String[] getServiceNames() { - String[] sSupportedServiceNames = { __serviceName}; - return sSupportedServiceNames; - } - - //XServiceInfo ------------------------------------------------------------- - public String[] getSupportedServiceNames() { - return getServiceNames(); - } - - - public boolean supportsService( String sServiceName ) { - boolean bSupported = false; - if (sServiceName.equals(__serviceName)) - bSupported = true; - return bSupported; - } - - public String getImplementationName() { - return SmoketestCommandEnvironment.class.getName(); - } - - //XCommandEnvironment ================================================ - public com.sun.star.task.XInteractionHandler getInteractionHandler() - { - return new InteractionImpl(); - } - - public com.sun.star.ucb.XProgressHandler getProgressHandler() - { - return new ProgressImpl(); - } -} - - - - -class InteractionImpl implements com.sun.star.task.XInteractionHandler -{ - public void handle( com.sun.star.task.XInteractionRequest xRequest ) - { - Object request = xRequest.getRequest(); - - boolean approve = true; - boolean abort = false; -// Object install_Exception = -// AnyConverter.toObject( -// com.sun.star.deployment.InstallException.class, request); -// if (install_Exception != null) -// { -// approve = true; -// } - - com.sun.star.task.XInteractionContinuation[] conts = xRequest.getContinuations(); - for (int i = 0; i < conts.length; i++) - { - if (approve) - { - com.sun.star.task.XInteractionApprove xApprove = - UnoRuntime.queryInterface(com.sun.star.task.XInteractionApprove.class, conts[i]); - if (xApprove != null) - xApprove.select(); - //don't query again for ongoing extensions - approve = false; - } - else if (abort) - { - com.sun.star.task.XInteractionAbort xAbort = - UnoRuntime.queryInterface(com.sun.star.task.XInteractionAbort.class, conts[i]); - if (xAbort != null) - xAbort.select(); - //don't query again for ongoing extensions - abort = false; - } - } - } -} - -class ProgressImpl implements com.sun.star.ucb.XProgressHandler -{ - public void push(Object status) - { - } - - public void update(Object status) - { - } - - public void pop() - { - } -} diff --git a/javaunohelper/com/sun/star/comp/juhtest/makefile.mk b/javaunohelper/com/sun/star/comp/juhtest/makefile.mk deleted file mode 100644 index 0d65b961a..000000000 --- a/javaunohelper/com/sun/star/comp/juhtest/makefile.mk +++ /dev/null @@ -1,50 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org 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 version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/..$/..$/..$/.. - -PRJNAME = juhelper -PACKAGE = com$/sun$/star$/comp$/juhtest -TARGET = com_sun_star_comp_juhtest - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk -.INCLUDE: $(PRJ)$/util$/settings.pmk - -# --- Files -------------------------------------------------------- -#todo: we do not want include juh.jar here but use the output tree. -JARFILES = unoil.jar ridl.jar jurt.jar - -JAVAFILES= \ - SmoketestCommandEnvironment.java - -JAVACLASSFILES= $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class) - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/javaunohelper/com/sun/star/comp/makefile.mk b/javaunohelper/com/sun/star/comp/makefile.mk deleted file mode 100644 index bde016b47..000000000 --- a/javaunohelper/com/sun/star/comp/makefile.mk +++ /dev/null @@ -1,49 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org 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 version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/..$/..$/.. - -PRJNAME = juhelper -PACKAGE = com$/sun$/star$/comp -TARGET = com_sun_star_comp - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk -.INCLUDE: $(PRJ)$/util$/settings.pmk - -# --- Files -------------------------------------------------------- -JARFILES = ridl.jar jurt.jar unoil.jar -JAVAFILES= \ - JavaUNOHelperServices.java - - -JAVACLASSFILES= $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class) - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java deleted file mode 100755 index 60b4fe009..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/ByteArrayToXInputStreamAdapter.java +++ /dev/null @@ -1,161 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -/* - * ByteArrayXInputStram.java - * - * Created on 10. April 2003, 15:45 - */ - -package com.sun.star.lib.uno.adapter; - -/** - * - * @author lo119109 - */ - -import com.sun.star.io.XInputStream; -import com.sun.star.io.XSeekable; -import com.sun.star.lib.uno.helper.ComponentBase; - -public class ByteArrayToXInputStreamAdapter - extends ComponentBase - implements XInputStream, XSeekable -{ - - byte[] m_bytes; - int m_length; - int m_pos; - - boolean m_open; - - /** Creates a new instance of ByteArrayXInputStram */ - public ByteArrayToXInputStreamAdapter(byte[] bytes) { - init(bytes); - } - - public void init(byte[] bytes) { - // System.err.println("ByteArrayXInputStream"); - m_bytes = bytes; - m_length = bytes.length; - m_pos = 0; - m_open = true; - } - - private void _check() throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException { - if (m_bytes == null) { - // System.err.println("check failed no bytes!"); - throw new com.sun.star.io.NotConnectedException("no bytes"); - } - if(!m_open) { - // System.err.println("check failed: closed"); - throw new com.sun.star.io.IOException("input closed"); - } - } - - public int available() throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException { - _check(); - long a = m_length - m_pos; - if (a != (int)a) - throw new com.sun.star.io.IOException("integer overflow"); - else { - // System.err.println("available() -> "+a); - return (int)a; - } - } - - public void closeInput() throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException { - // System.err.println("closeInput()"); - _check(); - m_open = false; - } - - public int readBytes(byte[][] values, int param) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException { - // System.err.println("readbytes(..., "+param+")"); - _check(); - try { - int remain = (int)(m_length - m_pos); - if (param > remain) param = remain; - /* ARGH!!! */ - if (values[0] == null){ - values[0] = new byte[param]; - // System.err.println("allocated new buffer of "+param+" bytes"); - } - System.arraycopy(m_bytes, m_pos, values[0], 0, param); - // System.err.println("readbytes() -> "+param); - m_pos += param; - return param; - } catch (ArrayIndexOutOfBoundsException ae) { - // System.err.println("readbytes() -> ArrayIndexOutOfBounds"); - ae.printStackTrace(); - throw new com.sun.star.io.BufferSizeExceededException("buffer overflow"); - } catch (Exception e) { - // System.err.println("readbytes() -> Exception: "+e.getMessage()); - e.printStackTrace(); - throw new com.sun.star.io.IOException("error accessing buffer"); - } - } - - public int readSomeBytes(byte[][] values, int param) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException { - // System.err.println("readSomebytes()"); - return readBytes(values, param); - } - - public void skipBytes(int param) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException { - // System.err.println("skipBytes("+param+")"); - _check(); - if (param > (m_length - m_pos)) - throw new com.sun.star.io.BufferSizeExceededException("buffer overflow"); - m_pos += param; - } - - public long getLength() throws com.sun.star.io.IOException { - // System.err.println("getLength() -> "+m_length); - if (m_bytes != null) return m_length; - else throw new com.sun.star.io.IOException("no bytes"); - } - - public long getPosition() throws com.sun.star.io.IOException { - // System.err.println("getPosition() -> "+m_pos); - if (m_bytes != null) return m_pos; - else throw new com.sun.star.io.IOException("no bytes"); - } - - public void seek(long param) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.io.IOException { - // System.err.println("seek("+param+")"); - if (m_bytes != null){ - if (param < 0 || param > m_length) throw new com.sun.star.lang.IllegalArgumentException("invalid seek position"); - else m_pos = (int)param; - }else throw new com.sun.star.io.IOException("no bytes"); - } - - public void finalize() throws Throwable{ - // System.err.println("finalizer called for ByteArrayXInputStream!"); - super.finalize(); - } - -} diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/InputStreamToXInputStreamAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/InputStreamToXInputStreamAdapter.java deleted file mode 100644 index f143bf82f..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/InputStreamToXInputStreamAdapter.java +++ /dev/null @@ -1,166 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.lib.uno.adapter; - -import java.io.IOException; -import com.sun.star.io.XInputStream; -import java.io.InputStream; - -/** The <code>InputStreamToInputXStreamAdapter</code> wraps the - Java <code>InputStream</code> object into a - UNO <code>XInputStream</code> object. - This allows users to access an <code>InputStream</code> - as if it were an <code>XInputStream</code>. - */ -public class InputStreamToXInputStreamAdapter implements XInputStream { - - /** - * Internal store to the InputStream - */ - private InputStream iIn; - - /** - * Constructor. - * - * @param in The <code>XInputStream</code> to be - * accessed as an <code>InputStream</code>. - */ - public InputStreamToXInputStreamAdapter (InputStream in) - { - iIn = in; - } - - public int available() throws - com.sun.star.io.IOException - { - - int bytesAvail; - - try { - bytesAvail = iIn.available(); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - - return(bytesAvail); - } - - public void closeInput() throws - com.sun.star.io.IOException - { - try { - iIn.close(); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - } - - public int readBytes(byte[][] b, int len) throws - com.sun.star.io.IOException - { - int count = 0; - try { - long bytesRead=0; - if (len >iIn.available()) { - bytesRead = iIn.read(b[0], 0, iIn.available()); - } - else{ - bytesRead = iIn.read(b[0], 0, len); - } - // Casting bytesRead to an int is okay, since the user can - // only pass in an integer length to read, so the bytesRead - // must <= len. - // - if (bytesRead <= 0) { - return(0); - } - return ((int)bytesRead); - - - } catch (IOException e) { - throw new com.sun.star.io.IOException("reader error: "+e.toString()); - } - } - - public int readSomeBytes(byte[][] b, int len) throws - com.sun.star.io.IOException - { - int count = 0; - try { - long bytesRead=0; - if (len >iIn.available()) { - bytesRead = iIn.read(b[0], 0, iIn.available()); - } - else{ - bytesRead = iIn.read(b[0], 0, len); - } - // Casting bytesRead to an int is okay, since the user can - // only pass in an integer length to read, so the bytesRead - // must <= len. - // - if (bytesRead <= 0) { - return(0); - } - return ((int)bytesRead); - - - } catch (IOException e) { - throw new com.sun.star.io.IOException("reader error: "+e.toString()); - } - } - - public void skipBytes(int n) throws - com.sun.star.io.IOException - { - int avail; - int tmpLongVal = n; - int tmpIntVal; - - try { - avail = iIn.available(); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - - do { - if (tmpLongVal >= Integer.MAX_VALUE) { - tmpIntVal = Integer.MAX_VALUE; - } else { - // Casting is safe here. - tmpIntVal = (int)tmpLongVal; - } - tmpLongVal -= tmpIntVal; - - try { - iIn.skip(tmpIntVal); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - } while (tmpLongVal > 0); - } -} - diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/OutputStreamToXOutputStreamAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/OutputStreamToXOutputStreamAdapter.java deleted file mode 100644 index 0f69faffa..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/OutputStreamToXOutputStreamAdapter.java +++ /dev/null @@ -1,87 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.adapter; - -import java.io.IOException; -import com.sun.star.io.XOutputStream; -import java.io.OutputStream; - -/** The <code>OutputStreamToXOutputStreamAdapter</code> wraps - a a UNO <code>XOutputStream</code> into a Java <code>OutputStream</code> - object in a Java. This allows users to access an <code>OutputStream</code> - as if it were an <code>XOutputStream</code>. - */ -public class OutputStreamToXOutputStreamAdapter implements XOutputStream { - - /** - * Internal handle to the OutputStream - */ - OutputStream iOut; - - /** - * Constructor. - * - * @param out The <code>XOutputStream</code> to be - * accessed as an <code>OutputStream</code>. - */ - public OutputStreamToXOutputStreamAdapter(OutputStream out) { - iOut = out; - } - - public void closeOutput() throws - com.sun.star.io.IOException - { - try { - iOut.close(); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - } - - public void flush() throws - com.sun.star.io.IOException - { - try { - iOut.flush(); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - } - - public void writeBytes(byte[] b) throws - com.sun.star.io.IOException - { - - try { - iOut.write(b); - } catch (IOException e) { - throw new com.sun.star.io.IOException(e.toString()); - } - } - -} diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/XInputStreamToInputStreamAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/XInputStreamToInputStreamAdapter.java deleted file mode 100644 index 696956964..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/XInputStreamToInputStreamAdapter.java +++ /dev/null @@ -1,207 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.lib.uno.adapter; - -import java.io.IOException; -import com.sun.star.io.XInputStream; -import java.io.InputStream; - -/** - * The <code>XInputStreamToInputStreamAdapter</code> wraps - * the UNO <code>XInputStream</code> object in a Java - * <code>InputStream</code>. This allows users to access - * an <code>XInputStream</code> as if it were an - * <code>InputStream</code>. - * - * @author Brian Cameron - */ -public class XInputStreamToInputStreamAdapter extends InputStream { - - /** - * Internal handle to the XInputStream - */ - private XInputStream xin; - - /** - * Constructor. - * - * @param in The <code>XInputStream</code> to be - * accessed as an <code>InputStream</code>. - */ - public XInputStreamToInputStreamAdapter (XInputStream in) { - xin = in; - } - - public int available() throws IOException { - - int bytesAvail; - - try { - bytesAvail = xin.available(); - } catch (Exception e) { - throw new IOException(e.toString()); - } - - return(bytesAvail); - } - - public void close() throws IOException { - try { - xin.closeInput(); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } - - public int read () throws IOException { - byte [][] tmp = new byte [1][1]; - try { - long bytesRead = xin.readBytes(tmp, 1); - - if (bytesRead <= 0) { - return (-1); - } else { - int tmpInt = tmp[0][0]; - if (tmpInt< 0 ){ - tmpInt = 256 +tmpInt; - } - return(tmpInt); - } - - } catch (Exception e) { - throw new IOException(e.toString()); - } - } - - public int read (byte[] b) throws IOException { - - byte [][] tmp = new byte [1][b.length]; - int bytesRead; - - try { - bytesRead = xin.readBytes(tmp, b.length); - if (bytesRead <= 0) { - return(-1); - } else if (bytesRead < b.length) { - System.arraycopy(tmp[0], 0, b, 0, bytesRead); - } else { - System.arraycopy(tmp[0], 0, b, 0, b.length); - } - } catch (Exception e) { - throw new IOException(e.toString()); - } - - return (bytesRead); - } - - public int read(byte[] b, int off, int len) throws IOException { - int count = 0; - byte [][] tmp = new byte [1][b.length]; - try { - long bytesRead=0; - int av = xin.available(); - if ( av != 0 && len > av) { - bytesRead = xin.readBytes(tmp, av); - } - else{ - bytesRead = xin.readBytes(tmp,len); - } - // Casting bytesRead to an int is okay, since the user can - // only pass in an integer length to read, so the bytesRead - // must <= len. - // - if (bytesRead <= 0) { - return(-1); - } else if (bytesRead < len) { - System.arraycopy(tmp[0], 0, b, off, (int)bytesRead); - } else { - System.arraycopy(tmp[0], 0, b, off, len); - } - - return ((int)bytesRead); - - - } catch (Exception e) { - throw new IOException("reader error: "+e.toString()); - } - } - - public long skip(long n) throws IOException { - - int avail; - long tmpLongVal = n; - int tmpIntVal; - - try { - avail = xin.available(); - } catch (Exception e) { - throw new IOException(e.toString()); - } - - do { - if (tmpLongVal >= Integer.MAX_VALUE) { - tmpIntVal = Integer.MAX_VALUE; - } else { - // Casting is safe here. - tmpIntVal = (int)tmpLongVal; - } - tmpLongVal -= tmpIntVal; - - try { - xin.skipBytes(tmpIntVal); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } while (tmpLongVal > 0); - - if ( avail != 0 && avail < n) { - return(avail); - } else { - return(n); - } - } - - /** - * Tests if this input stream supports the mark and reset methods. - * The markSupported method of - * <code>XInputStreamToInputStreamAdapter</code> returns false. - * - * @returns false - */ - public boolean markSupported() { - return false; - } - - public void mark(int readlimit) { - // Not supported. - } - - public void reset() throws IOException { - // Not supported. - } -} - diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToByteArrayAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToByteArrayAdapter.java deleted file mode 100755 index 8812f02b0..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToByteArrayAdapter.java +++ /dev/null @@ -1,121 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -/* - * ByteArrayXOutputStream.java - * - * Created on 11. April 2003, 14:20 - */ - -package com.sun.star.lib.uno.adapter; - -/** - * - * @author lo119109 - */ - -import com.sun.star.io.*; -import com.sun.star.lib.uno.helper.ComponentBase; - -public class XOutputStreamToByteArrayAdapter - extends ComponentBase - implements XOutputStream -{ - private int initialSize = 100240; // 10 kb - private int size = 0; - private int position = 0; - private boolean externalBuffer = false; - private boolean closed = false; - private byte[] buffer; - - /** Creates a new instance of ByteArrayXOutputStream */ - public XOutputStreamToByteArrayAdapter() { - this(null); - } - - public XOutputStreamToByteArrayAdapter(byte[] aBuffer) { - if (aBuffer != null) { - externalBuffer = true; - buffer = aBuffer; - size = buffer.length; - // System.err.println("new outputbuffer with external storage"); - } else { - size = initialSize; - buffer = new byte[size]; - // System.err.println("new outputbuffer with internal storage"); - } - } - - public byte[] getBuffer() { - return buffer; - } - - public void closeOutput() - throws com.sun.star.io.NotConnectedException, - com.sun.star.io.BufferSizeExceededException, - com.sun.star.io.IOException - { - // trim buffer - if ( buffer.length > position && !externalBuffer ) - { - byte[] newBuffer = new byte[position]; - System.arraycopy(buffer, 0, newBuffer, 0, position); - buffer = newBuffer; - } - closed = true; - } - - public void flush() - throws com.sun.star.io.NotConnectedException, - com.sun.star.io.BufferSizeExceededException, - com.sun.star.io.IOException - { - } - - public void writeBytes(byte[] values) - throws com.sun.star.io.NotConnectedException, - com.sun.star.io.BufferSizeExceededException, - com.sun.star.io.IOException - { - // System.err.println("writeBytes("+values.length+")"); - if ( values.length > size-position ) - { - if ( externalBuffer ) - throw new BufferSizeExceededException("out of buffer space, cannot grow external buffer"); - byte[] newBuffer = null; - while ( values.length > size-position ) - size *= 2; - // System.err.println("new buffer size is "+size+" bytes."); - newBuffer = new byte[size]; - System.arraycopy(buffer, 0, newBuffer, 0, position); - buffer = newBuffer; - } - System.arraycopy(values, 0, buffer, position, values.length); - position += values.length; - } - -} diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToOutputStreamAdapter.java b/javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToOutputStreamAdapter.java deleted file mode 100644 index e8f521b5e..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/XOutputStreamToOutputStreamAdapter.java +++ /dev/null @@ -1,111 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.adapter; - -import java.io.IOException; -import com.sun.star.io.XOutputStream; -import java.io.OutputStream; - -/** - * The <code>XOutputStreamToOutputStreamAdapter</code> wraps - * the UNO <code>XOutputStream</code> object in a Java - * <code>OutputStream</code>. This allows users to access - * an <code>XOutputStream</code> as if it were an - * <code>OutputStream</code>. - * - * @author Brian Cameron - */ -public class XOutputStreamToOutputStreamAdapter extends OutputStream { - - /** - * Internal handle to the XInputStream - */ - XOutputStream xout; - - /** - * Constructor. - * - * @param out The <code>XOutputStream</code> to be - * accessed as an <code>OutputStream</code>. - */ - public XOutputStreamToOutputStreamAdapter(XOutputStream out) { - xout = out; - } - - public void close() throws IOException { - try { - xout.closeOutput(); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } - - public void flush() throws IOException { - try { - xout.flush(); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } - - public void write(byte[] b) throws IOException { - - try { - xout.writeBytes(b); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } - - public void write(byte[] b, int off, int len) throws IOException { - - byte[] tmp = new byte[len]; - - // Copy the input array into a temp array, and write it out. - // - System.arraycopy(b, off, tmp, 0, len); - - try { - xout.writeBytes(tmp); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } - - public void write(int b) throws IOException { - - byte [] oneByte = new byte [1]; - oneByte[0] = (byte) b; - - try { - xout.writeBytes(oneByte); - } catch (Exception e) { - throw new IOException(e.toString()); - } - } -} diff --git a/javaunohelper/com/sun/star/lib/uno/adapter/makefile.mk b/javaunohelper/com/sun/star/lib/uno/adapter/makefile.mk deleted file mode 100644 index 793f5fb1d..000000000 --- a/javaunohelper/com/sun/star/lib/uno/adapter/makefile.mk +++ /dev/null @@ -1,54 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org 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 version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/..$/..$/..$/..$/.. - -PRJNAME = juhelper -PACKAGE = com$/sun$/star$/lib$/uno$/adapter -TARGET = com_sun_star_lib_uno_adapter - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk -.INCLUDE: $(PRJ)$/util$/settings.pmk - -# --- Files -------------------------------------------------------- - -JAVAFILES= \ - XInputStreamToInputStreamAdapter.java \ - XOutputStreamToOutputStreamAdapter.java \ - InputStreamToXInputStreamAdapter.java \ - OutputStreamToXOutputStreamAdapter.java \ - ByteArrayToXInputStreamAdapter.java \ - XOutputStreamToByteArrayAdapter.java - - -JAVACLASSFILES= $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class) - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/javaunohelper/com/sun/star/lib/uno/helper/ComponentBase.java b/javaunohelper/com/sun/star/lib/uno/helper/ComponentBase.java deleted file mode 100644 index 283391832..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/ComponentBase.java +++ /dev/null @@ -1,141 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; -import com.sun.star.lang.XComponent; -import com.sun.star.lang.XEventListener; -import com.sun.star.lang.EventObject; -import com.sun.star.uno.Type; - -/** This class can be used as the base class for UNO components. In addition to the functionality ,which - * is inherited from WeakBase, it implements com.sun.star.lang.XComponent. - */ -public class ComponentBase extends WeakBase implements XComponent -{ - private final boolean DEBUG= false; - protected MultiTypeInterfaceContainer listenerContainer; - protected boolean bInDispose= false; - protected boolean bDisposed= false; - static final Type EVT_LISTENER_TYPE= new Type(XEventListener.class); - - - /** Creates a new instance of CompBase */ - public ComponentBase() - { - super(); - listenerContainer= new MultiTypeInterfaceContainer(); - } - - /** Override to perform extra clean-up work. Provided for subclasses. It is - called during dispose() - */ - protected void preDisposing() - { - } - /** Override to become notified right before the disposing action is performed. - */ - protected void postDisposing() - { - } - - - /** Method of XComponent. It is called by the owning client when the component is not needed - * anymore. The registered listeners are notified that this method has been called. - */ - public void dispose() - { - // Determine in a thread-safe way if this is the first call to this method. - // Only then we proceed with the notification of event listeners. - // It is an error to call this method more then once. - boolean bDoDispose= false; - synchronized (this) - { - if ( ! bInDispose && ! bDisposed) - { - bDoDispose= true; - bInDispose= true; - } - } - // The notification occures in an unsynchronized block in order to avoid - // deadlocks if one of the listeners calls back in a different thread on - // a synchronized method which uses the same object. - if (bDoDispose) - { - try - { - preDisposing(); - listenerContainer.disposeAndClear(new EventObject(this)); - //notify subclasses that disposing is in progress - postDisposing(); - } - finally - { - // finally makes sure that the flags are set even if a RuntimeException is thrown. - // That ensures that this function is only called once. - bDisposed= true; - bInDispose= false; - } - } - else - { - // in a multithreaded environment, it can't be avoided, that dispose is called twice. - // However this condition is traced, because it MAY indicate an error. - if (DEBUG) - System.out.println("OComponentHelper::dispose() - dispose called twice" ); - } - } - - /** Method of XComponent. - */ - public void removeEventListener(XEventListener xEventListener) - { - listenerContainer.removeInterface( EVT_LISTENER_TYPE, xEventListener); - } - - public void addEventListener(XEventListener listener) - { - boolean bDoDispose= false; - synchronized (this) - { - if (bDisposed || bInDispose) - bDoDispose= true; - else - listenerContainer.addInterface(EVT_LISTENER_TYPE, listener); - } - if (bDoDispose ) - { - listener.disposing( new EventObject(this)); - } - } - - protected void finalize() throws Throwable - { - if ( ! bInDispose && ! bDisposed) - dispose(); - super.finalize(); - } -} diff --git a/javaunohelper/com/sun/star/lib/uno/helper/Factory.java b/javaunohelper/com/sun/star/lib/uno/helper/Factory.java deleted file mode 100644 index aa67282ca..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/Factory.java +++ /dev/null @@ -1,268 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.lib.uno.helper; - -import com.sun.star.uno.XComponentContext; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lang.XInitialization; -import com.sun.star.registry.XRegistryKey; - -import com.sun.star.uno.UnoRuntime; - - -/** Factory helper class supporting com.sun.star.lang.XServiceInfo and - com.sun.star.lang.XSingleComponentFactory. - - @attention - This factory implementation does not support lang.XSingleServiceFactory. -*/ -public class Factory - extends ComponentBase - implements XSingleComponentFactory, XServiceInfo -{ - private static final boolean DEBUG = false; - - /** Creates an object factory supporting interfaces - com.sun.star.lang.XSingleComponentFactory and - com.sun.star.lang.XServiceInfo - - @param impl_class - implementation class - @param impl_name - implementation name - @param supported_services - services implemented - @return - object factory - - @since UDK 3.2.13 - */ - public static XSingleComponentFactory createComponentFactory( - Class impl_class, String impl_name, String supported_services [] ) - throws com.sun.star.uno.RuntimeException - { - return new Factory( impl_class, impl_name, supported_services ); - } - - /** Creates an object factory supporting interfaces - com.sun.star.lang.XSingleComponentFactory and - com.sun.star.lang.XServiceInfo - - The implementation name is the name of the implementation class. - - @param impl_class - implementation class - @param supported_services - services implemented - @return - object factory - */ - public static XSingleComponentFactory createComponentFactory( - Class impl_class, String supported_services [] ) - throws com.sun.star.uno.RuntimeException - { - return createComponentFactory( - impl_class, impl_class.getName(), supported_services ); - } - /** Writes component's implementation info to given registry key. - - @param impl_name - name of implementation - @param supported_services - supported services of implementation - @param xKey - registry key to write to - @return - success - */ - public static boolean writeRegistryServiceInfo( - String impl_name, String supported_services [], XRegistryKey xKey ) - { - try - { - XRegistryKey xNewKey = xKey.createKey( "/" + impl_name + "/UNO/SERVICES" ); - for ( int nPos = 0; nPos < supported_services.length; ++nPos ) - { - xNewKey.createKey( supported_services[ nPos ] ); - } - return true; - } - catch (com.sun.star.registry.InvalidRegistryException exc) - { - if (DEBUG) - { - System.err.println( - "##### " + Factory.class.getName() + ".writeRegistryServiceInfo -- exc: " + - exc.toString() ); - } - } - return false; - } - - //============================================================================================== - private String m_impl_name; - private String [] m_supported_services; - private Class m_impl_class; - private java.lang.reflect.Method m_method; - private java.lang.reflect.Constructor m_ctor; - - private Factory( - Class impl_class, String impl_name, String supported_services [] ) - { - m_impl_name = impl_name; - m_supported_services = supported_services; - m_impl_class = impl_class; - m_method = null; - m_ctor = null; - - Class params [] = new Class [] { XComponentContext.class }; - - try - { - // seeking for "public static Object __create( XComponentContext )" - m_method = m_impl_class.getMethod( "__create", params ); - int mod = m_method.getModifiers(); - if (!m_method.getReturnType().equals( Object.class ) || - !java.lang.reflect.Modifier.isStatic( mod ) || - !java.lang.reflect.Modifier.isPublic( mod )) - { - m_method = null; - } - } - catch (Exception exc) - { - } - - if (null == m_method) - { - try - { - // ctor with context - m_ctor = m_impl_class.getConstructor( params ); - } - catch (Exception exc) - { - // else take default ctor - } - } - } - - //______________________________________________________________________________________________ - private final Object instantiate( XComponentContext xContext ) - throws com.sun.star.uno.Exception - { - try - { - if (DEBUG) - System.out.print( "instantiating " + m_impl_class.toString() + " using " ); - if (null != m_method) - { - if (DEBUG) - System.out.println( "__create( XComponentContext )..." ); - return m_method.invoke( null, new Object [] { xContext } ); - } - if (null != m_ctor) - { - if (DEBUG) - System.out.println( "ctor( XComponentContext )..." ); - return m_ctor.newInstance( new Object [] { xContext } ); - } - if (DEBUG) - System.out.println( "default ctor..." ); - return m_impl_class.newInstance(); // default ctor - } - catch (java.lang.reflect.InvocationTargetException exc) - { - Throwable targetException = exc.getTargetException(); - if (targetException instanceof java.lang.RuntimeException) - throw (java.lang.RuntimeException)targetException; - else if (targetException instanceof com.sun.star.uno.RuntimeException) - throw (com.sun.star.uno.RuntimeException)targetException; - else if (targetException instanceof com.sun.star.uno.Exception) - throw (com.sun.star.uno.Exception)targetException; - else - throw new com.sun.star.uno.Exception( targetException.toString(), this ); - } - catch (IllegalAccessException exc) - { - throw new com.sun.star.uno.RuntimeException( exc.toString(), this ); - } - catch (InstantiationException exc) - { - throw new com.sun.star.uno.RuntimeException( exc.toString(), this ); - } - } - // XSingleComponentFactory impl - //______________________________________________________________________________________________ - public final Object createInstanceWithContext( - XComponentContext xContext ) - throws com.sun.star.uno.Exception - { - return instantiate( xContext ); - } - //______________________________________________________________________________________________ - public final Object createInstanceWithArgumentsAndContext( - Object arguments [], XComponentContext xContext ) - throws com.sun.star.uno.Exception - { - Object inst = instantiate( xContext ); - XInitialization xInit = UnoRuntime.queryInterface( - XInitialization.class, inst ); - if (null == xInit) - { - throw new com.sun.star.lang.IllegalArgumentException( - "cannot pass arguments to component; no XInitialization implemented!", this, - (short)0 ); - } - xInit.initialize( arguments ); - return inst; - } - - // XServiceInfo impl - //______________________________________________________________________________________________ - public final String getImplementationName() - { - return m_impl_name; - } - //______________________________________________________________________________________________ - public final boolean supportsService( String service_name ) - { - for ( int nPos = 0; nPos < m_supported_services.length; ++nPos ) - { - if (m_supported_services[ nPos ].equals( service_name )) - return true; - } - return false; - } - //______________________________________________________________________________________________ - public final String [] getSupportedServiceNames() - { - return m_supported_services; - } -} - diff --git a/javaunohelper/com/sun/star/lib/uno/helper/InterfaceContainer.java b/javaunohelper/com/sun/star/lib/uno/helper/InterfaceContainer.java deleted file mode 100644 index c029fcf54..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/InterfaceContainer.java +++ /dev/null @@ -1,856 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; -import java.util.Iterator; -import java.util.ListIterator; -import java.util.NoSuchElementException; -import java.util.Collection; -import com.sun.star.lang.EventObject; -import com.sun.star.lang.XEventListener; -import com.sun.star.uno.UnoRuntime; - -/** - * This class is a container for interfaces. - * - * It is intended to be used as storage for UNO interface of a specific type. - * The client has to ensure that the container contains only elements of the same - * type. If one needs to store different types, then one uses OMultiTypeInterfaceContainer. - * When the client calls disposeAndClear, the contained objects are queried for - * com.sun.star.lang.XEventListener and disposing is called. Afterwards - * the list cannot be used anymore. - * - * This list does not allow null values. - * All methods are thread-safe. The same holds true for - * iterators, issued by this class. Several iterators can exist at the same time and can also - * be modified (java.util.ListIterator.add, java.util.ListIterator.remove etc.). To make this work, - * the InterfaceContainer provides the iterators with copys of the list's data. - * The add and remove calls on the iterator modify the data in the iterator's list as well as - * in InterfaceContainer. Modification on InterfaceContainer, however, are not - * synchronized with existing iterators. For example - * <pre> - * InterfaceContainer cont= new InterfaceContainer(); - * ListIterator it= cont.listIterator(); - * - * cont.add( someInterface); - * // one cannot obtain someInterface through iterator it, - * // instead get a new iterator - * it= cont.listIterator(); - * // it now keeps a fresh copy of cont and hence contains someInterface - * - * // Adding an interface on the iterator will cause the interface also to be added - * // to InterfaceContainer - * it.add( someOtherInterface); - * // someOtherInterface is now in it and cont - * ListIterator it2= cont.listIterator(); - * //someOtherInterface can also be obtained by all newly created iterators, e.g. it2. - * </pre> - * - * The add and remove methods of an iterator work on a particular location within a list, - * dependent on what the value of the iterator's cursor is. After the call the value at the - * appropriate position has been modified. Since the iterator received a copy of InterfaceContainer's - * data, InterfaceContainer may have been modified (by List methods or through other iterators). - * Therefore both data sets may not contain the same elements anymore. Consequently, a List method - * that modifies data, does not modify InterfaceContainer's data at a certain index - * (according to the iterators cursor). Instead, new elements are added at the end of list. When - * Iterator.remove is called, then the first occurrence of that element in InterfaceContainer - * is removed. - * ListIterator.set is not supported. - * - * A lot of methods resemble those of the to java.util.List interface, allthough - * this class does not implement it. However, the list iterators returned, for example by - * the listIterator method implement the java.util.ListIterator interface. - * Implementing the List interface would mean to support all none - optional methods as - * prescribed by the interface declaration. Among those is the subList method which returns - * a range of values of the list's data wrapped in a List implementation. Changes to the sub - * list have to cause changes in the main list. This is a problem, since this class is to be - * used in a multi-threaded environment. The sub list could work on a copy as the iterators - * do, but all the functions which work on an given index could not be properly supported. - * Unfortunatly, the List interface documentation states that all optional methods implemented - * by the list have to be implemented in the sub list. That would mean to do without all those - * critical methods, allthough they might work well in the "main list" (as opposed to sub list). - */ -public class InterfaceContainer implements Cloneable -{ - final boolean DEBUG= false; - /** - * The array buffer into which the elements of the ArrayList are stored. - * The capacity of the ArrayList is the length of this array buffer. - */ - Object elementData[]; - - /** - * The size of the ArrayList (the number of elements it contains). - * - * @serial - */ - private int size; - - - //private ArrayList data= new ArrayList(); - /** Creates a new instance of InterfaceContainer */ - public InterfaceContainer() - { - this(10); - } - /** - * Constructs an empty list with the specified initial capacity. - * - * @param initialCapacity the initial capacity of the list. - * @exception IllegalArgumentException if the specified initial capacity - * is negative - */ - public InterfaceContainer(int initialCapacity) - { - if (initialCapacity < 0) - throw new java.lang.IllegalArgumentException("Illegal Capacity: "+ - initialCapacity); - this.elementData = new Object[initialCapacity]; - } - - /** - * Trims the capacity of this <tt>ArrayList</tt> instance to be the - * list's current size. An application can use this operation to minimize - * the storage of an <tt>ArrayList</tt> instance. - */ - synchronized public void trimToSize() - { - int oldCapacity = elementData.length; - if (size < oldCapacity) - { - Object oldData[] = elementData; - elementData = new Object[size]; - System.arraycopy(oldData, 0, elementData, 0, size); - } - } - - /** - * Increases the capacity of this <tt>ArrayList</tt> instance, if - * necessary, to ensure that it can hold at least the number of elements - * specified by the minimum capacity argument. - * - * @param minCapacity the desired minimum capacity. - */ - synchronized public void ensureCapacity(int minCapacity) - { - int oldCapacity = elementData.length; - if (minCapacity > oldCapacity) - { - Object oldData[] = elementData; - int newCapacity = (oldCapacity * 3)/2 + 1; - if (newCapacity < minCapacity) - newCapacity = minCapacity; - elementData = new Object[newCapacity]; - System.arraycopy(oldData, 0, elementData, 0, size); - } - } - - /** - * Appends the specified element to the end of this list. - * - * @param o element to be appended to this list. - * @return <tt>true</tt> (as per the general contract of Collection.add). - */ - synchronized public boolean add(Object o) - { - boolean ret= false; - if (elementData != null && o != null) - { - ensureCapacity(size + 1); // Increments modCount!! - elementData[size++] = o; - ret= true; - } - return ret; - } - - /** - * Inserts the specified element at the specified position in this - * list. Shifts the element currently at that position (if any) and - * any subsequent elements to the right (adds one to their indices). - * - * @param index index at which the specified element is to be inserted. - * @param element element to be inserted. - * @throws IndexOutOfBoundsException if index is out of range - * <tt>(index < 0 || index > size())</tt>. - */ - synchronized public void add(int index, Object element) - { - if (elementData != null && element != null) - { - if (index > size || index < 0) - throw new IndexOutOfBoundsException( - "Index: "+index+", Size: "+size); - - ensureCapacity(size+1); - System.arraycopy(elementData, index, elementData, index + 1, - size - index); - elementData[index] = element; - size++; - } - } - - - /** - * Appends all of the elements in the specified Collection to the end of - * this list, in the order that they are returned by the - * specified Collection's Iterator. The behavior of this operation is - * undefined if the specified Collection is modified while the operation - * is in progress. (This implies that the behavior of this call is - * undefined if the specified Collection is this list, and this - * list is nonempty.) - * - * @param c the elements to be inserted into this list. - * @throws IndexOutOfBoundsException if index out of range <tt>(index - * < 0 || index > size())</tt>. - */ - synchronized public boolean addAll(Collection c) - { - int numNew = c.size(); - ensureCapacity(size + numNew); - - Iterator e = c.iterator(); - for (int i=0; i<numNew; i++) - { - Object o= e.next(); - if (o != null) - elementData[size++] = o; - } - return numNew != 0; - } - /** - * Inserts all of the elements in the specified Collection into this - * list, starting at the specified position. Shifts the element - * currently at that position (if any) and any subsequent elements to - * the right (increases their indices). The new elements will appear - * in the list in the order that they are returned by the - * specified Collection's iterator. - * - * @param index index at which to insert first element - * from the specified collection. - * @param c elements to be inserted into this list. - * @throws IndexOutOfBoundsException if index out of range <tt>(index - * < 0 || index > size())</tt>. - */ - synchronized public boolean addAll(int index, Collection c) - { - boolean ret= false; - if (elementData != null) - { - if (index > size || index < 0) - throw new IndexOutOfBoundsException( - "Index: "+index+", Size: "+size); - // only add the non-null elements - int sizeCol= c.size(); - Object[] arColl= new Object[sizeCol]; - Iterator icol= c.iterator(); - int curIndex= 0; - for (int i=0; i < sizeCol; i++) - { - Object o= icol.next(); - if (o != null) - arColl[curIndex++]= o; - } - int numNew = curIndex; - ensureCapacity(size + numNew); // Increments modCount!! - - int numMoved = size - index; - if (numMoved > 0) - System.arraycopy(elementData, index, elementData, index + numNew, - numMoved); - - for (int i=0; i<numNew; i++) - { - elementData[index++]= arColl[i]; - } - size += numNew; - ret= numNew != 0; - } - return ret; - } - - /** - * Removes all of the elements from this list. The list will - * be empty after this call returns. - */ - synchronized public void clear() - { - if (elementData != null) - { - // Let gc do its work - for (int i = 0; i < size; i++) - elementData[i] = null; - - size = 0; - } - } - /** - * Returns <tt>true</tt> if this list contains the specified element. - * - * @param elem element whose presence in this List is to be tested. - */ - synchronized public boolean contains(Object elem) - { - return indexOf(elem) >= 0; - } - - synchronized public boolean containsAll(Collection collection) - { - boolean retVal= true; - if (elementData != null && collection != null) - { - Iterator it= collection.iterator(); - while (it.hasNext()) - { - Object obj= it.next(); - if (false == contains(obj)) - { - retVal= false; - break; - } - } - } - return retVal; - } - /** - * Returns the element at the specified position in this list. - * - * @param index index of element to return. - * @return the element at the specified position in this list. - * @throws IndexOutOfBoundsException if index is out of range <tt>(index - * < 0 || index >= size())</tt>. - */ - synchronized public Object get(int index) - { - if (elementData != null) - { - RangeCheck(index); - return elementData[index]; - } - return null; - } - - /** - * Searches for the first occurrence of the given argument, testing - * for equality using the <tt>equals</tt> method. - * - * @param elem an object. - * @return the index of the first occurrence of the argument in this - * list; returns <tt>-1</tt> if the object is not found. - * @see Object#equals(Object) - */ - synchronized public int indexOf(Object elem) - { - int index= -1; - if (elementData != null && elem != null) - { - for (int i = 0; i < size; i++) - { - if (elem == elementData[i]) - { - index= i; - break; - } - } - - if (index == -1) - { - for (int i = 0; i < size; i++) - { - if (UnoRuntime.areSame(elem, elementData[i])) - { - index= i; - break; - } - } - } - } - return index; - } - /** - * Tests if this list has no elements. - * - * @return <tt>true</tt> if this list has no elements; - * <tt>false</tt> otherwise. - */ - synchronized public boolean isEmpty() - { - return size == 0; - } - - synchronized public Iterator iterator() - { - if (elementData != null) - { - InterfaceContainer aCopy= (InterfaceContainer) clone(); - return new Itr(aCopy); - } - return null; - } - /** - * Returns the index of the last occurrence of the specified object in - * this list. - * - * @param elem the desired element. - * @return the index of the last occurrence of the specified object in - * this list; returns -1 if the object is not found. - */ - synchronized public int lastIndexOf(Object elem) - { - int index= -1; - if (elementData != null && elem != null) - { - for (int i = size-1; i >= 0; i--) - { - if (elem == elementData[i]) - { - index= i; - break; - } - } - if (index == -1) - { - for (int i = size-1; i >= 0; i--) - { - if (UnoRuntime.areSame(elem, elementData[i])) - { - index= i; - break; - } - } - } - } - return index; - } - - /** - * Returns a shallow copy of this <tt>ArrayList</tt> instance. The contained - * references are copied but the objects not. - * - * @return a clone of this <tt>List</tt> instance. - */ - synchronized public Object clone() - { - Object ret= null; - if (elementData != null) - { - InterfaceContainer cont= new InterfaceContainer(); - cont.elementData = new Object[size]; - cont.size= size; - System.arraycopy(elementData, 0, cont.elementData, 0, size); - ret= cont; - } - return ret; - } - synchronized public ListIterator listIterator() - { - return listIterator(0); - } - - /** The iterator keeps a copy of the list. Changes to InterfaceContainer do not - * affect the data of the iterator. Conversly, changes to the iterator are effect - * InterfaceContainer. - */ - synchronized public ListIterator listIterator(int index) - { - if (elementData != null) - { - InterfaceContainer aCopy= (InterfaceContainer) clone(); - return new LstItr(aCopy, index); - } - return null; - } - /** - * Removes the element at the specified position in this list. - * Shifts any subsequent elements to the left (subtracts one from their - * indices). - * - * @param index the index of the element to removed. - * @return the element that was removed from the list. - * @throws IndexOutOfBoundsException if index out of range <tt>(index - * < 0 || index >= size())</tt>. - */ - synchronized public Object remove(int index) - { - Object ret= null; - if (elementData != null) - { - RangeCheck(index); - ret= elementData[index]; - - int numMoved = size - index - 1; - if (numMoved > 0) - System.arraycopy(elementData, index+1, elementData, index, - numMoved); - elementData[--size] = null; // Let gc do its work - } - return ret; - } - - - /** Parameter obj may */ - synchronized public boolean remove(Object obj) - { - boolean ret= false; - if (elementData != null && obj != null) - { - int index= indexOf(obj); - if (index != -1) - { - ret= true; - remove(index); - } - } - return ret; - } - - synchronized public boolean removeAll(Collection collection) - { - boolean retVal= false; - if (elementData != null && collection != null) - { - Iterator it= collection.iterator(); - while (it.hasNext()) - { - Object obj= it.next(); - boolean bMod= remove( obj); - if (bMod) - retVal= true; - } - } - return retVal; - } - - synchronized public boolean retainAll(Collection collection) - { - boolean retVal= false; - if (elementData != null && collection != null) - { - // iterate over data - Object[] arRetained= new Object[size]; - int indexRetained= 0; - for(int i= 0; i < size; i++) - { - Object curElem= elementData[i]; - // try to find the element in collection - Iterator itColl= collection.iterator(); - boolean bExists= false; - while (itColl.hasNext()) - { - if (curElem == itColl.next()) - { - // current element is in collection - bExists= true; - break; - } - } - if (bExists == false) - { - itColl= collection.iterator(); - while (itColl.hasNext()) - { - Object o= itColl.next(); - if (o != null) - { - if (UnoRuntime.areSame(o, curElem)) - { - bExists= true; - break; - } - } - } - } - if (bExists == true) - arRetained[indexRetained++]= curElem; - } - retVal= size != indexRetained; - if (indexRetained > 0) - { - elementData= arRetained; - size= indexRetained; - } - } - return retVal; - } - - - /** Not supported. - * @param index index of element to replace. - * @param element element to be stored at the specified position. - * @return the element previously at the specified position. - * @throws IndexOutOfBoundsException if index out of range - * <tt>(index < 0 || index >= size())</tt>. - */ - synchronized public Object set(int index, Object element) - { - Object ret= null; - if (elementData != null && element != null) - { - RangeCheck(index); - ret = elementData[index]; - elementData[index] = element; - } - return ret; - } - - /** - * Returns the number of elements in this list. - * - * @return the number of elements in this list. - */ - synchronized public int size() - { - if (elementData != null) - return size; - return 0; - } - - - /** - * Returns an array containing all of the elements in this list - * in the correct order. - * - * @return an array containing all of the elements in this list - * in the correct order. - */ - synchronized public Object[] toArray() - { - if (elementData != null) - { - Object[] result = new Object[size]; - System.arraycopy(elementData, 0, result, 0, size); - return result; - } - return null; - } - - /** - * Returns an array containing all of the elements in this list in the - * correct order. The runtime type of the returned array is that of the - * specified array. If the list fits in the specified array, it is - * returned therein. Otherwise, a new array is allocated with the runtime - * type of the specified array and the size of this list.<p> - * - * If the list fits in the specified array with room to spare (i.e., the - * array has more elements than the list), the element in the array - * immediately following the end of the collection is set to - * <tt>null</tt>. This is useful in determining the length of the list - * <i>only</i> if the caller knows that the list does not contain any - * <tt>null</tt> elements. - * - * @param a the array into which the elements of the list are to - * be stored, if it is big enough; otherwise, a new array of the - * same runtime type is allocated for this purpose. - * @return an array containing the elements of the list. - * @throws ArrayStoreException if the runtime type of a is not a supertype - * of the runtime type of every element in this list. - */ - synchronized public Object[] toArray(Object a[]) - { - if (a.length < size) - a = (Object[])java.lang.reflect.Array.newInstance( - a.getClass().getComponentType(), size); - if (elementData != null) - System.arraycopy(elementData, 0, a, 0, size); - - if (a.length > size) - a[size] = null; - - return a; - } - - /** - * Check if the given index is in range. If not, throw an appropriate - * runtime exception. - */ - private void RangeCheck(int index) - { - if (index >= size || index < 0) - throw new IndexOutOfBoundsException( - "Index: "+index+", Size: "+size); - } - - public void disposeAndClear(EventObject evt) - { - Iterator aIt; - synchronized (this) - { - aIt= iterator(); - // Container freigeben, falls im disposing neue Eintraege kommen - // set the member to null, the iterator delete the values - clear(); - elementData= null; - size= 0; - } - if (aIt != null) - { - while( aIt.hasNext() ) - { - try - { - Object o= aIt.next(); - XEventListener evtListener= UnoRuntime.queryInterface( - XEventListener.class, o); - if( evtListener != null ) - evtListener.disposing( evt ); - } - catch ( RuntimeException e) - { - // be robust, if e.g. a remote bridge has disposed already. - // there is no way, to delegate the error to the caller :o(. - } - } - } - } - - - private class Itr implements Iterator - { - InterfaceContainer dataIt; - /** - * Index of element to be returned by subsequent call to next. - */ - int cursor= 0; - /** - * Index of element returned by most recent call to next or - * previous. Reset to -1 if this element is deleted by a call - * to remove. - */ - int lastRet = -1; - - /** The object that has been returned by most recent call to next - * or previous. Reset to null if this element is deleted by a call - * to remove. - */ - Object lastRetObj= null; - - Itr(InterfaceContainer _data) - { - dataIt= _data; - } - - synchronized public boolean hasNext() - { - return cursor !=dataIt.size(); - } - - public synchronized Object next() - { - try - { - Object next = dataIt.get(cursor); - lastRet = cursor++; - lastRetObj= next; - return next; - } - catch(java.lang.IndexOutOfBoundsException e) - { - throw new java.util.NoSuchElementException(); - } - } - - /** Removes the interface from the list, that has been last returned by a - * call to next(). This is done according to the specification of the interface - * method. The element is also removed from InterfaceContainer but independent - * of the location. If the element is multiple times in InterfaceContainer then - * it is up to the java.util.ArrayList implementation what element is removed. - */ - public synchronized void remove() - { - if (lastRet == -1) - throw new IllegalStateException(); - // Remove the entry from InterfaceContainer. - InterfaceContainer.this.remove(lastRetObj); - dataIt.remove(lastRet); - - if (lastRet < cursor) - cursor--; - lastRet = -1; - lastRetObj= null; - } - } - - private class LstItr extends Itr implements ListIterator - { - - LstItr(InterfaceContainer _data, int _index) - { - super(_data); - cursor= _index; - } - - /** Inserts an element to the iterators list according to the specification - * of this interface method. The element is also added to InterfaceContainer - * but its location within the list cannot be guaranteed. - */ - public synchronized void add(Object o) - { - InterfaceContainer.this.add(o); - dataIt.add(cursor++, o); - lastRet = -1; - lastRetObj= null; - } - - synchronized public boolean hasPrevious() - { - return cursor != 0; - } - - synchronized public int nextIndex() - { - return cursor; - } - - public synchronized Object previous() - { - try - { - Object previous = dataIt.get(--cursor); - lastRet = cursor; - lastRetObj= previous; - return previous; - } catch(IndexOutOfBoundsException e) - { - throw new NoSuchElementException(); - } - } - - synchronized public int previousIndex() - { - return cursor-1; - } - - /** This is not possible since several iterators can modify InterfaceContainer - */ - public synchronized void set(Object o) - { - throw new UnsupportedOperationException(); - } - - - } // class LstItr -} - diff --git a/javaunohelper/com/sun/star/lib/uno/helper/MultiTypeInterfaceContainer.java b/javaunohelper/com/sun/star/lib/uno/helper/MultiTypeInterfaceContainer.java deleted file mode 100644 index e61362b2b..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/MultiTypeInterfaceContainer.java +++ /dev/null @@ -1,165 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; -import com.sun.star.uno.Type; -import com.sun.star.lang.EventObject; -import java.util.HashMap; -import java.util.Map; -import java.util.Iterator; - -public class MultiTypeInterfaceContainer -{ - - private Map map= new HashMap(); - - /** Creates a new instance of MultiTypeInterfaceContainer */ - public MultiTypeInterfaceContainer() - { - } - - /** only returns types which have at least one value in InterfaceContainer - * return value can contain an element null, if someone called - * addInterface (null, interf) - */ - synchronized public Type[] getContainedTypes() - { - int size; - Type[] retVal= null; - - if ( (size=map.size()) > 0) - { - Type [] arTypes= new Type[size]; - Iterator it= map.keySet().iterator(); - - int countTypes= 0; - while (it.hasNext()) - { - Object key= it.next(); - InterfaceContainer cont= (InterfaceContainer) map.get(key); - if (cont != null && cont.size() > 0) - { - if (key == null) - arTypes[countTypes++]= new Type(); - else if (key instanceof Type) - arTypes[countTypes++]= (Type) key; - else if (key instanceof Class) - arTypes[countTypes++]= new Type((Class) key); - else - arTypes[countTypes++]= new Type(key.getClass()); - } - } - - if (countTypes != size) - { - retVal= new Type[countTypes]; - System.arraycopy(arTypes, 0, retVal, 0, countTypes); - } - else - retVal= arTypes; - } - if (retVal == null) - retVal= new Type[0]; - return retVal; - } - - /** param key can be null */ - synchronized public InterfaceContainer getContainer(Object key) - { - InterfaceContainer retVal= null; - Iterator it= map.keySet().iterator(); - while (it.hasNext()) - { - Object obj= it.next(); - if (obj == null && key == null) - { - retVal= (InterfaceContainer) map.get(null); - break; - } - else if( obj != null && obj.equals(key)) - { - retVal= (InterfaceContainer) map.get(obj); - break; - } - } - return retVal; - } - - - synchronized public int addInterface(Object ckey, Object iface) - { - //If the key is a Type then it does not matter if the objects are different - // if they represent the same type. This is because Types overrides hashCode and - // equals. For example: - // Type a= new Type(XInterface.class); - // Type b= new Type(XInterface.class); - // Allthough a != b , the map interprets both as being the same. - InterfaceContainer cont= (InterfaceContainer) map.get(ckey); - if (cont != null) - { - cont.add(iface); - } - else - { - cont= new InterfaceContainer(); - cont.add(iface); - map.put(ckey, cont); - } - return cont.size(); - } - - - synchronized public int removeInterface(Object key, Object iface) - { - int retVal= 0; - InterfaceContainer cont= (InterfaceContainer) map.get(key); - if (cont != null) - { - cont.remove(iface); - retVal= cont.size(); - } - return retVal; - } - - public void disposeAndClear(EventObject evt) - { - Iterator it= null; - synchronized(this) - { - it= map.values().iterator(); - } - while (it.hasNext() ) - ((InterfaceContainer) it.next()).disposeAndClear(evt); - } - - synchronized public void clear() - { - Iterator it= map.values().iterator(); - while (it.hasNext()) - ((InterfaceContainer) it.next()).clear(); - } -} diff --git a/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java b/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java deleted file mode 100644 index d50e6d837..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java +++ /dev/null @@ -1,1102 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -package com.sun.star.lib.uno.helper; - -import com.sun.star.uno.Type; -import com.sun.star.lang.EventObject; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.uno.TypeClass; -import com.sun.star.uno.AnyConverter; -import com.sun.star.uno.XInterface; -import com.sun.star.uno.Any; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.beans.XPropertyChangeListener; -import com.sun.star.beans.XVetoableChangeListener; -import com.sun.star.beans.PropertyChangeEvent; -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.Property; -import com.sun.star.beans.PropertyAttribute; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertiesChangeListener; -import com.sun.star.beans.XPropertySetInfo; -import com.sun.star.beans.XFastPropertySet; -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.XMultiPropertySet; -import java.util.Iterator; -import java.util.Collection; -import java.util.HashMap; -import java.lang.reflect.Field; -import com.sun.star.lang.DisposedException; - - -/** This class is an implementation of the interfaces com.sun.star.beans.XPropertySet, - * com.sun.star.beans.XFastPropertySet and com.sun.star.beans.XMultiPropertySet. This - * class has to be inherited to be used. The values of properties are stored in member - * variables of the inheriting class. By overriding the methods - * {@link #convertPropertyValue convertPropertyValue}, - * {@link #setPropertyValueNoBroadcast setPropertyValueNoBroadcast} and - * {@link #getPropertyValue(Property)} one can determine how - * property values are stored. - * When using the supplied implementations of this class then the member variables which - * hold property values have to be declared in the class which inherits last in the inheriting - * chain and they have to be public<p> - * Properties have to be registered by one of the registerProperty methods. They take among other - * arguments an Object named <em>id</em> which has to be a String that represents the name of - * the member variable. The registering has to occur in the constructor of the inheriting class. - * It is no allowed to add or change properties later on.<p> - * Example: - * <pre> - * public class Foo extends PropertySet - * { - * protected int intProp; - * - * public Foo() - * { - * registerProperty("PropertyA", 0, new Type(int.class), (short)0, "intProp"); - * } - * } - * - * </pre> - */ -public class PropertySet extends ComponentBase implements XPropertySet, XFastPropertySet, -XMultiPropertySet -{ - private HashMap _nameToPropertyMap; - private HashMap _handleToPropertyMap; - private HashMap _propertyToIdMap; - private Property[] arProperties; - - private int lastHandle= 1; - - protected XPropertySetInfo propertySetInfo; - protected MultiTypeInterfaceContainer aBoundLC= new MultiTypeInterfaceContainer(); - protected MultiTypeInterfaceContainer aVetoableLC= new MultiTypeInterfaceContainer(); - public PropertySet() - { - super(); - initMappings(); - } - - /** Registers a property with this helper class and associates the argument <em>id</em> with it. - * <em>id</em> is used to identify the storage of the property value. How property values are stored - * and retrieved is determined by the methods {@link #convertPropertyValue convertPropertyValue}, - * {@link #setPropertyValueNoBroadcast setPropertyValueNoBroadcast} and {@link #getPropertyValue(Property) getPropertyValue} - * These methods expect <em>id</em> to be a java.lang.String which represents the name of a member variable - * which holds the property value. - * Only properties which are registered can be accessed. Registration has to occur during - * initialization of the inheriting class (i.e. within the contructor). - * @param prop The property to be registered. - * @param id Identifies the properties storage. - * @see #getPropertyId - */ - protected void registerProperty(Property prop, Object id) - { - putProperty(prop); - assignPropertyId(prop, id); - } - - /** Registers a property with this helper class and associates the argument id with it. - * It does the same as {@link #registerProperty(Property, Object)}. The first four - * arguments are used to construct a Property object. - * Registration has to occur during - * initialization of the inheriting class (i.e. within the contructor) - * @param name The property's name (Property.Name). - * @param handle The property's handle (Property.Handle). - * @param Type The property's type (Property.Type). - * @param attributes The property's attributes (Property.Attributes). - * @param id Identifies the property's storage. - */ - protected void registerProperty(String name, int handle, Type type, short attributes, Object id) - { - Property p= new Property(name, handle, type, attributes); - registerProperty(p, id); - } - - /** Registers a property with this class and associates the argument id with it. - * It does the same as {@link #registerProperty(Property, Object)}. The first three - * arguments are used to construct a Property object. The value for the Property.Handle - * is generated and does not have to be specified here. Use this method for registering - * a property if you do not care about the Property's handles. - * Registration has to occur during - * initialization of the inheriting class (i.e. within the contructor). - * @param name The property's name (Property.Name). - * @param handle The property's handle (Property.Handle). - * @param Type The property's type (Property.Type). - * @param attributes The property's attributes (Property.Attributes). - * @param id Identifies the property's storage. - */ - protected void registerProperty(String name, Type type, short attributes, Object id) - { - Property p= new Property(name, lastHandle++, type, attributes); - registerProperty(p, id); - } - - /** Registers a property with this class. This method expects that property values - * are stored in member variables as is the case if the methods convertPropertyValue, - * setPropertyValueNoBroadcast and getPropertyValue(Property) are not overridden. - * It is presumed that the type of the member variable - * corresponds Property.Type. For example, if the TypeClass of Property.Type is to be - * a TypeClass.SHORT then the member must be a short or java.lang.Short. - * The handle for the property is generated.<br> - * If there is no member with the specified name or if the member has an incompatible type - * then a com.sun.star.uno.RuntimeException is thrown. - * @param propertyName The name of the property. - * @param memberName The name of the member variable that holds the value of the property. - * @param attributes The property attributes. - */ - protected void registerProperty(String propertyName, String memberName, short attributes) - { - Field propField= null; - try - { - propField= getClass().getDeclaredField(memberName); - } - catch (NoSuchFieldException e) - { - throw new com.sun.star.uno.RuntimeException("there is no member variable: " + memberName); - } - Class cl= propField.getType(); - Type t= new Type(cl); - if (t.getTypeClass() != TypeClass.UNKNOWN) - { - Property p= new Property(propertyName, lastHandle++, t, attributes); - registerProperty(p,memberName); - } - else - throw new com.sun.star.uno.RuntimeException("the member has an unknown type: " + memberName); - } - - /** Registers a property with this class. - * It is presumed that the name of property is equal to the name of the member variable - * that holds the property value. - * @param propertyName The name of the property and the member variable that holds the property's value. - * @param attributes The property attributes. - * @see #registerProperty(String, String, short) - */ - protected void registerProperty(String propertyName, short attributes) - { - registerProperty(propertyName, propertyName, attributes); - } - - - - /** Returns the Property object for a given property name or null if that property does - * not exists (i.e. it has not been registered). Override this method - * if you want to implement your own mapping from property names to Property objects. - * Then you also have to override {@link #initMappings}, {@link #getProperties()} and - * {@link #putProperty(Property)}. - * @param propertyName The name of the property (Property.Name) - * @return The Property object with the name <em>propertyName</em>. - */ - protected Property getProperty(String propertyName) - { - return (Property) _nameToPropertyMap.get(propertyName); - } - - /** Returns the Property object with a handle (Property.Handle) as specified by the argument - * <em>nHandle</em>. The method returns null if there is no such property (i.e. it has not - * been registered). Override this method if you want to implement your own mapping from handles - * to Property objects. Then you also have to override {@link #initMappings}, {@link #putProperty(Property)}. - * @param nHandle The handle of the property (Property.Handle). - * @return The Property object with the handle <em>nHandle</em> - */ - protected Property getPropertyByHandle(int nHandle) - { - return (Property) _handleToPropertyMap.get(new Integer(nHandle)); - } - - /** Returns an array of all Property objects or an array of length null if there - * are no properties. Override this method if you want to implement your own mapping from names - * to Property objects. Then you also have to override {@link #initMappings}, {@link #getProperty(String)} and - * {@link #putProperty}. - * @return Array of all Property objects. - */ - protected Property[] getProperties() - { - if (arProperties == null) - { - Collection values= _nameToPropertyMap.values(); - arProperties= (Property[]) values.toArray(new Property[_nameToPropertyMap.size()]); - } - return arProperties; - } - - /** Stores a Property object so that it can be retrieved subsequently by - * {@link #getProperty(String)},{@link #getProperties()},{@link #getPropertyByHandle(int)}. - * Override this method if you want to implement your own mapping from handles - * to Property objects and names to Property objects. Then you also need to override {@link #initMappings}, - * {@link #getProperty(String)},{@link #getProperties()},{@link #getPropertyByHandle(int)}. - * @param prop The Property object that is to be stored. - */ - protected void putProperty(Property prop) - { - _nameToPropertyMap.put(prop.Name, prop); - if (prop.Handle != -1) - _handleToPropertyMap.put(new Integer(prop.Handle), prop); - } - - /** Assigns an identifyer object to a Property object so that the identifyer - * can be obtained by {@link #getPropertyId getPropertyId} later on. The identifyer - * is used to specify a certain storage for the property's value. If you do not - * override {@link #setPropertyValueNoBroadcast setPropertyValueNoBroadcast} or {@link #getPropertyValue(Property)} - * then the argument <em>id</em> has to be a java.lang.String that equals the name of - * the member variable that holds the Property's value. - * Override this method if you want to implement your own mapping from Property objects to ids or - * if you need ids of a type other then java.lang.String. - * Then you also need to override {@link #initMappings initMappings} and {@link #getPropertyId getPropertyId}. - * @param prop The Property object that is being assigned an id. - * @param id The object which identifies the storage used for the property's value. - * @see #registerProperty(Property, Object) - */ - protected void assignPropertyId(Property prop, Object id) - { - if (id instanceof String && ((String) id).equals("") == false) - _propertyToIdMap.put(prop, id); - } - - /** Returns the identifyer object for a certain Property. The object must have been - * previously assigned to the Property object by {@link #assignPropertyId assignPropertyId}. - * Override this method if you want to implement your own mapping from Property objects to ids. - * Then you also need to override {@link #initMappings initMappings} and {@link #assignPropertyId assignPropertyId}. - * @param prop The property for which the id is to be retrieved. - * @return The id object that identifies the storage used for the property's value. - * @see #registerProperty(Property, Object) - */ - protected Object getPropertyId(Property prop) - { - return _propertyToIdMap.get(prop); - } - - /** Initializes data structures used for mappings of property names to property object, - * property handles to property objects and property objects to id objects. - * Override this method if you want to implement your own mappings. Then you also need to - * override {@link #putProperty putProperty},{@link #getProperty getProperty}, {@link #getPropertyByHandle}, - * {@link #assignPropertyId assignPropertyId} and {@link #getPropertyId getPropertyId}. - */ - protected void initMappings() - { - _nameToPropertyMap= new HashMap(); - _handleToPropertyMap= new HashMap(); - _propertyToIdMap= new HashMap(); - } - - /** Makes sure that listeners which are kept in aBoundLC (XPropertyChangeListener) and aVetoableLC - * (XVetoableChangeListener) receive a disposing call. Also those listeners are relesased. - */ - protected void postDisposing() - { - // Create an event with this as sender - EventObject aEvt= new EventObject(this); - - // inform all listeners to reelease this object - aBoundLC.disposeAndClear(aEvt); - aVetoableLC.disposeAndClear(aEvt); - } - - //XPropertySet ---------------------------------------------------- - synchronized public void addPropertyChangeListener(String str, XPropertyChangeListener xPropertyChangeListener) - throws UnknownPropertyException, WrappedTargetException - { - // only add listeners if you are not disposed - if (! bInDispose && ! bDisposed) - { - if (str.length() > 0) - { - Property prop= getProperty(str); - if (prop == null) - throw new UnknownPropertyException("Property " + str + " is unknown"); - - // Add listener for a certain property - if ((prop.Attributes & PropertyAttribute.BOUND) > 0) - aBoundLC.addInterface(str, xPropertyChangeListener); - else - //ignore silently - return; - } - else - // Add listener for all properties - listenerContainer.addInterface(XPropertyChangeListener.class, xPropertyChangeListener); - } - } - //XPropertySet ---------------------------------------------------- - synchronized public void addVetoableChangeListener(String str, com.sun.star.beans.XVetoableChangeListener xVetoableChangeListener) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException - { - // only add listeners if you are not disposed - if (! bInDispose && ! bDisposed) - { - if (str.length() > 0) - { - Property prop= getProperty(str); - if (prop == null) - throw new UnknownPropertyException("Property " + str + " is unknown"); - - // Add listener for a certain property - if ((prop.Attributes & PropertyAttribute.CONSTRAINED) > 0) - aVetoableLC.addInterface(str, xVetoableChangeListener); - else - //ignore silently - return; - } - else - // Add listener for all properties - listenerContainer.addInterface(XVetoableChangeListener.class, xVetoableChangeListener); - } - } - //XPropertySet ---------------------------------------------------- - public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() - { - if (propertySetInfo == null) - { - synchronized (this) - { - if (propertySetInfo == null) - propertySetInfo= new PropertySetInfo(); - } - } - return propertySetInfo; - } - //XPropertySet ---------------------------------------------------- - public Object getPropertyValue(String name) throws UnknownPropertyException, WrappedTargetException - { - Object ret= null; - if (bInDispose || bDisposed) - throw new com.sun.star.lang.DisposedException("The component has been disposed already"); - - Property prop= getProperty(name); - if (prop == null) - throw new UnknownPropertyException("The property " + name + " is unknown"); - - synchronized (this) - { - ret= getPropertyValue(prop); - } - // null must not be returned. Either a void any is returned or an any containing - // an interface type and a null reference. - if (ret == null) - { - if (prop.Type.getTypeClass() == TypeClass.INTERFACE) - ret= new Any(prop.Type, null); - else - ret= new Any(new Type(void.class), null); - } - return ret; - } - - //XPropertySet ---------------------------------------------------- - synchronized public void removePropertyChangeListener(String propName, XPropertyChangeListener listener) throws UnknownPropertyException, WrappedTargetException - { // all listeners are automaticly released in a dispose call - if (!bInDispose && !bDisposed) - { - if (propName.length() > 0) - { - Property prop = getProperty(propName); - if (prop == null) - throw new UnknownPropertyException("Property " + propName + " is unknown"); - aBoundLC.removeInterface(propName, listener); - } - else - listenerContainer.removeInterface(XPropertyChangeListener.class, listener); - } - } - - //XPropertySet ---------------------------------------------------- - synchronized public void removeVetoableChangeListener(String propName, XVetoableChangeListener listener) throws UnknownPropertyException, WrappedTargetException - {// all listeners are automaticly released in a dispose call - if (!bInDispose && !bDisposed) - { - if (propName.length() > 0) - { - Property prop = getProperty(propName); - if (prop == null) - throw new UnknownPropertyException("Property " + propName + " is unknown"); - aVetoableLC.removeInterface(propName, listener); - } - else - listenerContainer.removeInterface(XVetoableChangeListener.class, listener); - } - } - - //XPropertySet ---------------------------------------------------- - /** Sets the value of a property. - * The idl description for this interfaces, stipulates that the argument value is an Any. Since a java.lang.Object - * reference has the same meaning as an Any this function accepts - * java anys (com.sun.star.uno.Any) and all other appropriate objects as arguments. The value argument can be one - * of these: - * <ul> - * <li>java.lang.Boolean</li> - * <li>java.lang.Character</li> - * <li>java.lang.Byte</li> - * <li>java.lang.Short</li> - * <li>java.lang.Integer</li> - * <li>java.lang.Long</li> - * <li>java.lang.Float</li> - * <li>java.lang.Double</li> - * <li>java.lang.String</li> - * <li>com.sun.star.uno.Type</li> - * <li><em>objects which implement UNO interfaces</em></li> - * <li><em>arrays which contain elements of the types above</em></li> - * <li>com.sun.star.uno.Any containing an instance of one of the above types</li> - * </ul> - * - * Properties can have the attribute com.sun.star.beans.PropertyAttribute.MAYBEVOID, which means that the value - * (not the type) can be void. In order to assign a void value to a property one can either pass an Any which - * contains a null reference or pass null directly. In bothe cases the null reference is only accepted if - * the PropertyAttribute.MAYBEVOID attribute is set for the property. - * - * Properties which have the attribute MAYBEVOID set (Property.Attributes) can have a void value. The following - * considerations presume that the Property has that attribute set. Further, when mentioning an Any's value we - * actually refer to the object returned by Any.getObject. - * If the argument <em>value</em> is null, or it is an Any whose value is null (but with a valid Type) - * then the member variable used for storing the property's value is set to null. - * Therefore those properties can only be stored in objects - * and primitive types are not allowed (one can use the wrapper classes instead,e.g. java.lang.Byte) . - * If a property's value is kept in a member variable of type Any and that reference is still null - * then when setPropertyValue is called with - * <em>value</em> = null then the member variable is assigned an Any with type void and a null value. - * Or if the argument is an Any with a null value then it is assigned to the member variable. - * Further, if the variable already - * references an Any and setPropertyValue is called with <em>value</em> = null, then the variable is assigned - * a new Any with the same type as the previously referenced Any and with a null value. - * @param name The name of the property. - * @param value The new value of the property. - * * */ - public void setPropertyValue(String name, Object value) throws UnknownPropertyException, - PropertyVetoException, com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - Property prop= getProperty(name); - if (prop == null) - throw new UnknownPropertyException("Property " + name + " is unknown"); - setPropertyValue(prop, value); - } - - /** Sets the value of a property. It checks if the property's attributes (READONLY,MAYBEVOID), allow that the - * new value can be set. It also causes the notification of listeners. - * @param prop The property whose value is to be set. - * @param value The new value for the property. - */ - protected void setPropertyValue(Property prop, Object value) throws UnknownPropertyException, - PropertyVetoException, com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - if ((prop.Attributes & PropertyAttribute.READONLY) == PropertyAttribute.READONLY) - throw new com.sun.star.beans.PropertyVetoException(); - // The value may be null only if MAYBEVOID attribute is set - boolean bVoidValue= false; - if (value instanceof Any) - bVoidValue= ((Any) value).getObject() == null; - else - bVoidValue= value == null; - if (bVoidValue && (prop.Attributes & PropertyAttribute.MAYBEVOID) == 0) - throw new com.sun.star.lang.IllegalArgumentException("The property must have a value; the MAYBEVOID attribute is not set!"); - if (bInDispose || bDisposed) - throw new DisposedException("Component is already disposed"); - - //Check if the argument is allowed - boolean bValueOk= false; - if (value instanceof Any) - bValueOk= checkType(((Any) value).getObject()); - else - bValueOk= checkType(value); - if (! bValueOk) - throw new com.sun.star.lang.IllegalArgumentException("No valid UNO type"); - - - boolean bConversionOk= false; - Object[] outConvertedVal= new Object[1]; - Object[] outOldValue= new Object[1]; - synchronized (this) - { - bConversionOk= convertPropertyValue(prop, outConvertedVal, outOldValue, value); - } - - //The next step following the conversion is to set the new value of the property. Prior to this - // the XVetoableChangeListener s have to be notified. - if (bConversionOk) - { - // If the property is CONSTRAINED, then we must notify XVetoableChangeListener. The listener can throw a com.sun.star.lang.beans.PropertyVetoException which - // will cause this method to return (the exception is not caught here). - fire( new Property[]{prop}, outConvertedVal, outOldValue, true); - - synchronized (this) - { - setPropertyValueNoBroadcast(prop, outConvertedVal[0]); - } - // fire a change event (XPropertyChangeListener, PropertyAttribute.BOUND - fire( new Property[]{prop}, outConvertedVal, outOldValue, false); - } - } - - /** Converts a value in a way so that it is appropriate for storing as a property value, that is - * {@link #setPropertyValueNoBroadcast setPropertyValueNoBroadcast} can process the value without any further - * conversion. This implementation presumes that - * the values are stored in member variables of the furthest inheriting class. For example, - * class A inherits this class then members of class A - * can hold property values. If there is a class B which inherits A then only members of B can hold - * property values. The variables must be public. A property must have been registered (e.g. by - * {@link #registerProperty(Property, Object)} in order for this method to work. The identifyer argument (type Object) - * used in the registerProperty methods must - * be a java.lang.String, which is, the name of the member variable that holds the property value. - * If one opts to store values differently then one may override - * this method, as well as {@link #setPropertyValueNoBroadcast setPropertyValueNoBroadcast} and - * {@link #getPropertyValue(Property) getPropertyValue(Property)}. - * This method is always called as a result of a call to one of the setter methods, such as - * {@link #setPropertyValue(String,Object) XPropertySet.setPropertyValue}, - * {@link #setFastPropertyValue XFastPropertySet.setFastPropertyValue} - * and {@link #setPropertyValues XMultiPropertySet.setPropertyValues}. - * If this method fails, that is, it returns false or throws an exception, then no listeners are notified and the - * property value, that was intended to be changed, remains untouched.<br /> This method does not have to deal with property attributes, such as - * PropertyAttribute.READONLY or PropertyAttribute.MAYBEVOID. The processing of these attributes occurs - * in the calling methods.<br /> - * Only if this method returns successfully further processing, such - * as listener notification and finally the modifiction of the property's value, will occur.<br /> - * - * The actual modification of a property's value is done by {@link #setPropertyValueNoBroadcast setPropertyValueNoBroadcast} - * which is called subsequent to convertPropertyValue. - *<p> - * This method converts values by help of the com.sun.star.uno.AnyConverter which only does a few widening - * conversions on integer types and floating point types. For example, there is the property PropA with a Type equivalent - * to int.class and the - * value of the property is to be stored in a member variable of type int with name intProp. Then setPropertyValue is - * called: - * <pre> - * set.setPropertyValue( "PropA", new Byte( (byte)111)); - * </pre> - * At some point setPropertyValue will call convertPropertyValue and pass in the Byte object. Since we allow - * that Byte values can be used with the property and know that the value is to be stored in intProp (type int) - * we convert the Byte object into an Integer object which is then returned in the out-parameter <em>newVal</em>. This - * conversion is actually performed by the AnyConverter. Later - * the setPropertyValueNoBroadcast is called with that Integer object and the int value can be easily extracted - * from the object and be assigned to the member intProp. - * <p> - * The method handles Any arguments the same as Object arguments. That is, the <em>setVal</em> argument can - * be a java.lang.Boolean or a com.sun.star.uno.Any containing a java.lang.Boolean. Likewise, a member - * containing a property value can be a com.sun.star.uno.Any or an java.lang.Object. - * Then, no conversion is necessary, since they can hold all possible values. However, if - * the member is an Object and <em>setVal</em> is an Any then the object contained in the any is assigned to - * the member. The extra type information which exists as Type object in the Any will get lost. If this is not - * intended then use an Any variable rather then an Object.<br /> - * If a member is an Object or Any and the argument <em>setVal</em> is an Object, other than String or array, - * then it is presumed to be an UNO object and queried for XInterface. If successful, the out-param <em>newVal</em> - * returns the XInterface.<br /> - * If a member is an UNO interface, then <em>setVal</em> is queried for this interface and the result is returned. - * If <em>setVal</em> is null then <em>newVal</em> will be null too after return. - * <p> - * If a property value is stored using a primitive type the the out-parameters - * <em>curVal</em> and <em>newVal</em> contain the respective wrapper class (e.g.java.lang.Byte, etc.). - * curVal is used in calls to the XVetoableChangeListener and XPropertyChangeListener. - * - * @param property - in-param property for which the data is to be converted. - * @param newVal - out-param which contains the converted value on return. - * @param curVal - out-param the current value of the property. It is used in calls to the - * XVetoableChangeListener and XPropertyChangeListener. - * @param setVal - in-param. The value that is to be converted so that it matches Property and the internally used - * dataformat for that property. - * @return true - Conversion was successful. <em>newVal</em> contains a valid value for the property. false - - * conversion failed for some reason. - * @throws com.sun.star.lang.IllegalArgumentException The value provided is unfit for the property. - * @throws com.sun.star.lang.WrappedTargetException - An exception occurred during the conversion, that is to be made known - * to the caller. - */ - protected boolean convertPropertyValue(Property property, Object[] newVal, Object[]curVal, Object setVal) - throws com.sun.star.lang.IllegalArgumentException, WrappedTargetException, UnknownPropertyException - { - boolean ret= true; - try - { - // get the member name - String sMember= (String) getPropertyId(property); - if (sMember != null) - { - // use reflection to obtain the field that holds the property value - // Class.getDeclaredFields does not return inherited fields. One could use Class.getFields to - // also get inherited fields, but only those which are public. - Field propField= getClass().getDeclaredField(sMember); - if (propField != null) - { - curVal[0]= propField.get(this); - Class memberClass= propField.getType(); - - // MAYBEVOID: if setVal == null or it is an Any and getObject returns null, then a void value is to be set - // This works only if there are no primitive types. For those we use the respective wrapper classes. - // In this implementation, a null reference means void value. - boolean bVoidValue= false; - boolean bAnyVal= setVal instanceof Any; - if (bAnyVal) - bVoidValue= ((Any) setVal).getObject() == null; - else - bVoidValue= setVal == null; - if (bVoidValue && memberClass.isPrimitive()) - throw new com.sun.star.lang.IllegalArgumentException("The implementation does not support the MAYBEVOID attribute for this property"); - - Object convObj= null; - //The member that keeps the value of the Property is an Any. It can contain all possible - //types, therefore a conversion is not necessary. - if (memberClass.equals(Any.class)) - { - if (bAnyVal) - //parameter setVal is also an Any and can be used without further processing - convObj= setVal; - else - { - // Parameter setVal is not an Any. We need to construct an Any that contains - // the argument setVal. - // If setVal is an interface implementation then, we cannot constuct the - // Any with setVal.getClass(), because the Any.Type._typeClass would be TypeClass.UNKNOWN. - // We try to get an XInterface of setVal and set an XInterface type. - if (setVal instanceof XInterface) - { - XInterface xint= UnoRuntime.queryInterface(XInterface.class, setVal); - if (xint != null) - convObj= new Any(new Type(XInterface.class), xint); - } - // The member is an any, and the past in argument was null reference (MAYBEVOID is set) - else if (setVal == null) - { - // if the any member is still null we create a void any - if (curVal[0] == null) - convObj= new Any(new Type(), null); - else - { - //otherwise we create an Any with the same type as a value of null; - convObj= new Any( ((Any)curVal[0]).getType(), null); - } - } - else - convObj= new Any(new Type(setVal.getClass()), setVal); - } - } - else - convObj= convert(memberClass, setVal); - newVal[0]= convObj; - } - } - else - throw new UnknownPropertyException("Property " + property.Name + " is unknown"); - } - catch (java.lang.NoSuchFieldException e) - { - throw new WrappedTargetException("Field does not exist", this, e); - } - catch (java.lang.IllegalAccessException e) - { - throw new WrappedTargetException("", this ,e); - } - return ret; - } - - private boolean checkType(Object obj) - { - if (obj == null - || obj instanceof Boolean - || obj instanceof Character - || obj instanceof Number - || obj instanceof String - || obj instanceof XInterface - || obj instanceof Type - || obj instanceof com.sun.star.uno.Enum - || obj.getClass().isArray()) - return true; - return false; - } - - // Param object can be an Any or other object. If obj is null then the return value is null - private Object convert( Class cl, Object obj) throws com.sun.star.lang.IllegalArgumentException - { - Object retVal= null; - //The member that keeps the value of the Property is an Object.Objects are similar to Anys in that they can - // hold all types. - if (obj == null || (obj instanceof Any && ((Any) obj).getObject() == null)) - retVal= null; - else if(cl.equals(Object.class)) - { - if (obj instanceof Any) - obj= ((Any) obj).getObject(); - retVal= obj; - } - else if(cl.equals(boolean.class)) - retVal= new Boolean(AnyConverter.toBoolean(obj)); - else if (cl.equals(char.class)) - retVal= new Character(AnyConverter.toChar(obj)); - else if (cl.equals(byte.class)) - retVal= new Byte(AnyConverter.toByte(obj)); - else if (cl.equals(short.class)) - retVal= new Short(AnyConverter.toShort(obj)); - else if (cl.equals(int.class)) - retVal= new Integer(AnyConverter.toInt(obj)); - else if (cl.equals(long.class)) - retVal= new Long(AnyConverter.toLong(obj)); - else if (cl.equals(float.class)) - retVal= new Float(AnyConverter.toFloat(obj)); - else if (cl.equals(double.class)) - retVal= new Double(AnyConverter.toDouble(obj)); - else if (cl.equals(String.class)) - retVal= AnyConverter.toString(obj); - else if (cl.isArray()) - retVal= AnyConverter.toArray(obj); - else if (cl.equals(Type.class)) - retVal= AnyConverter.toType(obj); - else if (cl.equals(Boolean.class)) - retVal= new Boolean(AnyConverter.toBoolean(obj)); - else if (cl.equals(Character.class)) - retVal= new Character(AnyConverter.toChar(obj)); - else if (cl.equals(Byte.class)) - retVal= new Byte(AnyConverter.toByte(obj)); - else if (cl.equals(Short.class)) - retVal= new Short(AnyConverter.toShort(obj)); - else if (cl.equals(Integer.class)) - retVal= new Integer(AnyConverter.toInt(obj)); - else if (cl.equals(Long.class)) - retVal= new Long(AnyConverter.toLong(obj)); - else if (cl.equals(Float.class)) - retVal= new Float(AnyConverter.toFloat(obj)); - else if (cl.equals(Double.class)) - retVal= new Double(AnyConverter.toDouble(obj)); - else if (XInterface.class.isAssignableFrom(cl)) - retVal= AnyConverter.toObject(new Type(cl), obj); - else if (com.sun.star.uno.Enum.class.isAssignableFrom(cl)) - retVal= AnyConverter.toObject(new Type(cl), obj); - else - throw new com.sun.star.lang.IllegalArgumentException("Could not convert the argument"); - return retVal; - } - - /** Sets the value of a property. In this implementation property values are stored in member variables - * (see {@link #convertPropertyValue convertPropertyValue} Notification of property listeners - * does not occur in this method. By overriding this method one can take full control about how property values - * are stored. But then, the {@link #convertPropertyValue convertPropertyValue} and - * {@link #getPropertyValue(Property)} must be overridden too. - * - * A Property with the MAYBEVOID attribute set, is stored as null value. Therefore the member variable must be - * an Object in order to make use of the property attribute. An exception is Any. The Any variable can be initially null, but - * once it is set the reference will not become null again. If the value is to be set to - * void then a new Any will be stored - * with a valid type but without a value (i.e. Any.getObject returns null). - * If a property has the READONLY attribute set, and one of the setter methods, such as setPropertyValue, has been - * called, then this method is not going to be called. - * @param property the property for which the new value is set - * @param value the new value for the property. - * @throws com.sun.star.lang.WrappedTargetException An exception, which has to be made known to the caller, - * occurred during the setting of the value. - */ - protected void setPropertyValueNoBroadcast(Property property, Object newVal) - throws WrappedTargetException - { - try - { - // get the member name - String sMember= (String) getPropertyId(property); - if (sMember != null) - { - // use reflection to obtain the field that holds the property value - // Class.getDeclaredFields does not return inherited fields. One could use Class.getFields to - // also get inherited fields, but only those which are public. - Field propField= getClass().getDeclaredField(sMember); - if (propField != null) - propField.set(this, newVal); - } - } - catch(java.lang.Exception e) - { - throw new WrappedTargetException("PropertySet.setPropertyValueNoBroadcast", this, e); - } - } - /** Retrieves the value of a property. This implementation presumes that the values are stored in member variables - * of the furthest inheriting class (see {@link #convertPropertyValue convertPropertyValue}) and that the - * variables are public. The property must have - * been registered, for example by {@link #registerProperty(Property, Object)}. The identifyer Object argument - * must have been a java.lang.String which was the name of the member variable holding the property value. - * When properties are to be stored differently one has to override this method as well as - * {@link #convertPropertyValue} and {@link #setPropertyValueNoBroadcast}. <br> - * If a value is stored in a variable of a primitive type then this method returns an instance of the respective - * wrapper class (e.g. java.lang.Boolean). - * @param property The property for which the value is to be retrieved. - * @return The value of the property. - */ - protected Object getPropertyValue(Property property) - { - Object ret= null; - try - { - // get the member name - String sMember= (String) getPropertyId(property); - if (sMember != null) - { - // use reflection to obtain the field that holds the property value - // Class.getDeclaredFields does not return inherited fields. One could use Class.getFields to - // also get inherited fields, but only those which are public. - Field propField= getClass().getDeclaredField(sMember); - if (propField != null) - ret= propField.get(this); - } - } - catch(java.lang.NoSuchFieldException e) - { - throw new java.lang.RuntimeException(e); - } - catch(java.lang.IllegalAccessException e) - { - throw new java.lang.RuntimeException(e); - } - return ret; - } - - /** - * This method fires events to XPropertyChangeListener,XVetoableChangeListener and - * XPropertiesChangeListener event sinks. - * To distinguish what listeners are to be called the argument <em>bVetoable</em> is to be set to true if - * a XVetoableChangeListener is meant. For XPropertyChangeListener and XPropertiesChangeListener - * it is to be set to false. - * - * @param properties Properties wich will be or have been affected. - * @param newValues the new values of the properties. - * @param oldValues the old values of the properties. - * @param bVetoable true means fire to VetoableChangeListener, false means fire to - * XPropertyChangedListener and XMultiPropertyChangedListener. - */ - protected void fire( - Property[] properties, - Object[] newValues, - Object[] oldValues, - boolean bVetoable ) throws PropertyVetoException - { - // Only fire, if one or more properties changed - int nNumProps= properties.length; - if (nNumProps > 0) - { - PropertyChangeEvent[] arEvts= new PropertyChangeEvent[nNumProps]; - int nAffectedProps= 0; - // Loop over all changed properties to fill the event struct - for (int i= 0; i < nNumProps; i++) - { - if ((bVetoable && (properties[i].Attributes & PropertyAttribute.CONSTRAINED) > 0) - || (!bVetoable && (properties[i].Attributes & PropertyAttribute.BOUND) > 0)) - { - arEvts[i]= new PropertyChangeEvent(this, properties[i].Name, false, - properties[i].Handle, oldValues[i], newValues[i]); - nAffectedProps++; - } - } - // fire the events for all changed properties - for (int i= 0; i < nAffectedProps; i++) - { - // get the listener container for the property name - InterfaceContainer lc= null; - if (bVetoable) - lc= aVetoableLC.getContainer(arEvts[i].PropertyName); - else - lc= aBoundLC.getContainer(arEvts[i].PropertyName); - if (lc != null) - { - Iterator it= lc.iterator(); - while( it.hasNext()) - { - Object listener= it.next(); - if (bVetoable) - ((XVetoableChangeListener) listener).vetoableChange(arEvts[i]); - else - ((XPropertyChangeListener) listener).propertyChange(arEvts[i]); - } - } - // broadcast to all listeners with "" property name - if(bVetoable) - lc= listenerContainer.getContainer(XVetoableChangeListener.class); - else - lc= listenerContainer.getContainer(XPropertyChangeListener.class); - if(lc != null) - { - Iterator it= lc.iterator(); - while(it.hasNext() ) - { - Object listener= it.next(); - if( bVetoable ) // fire change Events? - ((XVetoableChangeListener) listener).vetoableChange(arEvts[i]); - else - ((XPropertyChangeListener) listener).propertyChange(arEvts[i]); - } - } - } - // fire at XPropertiesChangeListeners - // if nAffectedProps == 0 then there are no BOUND properties - if (!bVetoable && nAffectedProps > 0) - { - - PropertyChangeEvent[] arReduced= new PropertyChangeEvent[nAffectedProps]; - System.arraycopy(arEvts, 0, arReduced, 0, nAffectedProps); - InterfaceContainer lc= listenerContainer.getContainer(XPropertiesChangeListener.class); - if (lc != null) - { - Iterator it= lc.iterator(); - while (it.hasNext()) - { - XPropertiesChangeListener listener = (XPropertiesChangeListener) it.next(); - // fire the hole event sequence to the XPropertiesChangeListener's - listener.propertiesChange( arEvts ); - } - } - } - } - } - // XFastPropertySet-------------------------------------------------------------------------------- - public void setFastPropertyValue(int nHandle, Object aValue ) throws UnknownPropertyException, - PropertyVetoException, com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - Property prop= getPropertyByHandle(nHandle); - if (prop == null) - throw new UnknownPropertyException(" The property with handle : " + nHandle +" is unknown"); - setPropertyValue(prop, aValue); - } - - // XFastPropertySet -------------------------------------------------------------------------------- - public Object getFastPropertyValue(int nHandle ) throws UnknownPropertyException, - WrappedTargetException - { - Property prop= getPropertyByHandle(nHandle); - if (prop == null) - throw new UnknownPropertyException("The property with handle : " + nHandle + " is unknown"); - return getPropertyValue(prop); - } - - // XMultiPropertySet ----------------------------------------------------------------------------------- - public void addPropertiesChangeListener(String[] propNames, XPropertiesChangeListener listener) - { - listenerContainer.addInterface(XPropertiesChangeListener.class, listener); - } - - // XMultiPropertySet ----------------------------------------------------------------------------------- - public void firePropertiesChangeEvent(String[] propNames, XPropertiesChangeListener listener) - { - // Build the events. - PropertyChangeEvent[] arEvents= new PropertyChangeEvent[propNames.length]; - int eventCount= 0; - // get a snapshot of the current property values - synchronized (this) - { - for (int i= 0; i < propNames.length; i++) - { - Property prop= getProperty(propNames[i]); - if (prop != null) - { - Object value= null; - try - { - value= getPropertyValue(prop); - } - catch(Exception e) - { - continue; - } - arEvents[eventCount]= new PropertyChangeEvent(this, prop.Name, - false, prop.Handle, value, value); - eventCount++; - } - } - } - - // fire events from unsynchronized section so as to prevent deadlocks - if (eventCount > 0) - { - // Reallocate the array of the events if necessary - if (arEvents.length != eventCount) - { - PropertyChangeEvent[] arPropsTmp= new PropertyChangeEvent[eventCount]; - System.arraycopy(arEvents, 0, arPropsTmp, 0, eventCount); - arEvents= arPropsTmp; - } - listener.propertiesChange(arEvents); - } - } - // XMultiPropertySet ----------------------------------------------------------------------------------- - /** If a value for a property could not be retrieved then the respective element in the returned - * array has the value null. - */ - public Object[] getPropertyValues(String[] propNames) - { - Object[] arValues= new Object[propNames.length]; - synchronized (this) - { - for (int i= 0; i < propNames.length; i++) - { - Object value= null; - try - { - value= getPropertyValue(propNames[i]); - } - catch (Exception e) - { - } - arValues[i]= value; - } - } - return arValues; - } - // XMultiPropertySet ----------------------------------------------------------------------------------- - public void removePropertiesChangeListener(XPropertiesChangeListener xPropertiesChangeListener) - { - listenerContainer.removeInterface(XPropertiesChangeListener.class, xPropertiesChangeListener); - } - // XMultiPropertySet ----------------------------------------------------------------------------------- - /** If the array of property names containes an unknown property then it will be ignored. - */ - public void setPropertyValues(String[] propNames, Object[] values) throws PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException - { - for (int i= 0; i < propNames.length; i++) - { - try - { - setPropertyValue(propNames[i], values[i]); - } - catch (UnknownPropertyException e) - { - continue; - } - - } - } - - private class PropertySetInfo implements XPropertySetInfo - { - public com.sun.star.beans.Property[] getProperties() - { - return PropertySet.this.getProperties(); - } - - public com.sun.star.beans.Property getPropertyByName(String name) throws UnknownPropertyException - { - return getProperty(name); - } - - public boolean hasPropertyByName(String name) - { - return getProperty(name) != null; - } - - } -} - - - - - diff --git a/javaunohelper/com/sun/star/lib/uno/helper/PropertySetMixin.java b/javaunohelper/com/sun/star/lib/uno/helper/PropertySetMixin.java deleted file mode 100644 index 643cd43f1..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/PropertySetMixin.java +++ /dev/null @@ -1,1093 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; - -import com.sun.star.beans.Property; -import com.sun.star.beans.PropertyAttribute; -import com.sun.star.beans.PropertyChangeEvent; -import com.sun.star.beans.PropertyState; -import com.sun.star.beans.PropertyValue; -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertyChangeListener; -import com.sun.star.beans.XPropertySetInfo; -import com.sun.star.beans.XVetoableChangeListener; -import com.sun.star.container.NoSuchElementException; -import com.sun.star.container.XHierarchicalNameAccess; -import com.sun.star.lang.DisposedException; -import com.sun.star.lang.EventObject; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lang.WrappedTargetRuntimeException; -import com.sun.star.lang.XComponent; -import com.sun.star.reflection.XCompoundTypeDescription; -import com.sun.star.reflection.XIdlClass; -import com.sun.star.reflection.XIdlField2; -import com.sun.star.reflection.XIdlReflection; -import com.sun.star.reflection.XIndirectTypeDescription; -import com.sun.star.reflection.XInterfaceAttributeTypeDescription2; -import com.sun.star.reflection.XInterfaceMemberTypeDescription; -import com.sun.star.reflection.XInterfaceTypeDescription2; -import com.sun.star.reflection.XStructTypeDescription; -import com.sun.star.reflection.XTypeDescription; -import com.sun.star.uno.Any; -import com.sun.star.uno.AnyConverter; -import com.sun.star.uno.DeploymentException; -import com.sun.star.uno.Type; -import com.sun.star.uno.TypeClass; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; -import com.sun.star.uno.XInterface; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Vector; - -/** - A helper mixin to implement certain UNO interfaces related to property set - handling on top of the attributes of a given UNO interface type. - - <p>A client will mix in this class by keeping a reference to an instance of - this class, and forwarding all methods of (a subset of the interfaces) - <code>com.sun.star.beans.XPropertySet</code>, - <code>com.sun.star.beans.XFastPropertySet</code>, and - <code>com.sun.star.beans.XPropertyAccess</code> to it.</p> - - <p>Client code should not use the monitors associated with instances of this - class, as they are used for internal purposes.</p> - - @since UDK 3.2 -*/ -public final class PropertySetMixin { - /** - The constructor. - - @param context the component context used by this instance; must not be - null, and must supply the service - <code>com.sun.star.reflection.CoreReflection</code> and the singleton - <code>com.sun.star.reflection.theTypeDescriptionManager</code> - - @param object the client UNO object into which this instance is mixed in; - must not be null, and must support the given <code>type</code> - - @param type the UNO interface type whose attributes are mapped to - properties; must not be null, and must represent a UNO interface type - - @param absentOptional a list of optional properties that are not present, - and should thus not be visible via - <code>com.sun.star.beans.XPropertySet.getPropertySetInfo</code>, - <code>com.sun.star.beans.XPropertySet.addPropertyChangeListener</code>, - <code>com.sun.star.beans.XPropertySet.removePropertyChangeListener<!-- - --></code>, - <code>com.sun.star.beans.XPropertySet.addVetoableChangeListener</code>, - and <code>com.sun.star.beans.XPropertySet.<!-- - -->removeVetoableChangeListener</code>; null is treated the same as an - empty list; if non-null, the given array must not be modified after it is - passed to this constructor. For consistency reasons, the given - <code>absentOptional</code> should only contain the names of attributes - that represent optional properties that are not present (that is, the - attribute getters and setters always throw a - <code>com.sun.star.beans.UnknownPropertyException</code>), and should - contain each such name only once. If an optional property is not present - (that is, the corresponding attribute getter and setter always throw a - <code>com.sun.star.beans.UnknownPropertyException</code>) but is not - contained in the given <code>absentOptional</code>, then it will be - visible via - <code>com.sun.star.beans.XPropertySet.getPropertySetInfo</code> as a - <code>com.sun.star.beans.Property</code> with a set - <code>com.sun.star.beans.PropertyAttribute.OPTIONAL</code>. If the given - <code>object</code> does not implement - <code>com.sun.star.beans.XPropertySet</code>, then the given - <code>absentOptional</code> is effectively ignored and can be null or - empty. - */ - public PropertySetMixin( - XComponentContext context, XInterface object, Type type, - String[] absentOptional) - { - // assert context != null && object != null && type != null - // && type.getTypeClass() == TypeClass.INTERFACE; - this.context = context; - this.object = object; - this.type = type; - this.absentOptional = absentOptional; - idlClass = getReflection(type.getTypeName()); - XTypeDescription ifc; - try { - ifc = UnoRuntime.queryInterface( - XTypeDescription.class, - (UnoRuntime.queryInterface( - XHierarchicalNameAccess.class, - context.getValueByName( - "/singletons/com.sun.star.reflection." - + "theTypeDescriptionManager")). - getByHierarchicalName(type.getTypeName()))); - } catch (NoSuchElementException e) { - throw new RuntimeException( - "unexpected com.sun.star.container.NoSuchElementException: " - + e.getMessage()); - } - HashMap map = new HashMap(); - ArrayList handleNames = new ArrayList(); - initProperties(ifc, map, handleNames, new HashSet()); - properties = map; - handleMap = (String[]) handleNames.toArray( - new String[handleNames.size()]); - } - - /** - A method used by clients when implementing UNO interface type attribute - setter functions. - - <p>First, this method checks whether this instance has already been - disposed (see {@link #dispose}), and throws a - <code>com.sun.star.beans.DisposedException</code> if applicable. For a - constrained attribute (whose setter can explicitly raise - <code>com.sun.star.beans.PropertyVetoException</code>), this method - notifies any <code>com.sun.star.beans.XVetoableChangeListener</code>s. - For a bound attribute, this method modifies the passed-in - <code>bound</code> so that it can afterwards be used to notify any - <code>com.sun.star.beans.XPropertyChangeListener</code>s. This method - should be called before storing the new attribute value, and - <code>bound.notifyListeners()</code> should be called exactly once after - storing the new attribute value (in case the attribute is bound; - otherwise, calling <code>bound.notifyListeners()</code> is ignored). - Furthermore, <code>bound.notifyListeners()</code> and this method have to - be called from the same thread.</p> - - @param propertyName the name of the property (which is the same as the - name of the attribute that is going to be set) - - @param oldValue the property value corresponding to the old attribute - value. This is only used as - <code>com.sun.star.beans.PropertyChangeEvent.OldValue</code>, which is - rather useless, anyway (see “Using the Observer Pattern” in - <a href="http://tools.openoffice.org/CodingGuidelines.sxw"> - <cite>OpenOffice.org Coding Guidelines</cite></a>). If the attribute - that is going to be set is neither bound nor constrained, or if - <code>com.sun.star.beans.PropertyChangeEvent.OldValue</code> should not - be set, {@link Any#VOID} can be used instead. - - @param newValue the property value corresponding to the new - attribute value. This is only used as - <code>com.sun.star.beans.PropertyChangeEvent.NewValue</code>, which is - rather useless, anyway (see “Using the Observer Pattern&rdquo: in - <a href="http://tools.openoffice.org/CodingGuidelines.sxw"> - <cite>OpenOffice.org Coding Guidelines</cite></a>), <em>unless</em> the - attribute that is going to be set is constrained. If the attribute - that is going to be set is neither bound nor constrained, or if it is - only bound but - <code>com.sun.star.beans.PropertyChangeEvent.NewValue</code> should not - be set, {@link Any#VOID} can be used instead. - - @param bound a reference to a fresh {@link BoundListeners} instance - (which has not been passed to this method before, and on which - {@link BoundListeners#notifyListeners} has not yet been called); may only - be null if the attribute that is going to be set is not bound - */ - public void prepareSet( - String propertyName, Object oldValue, Object newValue, - BoundListeners bound) - throws PropertyVetoException - { - // assert properties.get(propertyName) != null; - Property p = ((PropertyData) properties.get(propertyName)).property; - Vector specificVeto = null; - Vector unspecificVeto = null; - synchronized (this) { - if (disposed) { - throw new DisposedException("disposed", object); - } - if ((p.Attributes & PropertyAttribute.CONSTRAINED) != 0) { - Object o = vetoListeners.get(propertyName); - if (o != null) { - specificVeto = (Vector) ((Vector) o).clone(); - } - o = vetoListeners.get(""); - if (o != null) { - unspecificVeto = (Vector) ((Vector) o).clone(); - } - } - if ((p.Attributes & PropertyAttribute.BOUND) != 0) { - // assert bound != null; - Object o = boundListeners.get(propertyName); - if (o != null) { - bound.specificListeners = (Vector) ((Vector) o).clone(); - } - o = boundListeners.get(""); - if (o != null) { - bound.unspecificListeners = (Vector) ((Vector) o).clone(); - } - } - } - if ((p.Attributes & PropertyAttribute.CONSTRAINED) != 0) { - PropertyChangeEvent event = new PropertyChangeEvent( - object, propertyName, false, p.Handle, oldValue, newValue); - if (specificVeto != null) { - for (Iterator i = specificVeto.iterator(); i.hasNext();) { - try { - ((XVetoableChangeListener) i.next()).vetoableChange( - event); - } catch (DisposedException e) {} - } - } - if (unspecificVeto != null) { - for (Iterator i = unspecificVeto.iterator(); i.hasNext();) { - try { - ((XVetoableChangeListener) i.next()).vetoableChange( - event); - } catch (DisposedException e) {} - } - } - } - if ((p.Attributes & PropertyAttribute.BOUND) != 0) { - // assert bound != null; - bound.event = new PropertyChangeEvent( - object, propertyName, false, p.Handle, oldValue, newValue); - } - } - - /** - A simplified version of {@link #prepareSet(String, Object, Object, - PropertySetMixin.BoundListeners)}. - - <p>This method is useful for attributes that are not constrained.</p> - - @param propertyName the name of the property (which is the same as the - name of the attribute that is going to be set) - - @param bound a reference to a fresh {@link BoundListeners} instance - (which has not been passed to this method before, and on which - {@link BoundListeners#notifyListeners} has not yet been called); may only - be null if the attribute that is going to be set is not bound - */ - public void prepareSet(String propertyName, BoundListeners bound) { - try { - prepareSet(propertyName, Any.VOID, Any.VOID, bound); - } catch (PropertyVetoException e) { - throw new RuntimeException("unexpected " + e); - } - } - - /** - Marks this instance as being disposed. - - <p>See <code>com.sun.star.lang.XComponent</code> for the general concept - of disposing UNO objects. On the first call to this method, all - registered listeners - (<code>com.sun.star.beans.XPropertyChangeListener</code>s and - <code>com.sun.star.beans.XVetoableChangeListener</code>s) are notified of - the disposing source. Any subsequent calls to this method are - ignored.</p> - */ - public void dispose() { - HashMap bound; - HashMap veto; - synchronized (this) { - bound = boundListeners; - boundListeners = null; - veto = vetoListeners; - vetoListeners = null; - disposed = true; - } - EventObject event = new EventObject(object); - if (bound != null) { - for (Iterator i = bound.values().iterator(); i.hasNext();) { - for (Iterator j = ((Vector) i.next()).iterator(); j.hasNext();) - { - ((XPropertyChangeListener) j.next()).disposing(event); - } - } - } - if (veto != null) { - for (Iterator i = veto.values().iterator(); i.hasNext();) { - for (Iterator j = ((Vector) i.next()).iterator(); j.hasNext();) - { - ((XVetoableChangeListener) j.next()).disposing(event); - } - } - } - } - - /** - Implements - <code>com.sun.star.beans.XPropertySet.getPropertySetInfo</code>. - */ - public XPropertySetInfo getPropertySetInfo() { - return new Info(properties); - } - - /** - Implements <code>com.sun.star.beans.XPropertySet.setPropertyValue</code>. - */ - public void setPropertyValue(String propertyName, Object value) - throws UnknownPropertyException, PropertyVetoException, - com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - setProperty(propertyName, value, false, false, (short) 1); - } - - /** - Implements <code>com.sun.star.beans.XPropertySet.getPropertyValue</code>. - */ - public Object getPropertyValue(String propertyName) - throws UnknownPropertyException, WrappedTargetException - { - return getProperty(propertyName, null); - } - - /** - Implements - <code>com.sun.star.beans.XPropertySet.addPropertyChangeListener</code>. - - <p>If a listener is added more than once, it will receive all relevant - notifications multiple times.</p> - */ - public void addPropertyChangeListener( - String propertyName, XPropertyChangeListener listener) - throws UnknownPropertyException, WrappedTargetException - { - // assert listener != null; - checkUnknown(propertyName); - boolean disp; - synchronized (this) { - disp = disposed; - if (!disp) { - Vector v = (Vector) boundListeners.get(propertyName); - if (v == null) { - v = new Vector(); - boundListeners.put(propertyName, v); - } - v.add(listener); - } - } - if (disp) { - listener.disposing(new EventObject(object)); - } - } - - /** - Implements <code> - com.sun.star.beans.XPropertySet.removePropertyChangeListener</code>. - */ - public void removePropertyChangeListener( - String propertyName, XPropertyChangeListener listener) - throws UnknownPropertyException, WrappedTargetException - { - // assert listener != null; - checkUnknown(propertyName); - synchronized (this) { - if (boundListeners != null) { - Vector v = (Vector) boundListeners.get(propertyName); - if (v != null) { - v.remove(listener); - } - } - } - } - - /** - Implements - <code>com.sun.star.beans.XPropertySet.addVetoableChangeListener</code>. - - <p>If a listener is added more than once, it will receive all relevant - notifications multiple times.</p> - */ - public void addVetoableChangeListener( - String propertyName, XVetoableChangeListener listener) - throws UnknownPropertyException, WrappedTargetException - { - // assert listener != null; - checkUnknown(propertyName); - boolean disp; - synchronized (this) { - disp = disposed; - if (!disp) { - Vector v = (Vector) vetoListeners.get(propertyName); - if (v == null) { - v = new Vector(); - vetoListeners.put(propertyName, v); - } - v.add(listener); - } - } - if (disp) { - listener.disposing(new EventObject(object)); - } - } - - /** - Implements <code> - com.sun.star.beans.XPropertySet.removeVetoableChangeListener</code>. - */ - public void removeVetoableChangeListener( - String propertyName, XVetoableChangeListener listener) - throws UnknownPropertyException, WrappedTargetException - { - // assert listener != null; - checkUnknown(propertyName); - synchronized (this) { - if (vetoListeners != null) { - Vector v = (Vector) vetoListeners.get(propertyName); - if (v != null) { - v.remove(listener); - } - } - } - } - - /** - Implements - <code>com.sun.star.beans.XFastPropertySet.setFastPropertyValue</code>. - */ - public void setFastPropertyValue(int handle, Object value) - throws UnknownPropertyException, PropertyVetoException, - com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - setProperty(translateHandle(handle), value, false, false, (short) 1); - } - - /** - Implements - <code>com.sun.star.beans.XFastPropertySet.getFastPropertyValue</code>. - */ - public Object getFastPropertyValue(int handle) - throws UnknownPropertyException, WrappedTargetException - { - return getProperty(translateHandle(handle), null); - } - - /** - Implements - <code>com.sun.star.beans.XPropertyAccess.getPropertyValues</code>. - */ - public PropertyValue[] getPropertyValues() { - PropertyValue[] s = new PropertyValue[handleMap.length]; - int n = 0; - for (int i = 0; i < handleMap.length; ++i) { - PropertyState[] state = new PropertyState[1]; - Object value; - try { - value = getProperty(handleMap[i], state); - } catch (UnknownPropertyException e) { - continue; - } catch (WrappedTargetException e) { - throw new WrappedTargetRuntimeException( - e.getMessage(), object, e.TargetException); - } - s[n++] = new PropertyValue(handleMap[i], i, value, state[0]); - } - if (n < handleMap.length) { - PropertyValue[] s2 = new PropertyValue[n]; - System.arraycopy(s, 0, s2, 0, n); - s = s2; - } - return s; - } - - /** - Implements - <code>com.sun.star.beans.XPropertyAccess.setPropertyValues</code>. - */ - public void setPropertyValues(PropertyValue[] props) - throws UnknownPropertyException, PropertyVetoException, - com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - for (int i = 0; i < props.length; ++i) { - if (props[i].Handle != -1 - && !props[i].Name.equals(translateHandle(props[i].Handle))) - { - throw new UnknownPropertyException( - ("name " + props[i].Name + " does not match handle " - + props[i].Handle), - object); - } - setProperty( - props[i].Name, props[i].Value, - props[i].State == PropertyState.AMBIGUOUS_VALUE, - props[i].State == PropertyState.DEFAULT_VALUE, (short) 0); - } - } - - /** - A class used by clients of {@link PropertySetMixin} when implementing UNO - interface type attribute setter functions. - - @see #prepareSet(String, Object, Object, PropertySetMixin.BoundListeners) - */ - public static final class BoundListeners { - /** - The constructor. - */ - public BoundListeners() {} - - /** - Notifies any - <code>com.sun.star.beans.XPropertyChangeListener</code>s. - - @see #prepareSet(String, Object, Object, - PropertySetMixin.BoundListeners) - */ - public void notifyListeners() { - if (specificListeners != null) { - for (Iterator i = specificListeners.iterator(); i.hasNext();) { - try { - ((XPropertyChangeListener) i.next()).propertyChange( - event); - } catch (DisposedException e) {} - } - } - if (unspecificListeners != null) { - for (Iterator i = unspecificListeners.iterator(); i.hasNext();) - { - try { - ((XPropertyChangeListener) i.next()).propertyChange( - event); - } catch (DisposedException e) {} - } - } - } - - private Vector specificListeners = null; - private Vector unspecificListeners = null; - private PropertyChangeEvent event = null; - } - - private XIdlClass getReflection(String typeName) { - XIdlReflection refl; - try { - refl = UnoRuntime.queryInterface( - XIdlReflection.class, - context.getServiceManager().createInstanceWithContext( - "com.sun.star.reflection.CoreReflection", context)); - } catch (com.sun.star.uno.Exception e) { - throw new DeploymentException( - ("component context fails to supply service" - + " com.sun.star.reflection.CoreReflection: " - + e.getMessage()), - context); - } - try { - return refl.forName(typeName); - } finally { - XComponent comp = UnoRuntime.queryInterface(XComponent.class, refl); - if (comp != null) { - comp.dispose(); - } - } - } - - private void initProperties( - XTypeDescription type, HashMap map, ArrayList handleNames, HashSet seen) - { - XInterfaceTypeDescription2 ifc = UnoRuntime.queryInterface( - XInterfaceTypeDescription2.class, resolveTypedefs(type)); - if (seen.add(ifc.getName())) { - XTypeDescription[] bases = ifc.getBaseTypes(); - for (int i = 0; i < bases.length; ++i) { - initProperties(bases[i], map, handleNames, seen); - } - XInterfaceMemberTypeDescription[] members = ifc.getMembers(); - for (int i = 0; i < members.length; ++i) { - if (members[i].getTypeClass() == TypeClass.INTERFACE_ATTRIBUTE) - { - XInterfaceAttributeTypeDescription2 attr = - UnoRuntime.queryInterface( - XInterfaceAttributeTypeDescription2.class, - members[i]); - short attrAttribs = 0; - if (attr.isBound()) { - attrAttribs |= PropertyAttribute.BOUND; - } - boolean setUnknown = false; - if (attr.isReadOnly()) { - attrAttribs |= PropertyAttribute.READONLY; - setUnknown = true; - } - XCompoundTypeDescription[] excs = attr.getGetExceptions(); - boolean getUnknown = false; - //XXX Special interpretation of getter/setter exceptions - // only works if the specified exceptions are of the exact - // type, not of a supertype: - for (int j = 0; j < excs.length; ++j) { - if (excs[j].getName().equals( - "com.sun.star.beans.UnknownPropertyException")) - { - getUnknown = true; - break; - } - } - excs = attr.getSetExceptions(); - for (int j = 0; j < excs.length; ++j) { - if (excs[j].getName().equals( - "com.sun.star.beans.UnknownPropertyException")) - { - setUnknown = true; - } else if (excs[j].getName().equals( - "com.sun.star.beans." - + "PropertyVetoException")) - { - attrAttribs |= PropertyAttribute.CONSTRAINED; - } - } - if (getUnknown && setUnknown) { - attrAttribs |= PropertyAttribute.OPTIONAL; - } - XTypeDescription t = attr.getType(); - for (;;) { - t = resolveTypedefs(t); - short n; - if (t.getName().startsWith( - "com.sun.star.beans.Ambiguous<")) - { - n = PropertyAttribute.MAYBEAMBIGUOUS; - } else if (t.getName().startsWith( - "com.sun.star.beans.Defaulted<")) - { - n = PropertyAttribute.MAYBEDEFAULT; - } else if (t.getName().startsWith( - "com.sun.star.beans.Optional<")) - { - n = PropertyAttribute.MAYBEVOID; - } else { - break; - } - attrAttribs |= n; - t = (UnoRuntime.queryInterface( - XStructTypeDescription.class, t)). - getTypeArguments()[0]; - } - String name = members[i].getMemberName(); - boolean present = true; - if (absentOptional != null) { - for (int j = 0; j < absentOptional.length; ++j) { - if (name.equals(absentOptional[j])) { - present = false; - break; - } - } - } - if (map.put( - name, - new PropertyData( - new Property( - name, handleNames.size(), - new Type(t.getName(), t.getTypeClass()), - attrAttribs), - present)) - != null) - { - throw new RuntimeException( - "inconsistent UNO type registry"); - } - handleNames.add(name); - } - } - } - } - - private String translateHandle(int handle) throws UnknownPropertyException { - if (handle < 0 || handle >= handleMap.length) { - throw new UnknownPropertyException("bad handle " + handle, object); - } - return handleMap[handle]; - } - - private void setProperty( - String name, Object value, boolean isAmbiguous, boolean isDefaulted, - short illegalArgumentPosition) - throws UnknownPropertyException, PropertyVetoException, - com.sun.star.lang.IllegalArgumentException, WrappedTargetException - { - PropertyData p = (PropertyData) properties.get(name); - if (p == null) { - throw new UnknownPropertyException(name, object); - } - if ((isAmbiguous - && (p.property.Attributes & PropertyAttribute.MAYBEAMBIGUOUS) == 0) - || (isDefaulted - && ((p.property.Attributes & PropertyAttribute.MAYBEDEFAULT) - == 0))) - { - throw new com.sun.star.lang.IllegalArgumentException( - ("flagging as ambiguous/defaulted non-ambiguous/defaulted" - + " property " + name), - object, illegalArgumentPosition); - - } - XIdlField2 f = UnoRuntime.queryInterface( - XIdlField2.class, idlClass.getField(name)); - Object[] o = new Object[] { - new Any(type, UnoRuntime.queryInterface(type, object)) }; - Object v = wrapValue( - value, - UnoRuntime.queryInterface( - XIdlField2.class, idlClass.getField(name)).getType(), - (p.property.Attributes & PropertyAttribute.MAYBEAMBIGUOUS) != 0, - isAmbiguous, - (p.property.Attributes & PropertyAttribute.MAYBEDEFAULT) != 0, - isDefaulted, - (p.property.Attributes & PropertyAttribute.MAYBEVOID) != 0); - try { - f.set(o, v); - } catch (com.sun.star.lang.IllegalArgumentException e) { - if (e.ArgumentPosition == 1) { - throw new com.sun.star.lang.IllegalArgumentException( - e.getMessage(), object, illegalArgumentPosition); - } else { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } - } catch (com.sun.star.lang.IllegalAccessException e) { - //TODO Clarify whether PropertyVetoException is the correct - // exception to throw when trying to set a read-only property: - throw new PropertyVetoException( - "cannot set read-only property " + name, object); - } catch (WrappedTargetRuntimeException e) { - //FIXME A WrappedTargetRuntimeException from XIdlField2.get is not - // guaranteed to originate directly within XIdlField2.get (and thus - // have the expected semantics); it might also be passed through - // from lower layers. - if (new Type(UnknownPropertyException.class).isSupertypeOf( - AnyConverter.getType(e.TargetException)) - && (p.property.Attributes & PropertyAttribute.OPTIONAL) != 0) - { - throw new UnknownPropertyException(name, object); - } else if (new Type(PropertyVetoException.class).isSupertypeOf( - AnyConverter.getType(e.TargetException)) - && ((p.property.Attributes - & PropertyAttribute.CONSTRAINED) - != 0)) - { - throw new PropertyVetoException(name, object); - } else { - throw new WrappedTargetException( - e.getMessage(), object, e.TargetException); - } - } - } - - Object getProperty(String name, PropertyState[] state) - throws UnknownPropertyException, WrappedTargetException - { - PropertyData p = (PropertyData) properties.get(name); - if (p == null) { - throw new UnknownPropertyException(name, object); - } - XIdlField2 field = UnoRuntime.queryInterface( - XIdlField2.class, idlClass.getField(name)); - Object value; - try { - value = field.get( - new Any(type, UnoRuntime.queryInterface(type, object))); - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } catch (WrappedTargetRuntimeException e) { - //FIXME A WrappedTargetRuntimeException from XIdlField2.get is not - // guaranteed to originate directly within XIdlField2.get (and thus - // have the expected semantics); it might also be passed through - // from lower layers. - if (new Type(UnknownPropertyException.class).isSupertypeOf( - AnyConverter.getType(e.TargetException)) - && (p.property.Attributes & PropertyAttribute.OPTIONAL) != 0) - { - throw new UnknownPropertyException(name, object); - } else { - throw new WrappedTargetException( - e.getMessage(), object, e.TargetException); - } - } - boolean undoAmbiguous - = (p.property.Attributes & PropertyAttribute.MAYBEAMBIGUOUS) != 0; - boolean undoDefaulted - = (p.property.Attributes & PropertyAttribute.MAYBEDEFAULT) != 0; - boolean undoOptional - = (p.property.Attributes & PropertyAttribute.MAYBEVOID) != 0; - boolean isAmbiguous = false; - boolean isDefaulted = false; - while (undoAmbiguous || undoDefaulted || undoOptional) { - String typeName = AnyConverter.getType(value).getTypeName(); - if (undoAmbiguous - && typeName.startsWith("com.sun.star.beans.Ambiguous<")) - { - XIdlClass ambiguous = getReflection(typeName); - try { - isAmbiguous = AnyConverter.toBoolean( - UnoRuntime.queryInterface( - XIdlField2.class, - ambiguous.getField("IsAmbiguous")).get(value)); - value = UnoRuntime.queryInterface( - XIdlField2.class, - ambiguous.getField("Value")).get(value); - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected" - + " com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } - undoAmbiguous = false; - } else if (undoDefaulted - && typeName.startsWith("com.sun.star.beans.Defaulted<")) - { - XIdlClass defaulted = getReflection(typeName); - try { - isDefaulted = AnyConverter.toBoolean( - UnoRuntime.queryInterface( - XIdlField2.class, - defaulted.getField("IsDefaulted")).get(value)); - value = UnoRuntime.queryInterface( - XIdlField2.class, - defaulted.getField("Value")).get(value); - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected" - + " com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } - undoDefaulted = false; - } else if (undoOptional - && typeName.startsWith("com.sun.star.beans.Optional<")) - { - XIdlClass optional = getReflection(typeName); - try { - boolean present = AnyConverter.toBoolean( - UnoRuntime.queryInterface( - XIdlField2.class, - optional.getField("IsPresent")).get(value)); - if (!present) { - value = Any.VOID; - break; - } - value = UnoRuntime.queryInterface( - XIdlField2.class, - optional.getField("Value")).get(value); - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected" - + " com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } - undoOptional = false; - } else { - throw new RuntimeException( - "unexpected type of attribute " + name); - } - } - if (state != null) { - //XXX If isAmbiguous && isDefaulted, arbitrarily choose - // AMBIGUOUS_VALUE over DEFAULT_VALUE: - state[0] = isAmbiguous - ? PropertyState.AMBIGUOUS_VALUE - : isDefaulted - ? PropertyState.DEFAULT_VALUE : PropertyState.DIRECT_VALUE; - } - return value; - } - - private Object wrapValue( - Object value, XIdlClass type, boolean wrapAmbiguous, - boolean isAmbiguous, boolean wrapDefaulted, boolean isDefaulted, - boolean wrapOptional) - { - // assert (wrapAmbiguous || !isAmbiguous) - // && (wrapDefaulted || !isDefaulted); - if (wrapAmbiguous - && type.getName().startsWith("com.sun.star.beans.Ambiguous<")) - { - Object[] strct = new Object[1]; - type.createObject(strct); - try { - XIdlField2 field = UnoRuntime.queryInterface( - XIdlField2.class, type.getField("Value")); - field.set( - strct, - wrapValue( - value, field.getType(), false, false, wrapDefaulted, - isDefaulted, wrapOptional)); - UnoRuntime.queryInterface( - XIdlField2.class, type.getField("IsAmbiguous")).set( - strct, new Boolean(isAmbiguous)); - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } catch (com.sun.star.lang.IllegalAccessException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalAccessException: " - + e.getMessage()); - } - return strct[0]; - } else if (wrapDefaulted - && type.getName().startsWith( - "com.sun.star.beans.Defaulted<")) - { - Object[] strct = new Object[1]; - type.createObject(strct); - try { - XIdlField2 field = UnoRuntime.queryInterface( - XIdlField2.class, type.getField("Value")); - field.set( - strct, - wrapValue( - value, field.getType(), wrapAmbiguous, isAmbiguous, - false, false, wrapOptional)); - UnoRuntime.queryInterface( - XIdlField2.class, type.getField("IsDefaulted")).set( - strct, new Boolean(isDefaulted)); - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } catch (com.sun.star.lang.IllegalAccessException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalAccessException: " - + e.getMessage()); - } - return strct[0]; - } else if (wrapOptional - && type.getName().startsWith("com.sun.star.beans.Optional<")) - { - Object[] strct = new Object[1]; - type.createObject(strct); - boolean present = !AnyConverter.isVoid(value); - try { - UnoRuntime.queryInterface( - XIdlField2.class, type.getField("IsPresent")).set( - strct, new Boolean(present)); - if (present) { - XIdlField2 field = UnoRuntime.queryInterface( - XIdlField2.class, type.getField("Value")); - field.set( - strct, - wrapValue( - value, field.getType(), wrapAmbiguous, isAmbiguous, - wrapDefaulted, isDefaulted, false)); - } - } catch (com.sun.star.lang.IllegalArgumentException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalArgumentException: " - + e.getMessage()); - } catch (com.sun.star.lang.IllegalAccessException e) { - throw new RuntimeException( - "unexpected com.sun.star.lang.IllegalAccessException: " - + e.getMessage()); - } - return strct[0]; - } else { - if (wrapAmbiguous || wrapDefaulted || wrapOptional) { - throw new RuntimeException("unexpected type of attribute"); - } - return value; - } - } - - private static XTypeDescription resolveTypedefs(XTypeDescription type) { - while (type.getTypeClass() == TypeClass.TYPEDEF) { - type = UnoRuntime.queryInterface( - XIndirectTypeDescription.class, type).getReferencedType(); - } - return type; - } - - private PropertyData get(Object object, String propertyName) - throws UnknownPropertyException - { - PropertyData p = (PropertyData) properties.get(propertyName); - if (p == null || !p.present) { - throw new UnknownPropertyException(propertyName, object); - } - return p; - } - - private void checkUnknown(String propertyName) - throws UnknownPropertyException - { - if (!propertyName.equals("")) { - get(this, propertyName); - } - } - - private static final class PropertyData { - public PropertyData(Property property, boolean present) { - this.property = property; - this.present = present; - } - - public final Property property; - public final boolean present; - } - - private final class Info extends WeakBase implements XPropertySetInfo - { - public Info(Map properties) { - this.properties = properties; - } - - public Property[] getProperties() { - ArrayList al = new ArrayList(properties.size()); - for (Iterator i = properties.values().iterator(); i.hasNext();) { - PropertyData p = (PropertyData) i.next(); - if (p.present) { - al.add(p.property); - } - } - return (Property[]) al.toArray(new Property[al.size()]); - } - - public Property getPropertyByName(String name) - throws UnknownPropertyException - { - return get(this, name).property; - } - - public boolean hasPropertyByName(String name) { - PropertyData p = (PropertyData) properties.get(name); - return p != null && p.present; - } - - private final Map properties; // from String to Property - } - - private final XComponentContext context; - private final XInterface object; - private final Type type; - private final String[] absentOptional; - private final XIdlClass idlClass; - private final Map properties; // from String to Property - private final String[] handleMap; - - private HashMap boundListeners = new HashMap(); - // from String to Vector of XPropertyChangeListener - private HashMap vetoListeners = new HashMap(); - // from String to Vector of XVetoableChangeListener - private boolean disposed = false; -} diff --git a/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java b/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java deleted file mode 100644 index a413ab43f..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java +++ /dev/null @@ -1,412 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; -import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.Vector; - -/** - * Object representation and parsing of Uno Urls, - * which allow to locate a named Uno object in a - * different process. An Uno Url consists of the - * specification of a connection, protocol and - * rootOid delimited with a ';'. - * The syntax of an Uno Url is - * - * <code> - * [uno:]connection-type,parameters;protocol-name,parameters;objectname"; - * </code> - * - * An example Uno Url will look like this: - * - * <code> - * socket,host=localhost,port=2002;urp;StarOffice.ServiceManager - * </code> - * - * For more information about Uno Url please consult - * <a href="http://udk.openoffice.org/common/man/spec/uno-url.html"> - * http://udk.openoffice.org/common/man/spec/uno-url.html</a> - * - * Usage: - * - * <code> - * UnoUrl url = UnoUrl.parseUnoUrl("socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"); - * </code> - * - * @author Joerg Brunsmann - */ -public class UnoUrl { - - private static final String FORMAT_ERROR = - "syntax: [uno:]connection-type,parameters;protocol-name,parameters;objectname"; - - private static final String VALUE_CHAR_SET = "!$&'()*+-./:?@_~"; - private static final String OID_CHAR_SET = VALUE_CHAR_SET + ",="; - - private UnoUrlPart connection; - private UnoUrlPart protocol; - private String rootOid; - - static private class UnoUrlPart { - - private String partTypeName; - private HashMap partParameters; - private String uninterpretedParameterString; - - public UnoUrlPart( - String uninterpretedParameterString, - String partTypeName, - HashMap partParameters) { - this.uninterpretedParameterString = uninterpretedParameterString; - this.partTypeName = partTypeName; - this.partParameters = partParameters; - } - - public String getPartTypeName() { - return partTypeName; - } - - public HashMap getPartParameters() { - return partParameters; - } - - public String getUninterpretedParameterString() { - return uninterpretedParameterString; - } - - public String getUninterpretedString() { - StringBuffer buf = new StringBuffer(partTypeName); - if (uninterpretedParameterString.length() > 0) { - buf.append(','); - buf.append(uninterpretedParameterString); - } - return buf.toString(); - } - } - - private UnoUrl( - UnoUrlPart connectionPart, - UnoUrlPart protocolPart, - String rootOid) { - this.connection = connectionPart; - this.protocol = protocolPart; - this.rootOid = rootOid; - } - - /** - * Returns the name of the connection of this - * Uno Url. Encoded characters are not allowed. - * - * @return The connection name as string. - */ - public String getConnection() { - return connection.getPartTypeName(); - } - - /** - * Returns the name of the protocol of this - * Uno Url. Encoded characters are not allowed. - * - * @return The protocol name as string. - */ - public String getProtocol() { - return protocol.getPartTypeName(); - } - - /** - * Return the object name. Encoded character are - * not allowed. - * - * @return The object name as String. - */ - public String getRootOid() { - return rootOid; - } - - /** - * Returns the protocol parameters as - * a Hashmap with key/value pairs. Encoded - * characters like '%41' are decoded. - * - * @return a HashMap with key/value pairs for protocol parameters. - */ - public HashMap getProtocolParameters() { - return protocol.getPartParameters(); - } - - /** - * Returns the connection parameters as - * a Hashmap with key/value pairs. Encoded - * characters like '%41' are decoded. - * - * @return a HashMap with key/value pairs for connection parameters. - */ - public HashMap getConnectionParameters() { - return connection.getPartParameters(); - } - - /** - * Returns the raw specification of the protocol - * parameters. Encoded characters like '%41' are - * not decoded. - * - * @return The uninterpreted protocol parameters as string. - */ - public String getProtocolParametersAsString() { - return protocol.getUninterpretedParameterString(); - } - - /** - * Returns the raw specification of the connection - * parameters. Encoded characters like '%41' are - * not decoded. - * - * @return The uninterpreted connection parameters as string. - */ - public String getConnectionParametersAsString() { - return connection.getUninterpretedParameterString(); - } - - /** - * Returns the raw specification of the protocol - * name and parameters. Encoded characters like '%41' are - * not decoded. - * - * @return The uninterpreted protocol name and parameters as string. - */ - public String getProtocolAndParametersAsString() { - return protocol.getUninterpretedString(); - } - - /** - * Returns the raw specification of the connection - * name and parameters. Encoded characters like '%41' are - * not decoded. - * - * @return The uninterpreted connection name and parameters as string. - */ - public String getConnectionAndParametersAsString() { - return connection.getUninterpretedString(); - } - - private static int hexToInt(int ch) - throws com.sun.star.lang.IllegalArgumentException { - int c = Character.toLowerCase((char) ch); - boolean isDigit = ('0' <= c && c <= '9'); - boolean isValidChar = ('a' <= c && c <= 'f') || isDigit; - - if (!isValidChar) - throw new com.sun.star.lang.IllegalArgumentException( - "Invalid UTF-8 hex byte '" + c + "'."); - - return isDigit ? ch - '0' : 10 + ((char) c - 'a') & 0xF; - } - - private static String decodeUTF8(String s) - throws com.sun.star.lang.IllegalArgumentException { - Vector v = new Vector(); - - for (int i = 0; i < s.length(); i++) { - int ch = s.charAt(i); - - if (ch == '%') { - int hb = hexToInt(s.charAt(++i)); - int lb = hexToInt(s.charAt(++i)); - ch = (hb << 4) | lb; - } - - v.addElement(new Integer(ch)); - } - - int size = v.size(); - byte[] bytes = new byte[size]; - for (int i = 0; i < size; i++) { - Integer anInt = (Integer) v.elementAt(i); - bytes[i] = (byte) (anInt.intValue() & 0xFF); - } - - try { - return new String(bytes, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new com.sun.star.lang.IllegalArgumentException( - "Couldn't convert parameter string to UTF-8 string:" + e.getMessage()); - } - } - - private static HashMap buildParamHashMap(String paramString) - throws com.sun.star.lang.IllegalArgumentException { - HashMap params = new HashMap(); - - int pos = 0; - - while (true) { - char c = ','; - String aKey = ""; - String aValue = ""; - - while ((pos < paramString.length()) - && ((c = paramString.charAt(pos++)) != '=')) { - aKey += c; - } - - while ((pos < paramString.length()) - && ((c = paramString.charAt(pos++)) != ',') - && c != ';') { - aValue += c; - } - - if ((aKey.length() > 0) && (aValue.length() > 0)) { - - if (!isAlphaNumeric(aKey)) { - throw new com.sun.star.lang.IllegalArgumentException( - "The parameter key '" - + aKey - + "' may only consist of alpha numeric ASCII characters."); - } - - if (!isValidString(aValue, VALUE_CHAR_SET + "%")) { - throw new com.sun.star.lang.IllegalArgumentException( - "The parameter value for key '" + aKey + "' contains illegal characters."); - } - - params.put(aKey, decodeUTF8(aValue)); - } - - if ((pos >= paramString.length()) || (c != ',')) - break; - - } - - return params; - } - - private static UnoUrlPart parseUnoUrlPart(String thePart) - throws com.sun.star.lang.IllegalArgumentException { - String partName = thePart; - String theParamPart = ""; - int index = thePart.indexOf(","); - if (index != -1) { - partName = thePart.substring(0, index).trim(); - theParamPart = thePart.substring(index + 1).trim(); - } - - if (!isAlphaNumeric(partName)) { - throw new com.sun.star.lang.IllegalArgumentException( - "The part name '" - + partName - + "' may only consist of alpha numeric ASCII characters."); - } - - HashMap params = buildParamHashMap(theParamPart); - - return new UnoUrlPart(theParamPart, partName, params); - } - - private static boolean isAlphaNumeric(String s) { - return isValidString(s, null); - } - - private static boolean isValidString(String identifier, String validCharSet) { - - int len = identifier.length(); - - for (int i = 0; i < len; i++) { - - int ch = identifier.charAt(i); - - boolean isValidChar = - ('A' <= ch && ch <= 'Z') - || ('a' <= ch && ch <= 'z') - || ('0' <= ch && ch <= '9'); - - if (!isValidChar && (validCharSet != null)) { - isValidChar = (validCharSet.indexOf(ch) != -1); - } - - if (!isValidChar) - return false; - } - - return true; - } - - /** - * Parses the given Uno Url and returns - * an in memory object representation. - * - * @param unoUrl The given uno URl as string. - * @return Object representation of class UnoUrl. - * @throws IllegalArgumentException if Url cannot be parsed. - */ - public static UnoUrl parseUnoUrl(String unoUrl) - throws com.sun.star.lang.IllegalArgumentException { - - String url = unoUrl; - - int index = url.indexOf(':'); - if (index != -1) { - String unoStr = url.substring(0, index).trim(); - if (!"uno".equals(unoStr)) { - throw new com.sun.star.lang.IllegalArgumentException( - "Uno Urls must start with 'uno:'. " + FORMAT_ERROR); - } - } - - url = url.substring(index + 1).trim(); - - index = url.indexOf(';'); - if (index == -1) { - throw new com.sun.star.lang.IllegalArgumentException("'"+unoUrl+"' is an invalid Uno Url. " + FORMAT_ERROR); - } - - String connection = url.substring(0, index).trim(); - url = url.substring(index + 1).trim(); - - UnoUrlPart connectionPart = parseUnoUrlPart(connection); - - index = url.indexOf(';'); - if (index == -1) { - throw new com.sun.star.lang.IllegalArgumentException("'"+unoUrl+"' is an invalid Uno Url. " + FORMAT_ERROR); - } - - String protocol = url.substring(0, index).trim(); - url = url.substring(index + 1).trim(); - - UnoUrlPart protocolPart = parseUnoUrlPart(protocol); - - String rootOid = url.trim(); - if (!isValidString(rootOid, OID_CHAR_SET)) { - throw new com.sun.star.lang.IllegalArgumentException( - "Root OID '"+ rootOid + "' contains illegal characters."); - } - - return new UnoUrl(connectionPart, protocolPart, rootOid); - - } - -} diff --git a/javaunohelper/com/sun/star/lib/uno/helper/WeakAdapter.java b/javaunohelper/com/sun/star/lib/uno/helper/WeakAdapter.java deleted file mode 100644 index bda5a081b..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/WeakAdapter.java +++ /dev/null @@ -1,102 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; -import java.lang.ref.WeakReference; -import com.sun.star.uno.XAdapter; -import com.sun.star.uno.XReference; -import java.util.List; -import java.util.Collections; -import java.util.LinkedList; - -/** An XAdapter implementation that holds a weak reference (java.lang.ref.WeakReference) - * to an object. Clients can register listener (com.sun.star.lang.XReference) which - * are notified when the the object (the one which is kept weak) is being finalized. That - * is, that object is being destroyed because there are not any hard references - * to it. - */ -public class WeakAdapter implements XAdapter -{ - private final boolean DEBUG= false; - // references the XWeak implementation - private WeakReference m_weakRef; - // contains XReference objects registered by addReference - private List m_xreferenceList; - - /** - *@param component the object that is to be held weak - */ - public WeakAdapter(Object component) - { - m_weakRef= new WeakReference(component); - m_xreferenceList= Collections.synchronizedList( new LinkedList()); - } - - /** Called by the XWeak implementation (WeakBase) when it is being finalized. - * It is only being called once. - * The registererd XReference listeners are notified. On notification they are - * to unregister themselves. The notification is thread-safe. However, it is possible - * to add a listener during the notification process, which will never receive a - * notification. To prevent this, one would have to synchronize this method with - * the addReference method. But this can result in deadlocks in a multithreaded - * environment. - */ - void referentDying() - { - //synchronized call - Object[] references= m_xreferenceList.toArray(); - for (int i= references.length; i > 0; i--) - { - ((XReference) references[i-1]).dispose(); - } - } - - /** Method of com.sun.star.uno.XAdapter. It is called to obtain a hard reference - * to the object which is kept weak by this instance. - * @return hard reference to the object - */ - public Object queryAdapted() - { - return m_weakRef.get(); - } - /** Method of com.sun.star.uno.XAdapter. Called by clients to register listener which - * are notified when the weak object is dying. - *@param xReference a listener - */ - public void removeReference(XReference xReference) - { - m_xreferenceList.remove(xReference); - } - /** Method of com.sun.star.uno.XAdapter. Called by clients to unregister listeners. - *@param a listener - */ - public void addReference(XReference xReference) - { - m_xreferenceList.add(xReference); - } -} - diff --git a/javaunohelper/com/sun/star/lib/uno/helper/WeakBase.java b/javaunohelper/com/sun/star/lib/uno/helper/WeakBase.java deleted file mode 100644 index ace0713cc..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/WeakBase.java +++ /dev/null @@ -1,143 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -package com.sun.star.lib.uno.helper; -import com.sun.star.uno.XWeak; -import com.sun.star.uno.XAdapter; -import com.sun.star.lang.XTypeProvider; -import com.sun.star.uno.Type; -import java.util.Vector; -import java.util.Map; -import java.util.Hashtable; - - -/** This class can be used as the base class for UNO components. It implements the capability - * to be kept weak (com.sun.star.uno.XWeak) and it implements com.sun.star.lang.XTypeProvider - * which is necessary for using the component with StarBasic. - */ -public class WeakBase implements XWeak, XTypeProvider -{ - private final boolean DEBUG= false; - - // Contains all WeakAdapter which have been created in this class - // They have to be notified when this object dies - private WeakAdapter m_adapter; - - protected static Map _mapImplementationIds= new Hashtable(); - protected static Map _mapTypes= new Hashtable(); - - /** Method of XWeak. The returned XAdapter implementation can be used to keap - * a weak reference to this object. - * @return a com.sun.star.uno.XAdapter implementation. - */ - synchronized public XAdapter queryAdapter() - { - if (m_adapter == null) - m_adapter= new WeakAdapter(this); - return m_adapter; - } - - /** Override of Object.finalize. When there are no references to this object anymore - * then the garbage collector calls this method. Thereby causing the adapter object - * to be notified. The adapter, in turn, notifies all listeners (com.sun.star.uno.XReference) - */ - protected void finalize() throws java.lang.Throwable - { - if (m_adapter != null) - m_adapter.referentDying(); - super.finalize(); - } - - /** Method of XTypeProvider. It returns an array of Type objects which represent - * all implemented UNO interfaces of this object. - * @return Type objects of all implemented interfaces. - */ - public Type[] getTypes() - { - Type[] arTypes= (Type[]) _mapTypes.get( getClass()); - if (arTypes == null) - { - Vector vec= new Vector(); - Class currentClass= getClass(); - do - { - Class interfaces[]= currentClass.getInterfaces(); - for(int i = 0; i < interfaces.length; ++ i) - { - // Test if it is a UNO interface - if (com.sun.star.uno.XInterface.class.isAssignableFrom((interfaces[i]))) - vec.add(new Type(interfaces[i])); - } - // get the superclass the currentClass inherits from - currentClass= currentClass.getSuperclass(); - } while (currentClass != null); - - Type types[]= new Type[vec.size()]; - for( int i= 0; i < types.length; i++) - types[i]= (Type) vec.elementAt(i); - _mapTypes.put(getClass(), types); - arTypes= types; - } - return arTypes; - } - - /** Method of XTypeProvider. It provides an identifier that represents the set of UNO - * interfaces implemented by this class. All instances of this class - * which run in the same Java Virtual Machine return the same array. (This only works as long - * the ClassLoader preserves the class even if no instance exist.) - *@return identifier as array of bytes - */ - public byte[] getImplementationId() - { - byte[] id= null; - synchronized (_mapImplementationIds) - { - id= (byte[]) _mapImplementationIds.get(getClass()); - - if (id == null) - { - int hash = hashCode(); - String sName= getClass().getName(); - byte[] arName= sName.getBytes(); - int nNameLength= arName.length; - - id= new byte[ 4 + nNameLength]; - id[0]= (byte)(hash & 0xff); - id[1]= (byte)((hash >>> 8) & 0xff); - id[2]= (byte)((hash >>> 16) & 0xff); - id[3]= (byte)((hash >>>24) & 0xff); - - for (int i= 0; i < nNameLength; i++) - { - id[4 + i]= arName[i]; - } - _mapImplementationIds.put(getClass(), id); - } - } - return id; - } -} diff --git a/javaunohelper/com/sun/star/lib/uno/helper/makefile.mk b/javaunohelper/com/sun/star/lib/uno/helper/makefile.mk deleted file mode 100644 index 3cab6f070..000000000 --- a/javaunohelper/com/sun/star/lib/uno/helper/makefile.mk +++ /dev/null @@ -1,49 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org 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 version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/..$/..$/..$/..$/.. - -PRJNAME = juhelper -PACKAGE = com$/sun$/star$/lib$/uno$/helper -TARGET = com_sun_star_lib_uno_helper - -.INCLUDE : settings.mk -.INCLUDE: $(PRJ)$/util$/settings.pmk - -JAVAFILES = \ - ComponentBase.java \ - Factory.java \ - InterfaceContainer.java \ - MultiTypeInterfaceContainer.java \ - PropertySet.java \ - PropertySetMixin.java \ - UnoUrl.java \ - WeakAdapter.java \ - WeakBase.java - -.INCLUDE : target.mk - |