| /************************************************************** |
| * |
| * 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.reflection.ParamInfo; |
| import com.sun.star.reflection.ParamMode; |
| import com.sun.star.reflection.XIdlClass; |
| import com.sun.star.reflection.XIdlMethod; |
| import com.sun.star.uno.TypeClass; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.util.Vector; |
| |
| public class UnoMethodNode extends UnoNode{ |
| XIdlMethod m_xIdlMethod = null; |
| Object[] m_oParamObjects = null; |
| Object m_oUnoReturnObject = null; |
| boolean m_bisInvoked = false; |
| XUnoMethodNode m_xUnoMethodNode = null; |
| |
| |
| /** Creates a new instance of UnoMethodNode */ |
| public UnoMethodNode(XIdlMethod _xIdlMethod, Object _oUnoObject, XUnoMethodNode _xUnoMethodNode) { |
| super(_oUnoObject); |
| m_xIdlMethod = _xIdlMethod; |
| m_oParamObjects = new Object[m_xIdlMethod.getParameterInfos().length]; |
| m_xUnoMethodNode = _xUnoMethodNode; |
| } |
| |
| protected boolean isFoldable(){ |
| return ((!this.isPrimitive()) && (getTypeClass().getValue() != TypeClass.VOID_value)); |
| } |
| |
| protected boolean isInvokable(){ |
| boolean bisFoldable = true; |
| XIdlClass[] xIdlClasses = m_xIdlMethod.getParameterTypes(); |
| for (int i = 0; i < xIdlClasses.length; i++){ |
| bisFoldable = Introspector.isPrimitive(xIdlClasses[i].getTypeClass()); |
| if (!bisFoldable){ |
| return false; |
| } |
| } |
| return bisFoldable; |
| } |
| |
| public XIdlMethod getXIdlMethod(){ |
| return m_xIdlMethod; |
| } |
| |
| |
| public String getAnchor(){ |
| return getXIdlMethod().getName(); |
| } |
| |
| |
| public String getName(){ |
| return getXIdlMethod().getName(); |
| } |
| |
| |
| public Object invoke(){ |
| Object oUnoReturnObject = null; |
| if (!hasParameters()){ |
| oUnoReturnObject = invokeParameterlessMethod(); |
| m_bisInvoked = true; |
| } |
| else{ |
| Vector oUnoMethodObjects = m_xUnoMethodNode.getMethodObjects(); |
| if (oUnoMethodObjects != null){ |
| for (int i = 0; i < getXIdlMethod().getParameterInfos().length; i++){ |
| this.m_oParamObjects[i] = oUnoMethodObjects.get(i); |
| } |
| if (oUnoMethodObjects.size() == m_oParamObjects.length + 1){ |
| oUnoReturnObject = oUnoMethodObjects.get(oUnoMethodObjects.size()-1); |
| } |
| m_bisInvoked = (oUnoReturnObject != null); |
| } |
| } |
| m_oUnoReturnObject = oUnoReturnObject; |
| return oUnoReturnObject; |
| } |
| |
| |
| public boolean isInvoked(){ |
| return m_bisInvoked; |
| } |
| |
| |
| protected String getNodeDescription(){ |
| String sNodeDescription = ""; |
| String sParameters = getParameterDescription(); |
| if (m_xIdlMethod.getParameterInfos().length > 0){ |
| sNodeDescription = getStandardMethodDescription(); |
| } |
| else{ |
| TypeClass typeClass = getTypeClass(); |
| if (typeClass != TypeClass.VOID){ |
| sNodeDescription = getStandardMethodDescription(); |
| } |
| else{ |
| sNodeDescription = getStandardMethodDescription(); |
| } |
| } |
| return sNodeDescription; |
| } |
| |
| |
| public String getStandardMethodDescription(){ |
| String sNodeDescription = m_xIdlMethod.getReturnType().getName() + " " + m_xIdlMethod.getName() + " (" + getParameterDescription() + " )"; |
| if (isPrimitive()){ |
| sNodeDescription += ""; |
| } |
| return sNodeDescription; |
| } |
| |
| |
| public boolean hasParameters(){ |
| return (m_xIdlMethod.getParameterInfos().length > 0); |
| } |
| |
| |
| public Object[] getLastParameterObjects(){ |
| return m_oParamObjects; |
| } |
| |
| |
| public Object getLastUnoReturnObject(){ |
| return m_oUnoReturnObject; |
| } |
| |
| |
| public String getParameterDescription(){ |
| ParamInfo[] paramInfo = m_xIdlMethod.getParameterInfos(); |
| String sParameters = ""; |
| String sStandardMethodDisplayText = m_xIdlMethod.getReturnType().getName() + " " + m_xIdlMethod.getName() + " (" + sParameters + " )"; |
| if (Introspector.isValid(paramInfo)) { |
| // get all parameters with type and mode |
| for ( int i = 0; i < paramInfo.length; i++ ) { |
| XIdlClass xIdlClass = paramInfo[ i ].aType; |
| if ( i == 0 ) { |
| // the first parameter has no leading comma |
| sParameters += "[" + getParamMode(paramInfo[ i ].aMode ) + "] " + xIdlClass.getName(); |
| } |
| else { |
| // all other parameters are separated with comma |
| sParameters += ", [" + getParamMode(paramInfo[ i ].aMode ) + "] " + xIdlClass.getName(); |
| } |
| } |
| } |
| return sParameters; |
| } |
| |
| |
| // return the parameter mode (IN, OUT, INOUT) |
| private static String getParamMode(ParamMode paramMode) { |
| String toReturn = ""; |
| if ( paramMode == ParamMode.IN ) { |
| toReturn = "IN"; |
| } |
| if ( paramMode == ParamMode.OUT ) { |
| toReturn = "OUT"; |
| } |
| if ( paramMode == ParamMode.INOUT ) { |
| toReturn = "INOUT"; |
| } |
| return( toReturn ); |
| } |
| |
| public TypeClass getTypeClass(){ |
| XIdlClass xIdlClass = m_xIdlMethod.getReturnType(); |
| return xIdlClass.getTypeClass(); |
| } |
| |
| |
| private Object invokeParameterlessMethod(){ |
| try { |
| Object[][] aParamInfo = new Object[1][]; |
| aParamInfo[0] = new Object[] {}; |
| return getXIdlMethod().invoke(getUnoObject(), aParamInfo); |
| } catch (Exception ex) { |
| ex.printStackTrace(System.out); |
| return null; |
| }} |
| |
| |
| public boolean isPrimitive(){ |
| return Introspector.isObjectPrimitive(m_xIdlMethod.getClass(), getTypeClass()); |
| } |
| |
| |
| protected Object invoke(Object _oUnoObject, Object[] oParameters) throws com.sun.star.uno.Exception{ |
| Object[][] aParams = new Object[1][oParameters.length]; |
| for ( int i = 0; i < oParameters.length; i++ ) { |
| aParams[0][i] = oParameters[i]; |
| } |
| return m_xIdlMethod.invoke(_oUnoObject, aParams); |
| } |
| } |