CWS-TOOLING: integrate CWS sb102

2008-12-11 16:18:12 +0100 sb  r265332 : #i95065# cleanup, to make Windows linking work
2008-12-11 16:16:03 +0100 sb  r265331 : #i95065# missing SAL_DLLPUBLIC_EXPORT
2008-12-09 17:40:28 +0100 sb  r265122 : #i94469# move CJK specific configuration data to brand layer
2008-12-09 16:09:08 +0100 sb  r265112 : #i96959# use PTHREAD_MUTEX_RECURSIVE on all platforms
2008-12-09 15:54:31 +0100 sb  r265110 : #i95065# do not derive apphelper::LifeTimeGuard from osl::ResettableMutexGuard to avoid problems with VISIBILITY_HIDDEN=TRUE on MSC
2008-12-09 15:40:51 +0100 sb  r265104 : #i95065# add VISIBILITY_HIDDEN=TRUE to connectivity/source/drivers/mozab
2008-12-09 15:36:21 +0100 sb  r265102 : #i95501# updated SDK_HOME
2008-12-09 15:31:46 +0100 sb  r265099 : typo (temppath vs. tmppath)
2008-12-08 11:48:08 +0100 sb  r264979 : #i95065# removed spurious ExplicitCategoriesProvider.obj (ExplicitCategoriesProvider.cxx is not in this directory)
2008-12-07 19:41:07 +0100 sb  r264960 : #i96994# erroneously doubled backslash caused visibility feature to be disabled for all GCC versions on Mac OS X
2008-12-06 23:54:49 +0100 sb  r264948 : changes from trunk that CWS-TOOLING's rebase to DEV300:m37 (r264891) had missed, as files had been moved around on this CWS
2008-12-05 20:29:23 +0100 sb  r264919 : #i85508# versions of flex apparently differ in whether input() resp. yyinput() returns zero or EOF upon end of file
2008-12-05 15:37:23 +0100 sb  r264908 : #i95315# removed obsolete jut
2008-12-05 15:34:59 +0100 sb  r264907 : #i95531# removed empty obsolete directories
2008-12-05 10:09:23 +0100 sb  r264891 : CWS-TOOLING: rebase CWS sb102 to trunk@264807 (milestone: DEV300:m37)
2008-12-04 14:50:20 +0100 sb  r264845 : #i95065# introduced VISIBILITY_HIDDEN makefile flag to reduce duplications; made additional libraries use VISIBILITY_HIDDEN=TRUE to avoid warnings with recent GCC 4 versions (had to split certain code directories to make changes that would otherwise erroneously affect multiple libraries built in the same makefile); changed connectivity::ORefVector to no longer derive from std::vector, as that caused problems with the MSC implementation of VISIBILITY_HIDDEN=TRUE; replaced uses of JNIEXPORT with SAL_DLLPUBLIC_EXPORT, as the former does not expand to visibility attributes on some platforms where the latter does
2008-12-03 11:29:38 +0100 sb  r264759 : #i94583# remove unnecessary (and wrong) assertion check for rtl_getAppCommandArg return value (which is guaranteed to return osl_Process_E_None or not return at all)
2008-12-02 17:18:31 +0100 sb  r264724 : #i96809# silenced GCC 4.3.2 warning
2008-12-02 13:29:34 +0100 sb  r264695 : #i96797# make get_tmp_dir fail less often
2008-11-28 17:19:24 +0100 sb  r264566 : #i95691# inadvertently missing from -c 264564
2008-11-28 17:07:50 +0100 sb  r264564 : #i95691# only structs of exactly 1, 2, 4, or 8 bytes are returned through registers
2008-11-25 13:28:08 +0100 sb  r264291 : #i96427# support for SAL_EXCEPTION_DLLPUBLIC_EXPORT (patch by np)
2008-11-21 14:45:22 +0100 sb  r264140 : #i95428# added SAL_EXCEPTION_DLLPUBLIC_EXPORT and SAL_EXCEPTION_DLLPRIVATE
2008-11-19 13:19:37 +0100 sb  r263984 : #i95525# removed erroneous application/octet-stream svn:mime-type properties
This commit is contained in:
Jens-Heiner Rechtien 2008-12-30 13:32:01 +00:00
parent 2120ed88a6
commit 3a1c0c61dc
19 changed files with 61 additions and 1958 deletions

View file

@ -37,7 +37,7 @@
namespace CPPU_CURRENT_NAMESPACE
{
bool isSimpleReturnType(typelib_TypeDescription * pTD);
bool isSimpleReturnType(typelib_TypeDescription * pTD, bool recursive = false);
void dummy_can_throw_anything( char const * );

View file

@ -347,17 +347,22 @@ static void cpp_call(
}
namespace CPPU_CURRENT_NAMESPACE {
bool isSimpleReturnType(typelib_TypeDescription * pTD)
bool isSimpleReturnType(typelib_TypeDescription * pTD, bool recursive)
{
if (bridges::cpp_uno::shared::isSimpleType( pTD ))
return true;
if (pTD->eTypeClass == typelib_TypeClass_STRUCT && pTD->nSize <= 8) {
// Only structs of exactly 1, 2, 4, or 8 bytes are returned through
// registers, see <http://developer.apple.com/documentation/DeveloperTools/
// Conceptual/LowLevelABI/Articles/IA32.html>:
if (pTD->eTypeClass == typelib_TypeClass_STRUCT &&
(recursive || pTD->nSize <= 2 || pTD->nSize == 4 || pTD->nSize == 8))
{
typelib_CompoundTypeDescription *const pCompTD =
(typelib_CompoundTypeDescription *) pTD;
for ( sal_Int32 pos = pCompTD->nMembers; pos--; ) {
typelib_TypeDescription * pMemberTD = 0;
TYPELIB_DANGER_GET( &pMemberTD, pCompTD->ppTypeRefs[pos] );
bool const b = isSimpleReturnType(pMemberTD);
bool const b = isSimpleReturnType(pMemberTD, true);
TYPELIB_DANGER_RELEASE( pMemberTD );
if (! b)
return false;

View file

@ -61,13 +61,8 @@
@internal
*/
#if defined __GNUC__
#define CPPU_GCC_DLLPUBLIC_EXPORT SAL_DLLPUBLIC_EXPORT
#define CPPU_GCC_DLLPRIVATE SAL_DLLPRIVATE
#else
#define CPPU_GCC_DLLPUBLIC_EXPORT
#define CPPU_GCC_DLLPRIVATE
#endif
#define CPPU_GCC_DLLPUBLIC_EXPORT SAL_EXCEPTION_DLLPUBLIC_EXPORT
#define CPPU_GCC_DLLPRIVATE SAL_EXCEPTION_DLLPRIVATE
#endif // _CPPU_MACROS_HXX_

View file

@ -1,122 +0,0 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: DumpType.java,v $
* $Revision: 1.6 $
*
* 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.tools.uno;
import com.sun.star.comp.helper.RegistryServiceFactory;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.registry.XImplementationRegistration;
import com.sun.star.uno.Type;
/** A command-line tool. Prints information about com.sun.star.uno.Type to error stream.
*/
public class DumpType {
static private final String[] __typeClassToTypeName = new String[]{
"void",
"char",
"boolean",
"byte",
"short",
"unsigned short",
"long",
"unsigned long",
"hyper",
"unsigned hyper",
"float",
"double",
"string",
"type",
"any",
"enum",
"typedef",
"struct",
"union",
"exception",
"sequence",
"array",
"interface",
"service",
"module",
"interface_method",
"interface_attribute",
"unknown"
};
/** Prints information about argument type to the standard error stream.
The information consists of type name, type description, class name,
as well as the type class.
@param type the Type object whoose information are printed.
*/
static public void dumpType(Type type) throws Exception {
System.err.println("uno type name:" + type.getTypeName());
System.err.println("description:" + type.getTypeDescription());
System.err.println("java class:" + type.getZClass());
System.err.println("type class:" + __typeClassToTypeName[type.getTypeClass().getValue()]);
}
/** Executes this tool.
The command line arguments consist of an identifier followed by a type name.
Identifiers can either be uno or java. Based on the type name, a com.sun.star.uno.Type
object is constructed whose information are then printed out to the error stream.
<br>
usage: [uno &lt;type name&gt;]|[java &lt;class name&gt]* <br>
Examples: <br>
java com.sun.star.uno.tools.DumpType uno com.sun.star.lang.XMultiServiceFactory
java com.sun.star.uno.tools.DumpType java java.lang.Byte java java.lang.String
@param args command line arguments
*/
static public void main(String args[]) throws Exception {
if(args.length == 0)
System.err.println("usage: [uno <type name>]|[java <class name>]*");
else {
int i = 0;
while(i < args.length) {
Type type = null;
if(args[i].equals("uno"))
type = new Type(args[i + 1]);
else
type = new Type(Class.forName(args[i + 1]));
i += 2;
dumpType(type);
}
}
}
}

View file

@ -1,181 +0,0 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: DumpTypeDescription.java,v $
* $Revision: 1.4 $
*
* 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.tools.uno;
import com.sun.star.comp.helper.RegistryServiceFactory;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.registry.XImplementationRegistration;
import com.sun.star.lib.uno.typedesc.TypeDescription;
import com.sun.star.uno.IFieldDescription;
import com.sun.star.uno.IMethodDescription;
import com.sun.star.uno.ITypeDescription;
import com.sun.star.uno.Type;
/** A command-line tool. Prints information of com.sun.star.lib.uno.typedesc.TypeDescription objects to the
error stream.
*/
public class DumpTypeDescription {
/** Prints information about a TypeDescription object that has been constructed based
on the argument <i>typeName</i>. The output is written to the error stream.
The information consists of general as well as method and member information.
These are:<br>
<ul>
<li>type name</li>
<li>array type name</li>
<li>type of the super class</li>
<li>type class</li>
<li>component type</li>
<li>java.lang.Class object</li>
</ul>
Method information:
<ul>
<li>name</li>
<li>index</li>
<li>is one way</li>
<li>is unsigned</li>
<li>is Any</li>
<li>is interface</li>
<li>in signature</li>
<li>out signature</li>
<li>return signature</li>
<li>java.lang.reflect.Method object</li>
</ul>
Field information:
<ul>
<li>name</li>
<li>index</li>
<li>is one way</li>
<li>is unsigned</li>
<li>is Any</li>
<li>is interface</li>
<li>com.sun.star.lib.uno.typedesc.TypeDescription object</li>
</ul>
@param typeName name of a type for which an TypeDescription object
is constructed whoose information are printed.
*/
static public void dumpTypeDescription(String typeName) throws Exception {
ITypeDescription iTypeDescription = TypeDescription.getTypeDescription(typeName);
System.err.println("TypeName:" + iTypeDescription.getTypeName());
System.err.println("ArrayTypeName:" + iTypeDescription.getArrayTypeName());
System.err.println("SuperType:" + iTypeDescription.getSuperType());
System.err.println("TypeClass:" + iTypeDescription.getTypeClass());
System.err.println("ComponentType:" + iTypeDescription.getComponentType());
System.err.println("Class:" + iTypeDescription.getZClass());
System.err.println("Methods:");
IMethodDescription iMethodDescriptions[] = iTypeDescription.getMethodDescriptions();
if(iMethodDescriptions != null)
for(int i = 0; i < iMethodDescriptions.length; ++ i) {
System.err.print("Name: " + iMethodDescriptions[i].getName());
System.err.print(" index: " + iMethodDescriptions[i].getIndex());
System.err.print(" isOneyWay: " + iMethodDescriptions[i].isOneway());
// System.err.print(" isConst: " + iMethodDescriptions[i].isConst());
System.err.print(" isUnsigned: " + iMethodDescriptions[i].isUnsigned());
System.err.print(" isAny: " + iMethodDescriptions[i].isAny());
System.err.println("\tisInterface: " + iMethodDescriptions[i].isInterface());
System.err.print("\tgetInSignature: ");
ITypeDescription in_sig[] = iMethodDescriptions[i].getInSignature();
for(int j = 0; j < in_sig.length; ++ j)
System.err.print("\t\t" + in_sig[j]);
System.err.println();
System.err.print("\tgetOutSignature: ");
ITypeDescription out_sig[] = iMethodDescriptions[i].getOutSignature();
for(int j = 0; j < out_sig.length; ++ j)
System.err.print("\t\t" + out_sig[j]);
System.err.println();
System.err.println("\tgetReturnSig: " + iMethodDescriptions[i].getReturnSignature());
System.err.println("\tgetMethod:" + iMethodDescriptions[i].getMethod());
}
System.err.println();
System.err.println("Members:");
IFieldDescription iFieldDescriptions[] = iTypeDescription.getFieldDescriptions();
if(iFieldDescriptions != null)
for(int i = 0; i < iFieldDescriptions.length; ++ i) {
System.err.print("\tMember: " + iFieldDescriptions[i].getName());
// System.err.print(" isConst: " + iMethodDescriptions[i].isConst());
System.err.print(" isUnsigned: " + iFieldDescriptions[i].isUnsigned());
System.err.print(" isAny: " + iFieldDescriptions[i].isAny());
System.err.print("\tisInterface: " + iFieldDescriptions[i].isInterface());
System.err.println("\tclass: " + iFieldDescriptions[i].getTypeDescription());
}
}
/** Executes this tool.
The command line arguments consist of an identifier followed by a type name.
Identifiers can either be uno or java. Based on the type name, a
com.sun.star.lib.uno.typedesc.TypeDescription
object is constructed whose information are then printed out to the error stream.
<br>
usage: [uno &lt;type name&gt;]|[java &lt;class name&gt]* <br>
Examples: <br>
java com.sun.star.uno.tools.DumpTypeDescription uno com.sun.star.lang.XMultiServiceFactory
java com.sun.star.uno.tools.DumpTypeDescription java java.lang.Byte java java.lang.String
@param args command line arguments
*/
static public void main(String args[]) throws Exception {
if(args.length == 0)
System.err.println("usage: [uno <type name>]|[java <class name>]*");
else {
int i = 0;
while(i < args.length) {
Type type = null;
if(args[i].equals("uno"))
type = new Type(args[i + 1]);
else
type = new Type(Class.forName(args[i + 1]));
i += 2;
dumpTypeDescription(type.getTypeName());
}
}
}
}

View file

@ -1,92 +0,0 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: RegComp.java,v $
* $Revision: 1.4 $
*
* 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.tools.uno;
import com.sun.star.comp.helper.RegistryServiceFactory;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.registry.XImplementationRegistration;
/** A command-line tool. It registers an UNO component with a registry database.
During registration the component will be instantiated and be asked
to write the necessary information to the database.
Command line arguments:<br>
database register|unregister locationURL loader
<br>
For example:
<pre>
java com.sun.star.tools.RegComp applicat.rdb register
file:///e:/demos/InstanceInspector.jar com.sun.star.loader.Java2
</pre>
In order to examine the results of the registration use the regview.exe
tool. For example:
<pre>
regview nameOfDatatbase /SERVICES/serviceName
regview nameOfDataBase /IMPLEMENTATIONS/implementationName
</pre>
@see <a href="http://udk.openoffice.org/java/man/register_java_components.html">Registering Java Components</a>
*/
public class RegComp {
static public void main(String args[]) throws Exception {
if(args.length != 0) {
Object serviceManager = RegistryServiceFactory.create(args[0]);
XMultiServiceFactory serviceManager_xMultiServiceFactory = (XMultiServiceFactory)UnoRuntime.queryInterface(XMultiServiceFactory.class, serviceManager);
Object implementationRegistration = serviceManager_xMultiServiceFactory.createInstance("com.sun.star.registry.ImplementationRegistration");
XImplementationRegistration implementationRegistration_xImplementationRegistration =
(XImplementationRegistration)UnoRuntime.queryInterface(XImplementationRegistration.class, implementationRegistration);
if(args[1].equals("register")) {
System.err.println("------ registering " + args[2] + " with " + args[3] + " in " + args[0]);
implementationRegistration_xImplementationRegistration.registerImplementation(args[3], args[2], null);
}
else {
System.err.println("------ revoke " + args[2] + " of " + args[0]);
implementationRegistration_xImplementationRegistration.revokeImplementation(args[2], null);
}
}
else {
System.err.println("usage: <applicat> ");
System.err.println("\tregister <url> <loader>");
System.err.println("\trevoke <url>");
}
System.exit(0);
}
}

View file

@ -1,241 +0,0 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: RegistryKey.java,v $
* $Revision: 1.3 $
*
* 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.tools.uno;
import java.util.Enumeration;
import java.util.Hashtable;
import com.sun.star.registry.InvalidRegistryException;
import com.sun.star.registry.InvalidValueException;
import com.sun.star.registry.RegistryKeyType;
import com.sun.star.registry.RegistryValueType;
import com.sun.star.registry.XRegistryKey;
/**
* This is a dummy registry implementation,
* which only implmenets the needed methods.
*/
class RegistryKey implements XRegistryKey {
protected RegistryValueType _registryValueType = RegistryValueType.NOT_DEFINED;
protected String _name;
protected Hashtable _keys = new Hashtable();
protected int _long;
protected int _long_list[];
protected String _ascii;
protected String _ascii_list[];
protected String _string;
protected String _string_list[];
protected byte _binary[];
public RegistryKey(String name) {
_name = name;
}
// XRegistryKey Attributes
public String getKeyName() throws com.sun.star.uno.RuntimeException {
return _name;
}
// XRegistryKey Methods
public boolean isReadOnly() throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return false;
}
public boolean isValid() throws com.sun.star.uno.RuntimeException {
return true;
}
public RegistryKeyType getKeyType( /*IN*/String rKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return RegistryKeyType.KEY;
}
public RegistryValueType getValueType() throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return _registryValueType;
}
public int getLongValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.LONG)
throw new InvalidValueException("long");
return _long;
}
public void setLongValue( /*IN*/int value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.LONG;
_long = value;
}
public int[] getLongListValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.LONGLIST)
throw new InvalidValueException("longlist");
return _long_list;
}
public void setLongListValue( /*IN*/int[] seqValue ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.LONGLIST;
_long_list = seqValue;
}
public String getAsciiValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.ASCII)
throw new InvalidValueException("ascii");
return _ascii;
}
public void setAsciiValue( /*IN*/String value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.ASCII;
_ascii = value;
}
public String[] getAsciiListValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.ASCIILIST)
throw new InvalidValueException("asciilist");
return _ascii_list;
}
public void setAsciiListValue( /*IN*/String[] seqValue ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.ASCIILIST;
_ascii_list = seqValue;
}
public String getStringValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.STRING)
throw new InvalidValueException("string");
return _string;
}
public void setStringValue( /*IN*/String value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.STRING;
_string = value;
}
public String[] getStringListValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.STRINGLIST)
throw new InvalidValueException("string_list");
return _string_list;
}
public void setStringListValue( /*IN*/String[] seqValue ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.STRINGLIST;
_string_list = seqValue;
}
public byte[] getBinaryValue() throws InvalidRegistryException, InvalidValueException, com.sun.star.uno.RuntimeException {
if(_registryValueType != RegistryValueType.BINARY)
throw new InvalidValueException("longlist");
return _binary;
}
public void setBinaryValue( /*IN*/byte[] value ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_registryValueType = RegistryValueType.BINARY;
_binary = value;
}
public XRegistryKey openKey( /*IN*/String aKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return (XRegistryKey)_keys.get(aKeyName);
}
public XRegistryKey createKey( /*IN*/String aKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
XRegistryKey xRegistryKey = openKey(aKeyName);
if(xRegistryKey == null) {
xRegistryKey = new RegistryKey(aKeyName);
_keys.put(aKeyName, xRegistryKey);
}
return xRegistryKey;
}
public void closeKey() throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
}
public void deleteKey( /*IN*/String rKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
_keys.remove(rKeyName);
}
public synchronized XRegistryKey[] openKeys() throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
RegistryKey registryKeys[] = new RegistryKey[_keys.size()];
Enumeration elements = _keys.elements();
int i = 0;
while(elements.hasMoreElements()) {
registryKeys[i ++] = (RegistryKey)elements.nextElement();
}
return registryKeys;
}
public synchronized String[] getKeyNames() throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
String strings[] = new String[_keys.size()];
Enumeration elements = _keys.keys();
int i = 0;
while(elements.hasMoreElements()) {
strings[i ++] = (String)elements.nextElement();
}
return strings;
}
public boolean createLink( /*IN*/String aLinkName, /*IN*/String aLinkTarget ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return false;
}
public void deleteLink( /*IN*/String rLinkName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
}
public String getLinkTarget( /*IN*/String rLinkName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return null;
}
public String getResolvedName( /*IN*/String aKeyName ) throws InvalidRegistryException, com.sun.star.uno.RuntimeException {
return null;
}
}

View file

@ -1,894 +0,0 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: UnoApp.java,v $
* $Revision: 1.15 $
*
* 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.tools.uno;
import java.applet.Applet;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import com.sun.star.bridge.XBridge;
import com.sun.star.bridge.XBridgeFactory;
import com.sun.star.bridge.XInstanceProvider;
import com.sun.star.bridge.XUnoUrlResolver;
import com.sun.star.comp.helper.RegistryServiceFactory;
import com.sun.star.comp.loader.JavaLoader;
import com.sun.star.connection.XAcceptor;
import com.sun.star.connection.XConnection;
import com.sun.star.connection.XConnectionBroadcaster;
import com.sun.star.io.XStreamListener;
import com.sun.star.container.XSet;
import com.sun.star.lang.XInitialization;
import com.sun.star.lang.XMain;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XSingleServiceFactory;
import com.sun.star.loader.XImplementationLoader;
import com.sun.star.registry.XRegistryKey;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.Type;
/* helper class for terminating an accepting UnoApp */
class UnoAppHolder extends Thread
{
private int _nRef;
public UnoAppHolder()
{ _nRef = 0; }
public synchronized void acquire()
{ _nRef ++; }
public synchronized void release()
{
_nRef --;
if( 0 == _nRef )
{
// give the bridge some time do dispose ...
this.start();
}
}
public void run()
{
try {
java.lang.Thread.currentThread().sleep( 1000 );
}
catch( InterruptedException e )
{}
System.exit( 0 );
}
}
/* helper class for refcounting of incoming connections */
class ConnectionListener implements XStreamListener
{
private UnoAppHolder _holder;
public ConnectionListener( UnoAppHolder holder )
{_holder = holder; _holder.acquire(); }
public void disposing ( com.sun.star.lang.EventObject o)
{ closed(); }
public void started( ) {}
public void closed( )
{
UnoAppHolder holder = null;
synchronized( this )
{
holder = _holder;
_holder = null;
}
if( holder != null )
holder.release();
}
public void terminated( )
{ closed(); }
public void error( /*IN*/java.lang.Object aException )
{ closed(); }
}
/**
* A command line tool. <code>UnoApp</code> is the generic UNO application for java.
* It removes the need for writing UNO applications in Java. That is, it instantiates a service and runs it if it implements
* <code>com.sun.star.lang.XMain</code>. <br>
* In a remote scenario it is used to intantiate services and makes them accessible
* via a network.
* @see <a href="http://udk.openoffice.org/java/man/UnoApp.html">The Java Uno Application</a>
*
*/
public class UnoApp extends Applet {
static public final boolean DEBUG = false;
/**
* Bootstraps a servicemanager with some base components registered.
* <p>
* @return a freshly boostrapped service manager
* @see com.sun.star.lang.ServiceManager
*/
static public XMultiServiceFactory createSimpleServiceManager() throws Exception {
JavaLoader loader = new JavaLoader();
XImplementationLoader xImpLoader = (XImplementationLoader)UnoRuntime.queryInterface(XImplementationLoader.class, loader);
// Get the factory for the ServiceManager
Object loaderobj = xImpLoader.activate("com.sun.star.comp.servicemanager.ServiceManager", null, null, null);
// Ensure that we have got a factory
XSingleServiceFactory xManagerFac = (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, loaderobj);
// Create an instance of the ServiceManager
XMultiServiceFactory xMultiFac = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class,
xManagerFac.createInstance());
// set the ServiceManager at the JavaLoader with the XInitialization interface
XInitialization xInit = (XInitialization) UnoRuntime.queryInterface(XInitialization.class, xImpLoader);
Object[] iniargs = { xMultiFac };
xInit.initialize( iniargs );
// now use the XSet interface at the ServiceManager to add the factory of the loader
XSet xSet = (XSet) UnoRuntime.queryInterface(XSet.class, xMultiFac);
// Get the factory of the loader
XSingleServiceFactory xSingleServiceFactory = (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class,
xImpLoader.activate("com.sun.star.comp.loader.JavaLoader", null, null, null));
// add the javaloader
xSet.insert(xSingleServiceFactory);
// add the service manager
xSet.insert(xManagerFac);
// Get the factory of the URLResolver
xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class,
xImpLoader.activate("com.sun.star.comp.urlresolver.UrlResolver", null, null, null));
xSet.insert(xSingleServiceFactory);
// add the bridgefactory
xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class,
xImpLoader.activate("com.sun.star.comp.bridgefactory.BridgeFactory", null, null, null));
xSet.insert(xSingleServiceFactory);
// add the connector
xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class,
xImpLoader.activate("com.sun.star.comp.connections.Connector", null, null, null));
xSet.insert(xSingleServiceFactory);
// add the acceptor
xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class,
xImpLoader.activate("com.sun.star.comp.connections.Acceptor", null, null, null));
xSet.insert(xSingleServiceFactory);
return xMultiFac;
}
static class DelegatorSingleServiceFactory implements XSingleServiceFactory, XServiceInfo {
XMultiServiceFactory _xMultiServiceFactory;
String _serviceName;
DelegatorSingleServiceFactory(XMultiServiceFactory xMultiServiceFactory, String serviceName) {
_xMultiServiceFactory = xMultiServiceFactory;
_serviceName = serviceName;
}
public Object createInstance( ) throws com.sun.star.uno.Exception, com.sun.star.uno.RuntimeException {
return _xMultiServiceFactory.createInstance(_serviceName);
}
public Object createInstanceWithArguments( /*IN*/java.lang.Object[] aArguments ) throws com.sun.star.uno.Exception, com.sun.star.uno.RuntimeException {
return _xMultiServiceFactory.createInstanceWithArguments(_serviceName, aArguments);
}
// Methods
public String getImplementationName( ) throws com.sun.star.uno.RuntimeException {
return getClass().getName() + _serviceName;
}
public boolean supportsService( /*IN*/String ServiceName ) throws com.sun.star.uno.RuntimeException {
return _serviceName.equals(ServiceName);
}
public String[] getSupportedServiceNames( ) throws com.sun.star.uno.RuntimeException {
return new String[]{_serviceName};
}
}
/**
* An XInstanceProvider implementation, which allows simple object export.
* <p>
* @see com.sun.star.bridge.XBridgeFactory
* @see com.sun.star.bridge.XInstanceProvider
*/
static class InstanceProvider implements XInstanceProvider {
private String _name;
private Object _object;
InstanceProvider(String name, Object object) {
_name = name;
_object = object;
}
public Object getInstance(String sInstanceName) throws com.sun.star.container.NoSuchElementException, com.sun.star.uno.RuntimeException {
Object object = null;
if(_name.equals("__delegate")) { // ?is this a hack?
XMultiServiceFactory xMultiServiceFactory = (XMultiServiceFactory)UnoRuntime.queryInterface(XMultiServiceFactory.class, _object);
String services[] = xMultiServiceFactory.getAvailableServiceNames();
boolean hasService = false;
for(int i = 0; i < services.length && !hasService; ++ i)
hasService = services[i].equals(sInstanceName);
if(hasService) {
object = new DelegatorSingleServiceFactory(xMultiServiceFactory, sInstanceName);
}
}
else
if(sInstanceName.equals(_name))
object = _object;
return object;
}
}
/**
* Exports the given object via the given url while using
* the <code>xMultiServiceFactory</code>.
* <p>
* @param xMultiServiceFactory the service manager to use
* @param dcp a uno url, which describes how to export
* @param object the object to export
* @see com.sun.star.bridge.XBridge
* @see com.sun.star.bridge.XBridgeFactory
* @see com.sun.star.bridge.XInstanceProvider
*/
static public void export(XMultiServiceFactory xMultiServiceFactory, String dcp, Object object, boolean singleAccept) throws Exception {
String conDcp = null;
String protDcp = null;
String rootOid = null;
// split the description into tokens
int index = dcp.indexOf(':');
String url = dcp.substring(0, index).trim();
dcp = dcp.substring(index + 1).trim();
index = dcp.indexOf(';');
conDcp = dcp.substring(0, index).trim();
dcp = dcp.substring(index + 1).trim();
index = dcp.indexOf(';');
protDcp = dcp.substring(0, index).trim();
dcp = dcp.substring(index + 1).trim();
rootOid = dcp.trim().trim();
UnoAppHolder holder = new UnoAppHolder();
holder.acquire();
try {
// get an acceptor
XAcceptor xAcceptor = (XAcceptor)UnoRuntime.queryInterface(XAcceptor.class,
xMultiServiceFactory.createInstance("com.sun.star.connection.Acceptor"));
// get a bridgefactory
XBridgeFactory xBridgeFactory = (XBridgeFactory)UnoRuntime.queryInterface(XBridgeFactory.class,
xMultiServiceFactory.createInstance("com.sun.star.bridge.BridgeFactory"));
int connect_count = 0;
do {
XConnection xConnection = null;
try {
System.err.println("waiting for connect [" + conDcp + "#" + connect_count + "]...");
xConnection = xAcceptor.accept(conDcp);
if(xConnection == null)
break;
XConnectionBroadcaster broadcaster = (XConnectionBroadcaster)
UnoRuntime.queryInterface(
XConnectionBroadcaster.class, xConnection );
if( broadcaster != null )
broadcaster.addStreamListener(
new ConnectionListener( holder ) );
// create the bridge
XBridge xBridge = xBridgeFactory.createBridge(conDcp + ";" + protDcp + "#" + (connect_count ++), protDcp, xConnection, new InstanceProvider(rootOid, object));
}
catch(com.sun.star.uno.Exception exception) {
System.err.println( "UnoApp acceptor: exeception occurred - " + exception);
if(xConnection != null)
xConnection.close();
}
}
while(!singleAccept);
}
catch(com.sun.star.uno.Exception exception) {
System.err.println("UnoApp acceptor: exeception occurred - " + exception);
}
finally
{
holder.release();
}
}
/**
* Parses the given string a makes words of according to the following rules:
* - words embraced by " are recognized as one word
* - charachters preceded by \ are quoted (e.g. " or spaces)
* <p>
* @return an array of words
* @param string the string to parse
*/
static String []parseString(String string) {
Vector vector = new Vector();
boolean inString = false;
boolean quote = false;
String word = "";
int i = 0;
while(i < string.length()) {
if(string.charAt(i) == '\"' && !quote) {
inString = !inString;
}
else if(string.charAt(i) == '\\' && !quote) {
quote = true;
}
else if(Character.isSpace(string.charAt(i)) && !quote && !inString) {
if(word.length() > 0) {
vector.addElement(word);
word = "";
}
}
else {
word += string.charAt(i);
quote = false;
}
++ i;
}
vector.addElement(word);
String args[] = new String[vector.size()];
for(i = 0; i < args.length; ++ i)
args[i] = (String)vector.elementAt(i);
return args;
}
/**
* Takes a <code>String</code> array and concatenates the words
* to one string.
* <p>
* @return the concatenated string
* @param args the words to concatenate
*/
static String mergeString(String args[]) {
String string = "";
for(int i = 0; i < args.length; ++ i)
string += " " + args[i];
return string;
}
/**
* This is the base class for options for <code>UnoApp</code>.
* Every option has to be derived from this class and has to implement
* the <code>set</code> method, which is called while parsing the arguments.
* <p>
* Options which create the result object should also overwrite the
* create method.
*/
static abstract class Option {
String _key;
String _help;
/**
* Constructor, which has to be called with option key (e.g. -l)
* and a description of the option.
* <p>
* @param key the key of this option
* @param help a description of the option, which is printed when calling -h
*/
protected Option(String key, String help) {
_key = key;
_help = help;
}
/**
* <code>set</code> is called while parsing the arguments.
* <p>
* @param compContext the <code>compContext</code> to use for this option
* @param args an <code>String</code> array with the arguments
* @param index the index of the current argument
*/
abstract void set(CompContext compContext, String args[], int index[]) throws Exception;
/**
* Create is called while trying to get the result object.
* <p>
* @param context the context for this create, should have been set by set
* @param xMultiServiceFactory the service manager to use
* @param args the args for the object instantiation
*/
Object create(CompContext compContext) throws Exception {
throw new Exception("not implemented");
}
}
/**
* The result of applying this option is an instance of
* the named service.
*/
static class Service_Option extends Option {
static final String __key = "-s";
static final String __help = "the service to instantiate";
Service_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
String serviceName = args[index[0] ++];
compContext._context = serviceName;
compContext._creator = this;
}
Object create(CompContext compContext) throws Exception {
Object object = null;
if(compContext._args != null && compContext._args.length != 0)
object = compContext._xMultiServiceFactory.createInstanceWithArguments((String)compContext._context, compContext._args);
else
object = compContext._xMultiServiceFactory.createInstance((String)compContext._context);
return object;
}
}
/**
* The result of applying this option is a registry
* servicemanager. This option takes the rdb file name
* as a paramter.
*/
static class Registry_Option extends Option {
static final String __key = "-r";
static final String __help = "create a XMultiServiceFactory out of the registry file (e.g. -r applicat.rdb)";
Registry_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
compContext._context = RegistryServiceFactory.create(args[index[0] ++]);
compContext._creator = this;
if(DEBUG) System.err.println("##### " + getClass().getName() + " - got RegistryServiceFactory:" + compContext._context);
}
Object create(CompContext compContext) throws Exception {
return compContext._context;
}
}
/**
* The result of applying this option is a registry
* servicemanager. This option takes two rdb file names
* as a paramters.
*/
static class TwoRegistry_Option extends Option {
static final String __key = "-tr";
static final String __help = "create a XMultiServiceFactory out of two registry files (e.g. -tr applicat.rdb user.rdb";
TwoRegistry_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
compContext._context = RegistryServiceFactory.create(args[index[0] ++], args[index[0] ++]);
compContext._creator = this;
if(DEBUG) System.err.println("##### " + getClass().getName() + " - got RegistryServiceFactory:" + compContext._context);
}
Object create(CompContext compContext) throws Exception {
return compContext._context;
}
}
/**
* The result of applying this option is the import
* of the described object.
*/
static class Import_Option extends Option {
static final String __key = "-u";
static final String __help = "import an object via the given url";
Import_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
compContext._context = args[index[0] ++];
compContext._uno_url = (String)compContext._context;
compContext._creator = this;
}
Object create(CompContext compContext) throws Exception {
compContext._uno_url = null;
XUnoUrlResolver urlResolver = (XUnoUrlResolver)UnoRuntime.queryInterface(XUnoUrlResolver.class,
compContext._xMultiServiceFactory.createInstance("com.sun.star.bridge.UnoUrlResolver"));
return urlResolver.resolve((String)compContext._context);
}
}
/**
* The result of applying this option is a multiservicefactory
* for the given component.
*/
static class Component_Option extends Option {
static final String __key = "-c";
static final String __help = "creates a XMultiServiceFactory out of the given component (via url or as classname)";
Component_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
if(DEBUG) System.err.println("##### " + getClass().getName() + ".set:" + args[0]);
compContext._context = args[index[0] ++];
compContext._creator = this;
}
Object create(CompContext compContext) throws Exception {
String componentName = (String)compContext._context;
XImplementationLoader loader = (XImplementationLoader)UnoRuntime.queryInterface(XImplementationLoader.class,
compContext._xMultiServiceFactory.createInstance("com.sun.star.loader.Java"));
Object serviceManager = compContext._xMultiServiceFactory.createInstance("com.sun.star.lang.ServiceManager");
XSet serviceManager_xSet = (XSet)UnoRuntime.queryInterface(XSet.class, serviceManager);
XRegistryKey xRegistryKey = new RegistryKey("ROOT");
loader.writeRegistryInfo(xRegistryKey, null, componentName);
String keys[] = xRegistryKey.getKeyNames();
for(int j = 0; j < keys.length; ++ j) {
String implName = keys[j].substring(1);
implName = implName.substring(0, implName.length() - "/UNO/SERVICES".length());
Object factory = loader.activate(implName, null, componentName, xRegistryKey);
XSingleServiceFactory xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class,
factory);
if (xSingleServiceFactory == null)
throw new com.sun.star.loader.CannotActivateFactoryException("Can not get factory for " + implName);
serviceManager_xSet.insert(xSingleServiceFactory);
}
return serviceManager;
}
}
/**
* The -smgr option takes the given objects as <code>XSingleServiceFactory</code>
* or as <code>XMultiServiceFactory</code> and inserts them into the given service manager.
*/
static class ServiceManager_Option extends Option {
static final String __key = "-smgr";
static final String __help = "\"object[,object]*\" merges the given factorys into the result object factory";
ServiceManager_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
String arg = args[index[0] ++];
if(DEBUG) System.err.println("##### " + getClass().getName() + ".set:" + arg);
Vector comps = new Vector();
int idx = arg.indexOf(',');
while(idx != -1) {
comps.addElement(arg.substring(0, idx));
arg = arg.substring(idx + 1);
idx = arg.indexOf(',');
}
comps.addElement(arg);
// now use the XSet interface at the ServiceManager to add the factory of the loader
XSet xSet = (XSet) UnoRuntime.queryInterface(XSet.class, compContext._xMultiServiceFactory);
for(int i = 0; i < comps.size(); ++ i) {
Object object = new CompContext((String)comps.elementAt(i)).getObject();
XSingleServiceFactory xSingleServiceFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class,
object);
if(xSingleServiceFactory == null) {
XMultiServiceFactory xMultiServiceFactory = (XMultiServiceFactory)UnoRuntime.queryInterface(XMultiServiceFactory.class,
object);
if(xMultiServiceFactory != null) {
String services[] = xMultiServiceFactory.getAvailableServiceNames();
for(int j = 0; j < services.length; ++ j)
xSet.insert(new DelegatorSingleServiceFactory(xMultiServiceFactory, services[j]));
}
else
System.err.println("warning! -- " + object + " is neither XSingleServiceFactory nor XMultiServiceFactory");
}
else
xSet.insert(xSingleServiceFactory);
}
}
}
/**
* The Args option puts the given objects into arg array,
* which is used when instantiating the result object.
*/
static class Args_Option extends Option {
static final String __key = "--";
static final String __help = "objects given to this option are passed via XInitialization to the result object";
Args_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
Object obj_args[] = new Object[args.length - index[0]];
int i = 0;
while(index[0] < args.length)
obj_args[i ++] = new CompContext(args[index[0] ++]).getObject();
compContext._args = obj_args;
}
}
/**
* If the object is to be exported, only export it once
*/
static class SingleAccept_Option extends Option {
static final String __key = "--singleaccept";
static final String __help = "if the object is to be exported, only export it once";
SingleAccept_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) throws Exception {
compContext._singleAccept = true;
}
}
/**
* The help option prints a help message.
*/
static class Help_Option extends Option {
static final String __key = "-h";
static final String __help = "gives this help";
Help_Option() {
super(__key, __help);
}
void set(CompContext compContext, String args[], int index[]) {
System.out.println("usage: UnoApp [option]*");
Enumeration elements = __options.elements();
while(elements.hasMoreElements()) {
Option option = (Option)elements.nextElement();
System.out.println("\t" + option._key + "\t" + option._help);
}
}
}
// All options have to be inserted into this table
static final Hashtable __options = new Hashtable();
static {
__options.put(Service_Option.__key, new Service_Option());
__options.put(Import_Option.__key, new Import_Option());
__options.put(Registry_Option.__key, new Registry_Option());
__options.put(TwoRegistry_Option.__key, new TwoRegistry_Option());
__options.put(ServiceManager_Option.__key, new ServiceManager_Option());
__options.put(Args_Option.__key, new Args_Option());
__options.put(Component_Option.__key, new Component_Option());
__options.put(SingleAccept_Option.__key, new SingleAccept_Option());
__options.put(Help_Option.__key, new Help_Option());
};
/**
* The is the main method, which is called from java.
*/
static public void main(String args[]) throws Exception {
if(args.length == 0)
args = new String[]{"-h"};
// We have to do this, cause the jdb under solaris does not allow to pass
// arguments with included spaces.
String arg = mergeString(args);
CompContext compContext = new CompContext(arg);
Object object = compContext.getObject();
if(compContext._uno_url != null) // see, if we have to export the object
export(compContext._xMultiServiceFactory, compContext._uno_url, object, compContext._singleAccept);
else {
XMain xMain = (XMain)UnoRuntime.queryInterface(XMain.class, object);
if(xMain != null)
xMain.run(new String[0]);
System.out.println("result: " + object);
}
}
static class CompContext {
/* The membders of an CompContext */
Option _creator = null; // the creator gets set by option which provide objects
Object _context = null; // the context for object creation
Object _args[] = null; // the args for object creation
String _uno_url = null; // the url for object export
XMultiServiceFactory _xMultiServiceFactory; // the service manager for object creation
boolean _singleAccept = false; // if export object, only export once
/**
* Initializes <code>CompContext</code>.
* If string only is one word and the word does not start with "-"
* set the context with string.
* <p>
* @param string the arguments
*/
CompContext(String string) throws Exception {
_xMultiServiceFactory = createSimpleServiceManager();
String args[] = parseString(string);
if(args.length == 1 && args[0].charAt(0) != '-')
_context = string;
else
parseArgs(args);
}
/**
* Initializes <code>CompContext</code>.
* If args contains only one word and the word does not start with "-"
* set the context with string.
* <p>
* @param string the arguments
*/
CompContext(String args[]) throws Exception {
_xMultiServiceFactory = createSimpleServiceManager();
if(args.length == 1 && args[0].charAt(0) != '-')
_context = args[0];
else
parseArgs(args);
}
/**
* Interprets the args as a sequence of option names
* followed by option parameters.
* <p>
* @param args the arguments
*/
protected void parseArgs(String args[]) throws Exception {
int i[] = new int[1];
while(i[0] < args.length) {
Option option = (Option)__options.get(args[i[0]]);
if(option == null) {
System.err.println("unknown option:" + args[i[0]]);
return;
}
++ i[0];
option.set(this, args, i);
}
}
/**
* Gets the object described by this <code>compContext</code>.
* If no creator is set, returns the context as object.
* <p>
* @return the object
*/
Object getObject () throws Exception {
Object object = null;
if(_creator == null)
object = _context;
else
object = _creator.create(this);
return object;
}
}
/** Calls the main method. The parameter of the applet are passed as arguments
to the main method.
*/
public void init() {
System.err.println("##### " + getClass().getName() + ".init");
try {
String args = getParameter("params");
main(new String[]{args});
}
catch(Exception exception) {
System.err.println("error - " + exception);
}
}
public void start() {
System.err.println("##### " + getClass().getName() + ".start");
}
public void stop() {
System.err.println("##### " + getClass().getName() + ".stop");
}
public void destroy() {
System.err.println("##### " + getClass().getName() + ".init");
}
}

View file

@ -1,53 +0,0 @@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2008 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
#
# $Revision: 1.8 $
#
# 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 = jurt
PACKAGE = com$/sun$/star$/tools$/uno
TARGET = com_sun_star_tools_uno
# --- Settings -----------------------------------------------------
.INCLUDE : $(PRJ)$/util$/makefile.pmk
# --- Files --------------------------------------------------------
JAVAFILES = \
DumpType.java \
DumpTypeDescription.java \
RegComp.java \
RegistryKey.java \
UnoApp.java
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk

View file

@ -1,4 +0,0 @@
u2 jut : javaunohelper NULL
u2 jut usr1 - all u2_mkout NULL
u2 jut\com\sun\star\tools\uno nmake - all u2_csst_uno NULL
u2 jut\util nmake - all u2_util u2_csst_uno NULL

View file

@ -1,3 +0,0 @@
..\%__SRC%\class\jut.jar %_DEST%\bin%_EXT%\jut.jar
..\%__SRC%\bin\jut_src.zip %COMMON_DEST%\bin%_EXT%\jut_src.zip

View file

View file

@ -1,56 +0,0 @@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2008 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
#
# $Revision: 1.5 $
#
# 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 = jut
TARGET = jut
# --- Settings -----------------------------------------------------
.INCLUDE: makefile.pmk
JARCLASSDIRS = com
JARTARGET = $(TARGET).jar
JARCOMPRESS = TRUE
JARCLASSPATH = $(JARFILES)
CUSTOMMANIFESTFILE = manifest
# Special work necessary for building java reference with javadoc.
# The source of puplic APIs must be delivered and used later in the
# odk module.
ZIP1TARGET=$(TARGET)_src
ZIP1FLAGS=-u -r
ZIP1DIR=$(PRJ)
ZIP1LIST=com -x "*makefile.mk"
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk

View file

@ -1,36 +0,0 @@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2008 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.pmk,v $
#
# $Revision: 1.5 $
#
# 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.
#
#*************************************************************************
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
JARFILES = ridl.jar jurt.jar juh.jar

View file

@ -1 +0,0 @@
Sealed: true

View file

@ -39,7 +39,7 @@ namespace rtl {
<P>Used when parsing (part of) a URI fails for syntactical reasons.</P>
*/
class MalformedUriException
class SAL_EXCEPTION_DLLPUBLIC_EXPORT MalformedUriException
{
public:
/** Create a MalformedUriException.
@ -47,8 +47,17 @@ public:
@param rMessage
A message containing any details about the exception.
*/
inline MalformedUriException(rtl::OUString const & rMessage):
m_aMessage(rMessage) {}
inline SAL_EXCEPTION_DLLPRIVATE MalformedUriException(
rtl::OUString const & rMessage): m_aMessage(rMessage) {}
inline SAL_EXCEPTION_DLLPRIVATE MalformedUriException(
MalformedUriException const & other): m_aMessage(other.m_aMessage) {}
inline SAL_EXCEPTION_DLLPRIVATE ~MalformedUriException() {}
inline SAL_EXCEPTION_DLLPRIVATE MalformedUriException operator =(
MalformedUriException const & other)
{ m_aMessage = other.m_aMessage; return *this; }
/** Get the message.
@ -56,7 +65,8 @@ public:
A reference to the message. The reference is valid for the lifetime of
this MalformedUriException.
*/
inline rtl::OUString const & getMessage() const { return m_aMessage; }
inline SAL_EXCEPTION_DLLPRIVATE rtl::OUString const & getMessage() const
{ return m_aMessage; }
private:
rtl::OUString m_aMessage;

View file

@ -281,6 +281,20 @@ typedef void * sal_Handle;
# error("unknown platform")
#endif
/**
Exporting the symbols necessary for exception handling on GCC.
These macros are used for inline declarations of exception classes, as in
rtl/malformeduriexception.hxx.
*/
#if defined __GNUC__
#define SAL_EXCEPTION_DLLPUBLIC_EXPORT SAL_DLLPUBLIC_EXPORT
#define SAL_EXCEPTION_DLLPRIVATE SAL_DLLPRIVATE
#else
#define SAL_EXCEPTION_DLLPUBLIC_EXPORT
#define SAL_EXCEPTION_DLLPRIVATE
#endif
/** Use this for pure virtual classes, e.g. class SAL_NO_VTABLE Foo { ...
This hinders the compiler from setting a generic vtable stating that
a pure virtual function was called and thus slightly reduces code size.

View file

@ -34,6 +34,13 @@
#include <osl/diagnose.h>
#include <pthread.h>
#include <stdlib.h>
#if defined LINUX /* bad hack */
int pthread_mutexattr_setkind_np(pthread_mutexattr_t *, int);
#define pthread_mutexattr_settype pthread_mutexattr_setkind_np
#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
#endif
/*
Implementation notes:
@ -42,19 +49,6 @@
*/
/*#if defined(PTHREAD_MUTEX_RECURSIVE) && defined(USE_RECURSIVE_MUTEX)*/
#ifdef LINUX
// The obsolete pthread_mutex_setkind_np (used below in osl_createMutex) seems
// to be missing from pthread.h on LINUX:
int pthread_mutexattr_setkind_np(pthread_mutexattr_t *, int);
/*
* Linux fully supports recursive mutexes, but only with
* a non-standard function. So we linux, we use system recursive mutexes.
*/
typedef struct _oslMutexImpl
{
pthread_mutex_t mutex;
@ -79,8 +73,7 @@ oslMutex SAL_CALL osl_createMutex()
pthread_mutexattr_init(&aMutexAttr);
// nRet = pthread_mutexattr_settype(&aMutexAttr, PTHREAD_MUTEX_RECURSIVE);
nRet = pthread_mutexattr_setkind_np( &aMutexAttr, PTHREAD_MUTEX_RECURSIVE_NP );
nRet = pthread_mutexattr_settype(&aMutexAttr, PTHREAD_MUTEX_RECURSIVE);
nRet = pthread_mutex_init(&(pMutex->mutex), &aMutexAttr);
if ( nRet != 0 )
@ -204,259 +197,28 @@ sal_Bool SAL_CALL osl_releaseMutex(oslMutex Mutex)
/* osl_getGlobalMutex */
/*****************************************************************************/
oslMutex * SAL_CALL osl_getGlobalMutex()
{
/* the static global mutex instance */
static oslMutexImpl globalMutexImpl = {
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
};
static oslMutexImpl globalMutexImpl;
/* necessary to get a "oslMutex *" */
static oslMutex globalMutex = (oslMutex) &globalMutexImpl;
return &globalMutex;
}
#else /* SOLARIS and all other platforms, use an own implementation of
resursive mutexes */
/*
* jbu: Currently not used for solaris. The default implementation is buggy,
* the system needs to be patched to
* SPARC X86
* Solaris 7: 106980-17 106981-18
* Solaris 8: 108827-11 108828-11
*
* As the performace advantage is not too high, it was decided to wait
* some more time. Note also, that solaris 2.6 does not support
* them at all.
*/
#ifdef PTHREAD_NONE_INIT
static pthread_t _pthread_none_ = PTHREAD_NONE_INIT;
#endif
typedef struct _oslMutexImpl
{
pthread_mutex_t mutex;
pthread_t owner;
sal_uInt32 locks;
} oslMutexImpl;
/*****************************************************************************/
/* osl_createMutex */
/*****************************************************************************/
oslMutex SAL_CALL osl_createMutex()
{
oslMutexImpl* pMutex = (oslMutexImpl*) malloc(sizeof(oslMutexImpl));
int nRet=0;
OSL_ASSERT(pMutex);
if ( pMutex == 0 )
static void globalMutexInitImpl(void) {
pthread_mutexattr_t attr;
if (pthread_mutexattr_init(&attr) != 0 ||
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) ||
pthread_mutex_init(&globalMutexImpl.mutex, &attr) != 0 ||
pthread_mutexattr_destroy(&attr) != 0)
{
return 0;
abort();
}
nRet = pthread_mutex_init(&(pMutex->mutex), PTHREAD_MUTEXATTR_DEFAULT);
if ( nRet != 0 )
{
OSL_TRACE("osl_createMutex : mutex init failed. Errno: %d; %s\n",
nRet, strerror(nRet));
free(pMutex);
return 0;
}
pMutex->owner = PTHREAD_NONE;
pMutex->locks = 0;
return (oslMutex) pMutex;
}
/*****************************************************************************/
/* osl_destroyMutex */
/*****************************************************************************/
void SAL_CALL osl_destroyMutex(oslMutex Mutex)
{
oslMutexImpl* pMutex = (oslMutexImpl*) Mutex;
OSL_ASSERT(pMutex);
if ( pMutex != NULL )
{
int nRet=0;
nRet = pthread_mutex_destroy(&(pMutex->mutex));
if ( nRet != 0 )
{
OSL_TRACE("osl_destroyMutex : mutex destroy failed. Errno: %d; %s\n",
nRet, strerror(nRet));
}
free(pMutex);
}
return;
}
/*****************************************************************************/
/* osl_acquireMutex */
/*****************************************************************************/
sal_Bool SAL_CALL osl_acquireMutex(oslMutex Mutex)
{
oslMutexImpl* pMutex = (oslMutexImpl*) Mutex;
OSL_ASSERT(pMutex);
if ( pMutex )
{
int nRet=0;
pthread_t thread_id = pthread_self();
if ( pthread_equal(pMutex->owner, thread_id ) )
{
pMutex->locks++;
/* fprintf(stderr,"osl_acquireMutex 0x%08X (locks == %i) from %i to thread %i (lock inc)\n",
pMutex,pMutex->locks,pMutex->owner,pthread_self());*/
}
else
{
nRet = pthread_mutex_lock(&(pMutex->mutex));
if ( nRet != 0 )
{
OSL_TRACE("osl_acquireMutex : mutex lock failed. Errno: %d; %s\n",
nRet, strerror(nRet));
}
/* fprintf(stderr,"osl_acquireMutex 0x%08X (locks == %i) from %i to thread %i\n",
pMutex,pMutex->locks,pMutex->owner,thread_id);*/
OSL_ASSERT( pMutex->locks == 0 );
pMutex->owner = thread_id;
}
return sal_True;
}
/* not initialized */
return sal_False;
}
/*****************************************************************************/
/* osl_tryToAcquireMutex */
/*****************************************************************************/
sal_Bool SAL_CALL osl_tryToAcquireMutex(oslMutex Mutex)
{
oslMutexImpl* pMutex = (oslMutexImpl*) Mutex;
OSL_ASSERT(pMutex);
if ( pMutex )
{
int nRet = 0;
if ( pthread_equal(pMutex->owner, pthread_self()) )
{
pMutex->locks++;
}
else
{
nRet = pthread_mutex_trylock(&(pMutex->mutex));
if ( nRet != 0 )
{
OSL_TRACE("osl_tryToacquireMutex : mutex trylock failed. Errno: %d; %s\n",
nRet, strerror(nRet));
return sal_False;
}
OSL_ASSERT( pMutex->locks == 0 );
pMutex->owner = pthread_self();
}
return sal_True;
}
/* not initialized */
return sal_False;
}
/*****************************************************************************/
/* osl_releaseMutex */
/*****************************************************************************/
sal_Bool SAL_CALL osl_releaseMutex(oslMutex Mutex)
{
oslMutexImpl* pMutex = (oslMutexImpl*) Mutex;
int nRet=0;
OSL_ASSERT(pMutex);
if ( pMutex )
{
if ( pthread_equal( pMutex->owner, pthread_self()) )
{
if ( pMutex->locks > 0 )
{
pMutex->locks--;
/* fprintf(stderr,"osl_releaseMutex 0x%08X (locks == %i) from %i to thread %i (lock dec)\n",
pMutex,pMutex->locks,pMutex->owner,pthread_self());*/
}
else
{
/* fprintf(stderr,"osl_releaseMutex 0x%08X (locks == %i) from %i to thread %i\n",
pMutex,pMutex->locks,pMutex->owner,pthread_self());*/
pMutex->owner = PTHREAD_NONE;
nRet = pthread_mutex_unlock(&(pMutex->mutex));
if ( nRet != 0 )
{
OSL_TRACE("osl_releaseMutex : mutex unlock failed. Errno: %d; %s\n",
nRet, strerror(nRet));
}
}
return (sal_True);
}
else
{
/* fprintf(stderr,"osl_releaseMutex 0x%08X (locks == %i) from %i to thread %i (not owner)\n",
pMutex,pMutex->locks,pMutex->owner,pthread_self());*/
nRet = pthread_mutex_unlock(&(pMutex->mutex));
if ( nRet != 0 )
{
OSL_TRACE("osl_releaseMutex : mutex unlock failed. Errno: %d; %s\n",
nRet, strerror(nRet));
return sal_False;
}
return sal_True;
}
}
/* not initialized */
return sal_False;
}
/*****************************************************************************/
/* osl_getGlobalMutex */
/*****************************************************************************/
oslMutex * SAL_CALL osl_getGlobalMutex()
{
/* the static global mutex instance */
static oslMutexImpl globalMutexImpl = {
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_NONE_INIT,
0
};
/* necessary to get a "oslMutex *" */
static oslMutex globalMutex = (oslMutex) &globalMutexImpl;
static pthread_once_t once = PTHREAD_ONCE_INIT;
if (pthread_once(&once, &globalMutexInitImpl) != 0) {
abort();
}
return &globalMutex;
}
#endif /* #ifndef LINUX */

View file

@ -30,7 +30,7 @@
#*************************************************************************
# The following variable must be set (see README):
#SDK_HOME := /opt/OpenOffice.org2.0_SDK
#SDK_HOME := /opt/openoffice.org/basis3.1/sdk
# The following variables can be set, if necessary (see README):
#URE_HOME := /opt/openoffice.org/ure