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:
parent
2120ed88a6
commit
3a1c0c61dc
19 changed files with 61 additions and 1958 deletions
|
@ -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 * );
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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_
|
||||
|
||||
|
|
|
@ -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 <type name>]|[java <class name>]* <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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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 <type name>]|[java <class name>]* <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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -1 +0,0 @@
|
|||
Sealed: true
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue