summaryrefslogtreecommitdiffstats
path: root/odk/examples/java/Inspector/Introspector.java
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /odk/examples/java/Inspector/Introspector.java
parentInitial commit. (diff)
downloadlibreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.tar.xz
libreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'odk/examples/java/Inspector/Introspector.java')
-rw-r--r--odk/examples/java/Inspector/Introspector.java643
1 files changed, 643 insertions, 0 deletions
diff --git a/odk/examples/java/Inspector/Introspector.java b/odk/examples/java/Inspector/Introspector.java
new file mode 100644
index 000000000..b8d3be3c0
--- /dev/null
+++ b/odk/examples/java/Inspector/Introspector.java
@@ -0,0 +1,643 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the BSD license.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Sun Microsystems, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.sun.star.beans.IllegalTypeException;
+import com.sun.star.beans.MethodConcept;
+import com.sun.star.beans.Property;
+import com.sun.star.beans.XIntrospection;
+import com.sun.star.beans.XIntrospectionAccess;
+import com.sun.star.container.XEnumeration;
+import com.sun.star.container.XEnumerationAccess;
+import com.sun.star.container.XHierarchicalNameAccess;
+import com.sun.star.container.XIndexAccess;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.lang.XServiceInfo;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.lib.uno.helper.WeakBase;
+import com.sun.star.reflection.TypeDescriptionSearchDepth;
+import com.sun.star.reflection.XConstantTypeDescription;
+import com.sun.star.reflection.XConstantsTypeDescription;
+import com.sun.star.reflection.XIdlClass;
+import com.sun.star.reflection.XIdlMethod;
+import com.sun.star.reflection.XIdlReflection;
+import com.sun.star.reflection.XIndirectTypeDescription;
+import com.sun.star.reflection.XInterfaceTypeDescription;
+import com.sun.star.reflection.XPropertyTypeDescription;
+import com.sun.star.reflection.XServiceTypeDescription;
+import com.sun.star.reflection.XTypeDescription;
+import com.sun.star.reflection.XTypeDescriptionEnumeration;
+import com.sun.star.reflection.XTypeDescriptionEnumerationAccess;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.TypeClass;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+
+public class Introspector extends WeakBase{
+
+ private XIntrospection m_xIntrospection;
+ private XMultiComponentFactory m_xMultiComponentFactory;
+ private XComponentContext m_xComponentContext;
+ private XTypeDescriptionEnumerationAccess m_xTDEnumerationAccess;
+ private XIdlReflection mxIdlReflection;
+ private static Introspector m_oIntrospector = null;
+ private XSimpleFileAccess xSimpleFileAccess = null;
+
+
+
+ public static Introspector getIntrospector(){
+ if (m_oIntrospector == null){
+ throw new NullPointerException();
+ }
+ else{
+ return m_oIntrospector;
+ }
+ }
+
+ public static Introspector getIntrospector(XComponentContext _xComponentContext){
+ if (m_oIntrospector == null){
+ m_oIntrospector = new Introspector(_xComponentContext);
+ }
+ return m_oIntrospector;
+ }
+
+
+ /** Creates a new instance of Introspection */
+ private Introspector(XComponentContext _xComponentContext) {
+ try{
+ m_xComponentContext = _xComponentContext;
+ m_xMultiComponentFactory = m_xComponentContext.getServiceManager();
+ Object o = m_xMultiComponentFactory.createInstanceWithContext("com.sun.star.beans.Introspection", m_xComponentContext);
+ m_xIntrospection = UnoRuntime.queryInterface(XIntrospection.class, o );
+ Object oCoreReflection = getXMultiComponentFactory().createInstanceWithContext("com.sun.star.reflection.CoreReflection", getXComponentContext());
+ mxIdlReflection = UnoRuntime.queryInterface(XIdlReflection.class, oCoreReflection);
+ initTypeDescriptionManager();
+ }
+ catch( Exception exception ) {
+ System.err.println( exception );
+ }}
+
+
+ protected XComponentContext getXComponentContext(){
+ return m_xComponentContext;
+ }
+
+
+ private XMultiComponentFactory getXMultiComponentFactory(){
+ return m_xMultiComponentFactory;
+ }
+
+
+ protected XIntrospectionAccess getXIntrospectionAccess(Object _oUnoComponent){
+ return m_xIntrospection.inspect(_oUnoComponent);
+ }
+
+
+ public boolean isContainer(Object _oUnoObject){
+ boolean bIsContainer = false;
+ try {
+ XIntrospectionAccess xIntrospectionAccessObject = getXIntrospectionAccess(_oUnoObject);
+ if (xIntrospectionAccessObject != null){
+ XEnumerationAccess xEnumerationAccess = UnoRuntime.queryInterface(XEnumerationAccess.class, xIntrospectionAccessObject.queryAdapter( new Type( XEnumerationAccess.class ) ) );
+ if (xEnumerationAccess != null){
+ XEnumeration xEnumeration = xEnumerationAccess.createEnumeration();
+ bIsContainer = xEnumeration.hasMoreElements();
+ }
+ if (!bIsContainer){
+ XIndexAccess xIndexAccess = UnoRuntime.queryInterface( XIndexAccess.class, xIntrospectionAccessObject.queryAdapter(new Type( XIndexAccess.class )));
+ if (xIndexAccess != null){
+ bIsContainer = (xIndexAccess.getCount() > 0);
+ }
+ }
+ }
+ } catch (IllegalTypeException ex) {
+ ex.printStackTrace(System.err);
+ }
+ return bIsContainer;
+ }
+
+
+ // add all containers for the given object to the tree under the node
+ // parent
+ public Object[] getUnoObjectsOfContainer(Object _oUnoParentObject) {
+ Object[] oRetComponents = null;
+ try {
+ ArrayList<Object> oRetComponentsVector = new ArrayList<Object>();
+ XIntrospectionAccess xIntrospectionAccessObject = getXIntrospectionAccess(_oUnoParentObject);
+ if ( xIntrospectionAccessObject != null ) {
+ XEnumerationAccess xEnumerationAccess = UnoRuntime.queryInterface(XEnumerationAccess.class, xIntrospectionAccessObject.queryAdapter( new Type( XEnumerationAccess.class ) ) );
+ if ( xEnumerationAccess != null ) {
+ XEnumeration xEnumeration = xEnumerationAccess.createEnumeration();
+ while ( xEnumeration.hasMoreElements() ) {
+ oRetComponentsVector.add(xEnumeration.nextElement());
+ }
+ }
+ XIndexAccess xIndexAccess = UnoRuntime.queryInterface( XIndexAccess.class, xIntrospectionAccessObject.queryAdapter(new Type( XIndexAccess.class )));
+ if ( xIndexAccess != null ) {
+ XIdlMethod mMethod = xIntrospectionAccessObject.getMethod("getByIndex", com.sun.star.beans.MethodConcept.INDEXCONTAINER);
+ for ( int i = 0; i < xIndexAccess.getCount(); i++ ) {
+ Object[][] aParamInfo = new Object[1][1];
+ aParamInfo[0] = new Integer[] { Integer.valueOf(i) };
+ oRetComponentsVector.add(mMethod.invoke(_oUnoParentObject, aParamInfo));
+ }
+ }
+ }
+ if (oRetComponentsVector != null){
+ oRetComponents = new Object[oRetComponentsVector.size()];
+ oRetComponentsVector.toArray(oRetComponents);
+ }
+ }
+ catch( Exception exception ) {
+ System.err.println( exception );
+ }
+ return oRetComponents;
+ }
+
+
+ protected XIdlMethod[] getMethodsOfInterface(Type _aType){
+ try{
+ XIdlClass xIdlClass = mxIdlReflection.forName(_aType.getTypeName());
+ return xIdlClass.getMethods();
+ }
+ catch( Exception e ) {
+ System.err.println( e );
+ return null;
+ }}
+
+
+
+
+
+ public boolean hasMethods(Object _oUnoObject){
+ boolean bHasMethods = (getMethods(_oUnoObject).length > 0);
+ return bHasMethods;
+ }
+
+
+ // add all methods for the given object to the tree under the node parent
+ public XIdlMethod[] getMethods(Object _oUnoParentObject) {
+ try {
+ XIntrospectionAccess xIntrospectionAccess = getXIntrospectionAccess(_oUnoParentObject);
+ if (xIntrospectionAccess != null){
+ XIdlMethod[] xIdlMethods = xIntrospectionAccess.getMethods(MethodConcept.ALL - MethodConcept.DANGEROUS);
+ return xIdlMethods;
+ }
+ }
+ catch( Exception e ) {
+ System.err.println( e );
+ }
+ return null;
+ }
+
+
+ public boolean hasProperties(Object _oUnoObject){
+ boolean bHasProperties = (getProperties(_oUnoObject).length > 0);
+ return bHasProperties;
+ }
+
+
+ protected Property[] getProperties( Object _oUnoParentObject){
+ try {
+ XIntrospectionAccess xIntrospectionAccess = getXIntrospectionAccess(_oUnoParentObject);
+ if (xIntrospectionAccess != null){
+ Property[] aProperties = xIntrospectionAccess.getProperties(com.sun.star.beans.PropertyConcept.ATTRIBUTES + com.sun.star.beans.PropertyConcept.PROPERTYSET);
+ return aProperties;
+ }
+ }
+ catch( Exception e ) {
+ System.err.println( e );
+ }
+ return null;
+ }
+
+
+ protected Property[] getProperties(Object _oUnoObject, String _sServiceName){
+ Property[] aProperties = getProperties(_oUnoObject);
+ List<Property> aListOfProperties = java.util.Arrays.asList(aProperties);
+ ArrayList<Property> aPropertiesVector = new ArrayList<Property>(aListOfProperties);
+ if (aProperties != null){
+ XPropertyTypeDescription[] xPropertyTypeDescriptions = getPropertyDescriptionsOfService(_sServiceName);
+ for (int i = aProperties.length - 1; i >= 0; i--){
+ if (!hasByName(xPropertyTypeDescriptions, _sServiceName + "." + aProperties[i].Name)){
+ aPropertiesVector.remove(i);
+ }
+ }
+ }
+ Property[] aRetProperties = new Property[aPropertiesVector.size()];
+ aPropertiesVector.toArray(aRetProperties);
+ return aRetProperties;
+ }
+
+
+ protected Type[] getInterfaces(Object _oUnoObject, String _sServiceName){
+ Type[] aTypes = getInterfaces(_oUnoObject);
+ List<Type> aListOfTypes = java.util.Arrays.asList(aTypes);
+ ArrayList<Type> aTypesVector = new ArrayList<Type>(aListOfTypes);
+ if (aTypes != null){
+ XInterfaceTypeDescription[] xInterfaceTypeDescriptions = getInterfaceDescriptionsOfService(_sServiceName);
+ for (int i = aTypes.length - 1; i >= 0; i--){
+ if (!hasByName(xInterfaceTypeDescriptions, aTypes[i].getTypeName())){
+ aTypesVector.remove(i);
+ }
+ }
+ }
+ Type[] aRetTypes = new Type[aTypesVector.size()];
+ aTypesVector.toArray(aRetTypes);
+ return aRetTypes;
+ }
+
+
+ public boolean hasInterfaces(Object _oUnoObject){
+ return (getInterfaces(_oUnoObject).length > 0);
+ }
+
+
+ protected Type[] getInterfaces(Object _oUnoParentObject){
+ Type[] aTypes = new Type[]{};
+ XTypeProvider xTypeProvider = UnoRuntime.queryInterface( XTypeProvider.class, _oUnoParentObject);
+ if ( xTypeProvider != null ) {
+ aTypes = xTypeProvider.getTypes();
+ }
+ return aTypes;
+ }
+
+
+
+ public static boolean isObjectSequence(Object _oUnoObject){
+ Type aType = AnyConverter.getType(_oUnoObject);
+ return aType.getTypeClass().getValue() == TypeClass.SEQUENCE_value;
+ }
+
+
+ public static boolean isObjectPrimitive(Object _oUnoObject){
+ boolean breturn = false;
+ if (_oUnoObject != null){
+ Type aType = AnyConverter.getType(_oUnoObject);
+ breturn = isObjectPrimitive(_oUnoObject.getClass(), aType.getTypeClass());
+ }
+ return breturn;
+ }
+
+
+ public static boolean isPrimitive(TypeClass _typeClass){
+ return (( _typeClass == TypeClass.BOOLEAN )
+ || ( _typeClass == TypeClass.BYTE )
+ || ( _typeClass == TypeClass.CHAR )
+ || ( _typeClass == TypeClass.DOUBLE )
+ || ( _typeClass == TypeClass.ENUM )
+ || ( _typeClass == TypeClass.FLOAT )
+ || ( _typeClass == TypeClass.HYPER )
+ || ( _typeClass == TypeClass.LONG )
+ || ( _typeClass == TypeClass.SHORT )
+ || ( _typeClass == TypeClass.STRING )
+ || ( _typeClass == TypeClass.UNSIGNED_HYPER )
+ || ( _typeClass == TypeClass.UNSIGNED_LONG )
+ || ( _typeClass == TypeClass.UNSIGNED_SHORT ));
+ }
+
+ public static boolean isObjectPrimitive(Class<? extends Object> _oUnoClass, TypeClass _typeClass){
+ return !( ( !_oUnoClass.isPrimitive() ) && ( _typeClass != TypeClass.ARRAY )
+ && ( _typeClass != TypeClass.BOOLEAN )
+ && ( _typeClass != TypeClass.BYTE )
+ && ( _typeClass != TypeClass.CHAR )
+ && ( _typeClass != TypeClass.DOUBLE )
+ && ( _typeClass != TypeClass.ENUM )
+ && ( _typeClass != TypeClass.FLOAT )
+ && ( _typeClass != TypeClass.HYPER )
+ && ( _typeClass != TypeClass.LONG )
+ && ( _typeClass != TypeClass.SHORT )
+ && ( _typeClass != TypeClass.STRING )
+ && ( _typeClass != TypeClass.UNSIGNED_HYPER )
+ && ( _typeClass != TypeClass.UNSIGNED_LONG )
+ && ( _typeClass != TypeClass.UNSIGNED_SHORT ));
+ }
+
+
+ private void initTypeDescriptionManager() {
+ try {
+ Object oTypeDescriptionManager = getXComponentContext().getValueByName("/singletons/com.sun.star.reflection.theTypeDescriptionManager");
+ m_xTDEnumerationAccess = UnoRuntime.queryInterface(XTypeDescriptionEnumerationAccess.class, oTypeDescriptionManager);
+ } catch ( java.lang.Exception e) {
+ System.out.println(System.out);
+ }}
+
+
+ private XTypeDescriptionEnumerationAccess getXTypeDescriptionEnumerationAccess(){
+ return m_xTDEnumerationAccess;
+ }
+
+
+ protected XConstantTypeDescription[] getFieldsOfConstantGroup(String _sTypeClass){
+ XConstantTypeDescription[] xConstantTypeDescriptions = null;
+ try {
+ TypeClass[] eTypeClasses = new com.sun.star.uno.TypeClass[1];
+ eTypeClasses[0] = com.sun.star.uno.TypeClass.CONSTANTS;
+ XTypeDescriptionEnumeration xTDEnumeration = m_xTDEnumerationAccess.createTypeDescriptionEnumeration(getModuleName(_sTypeClass), eTypeClasses, TypeDescriptionSearchDepth.INFINITE);
+ while (xTDEnumeration.hasMoreElements()) {
+ XTypeDescription xTD = xTDEnumeration.nextTypeDescription();
+ if (xTD.getName().equals(_sTypeClass)){
+ XConstantsTypeDescription xConstantsTypeDescription = UnoRuntime.queryInterface(XConstantsTypeDescription.class, xTD);
+ xConstantTypeDescriptions = xConstantsTypeDescription.getConstants();
+ }
+ String sName = xTD.getName();
+ }
+ return xConstantTypeDescriptions;
+ } catch ( java.lang.Exception e) {
+ System.out.println(System.out);
+ }
+ return null;
+ }
+
+ private XServiceTypeDescription getServiceTypeDescription(String _sServiceName, TypeClass _eTypeClass){
+ try{
+ if (_sServiceName.length() > 0){
+ TypeClass[] eTypeClasses = new com.sun.star.uno.TypeClass[2];
+ eTypeClasses[0] = com.sun.star.uno.TypeClass.SERVICE;
+ eTypeClasses[1] = _eTypeClass;
+ XTypeDescriptionEnumeration xTDEnumeration = getXTypeDescriptionEnumerationAccess().createTypeDescriptionEnumeration(Introspector.getModuleName(_sServiceName), eTypeClasses, TypeDescriptionSearchDepth.INFINITE);
+ while (xTDEnumeration.hasMoreElements()) {
+ XTypeDescription xTD = xTDEnumeration.nextTypeDescription();
+ if (xTD.getName().equals(_sServiceName)){
+ XServiceTypeDescription xServiceTypeDescription = UnoRuntime.queryInterface(XServiceTypeDescription.class, xTD);
+ return xServiceTypeDescription;
+ }
+ }
+ }
+ return null;
+ } catch (Exception ex) {
+ ex.printStackTrace(System.err);
+ return null;
+ }}
+
+
+ public XPropertyTypeDescription[] getPropertyDescriptionsOfService(String _sServiceName){
+ try {
+ XServiceTypeDescription xServiceTypeDescription = getServiceTypeDescription(_sServiceName, com.sun.star.uno.TypeClass.PROPERTY);
+ if (xServiceTypeDescription != null){
+ XPropertyTypeDescription[] xPropertyTypeDescriptions = xServiceTypeDescription.getProperties();
+ return xPropertyTypeDescriptions;
+ }
+ } catch ( java.lang.Exception e) {
+ System.out.println(System.out);
+ }
+ return new XPropertyTypeDescription[]{};
+ }
+
+
+ public XTypeDescription getReferencedType(String _sTypeName){
+ XTypeDescription xTypeDescription = null;
+ try{
+ XHierarchicalNameAccess xHierarchicalNameAccess = UnoRuntime.queryInterface(XHierarchicalNameAccess.class, m_xTDEnumerationAccess);
+ if (xHierarchicalNameAccess != null){
+ if (xHierarchicalNameAccess.hasByHierarchicalName(_sTypeName)){
+ XIndirectTypeDescription xIndirectTypeDescription = UnoRuntime.queryInterface(XIndirectTypeDescription.class, xHierarchicalNameAccess.getByHierarchicalName(_sTypeName));
+ if (xIndirectTypeDescription != null){
+ xTypeDescription = xIndirectTypeDescription.getReferencedType();
+ }
+ }
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace(System.err);
+ }
+ return xTypeDescription;
+ }
+
+
+ private XInterfaceTypeDescription[] getInterfaceDescriptionsOfService(String _sServiceName){
+ try {
+ XServiceTypeDescription xServiceTypeDescription = getServiceTypeDescription(_sServiceName, com.sun.star.uno.TypeClass.INTERFACE);
+ if (xServiceTypeDescription != null){
+ XInterfaceTypeDescription[] xInterfaceTypeDescriptions = xServiceTypeDescription.getMandatoryInterfaces();
+ return xInterfaceTypeDescriptions;
+ }
+ } catch ( java.lang.Exception e) {
+ System.out.println(System.out);
+ }
+ return new XInterfaceTypeDescription[]{};
+ }
+
+
+ private static boolean hasByName(XTypeDescription[] _xTypeDescriptions, String _sTypeName){
+ for (int i = 0; i < _xTypeDescriptions.length; i++){
+ if (_xTypeDescriptions[i].getName().equals(_sTypeName)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ public static String getModuleName(String _sTypeClass){
+ int nlastindex = _sTypeClass.lastIndexOf(".");
+ if (nlastindex > -1){
+ return _sTypeClass.substring(0, nlastindex);
+ }
+ else{
+ return "";
+ }
+ }
+
+
+ public static String getShortClassName(String _sClassName){
+ String sShortClassName = _sClassName;
+ int nindex = _sClassName.lastIndexOf(".");
+ if ((nindex < _sClassName.length()) && nindex > -1){
+ sShortClassName = _sClassName.substring(nindex + 1);
+ }
+ return sShortClassName;
+ }
+
+
+
+ public static boolean isUnoTypeObject(Object _oUnoObject){
+ return isOfUnoType(_oUnoObject, "com.sun.star.uno.Type");
+ }
+
+
+ public static boolean isUnoPropertyTypeObject(Object _oUnoObject){
+ return isOfUnoType(_oUnoObject, "com.sun.star.beans.Property");
+ }
+
+
+ public static boolean isUnoPropertyValueTypeObject(Object _oUnoObject){
+ return isOfUnoType(_oUnoObject, "com.sun.star.beans.PropertyValue");
+ }
+
+
+ private static boolean isOfUnoType(Object _oUnoObject, String _sTypeName){
+ boolean bIsUnoObject = false;
+ if (_oUnoObject != null){
+ if (_oUnoObject.getClass().isArray()){
+ if (!_oUnoObject.getClass().getComponentType().isPrimitive()){
+ Object[] oUnoArray = (Object[]) _oUnoObject;
+ if (oUnoArray.length > 0){
+ bIsUnoObject = ( oUnoArray[0].getClass().getName().equals(_sTypeName));
+ }
+ }
+ }
+ }
+ else{
+ bIsUnoObject = (_oUnoObject.getClass().getName().equals(_sTypeName));
+ }
+ return bIsUnoObject;
+ }
+
+
+ public String getConstantDisplayString(int _nValue, XConstantTypeDescription[] _xConstantTypeDescription, String _sDisplayString){
+ String sPrefix = "";
+ int[] nbits = new int[_xConstantTypeDescription.length];
+ for (int i = 0; i < _xConstantTypeDescription.length; i++){
+ short nConstantValue = ((Short) _xConstantTypeDescription[i].getConstantValue()).shortValue();
+ nbits[i] = _nValue & nConstantValue;
+ if (nbits[i] > 0){
+ _sDisplayString += sPrefix + _xConstantTypeDescription[i].getName();
+ sPrefix = " + ";
+ }
+ }
+ return _sDisplayString;
+ }
+
+
+ public static boolean isValid(Object[] _oObject){
+ if (_oObject != null){
+ if (_oObject.length > 0){
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+
+
+
+ public static boolean isArray(Object _oObject){
+ return _oObject.getClass().isArray();
+ }
+
+
+ public boolean hasSupportedServices(Object _oUnoObject){
+ boolean bHasSupportedServices = false;
+ XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, _oUnoObject);
+ if ( xServiceInfo != null ){
+ String[] sSupportedServiceNames = xServiceInfo.getSupportedServiceNames();
+ bHasSupportedServices = sSupportedServiceNames.length > 0;
+ }
+ return bHasSupportedServices;
+ }
+
+
+ public Object getValueOfText(TypeClass aTypeClass, String sText){
+ Object oReturn = null;
+ switch (aTypeClass.getValue()){
+ case TypeClass.CHAR_value:
+ break;
+ case TypeClass.DOUBLE_value:
+ oReturn = Double.valueOf(sText);
+ break;
+ case TypeClass.ENUM_value:
+ break;
+ case TypeClass.FLOAT_value:
+ oReturn = Float.valueOf(sText);
+ break;
+ case TypeClass.HYPER_value:
+ oReturn = Long.valueOf(sText);
+ break;
+ case TypeClass.LONG_value:
+ oReturn = Integer.valueOf(sText);
+ break;
+ case TypeClass.SHORT_value:
+ oReturn = Byte.valueOf(sText);
+ break;
+ case TypeClass.STRING_value:
+ oReturn = sText;
+ break;
+ case TypeClass.UNSIGNED_HYPER_value:
+ oReturn = Long.valueOf(sText);
+ break;
+ case TypeClass.UNSIGNED_LONG_value:
+ oReturn = Integer.valueOf(sText);
+ break;
+ case TypeClass.UNSIGNED_SHORT_value:
+ oReturn = Byte.valueOf(sText);
+ break;
+ default:
+ }
+ return oReturn;
+ }
+
+
+ public XSimpleFileAccess getXSimpleFileAccess(){
+ try {
+ if (xSimpleFileAccess == null){
+ Object oSimpleFileAccess = m_xComponentContext.getServiceManager().createInstanceWithContext("com.sun.star.ucb.SimpleFileAccess", m_xComponentContext);
+ xSimpleFileAccess = com.sun.star.uno.UnoRuntime.queryInterface(XSimpleFileAccess.class, oSimpleFileAccess);
+ }
+ return xSimpleFileAccess;
+ } catch (com.sun.star.uno.Exception ex) {
+ ex.printStackTrace(System.err);
+ return null;
+ }}
+
+
+ public boolean isValidSDKInstallationPath(String _sSDKInstallationPath){
+ boolean bIsValid = false;
+ try {
+ String sIDLFolder = Introspector.addToPath(_sSDKInstallationPath, Inspector.sIDLDOCUMENTSUBFOLDER);
+ String sIndexFile = Introspector.addToPath(_sSDKInstallationPath, "index.html");
+ if (getXSimpleFileAccess() != null){
+ bIsValid = (getXSimpleFileAccess().exists(sIDLFolder) && getXSimpleFileAccess().exists(sIndexFile));
+ }
+ } catch (com.sun.star.uno.Exception ex) {
+ ex.printStackTrace(System.err);
+ }
+ return bIsValid;
+ }
+
+
+ public static String addToPath(String _sPath, String _sSubPath){
+ if (!_sPath.endsWith("/")){
+ _sPath += "/";
+ }
+ return _sPath + _sSubPath;
+ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */