| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| import com.sun.star.beans.PropertyValue; |
| import com.sun.star.frame.FrameSearchFlag; |
| import com.sun.star.frame.XDesktop; |
| import com.sun.star.frame.XDispatch; |
| import com.sun.star.frame.XDispatchProvider; |
| import com.sun.star.frame.XFrame; |
| import com.sun.star.lang.XMultiComponentFactory; |
| import com.sun.star.lang.XServiceInfo; |
| import com.sun.star.reflection.TypeDescriptionSearchDepth; |
| 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.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; |
| import com.sun.star.util.URL; |
| import com.sun.star.util.XURLTransformer; |
| import java.util.List; |
| import java.util.Vector; |
| |
| public class UnoNode{ |
| |
| String sPath = null; |
| Object m_oUnoObject; |
| private XMultiComponentFactory m_xMultiComponentFactory; |
| private XComponentContext m_xComponentContext; |
| private Object[] m_oParamObjects = null; |
| private int m_nNodeType = XUnoNode.nOTHERS; |
| private Type aType = null; |
| private String sLabel = ""; |
| |
| |
| |
| /** Creates a new instance of UnoNode */ |
| public UnoNode(Object _oUnoObject) { |
| m_xComponentContext = Introspector.getIntrospector().getXComponentContext(); |
| m_xMultiComponentFactory = m_xComponentContext.getServiceManager(); |
| m_oUnoObject = _oUnoObject; |
| } |
| |
| public UnoNode(Object _oUnoObject, Type _aType) { |
| this(_oUnoObject); |
| aType = _aType; |
| m_nNodeType = XUnoNode.nINTERFACE; |
| } |
| |
| public Object getUnoObject(){ |
| return m_oUnoObject; |
| } |
| |
| |
| protected XComponentContext getXComponentContext(){ |
| return m_xComponentContext; |
| } |
| |
| |
| protected XMultiComponentFactory getXMultiComponentFactory(){ |
| return m_xMultiComponentFactory; |
| } |
| |
| |
| private static XTypeDescriptionEnumerationAccess getXTypeDescriptionEnumerationAccess(){ |
| return Introspector.getIntrospector().getXTypeDescriptionEnumerationAccess(); |
| } |
| |
| |
| public String getAnchor(){ |
| return ""; |
| } |
| |
| public int getNodeType(){ |
| return m_nNodeType; |
| } |
| |
| public void setNodeType(int _nNodeType){ |
| m_nNodeType = _nNodeType; |
| } |
| |
| public String getClassName(){ |
| String sClassName = ""; |
| if (m_nNodeType == XUnoNode.nINTERFACE){ |
| sClassName = aType.getTypeName(); |
| } |
| else if(m_nNodeType == XUnoNode.nSERVICE){ |
| sClassName = sLabel; |
| } |
| return sClassName; |
| } |
| |
| |
| public Type getUnoType(){ |
| return aType; |
| } |
| |
| protected void setLabel(String _sLabel){ |
| sLabel = _sLabel; |
| } |
| |
| public void openIdlDescription(String _sIDLUrl, String _sClassName, String _sAnchor){ |
| try{ |
| String sIDLUrl = _sIDLUrl; |
| String sAnchor = ""; // TODO find out how the Anchor may be set at the html file; //_sAnchor; |
| boolean bExists = Introspector.getIntrospector().getXSimpleFileAccess().exists(sIDLUrl); |
| if (sIDLUrl.equals("") || (!bExists)){ |
| sIDLUrl = "http://api.openoffice.org/" + Inspector.sIDLDOCUMENTSUBFOLDER; |
| } |
| if (!sIDLUrl.endsWith("/")){ |
| sIDLUrl += "/"; |
| } |
| if (_sClassName.equals("")){ |
| sIDLUrl += "com/sun/star/module-ix"; |
| sAnchor = ""; |
| } |
| else{ |
| sIDLUrl += _sClassName.replace('.', '/'); |
| } |
| if (sAnchor != null){ |
| if (!sAnchor.equals("")){ |
| sIDLUrl += "#" + sAnchor; |
| } |
| } |
| sIDLUrl += ".html"; |
| URL openHyperlink = getDispatchURL(".uno:OpenHyperlink"); |
| PropertyValue pv = new PropertyValue(); |
| pv.Name = "URL"; |
| pv.Value = sIDLUrl; |
| getXDispatcher(openHyperlink).dispatch(openHyperlink, new PropertyValue[] {pv}); |
| } catch(Exception exception) { |
| exception.printStackTrace(System.out); |
| }} |
| |
| |
| private com.sun.star.util.URL getDispatchURL(String _sURL){ |
| try { |
| Object oTransformer = getXMultiComponentFactory().createInstanceWithContext("com.sun.star.util.URLTransformer", getXComponentContext()); |
| XURLTransformer xTransformer = (XURLTransformer) UnoRuntime.queryInterface(XURLTransformer.class, oTransformer); |
| com.sun.star.util.URL[] oURL = new com.sun.star.util.URL[1]; |
| oURL[0] = new com.sun.star.util.URL(); |
| oURL[0].Complete = _sURL; |
| xTransformer.parseStrict(oURL); |
| return oURL[0]; |
| } catch (Exception e) { |
| e.printStackTrace(System.out); |
| } |
| return null; |
| } |
| |
| |
| private XFrame getCurrentFrame(){ |
| try{ |
| Object oDesktop = getXMultiComponentFactory().createInstanceWithContext("com.sun.star.frame.Desktop", getXComponentContext()); |
| XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, oDesktop); |
| return xDesktop.getCurrentFrame(); |
| } catch (Exception e) { |
| e.printStackTrace(System.out); |
| return null; |
| }} |
| |
| |
| private XDispatch getXDispatcher(com.sun.star.util.URL oURL) { |
| try { |
| com.sun.star.util.URL[] oURLArray = new com.sun.star.util.URL[1]; |
| oURLArray[0] = oURL; |
| XDispatchProvider xDispatchProvider = (XDispatchProvider) UnoRuntime.queryInterface(XDispatchProvider.class, getCurrentFrame()); |
| XDispatch xDispatch = xDispatchProvider.queryDispatch(oURLArray[0], "_top", FrameSearchFlag.ALL); // "_self" |
| return xDispatch; |
| } catch (Exception e) { |
| e.printStackTrace(System.out); |
| return null; |
| }} |
| |
| |
| private PropertyValue[] loadArgs(String url) { |
| PropertyValue pv = new PropertyValue(); |
| pv.Name = "URL"; |
| pv.Value = url; |
| return new PropertyValue[] {pv}; |
| } |
| |
| |
| |
| public boolean isFilterApplicable(String _sFilter, String _sName){ |
| boolean bFilterDoesApply = true; |
| if (_sFilter.length() > 0){ |
| if (_sName.indexOf(_sFilter) == -1){ |
| bFilterDoesApply = false; |
| } |
| } |
| return bFilterDoesApply; |
| } |
| |
| |
| // public static String getServiceDescription(Object _oUnoObject){ |
| // String sClassName = ""; |
| // XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface(XServiceInfo.class, _oUnoObject); |
| // if (xServiceInfo != null){ |
| // String[] sChildServiceNames = removeMandatoryServiceNames(xServiceInfo.getSupportedServiceNames()); |
| // if (sChildServiceNames.length > 0){ |
| // sClassName = sChildServiceNames[0]; |
| // } |
| // } |
| // return sClassName; |
| // } |
| |
| |
| |
| private static String[] getMandatoryServiceNames(String _sServiceName){ |
| String[] sMandatoryServiceNames = new String[]{}; |
| try { |
| TypeClass[] eTypeClasses = new com.sun.star.uno.TypeClass[1]; |
| eTypeClasses[0] = com.sun.star.uno.TypeClass.SERVICE; |
| XTypeDescriptionEnumeration xTDEnumeration = getXTypeDescriptionEnumerationAccess().createTypeDescriptionEnumeration(Introspector.getModuleName(_sServiceName), eTypeClasses, TypeDescriptionSearchDepth.INFINITE); |
| while (xTDEnumeration.hasMoreElements()) { |
| XTypeDescription xTD = xTDEnumeration.nextTypeDescription(); |
| if (xTD.getName().equals(_sServiceName)){ |
| XServiceTypeDescription xServiceTypeDescription = (XServiceTypeDescription) UnoRuntime.queryInterface(XServiceTypeDescription.class, xTD); |
| XServiceTypeDescription[] xMandatoryServiceTypeDescriptions = xServiceTypeDescription.getMandatoryServices(); |
| int nlength = xMandatoryServiceTypeDescriptions.length; |
| sMandatoryServiceNames = new String[nlength]; |
| for (int i = 0; i < nlength; i++){ |
| sMandatoryServiceNames[i] = xMandatoryServiceTypeDescriptions[i].getName(); |
| } |
| |
| } |
| } |
| } catch ( java.lang.Exception e) { |
| System.out.println(System.out); |
| } |
| return sMandatoryServiceNames; |
| } |
| |
| |
| private static String[] removeMandatoryServiceNames(String[] _sServiceNames){ |
| try{ |
| List aList = java.util.Arrays.asList(_sServiceNames); |
| Vector aVector = new Vector(aList); |
| for (int n = 0; n < _sServiceNames.length; n++){ |
| String[] sDelServiceNames = getMandatoryServiceNames(_sServiceNames[n]); |
| for (int m = 0; m < sDelServiceNames.length; m++){ |
| if (aVector.contains(sDelServiceNames[m])){ |
| int nIndex = aVector.indexOf(sDelServiceNames[m]); |
| aVector.remove(nIndex); |
| } |
| } |
| } |
| String[] sRetArray = new String[aVector.size()]; |
| aVector.toArray(sRetArray); |
| return sRetArray; |
| } catch (java.lang.Exception exception) { |
| exception.printStackTrace(System.out); |
| } |
| return new String[]{}; |
| } |
| |
| |
| public static String getDisplayValueOfPrimitiveType(Object _objectElement){ |
| String sValue =""; |
| try{ |
| if (AnyConverter.isString(_objectElement)){ |
| sValue = AnyConverter.toString(_objectElement); |
| } |
| else if (AnyConverter.isBoolean(_objectElement)){ |
| sValue += AnyConverter.toBoolean(_objectElement); |
| } |
| else if (AnyConverter.isByte(_objectElement)){ |
| sValue += AnyConverter.toByte(_objectElement); |
| } |
| else if (AnyConverter.isChar(_objectElement)){ |
| sValue += AnyConverter.toChar(_objectElement); |
| } |
| else if (AnyConverter.isDouble(_objectElement)){ |
| sValue += AnyConverter.toDouble(_objectElement); |
| } |
| else if (AnyConverter.isFloat(_objectElement)){ |
| sValue += AnyConverter.toFloat(_objectElement); |
| } |
| else if (AnyConverter.isInt(_objectElement)){ |
| sValue += AnyConverter.toInt(_objectElement); |
| } |
| else if (AnyConverter.isLong(_objectElement)){ |
| sValue += AnyConverter.toLong(_objectElement); |
| } |
| else if (AnyConverter.isShort(_objectElement)){ |
| sValue += AnyConverter.toShort(_objectElement); |
| } |
| } |
| catch( Exception e ) { |
| System.err.println( e ); |
| } |
| return sValue; |
| } |
| |
| protected static String[] getDisplayValuesofPrimitiveArray(Object _oUnoObject){ |
| String[] sDisplayValues = null; |
| try{ |
| Type aType = AnyConverter.getType(_oUnoObject); |
| TypeClass aTypeClass = aType.getTypeClass(); |
| int nTypeValue = aTypeClass.getValue(); |
| if (nTypeValue == TypeClass.SEQUENCE_value){ |
| nTypeValue = (sequenceComponentType(aType)).getTypeClass().getValue(); |
| } |
| switch (nTypeValue){ |
| case TypeClass.BOOLEAN_value: |
| boolean[] bBooleans = (boolean[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[bBooleans.length]; |
| for (int i = 0; i < bBooleans.length; i++){ |
| sDisplayValues[i] = Boolean.toString(bBooleans[i]); |
| } |
| break; |
| case TypeClass.BYTE_value: |
| byte[] bBytes = (byte[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[bBytes.length]; |
| for (int i = 0; i < bBytes.length; i++){ |
| sDisplayValues[i] = "" + bBytes[i]; |
| } |
| break; |
| case TypeClass.DOUBLE_value: |
| double[] fdoubles = (double[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[fdoubles.length]; |
| for (int i = 0; i < fdoubles.length; i++){ |
| sDisplayValues[i] = String.valueOf(fdoubles[i]); |
| } |
| break; |
| case TypeClass.FLOAT_value: |
| float[] ffloats = (float[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[ffloats.length]; |
| for (int i = 0; i < ffloats.length; i++){ |
| sDisplayValues[i] = String.valueOf(ffloats[i]); |
| } |
| break; |
| case TypeClass.LONG_value: |
| int[] nints = (int[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[nints.length]; |
| for (int i = 0; i < nints.length; i++){ |
| sDisplayValues[i] = String.valueOf(nints[i]); |
| } |
| break; |
| case TypeClass.HYPER_value: |
| long[] nlongs = (long[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[nlongs.length]; |
| for (int i = 0; i < nlongs.length; i++){ |
| sDisplayValues[i] = String.valueOf(nlongs[i]); |
| } |
| break; |
| case TypeClass.SHORT_value: |
| short[] nShorts = (short[]) AnyConverter.toArray(_oUnoObject); |
| sDisplayValues = new String[nShorts.length]; |
| for (int i = 0; i < nShorts.length; i++){ |
| sDisplayValues[i] = "" + nShorts[i]; |
| } |
| break; |
| case TypeClass.CHAR_value: |
| break; |
| default: |
| System.out.println("Value could not be retrieved: " + aType.getTypeClass().getClass().getName()); |
| } |
| return sDisplayValues; |
| } |
| catch( Exception e ) { |
| System.err.println( e ); |
| return null; |
| }} |
| |
| |
| private static Type sequenceComponentType(Type sequenceType) { |
| // assert sequenceType.getTypeClass() == TypeClass.SEQUENCE; |
| String n = sequenceType.getTypeName(); |
| final String PREFIX = "[]"; |
| // assert n.startsWith(PREFIX); |
| return new Type(n.substring(PREFIX.length())); |
| } |
| |
| |
| public static String getNodeDescription(Object _oUnoObject, int _nIndex){ |
| return getNodeDescription(_oUnoObject) + "[" + (_nIndex + 1) + "]"; |
| } |
| |
| |
| public static String getNodeDescription(Object _oUnoObject){ |
| XServiceInfo xServiceInfo = ( XServiceInfo ) UnoRuntime.queryInterface( XServiceInfo.class, _oUnoObject ); |
| if ( xServiceInfo != null ) { |
| return xServiceInfo.getImplementationName(); |
| } |
| String sClassName = _oUnoObject.getClass().getName(); |
| if (Introspector.getIntrospector().isObjectPrimitive(_oUnoObject)){ //super.isO{sObjectClassName.equals("java.lang.String"))issClassName.equals("java.lang.String")) |
| return _oUnoObject.toString(); |
| } |
| else{ |
| return _oUnoObject.getClass().getName(); |
| } |
| } |
| |
| public void setParameterObjects(Object[] _oParamObjects){ |
| m_oParamObjects = _oParamObjects; |
| } |
| |
| public Object[] getParameterObjects(){ |
| return m_oParamObjects; |
| } |
| } |