1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski import com.sun.star.beans.UnknownPropertyException; 25*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 26*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess; 27*b1cdbd2cSJim Jagielski import com.sun.star.lang.Locale; 28*b1cdbd2cSJim Jagielski import com.sun.star.lang.WrappedTargetException; 29*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo; 30*b1cdbd2cSJim Jagielski import com.sun.star.reflection.ParamInfo; 31*b1cdbd2cSJim Jagielski import com.sun.star.reflection.XIdlClass; 32*b1cdbd2cSJim Jagielski import com.sun.star.reflection.XIdlMethod; 33*b1cdbd2cSJim Jagielski import com.sun.star.reflection.XTypeDescription; 34*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextTablesSupplier; 35*b1cdbd2cSJim Jagielski import com.sun.star.uno.Any; 36*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 37*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 38*b1cdbd2cSJim Jagielski import com.sun.star.uno.TypeClass; 39*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 40*b1cdbd2cSJim Jagielski import java.util.Enumeration; 41*b1cdbd2cSJim Jagielski import java.util.Hashtable; 42*b1cdbd2cSJim Jagielski import java.util.Vector; 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski public class SourceCodeGenerator { 47*b1cdbd2cSJim Jagielski private Vector sExceptions = new Vector(); 48*b1cdbd2cSJim Jagielski Vector sHeaderStatements = new HeaderStatements(); 49*b1cdbd2cSJim Jagielski private XLanguageSourceCodeGenerator m_xLanguageSourceCodeGenerator; 50*b1cdbd2cSJim Jagielski private String sHeaderCode = ""; 51*b1cdbd2cSJim Jagielski private String sStatementCode = ""; 52*b1cdbd2cSJim Jagielski private String sMainMethodSignature = ""; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski private Hashtable aVariables = new Hashtable(); 55*b1cdbd2cSJim Jagielski private final String SSUFFIXSEPARATOR = "_"; 56*b1cdbd2cSJim Jagielski private final String SVARIABLENAME = "VariableName"; 57*b1cdbd2cSJim Jagielski private final String SARRAYVARIABLENAME = "VariableNameList"; 58*b1cdbd2cSJim Jagielski private final String SUNOOBJECTNAME = "oUnobject"; 59*b1cdbd2cSJim Jagielski private final String SUNOSTRUCTNAME = "aUnoStruct"; 60*b1cdbd2cSJim Jagielski private Introspector m_oIntrospector; 61*b1cdbd2cSJim Jagielski private Vector aTreepathProviders = new Vector(); 62*b1cdbd2cSJim Jagielski private XTreePathProvider xTreepathProvider = null; 63*b1cdbd2cSJim Jagielski private boolean baddExceptionHandling = false; 64*b1cdbd2cSJim Jagielski private boolean bXPropertySetExceptionsAreAdded = false; 65*b1cdbd2cSJim Jagielski private XUnoNode oInitialUnoNode = null; 66*b1cdbd2cSJim Jagielski private final String sINITIALVARIABLENAME = "_oUnoEntryObject"; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski /** Creates a new instance of SourceCodeGenerator */ SourceCodeGenerator(int _nLanguage)70*b1cdbd2cSJim Jagielski public SourceCodeGenerator(int _nLanguage) { 71*b1cdbd2cSJim Jagielski this.setLanguage(_nLanguage); 72*b1cdbd2cSJim Jagielski m_oIntrospector = Introspector.getIntrospector(); 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski addSourceCodeOfUnoObject(XTreePathProvider _xTreepathProvider, boolean _brememberPath, boolean _bAddMethodSignature, boolean _baddHeader)76*b1cdbd2cSJim Jagielski public String addSourceCodeOfUnoObject(XTreePathProvider _xTreepathProvider, boolean _brememberPath, boolean _bAddMethodSignature, boolean _baddHeader){ 77*b1cdbd2cSJim Jagielski String sSourceCode = ""; 78*b1cdbd2cSJim Jagielski String sVariableName = ""; 79*b1cdbd2cSJim Jagielski if (_xTreepathProvider != null) { 80*b1cdbd2cSJim Jagielski for (int i = 0; i < _xTreepathProvider.getPathCount(); i++){ 81*b1cdbd2cSJim Jagielski XUnoNode oUnoNode = _xTreepathProvider.getPathComponent(i); 82*b1cdbd2cSJim Jagielski if (i == 0){ 83*b1cdbd2cSJim Jagielski sVariableName = sINITIALVARIABLENAME; 84*b1cdbd2cSJim Jagielski oInitialUnoNode = oUnoNode; 85*b1cdbd2cSJim Jagielski } 86*b1cdbd2cSJim Jagielski else{ 87*b1cdbd2cSJim Jagielski if (oUnoNode instanceof XUnoMethodNode){ 88*b1cdbd2cSJim Jagielski XUnoMethodNode oUnoMethodNode = (XUnoMethodNode) oUnoNode; 89*b1cdbd2cSJim Jagielski if (oUnoMethodNode.isInvoked()){ 90*b1cdbd2cSJim Jagielski UnoObjectDefinition oUnoReturnObjectDefinition = getUnoObjectDefinition(_xTreepathProvider, oUnoMethodNode, i); 91*b1cdbd2cSJim Jagielski if (!isVariableDeclared(oUnoReturnObjectDefinition, this.generateVariableNameFromMethod(oUnoMethodNode.getXIdlMethod()))){ 92*b1cdbd2cSJim Jagielski // sStatementCode += "\n"; 93*b1cdbd2cSJim Jagielski sStatementCode += "\n" + getMethodStatementSourceCode(oUnoMethodNode, sVariableName, oUnoReturnObjectDefinition); 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski sVariableName = oUnoReturnObjectDefinition.getVariableName(); 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski else if (oUnoNode instanceof XUnoPropertyNode){ 99*b1cdbd2cSJim Jagielski XUnoPropertyNode oUnoPropertyNode = (XUnoPropertyNode) oUnoNode; 100*b1cdbd2cSJim Jagielski Any oReturnObject = com.sun.star.uno.Any.complete(oUnoPropertyNode.getUnoReturnObject()); 101*b1cdbd2cSJim Jagielski UnoObjectDefinition oUnoReturnObjectDefinition = new UnoObjectDefinition(oReturnObject); 102*b1cdbd2cSJim Jagielski if (!isVariableDeclared(oUnoReturnObjectDefinition, oUnoPropertyNode.getProperty().Name)){ 103*b1cdbd2cSJim Jagielski // sStatementCode += "\n"; 104*b1cdbd2cSJim Jagielski sStatementCode += "\n" + getPropertyStatementSourceCode(oUnoPropertyNode, sVariableName, oUnoReturnObjectDefinition); 105*b1cdbd2cSJim Jagielski } 106*b1cdbd2cSJim Jagielski sVariableName = oUnoReturnObjectDefinition.getVariableName(); 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski String sCompleteCode = combineCompleteSourceCode(sMainMethodSignature, _baddHeader); 112*b1cdbd2cSJim Jagielski xTreepathProvider = _xTreepathProvider; 113*b1cdbd2cSJim Jagielski if (_brememberPath){ 114*b1cdbd2cSJim Jagielski aTreepathProviders.add(_xTreepathProvider); 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski return sCompleteCode; 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski setLanguage(int _nLanguage)120*b1cdbd2cSJim Jagielski private void setLanguage(int _nLanguage){ 121*b1cdbd2cSJim Jagielski XLanguageSourceCodeGenerator xLanguageSourceCodeGenerator = null; 122*b1cdbd2cSJim Jagielski switch(_nLanguage){ 123*b1cdbd2cSJim Jagielski case XLanguageSourceCodeGenerator.nJAVA: 124*b1cdbd2cSJim Jagielski xLanguageSourceCodeGenerator = new JavaCodeGenerator(); 125*b1cdbd2cSJim Jagielski break; 126*b1cdbd2cSJim Jagielski case XLanguageSourceCodeGenerator.nCPLUSPLUS: 127*b1cdbd2cSJim Jagielski xLanguageSourceCodeGenerator = new CPlusPlusCodeGenerator(); 128*b1cdbd2cSJim Jagielski break; 129*b1cdbd2cSJim Jagielski case XLanguageSourceCodeGenerator.nBASIC: 130*b1cdbd2cSJim Jagielski xLanguageSourceCodeGenerator = new BasicCodeGenerator(); 131*b1cdbd2cSJim Jagielski break; 132*b1cdbd2cSJim Jagielski default: 133*b1cdbd2cSJim Jagielski System.out.println("Unknown Sourcecode Language. Check Menus!"); 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski if (xLanguageSourceCodeGenerator != null){ 136*b1cdbd2cSJim Jagielski m_xLanguageSourceCodeGenerator = xLanguageSourceCodeGenerator; 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski resetSourceCodeGeneration(int _nLanguage)140*b1cdbd2cSJim Jagielski private void resetSourceCodeGeneration(int _nLanguage){ 141*b1cdbd2cSJim Jagielski aVariables.clear(); 142*b1cdbd2cSJim Jagielski this.sHeaderStatements.clear(); 143*b1cdbd2cSJim Jagielski setLanguage(_nLanguage); 144*b1cdbd2cSJim Jagielski String sHeaderCode = ""; 145*b1cdbd2cSJim Jagielski sStatementCode = ""; 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski generateVariableNameFromMethod(String _sMethodName, String _sPrefix, boolean _bConsiderAll)148*b1cdbd2cSJim Jagielski private String generateVariableNameFromMethod(String _sMethodName, String _sPrefix, boolean _bConsiderAll){ 149*b1cdbd2cSJim Jagielski String sReturn = ""; 150*b1cdbd2cSJim Jagielski if (_sMethodName.startsWith(_sPrefix)){ 151*b1cdbd2cSJim Jagielski int nPrefixLength = _sPrefix.length(); 152*b1cdbd2cSJim Jagielski if (_sMethodName.length() > nPrefixLength){ 153*b1cdbd2cSJim Jagielski String sChar = _sMethodName.substring(nPrefixLength, nPrefixLength + 1); 154*b1cdbd2cSJim Jagielski String sUpperChar = sChar.toUpperCase(); 155*b1cdbd2cSJim Jagielski if (sUpperChar.equals(sChar)){ 156*b1cdbd2cSJim Jagielski if (_bConsiderAll){ 157*b1cdbd2cSJim Jagielski sReturn = _sMethodName; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski else{ 160*b1cdbd2cSJim Jagielski sReturn = _sMethodName.substring(nPrefixLength, _sMethodName.length()); 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski } 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski return sReturn; 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski generateVariableNameFromMethod(XIdlMethod _xIdlMethod)169*b1cdbd2cSJim Jagielski private String generateVariableNameFromMethod(XIdlMethod _xIdlMethod){ 170*b1cdbd2cSJim Jagielski // todo: refactor this!!! 171*b1cdbd2cSJim Jagielski String sMethodName = _xIdlMethod.getName(); 172*b1cdbd2cSJim Jagielski String sReturn = ""; 173*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "getBy", false); 174*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 175*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "get", false); 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 178*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "attach", false); 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 181*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "assign", false); 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 184*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "attach", false); 185*b1cdbd2cSJim Jagielski } 186*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 187*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "create", false); 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 190*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "is", true); 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 193*b1cdbd2cSJim Jagielski sReturn = generateVariableNameFromMethod(sMethodName, "has", true); 194*b1cdbd2cSJim Jagielski } 195*b1cdbd2cSJim Jagielski if (sReturn.equals("")){ 196*b1cdbd2cSJim Jagielski sReturn = sMethodName; 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski return sReturn; 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski convertAllUnoObjects(int _nLanguage)202*b1cdbd2cSJim Jagielski public String convertAllUnoObjects(int _nLanguage){ 203*b1cdbd2cSJim Jagielski String sSourceCode = ""; 204*b1cdbd2cSJim Jagielski resetSourceCodeGeneration(_nLanguage); 205*b1cdbd2cSJim Jagielski int ncount = aTreepathProviders.size(); 206*b1cdbd2cSJim Jagielski for (int i=0; i< ncount; i++){ 207*b1cdbd2cSJim Jagielski sSourceCode = addSourceCodeOfUnoObject((XTreePathProvider) aTreepathProviders.get(i), false, (i==0), (i == (ncount-1))); 208*b1cdbd2cSJim Jagielski } 209*b1cdbd2cSJim Jagielski return sSourceCode; 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski getUnoObjectDefinition(XTreePathProvider _xTreePathProvider, XUnoMethodNode _oUnoMethodNode, int _nindex)212*b1cdbd2cSJim Jagielski private UnoObjectDefinition getUnoObjectDefinition(XTreePathProvider _xTreePathProvider, XUnoMethodNode _oUnoMethodNode, int _nindex){ 213*b1cdbd2cSJim Jagielski XUnoNode oUnoNode = null; 214*b1cdbd2cSJim Jagielski Object oUnoReturnObject = null; 215*b1cdbd2cSJim Jagielski Object[] oParamObjects = null; 216*b1cdbd2cSJim Jagielski XIdlClass xIdlClass = _oUnoMethodNode.getXIdlMethod().getReturnType(); 217*b1cdbd2cSJim Jagielski String sTypeName = xIdlClass.getName(); 218*b1cdbd2cSJim Jagielski TypeClass aTypeClass = xIdlClass.getTypeClass(); 219*b1cdbd2cSJim Jagielski if (aTypeClass.getValue() != TypeClass.VOID_value){ 220*b1cdbd2cSJim Jagielski if (_xTreePathProvider.getPathCount() > _nindex + 1){ 221*b1cdbd2cSJim Jagielski oUnoNode = _xTreePathProvider.getPathComponent(_nindex + 1); 222*b1cdbd2cSJim Jagielski oUnoReturnObject = oUnoNode.getUnoObject(); 223*b1cdbd2cSJim Jagielski } 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski if (oUnoReturnObject == null){ 226*b1cdbd2cSJim Jagielski oUnoReturnObject = _oUnoMethodNode.getLastUnoReturnObject(); 227*b1cdbd2cSJim Jagielski } 228*b1cdbd2cSJim Jagielski UnoObjectDefinition oUnoObjectDefinition = new UnoObjectDefinition(oUnoReturnObject, sTypeName, aTypeClass); 229*b1cdbd2cSJim Jagielski if (_oUnoMethodNode.hasParameters()){ 230*b1cdbd2cSJim Jagielski if (oUnoNode != null){ 231*b1cdbd2cSJim Jagielski oParamObjects = oUnoNode.getParameterObjects(); 232*b1cdbd2cSJim Jagielski } 233*b1cdbd2cSJim Jagielski else{ 234*b1cdbd2cSJim Jagielski oParamObjects = _oUnoMethodNode.getLastParameterObjects(); 235*b1cdbd2cSJim Jagielski } 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski if (oParamObjects != null){ 238*b1cdbd2cSJim Jagielski oUnoObjectDefinition.addParameterObjects(oParamObjects); 239*b1cdbd2cSJim Jagielski } 240*b1cdbd2cSJim Jagielski return oUnoObjectDefinition; 241*b1cdbd2cSJim Jagielski } 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski combineCompleteSourceCode(String _sMethodSignature, boolean _bAddHeader)244*b1cdbd2cSJim Jagielski private String combineCompleteSourceCode(String _sMethodSignature, boolean _bAddHeader){ 245*b1cdbd2cSJim Jagielski String sCompleteCode = ""; 246*b1cdbd2cSJim Jagielski if (_bAddHeader){ 247*b1cdbd2cSJim Jagielski sMainMethodSignature = m_xLanguageSourceCodeGenerator.getMainMethodSignatureSourceCode(oInitialUnoNode, sINITIALVARIABLENAME); 248*b1cdbd2cSJim Jagielski m_xLanguageSourceCodeGenerator.assignqueryInterfaceHeaderSourceCode(); 249*b1cdbd2cSJim Jagielski sCompleteCode += getHeaderSourceCode(); 250*b1cdbd2cSJim Jagielski } 251*b1cdbd2cSJim Jagielski sCompleteCode += sMainMethodSignature; 252*b1cdbd2cSJim Jagielski sCompleteCode += sStatementCode; 253*b1cdbd2cSJim Jagielski if (_bAddHeader){ 254*b1cdbd2cSJim Jagielski sCompleteCode += m_xLanguageSourceCodeGenerator.getMethodTerminationSourceCode(); 255*b1cdbd2cSJim Jagielski sCompleteCode += "\n" + m_xLanguageSourceCodeGenerator.getCommentSign() + "..."; 256*b1cdbd2cSJim Jagielski } 257*b1cdbd2cSJim Jagielski return sCompleteCode; 258*b1cdbd2cSJim Jagielski } 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski getPropertyStatementSourceCode(XUnoPropertyNode _oUnoPropertyNode, String _sVariableName, UnoObjectDefinition _oUnoReturnObjectDefinition)261*b1cdbd2cSJim Jagielski public String getPropertyStatementSourceCode(XUnoPropertyNode _oUnoPropertyNode, String _sVariableName, UnoObjectDefinition _oUnoReturnObjectDefinition){ 262*b1cdbd2cSJim Jagielski String sReturnObjectVariableDefinition = ""; 263*b1cdbd2cSJim Jagielski String sStatement = ""; 264*b1cdbd2cSJim Jagielski String sPropertyName = _oUnoPropertyNode.getProperty().Name; 265*b1cdbd2cSJim Jagielski UnoObjectDefinition oUnoObjectDefinition = new UnoObjectDefinition(_oUnoPropertyNode.getUnoObject(), "com.sun.star.beans.XPropertySet"); 266*b1cdbd2cSJim Jagielski if (!m_xLanguageSourceCodeGenerator.needsqueryInterface() || (oUnoObjectDefinition.getTypeClass().getValue() == TypeClass.STRUCT_value)){ 267*b1cdbd2cSJim Jagielski oUnoObjectDefinition.setVariableName(_sVariableName); 268*b1cdbd2cSJim Jagielski if (oUnoObjectDefinition.getTypeClass().getValue() == TypeClass.STRUCT_value){ 269*b1cdbd2cSJim Jagielski sReturnObjectVariableDefinition = getVariableInitialization(_oUnoReturnObjectDefinition, false); 270*b1cdbd2cSJim Jagielski sStatement += m_xLanguageSourceCodeGenerator.getStructSourceCode(sReturnObjectVariableDefinition, oUnoObjectDefinition.getVariableName(), sPropertyName); 271*b1cdbd2cSJim Jagielski return sStatement; 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski } 274*b1cdbd2cSJim Jagielski sStatement += addQueryInterfaceSourceCode(oUnoObjectDefinition, _sVariableName, "com.sun.star.beans.XPropertySet"); 275*b1cdbd2cSJim Jagielski if (_oUnoReturnObjectDefinition.getTypeClass().getValue() != TypeClass.VOID_value){ 276*b1cdbd2cSJim Jagielski sReturnObjectVariableDefinition = getVariableInitialization(_oUnoReturnObjectDefinition, true); 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski sStatement += m_xLanguageSourceCodeGenerator.getPropertyValueGetterSourceCode(sPropertyName, sReturnObjectVariableDefinition, oUnoObjectDefinition.getVariableName(), _oUnoReturnObjectDefinition.getTypeClass(), _oUnoReturnObjectDefinition.getTypeName()); 279*b1cdbd2cSJim Jagielski addXPropertySetRelatedExceptions(); 280*b1cdbd2cSJim Jagielski return sStatement; 281*b1cdbd2cSJim Jagielski } 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski getMethodStatementSourceCode(XUnoMethodNode _oUnoMethodNode, String _sVariableName, UnoObjectDefinition _oUnoReturnObjectDefinition)284*b1cdbd2cSJim Jagielski public String getMethodStatementSourceCode(XUnoMethodNode _oUnoMethodNode, String _sVariableName, UnoObjectDefinition _oUnoReturnObjectDefinition){ 285*b1cdbd2cSJim Jagielski String sReturnObjectVariableDefinition = ""; 286*b1cdbd2cSJim Jagielski String sStatement = ""; 287*b1cdbd2cSJim Jagielski XIdlMethod xIdlMethod = _oUnoMethodNode.getXIdlMethod(); 288*b1cdbd2cSJim Jagielski TypeClass aReturnTypeClass = xIdlMethod.getReturnType().getTypeClass(); 289*b1cdbd2cSJim Jagielski UnoObjectDefinition oUnoObjectDefinition = new UnoObjectDefinition(_oUnoMethodNode.getUnoObject(), _oUnoMethodNode.getClassName()); 290*b1cdbd2cSJim Jagielski String sVariableStemName = this.generateVariableNameFromMethod(xIdlMethod); 291*b1cdbd2cSJim Jagielski sStatement += addQueryInterfaceSourceCode(oUnoObjectDefinition, _sVariableName, oUnoObjectDefinition.getTypeName()); 292*b1cdbd2cSJim Jagielski if (_oUnoReturnObjectDefinition.getTypeClass().getValue() != TypeClass.VOID_value){ 293*b1cdbd2cSJim Jagielski sReturnObjectVariableDefinition = getVariableInitialization(_oUnoReturnObjectDefinition, false) + " = "; 294*b1cdbd2cSJim Jagielski } 295*b1cdbd2cSJim Jagielski Object[] oParamObjects = _oUnoReturnObjectDefinition.getParameterObjects(); 296*b1cdbd2cSJim Jagielski String sParameterCode = getMethodParameterValueDescription(_oUnoMethodNode, oParamObjects, false); 297*b1cdbd2cSJim Jagielski String sSeparator = m_xLanguageSourceCodeGenerator.getMethodSeparator(); 298*b1cdbd2cSJim Jagielski sStatement += "\t" + sReturnObjectVariableDefinition + oUnoObjectDefinition.getVariableName() + sSeparator + xIdlMethod.getName() + "(" + sParameterCode + ")"; 299*b1cdbd2cSJim Jagielski sStatement += m_xLanguageSourceCodeGenerator.getStatementTerminationCharacter(); 300*b1cdbd2cSJim Jagielski addExceptions(xIdlMethod); 301*b1cdbd2cSJim Jagielski return sStatement; 302*b1cdbd2cSJim Jagielski } 303*b1cdbd2cSJim Jagielski 304*b1cdbd2cSJim Jagielski addQueryInterfaceSourceCode(UnoObjectDefinition _oUnoObjectDefinition, String _sVariableName, String _sTypeName)305*b1cdbd2cSJim Jagielski private String addQueryInterfaceSourceCode(UnoObjectDefinition _oUnoObjectDefinition, String _sVariableName, String _sTypeName){ 306*b1cdbd2cSJim Jagielski String sLocStatement = ""; 307*b1cdbd2cSJim Jagielski if (m_xLanguageSourceCodeGenerator.needsqueryInterface()){ 308*b1cdbd2cSJim Jagielski if (!isVariableDeclared(_oUnoObjectDefinition, "")){ 309*b1cdbd2cSJim Jagielski String sObjectVariableDefinition = getVariableDeclaration(_oUnoObjectDefinition, false, ""); 310*b1cdbd2cSJim Jagielski sLocStatement += m_xLanguageSourceCodeGenerator.getqueryInterfaceSourceCode(_sTypeName, sObjectVariableDefinition, _sVariableName); 311*b1cdbd2cSJim Jagielski } 312*b1cdbd2cSJim Jagielski } 313*b1cdbd2cSJim Jagielski else{ 314*b1cdbd2cSJim Jagielski _oUnoObjectDefinition.setVariableName(_sVariableName); 315*b1cdbd2cSJim Jagielski } 316*b1cdbd2cSJim Jagielski return sLocStatement; 317*b1cdbd2cSJim Jagielski } 318*b1cdbd2cSJim Jagielski 319*b1cdbd2cSJim Jagielski addXPropertySetRelatedExceptions()320*b1cdbd2cSJim Jagielski private void addXPropertySetRelatedExceptions(){ 321*b1cdbd2cSJim Jagielski if (!bXPropertySetExceptionsAreAdded){ 322*b1cdbd2cSJim Jagielski sExceptions.add("com.sun.star.beans.UnknownPropertyException"); 323*b1cdbd2cSJim Jagielski sExceptions.add("com.sun.star.lang.WrappedTargetException"); 324*b1cdbd2cSJim Jagielski sExceptions.add("com.sun.star.lang.IllegalArgumentException"); 325*b1cdbd2cSJim Jagielski bXPropertySetExceptionsAreAdded = true; 326*b1cdbd2cSJim Jagielski baddExceptionHandling = true; 327*b1cdbd2cSJim Jagielski } 328*b1cdbd2cSJim Jagielski } 329*b1cdbd2cSJim Jagielski 330*b1cdbd2cSJim Jagielski addExceptions(XIdlMethod _xIdlMethod)331*b1cdbd2cSJim Jagielski private void addExceptions(XIdlMethod _xIdlMethod){ 332*b1cdbd2cSJim Jagielski XIdlClass[] xIdlClasses = _xIdlMethod.getExceptionTypes(); 333*b1cdbd2cSJim Jagielski for (int i = 0; i > xIdlClasses.length; i++){ 334*b1cdbd2cSJim Jagielski sExceptions.add(xIdlClasses[0].getName()); 335*b1cdbd2cSJim Jagielski baddExceptionHandling = true; 336*b1cdbd2cSJim Jagielski } 337*b1cdbd2cSJim Jagielski } 338*b1cdbd2cSJim Jagielski getRootDescription(XUnoNode _oUnoNode)339*b1cdbd2cSJim Jagielski private String getRootDescription(XUnoNode _oUnoNode){ 340*b1cdbd2cSJim Jagielski return "_o" + _oUnoNode.toString(); 341*b1cdbd2cSJim Jagielski } 342*b1cdbd2cSJim Jagielski 343*b1cdbd2cSJim Jagielski getHeaderSourceCode()344*b1cdbd2cSJim Jagielski private String getHeaderSourceCode(){ 345*b1cdbd2cSJim Jagielski Enumeration aEnumeration = aVariables.elements(); 346*b1cdbd2cSJim Jagielski while(aEnumeration.hasMoreElements()){ 347*b1cdbd2cSJim Jagielski UnoObjectDefinition oUnoObjectDefinition = (UnoObjectDefinition) aEnumeration.nextElement(); 348*b1cdbd2cSJim Jagielski String sCurHeaderStatement = m_xLanguageSourceCodeGenerator.getHeaderSourceCode(oUnoObjectDefinition.getUnoObject(), oUnoObjectDefinition.getTypeName(), oUnoObjectDefinition.getTypeClass()); 349*b1cdbd2cSJim Jagielski sHeaderStatements.add(sCurHeaderStatement); 350*b1cdbd2cSJim Jagielski } 351*b1cdbd2cSJim Jagielski String sHeaderSourcecode = ""; 352*b1cdbd2cSJim Jagielski String[] sHeaderStatementArray = new String[sHeaderStatements.size()]; 353*b1cdbd2cSJim Jagielski sHeaderStatements.toArray(sHeaderStatementArray); 354*b1cdbd2cSJim Jagielski java.util.Arrays.sort(sHeaderStatementArray); 355*b1cdbd2cSJim Jagielski for (int i = 0; i < sHeaderStatementArray.length; i++){ 356*b1cdbd2cSJim Jagielski sHeaderSourcecode += sHeaderStatementArray[i]; 357*b1cdbd2cSJim Jagielski } 358*b1cdbd2cSJim Jagielski sHeaderSourcecode += m_xLanguageSourceCodeGenerator.getFinalHeaderStatements(); 359*b1cdbd2cSJim Jagielski return sHeaderSourcecode +"\n" + m_xLanguageSourceCodeGenerator.getCommentSign() + "...\n"; 360*b1cdbd2cSJim Jagielski } 361*b1cdbd2cSJim Jagielski 362*b1cdbd2cSJim Jagielski 363*b1cdbd2cSJim Jagielski private class HeaderStatements extends Vector{ 364*b1cdbd2cSJim Jagielski contains(Object _oElement)365*b1cdbd2cSJim Jagielski public boolean contains(Object _oElement){ 366*b1cdbd2cSJim Jagielski String sCompName = (String) _oElement; 367*b1cdbd2cSJim Jagielski for (int i = 0; i < this.size(); i++){ 368*b1cdbd2cSJim Jagielski String sElement = (String) this.get(i); 369*b1cdbd2cSJim Jagielski if (sElement.equals(sCompName)){ 370*b1cdbd2cSJim Jagielski return true; 371*b1cdbd2cSJim Jagielski } 372*b1cdbd2cSJim Jagielski } 373*b1cdbd2cSJim Jagielski return false; 374*b1cdbd2cSJim Jagielski } 375*b1cdbd2cSJim Jagielski 376*b1cdbd2cSJim Jagielski add(Object _oElement)377*b1cdbd2cSJim Jagielski public boolean add(Object _oElement){ 378*b1cdbd2cSJim Jagielski if (_oElement instanceof String){ 379*b1cdbd2cSJim Jagielski if (!contains(_oElement)){ 380*b1cdbd2cSJim Jagielski super.add(_oElement); 381*b1cdbd2cSJim Jagielski return true; 382*b1cdbd2cSJim Jagielski } 383*b1cdbd2cSJim Jagielski } 384*b1cdbd2cSJim Jagielski return false; 385*b1cdbd2cSJim Jagielski } 386*b1cdbd2cSJim Jagielski } 387*b1cdbd2cSJim Jagielski 388*b1cdbd2cSJim Jagielski isVariableDeclared(UnoObjectDefinition _oUnoObjectDefinition, String _sDefaultStemName)389*b1cdbd2cSJim Jagielski private boolean isVariableDeclared(UnoObjectDefinition _oUnoObjectDefinition, String _sDefaultStemName){ 390*b1cdbd2cSJim Jagielski boolean bisDeclared = false; 391*b1cdbd2cSJim Jagielski if (!_sDefaultStemName.equals("")){ 392*b1cdbd2cSJim Jagielski _oUnoObjectDefinition.setCentralVariableStemName(_sDefaultStemName); 393*b1cdbd2cSJim Jagielski } 394*b1cdbd2cSJim Jagielski String sVariableStemName = _oUnoObjectDefinition.getVariableStemName(); 395*b1cdbd2cSJim Jagielski bisDeclared = aVariables.containsKey(sVariableStemName); 396*b1cdbd2cSJim Jagielski if (bisDeclared){ 397*b1cdbd2cSJim Jagielski Object oUnoObject = _oUnoObjectDefinition.getUnoObject(); 398*b1cdbd2cSJim Jagielski if (m_oIntrospector.isObjectPrimitive(oUnoObject)){ 399*b1cdbd2cSJim Jagielski bisDeclared = false; 400*b1cdbd2cSJim Jagielski } 401*b1cdbd2cSJim Jagielski else if (m_oIntrospector.isObjectSequence(oUnoObject)){ 402*b1cdbd2cSJim Jagielski bisDeclared = false; 403*b1cdbd2cSJim Jagielski } 404*b1cdbd2cSJim Jagielski else{ 405*b1cdbd2cSJim Jagielski String sCompVariableName = sVariableStemName; 406*b1cdbd2cSJim Jagielski String sUnoObjectIdentity = oUnoObject.toString(); 407*b1cdbd2cSJim Jagielski boolean bleaveloop = false; 408*b1cdbd2cSJim Jagielski int a = 2; 409*b1cdbd2cSJim Jagielski while (!bleaveloop){ 410*b1cdbd2cSJim Jagielski if (aVariables.containsKey(sCompVariableName)){ 411*b1cdbd2cSJim Jagielski Object oUnoCompObject = ((UnoObjectDefinition) aVariables.get(sCompVariableName)).getUnoObject(); 412*b1cdbd2cSJim Jagielski String sUnoCompObjectIdentity = oUnoCompObject.toString(); 413*b1cdbd2cSJim Jagielski bleaveloop = sUnoCompObjectIdentity.equals(sUnoObjectIdentity); 414*b1cdbd2cSJim Jagielski bisDeclared = bleaveloop; 415*b1cdbd2cSJim Jagielski if (!bleaveloop){ 416*b1cdbd2cSJim Jagielski sCompVariableName = sVariableStemName + SSUFFIXSEPARATOR + a++; 417*b1cdbd2cSJim Jagielski } 418*b1cdbd2cSJim Jagielski } 419*b1cdbd2cSJim Jagielski else{ 420*b1cdbd2cSJim Jagielski bleaveloop = true; 421*b1cdbd2cSJim Jagielski bisDeclared = false; 422*b1cdbd2cSJim Jagielski } 423*b1cdbd2cSJim Jagielski } 424*b1cdbd2cSJim Jagielski } 425*b1cdbd2cSJim Jagielski } 426*b1cdbd2cSJim Jagielski return bisDeclared; 427*b1cdbd2cSJim Jagielski } 428*b1cdbd2cSJim Jagielski 429*b1cdbd2cSJim Jagielski addUniqueVariableName(String _sStemVariableName, UnoObjectDefinition _oUnoObjectDefinition)430*b1cdbd2cSJim Jagielski private String addUniqueVariableName(String _sStemVariableName, UnoObjectDefinition _oUnoObjectDefinition){ 431*b1cdbd2cSJim Jagielski boolean bElementexists = true; 432*b1cdbd2cSJim Jagielski int a = 2; 433*b1cdbd2cSJim Jagielski String sCompName = _sStemVariableName; 434*b1cdbd2cSJim Jagielski while (bElementexists){ 435*b1cdbd2cSJim Jagielski if (! aVariables.containsKey(sCompName)){ 436*b1cdbd2cSJim Jagielski aVariables.put(sCompName, _oUnoObjectDefinition); 437*b1cdbd2cSJim Jagielski break; 438*b1cdbd2cSJim Jagielski } 439*b1cdbd2cSJim Jagielski sCompName = _sStemVariableName + SSUFFIXSEPARATOR + a++; 440*b1cdbd2cSJim Jagielski } 441*b1cdbd2cSJim Jagielski return sCompName; 442*b1cdbd2cSJim Jagielski } 443*b1cdbd2cSJim Jagielski 444*b1cdbd2cSJim Jagielski 445*b1cdbd2cSJim Jagielski getTypeString(String _sTypeName, TypeClass _aTypeClass, boolean _bAsHeaderSourceCode)446*b1cdbd2cSJim Jagielski private String getTypeString(String _sTypeName, TypeClass _aTypeClass, boolean _bAsHeaderSourceCode){ 447*b1cdbd2cSJim Jagielski String sTypeString = ""; 448*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 449*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 450*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getbooleanTypeDescription(); 451*b1cdbd2cSJim Jagielski break; 452*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 453*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getbyteTypeDescription(); 454*b1cdbd2cSJim Jagielski break; 455*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 456*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getcharTypeDescription(); 457*b1cdbd2cSJim Jagielski break; 458*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 459*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getdoubleTypeDescription(); 460*b1cdbd2cSJim Jagielski break; 461*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 462*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getfloatTypeDescription(); 463*b1cdbd2cSJim Jagielski break; 464*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 465*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.gethyperTypeDescription(); 466*b1cdbd2cSJim Jagielski break; 467*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 468*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getlongTypeDescription(); 469*b1cdbd2cSJim Jagielski break; 470*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 471*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getshortTypeDescription(); 472*b1cdbd2cSJim Jagielski break; 473*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 474*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getstringTypeDescription(_bAsHeaderSourceCode); 475*b1cdbd2cSJim Jagielski break; 476*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 477*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getunsignedhyperTypeDescription(); 478*b1cdbd2cSJim Jagielski break; 479*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 480*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getunsignedlongTypeDescription(); 481*b1cdbd2cSJim Jagielski break; 482*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 483*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getdoubleTypeDescription(); 484*b1cdbd2cSJim Jagielski break; 485*b1cdbd2cSJim Jagielski case TypeClass.SEQUENCE_value: 486*b1cdbd2cSJim Jagielski //TODO consider mulitdimensional Arrays 487*b1cdbd2cSJim Jagielski XTypeDescription xTypeDescription = Introspector.getIntrospector().getReferencedType(_sTypeName); 488*b1cdbd2cSJim Jagielski if (xTypeDescription != null){ 489*b1cdbd2cSJim Jagielski sTypeString = getTypeString(xTypeDescription.getName(), xTypeDescription.getTypeClass(), _bAsHeaderSourceCode); 490*b1cdbd2cSJim Jagielski } 491*b1cdbd2cSJim Jagielski break; 492*b1cdbd2cSJim Jagielski case TypeClass.ANY_value: 493*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getanyTypeDescription(_bAsHeaderSourceCode); 494*b1cdbd2cSJim Jagielski break; 495*b1cdbd2cSJim Jagielski case TypeClass.TYPE_value: 496*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getObjectTypeDescription("com.sun.star.uno.Type", _bAsHeaderSourceCode); 497*b1cdbd2cSJim Jagielski break; 498*b1cdbd2cSJim Jagielski case TypeClass.ENUM_value: 499*b1cdbd2cSJim Jagielski case TypeClass.STRUCT_value: 500*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_ATTRIBUTE_value: 501*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_METHOD_value: 502*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_value: 503*b1cdbd2cSJim Jagielski case TypeClass.PROPERTY_value: 504*b1cdbd2cSJim Jagielski sTypeString = m_xLanguageSourceCodeGenerator.getObjectTypeDescription(_sTypeName, _bAsHeaderSourceCode); 505*b1cdbd2cSJim Jagielski break; 506*b1cdbd2cSJim Jagielski default: 507*b1cdbd2cSJim Jagielski } 508*b1cdbd2cSJim Jagielski return sTypeString; 509*b1cdbd2cSJim Jagielski } 510*b1cdbd2cSJim Jagielski 511*b1cdbd2cSJim Jagielski getVariableDeclaration(UnoObjectDefinition _oUnoObjectDefinition, boolean _bInitialize, String _sVariableDefaultName)512*b1cdbd2cSJim Jagielski private String getVariableDeclaration(UnoObjectDefinition _oUnoObjectDefinition, boolean _bInitialize, String _sVariableDefaultName){ 513*b1cdbd2cSJim Jagielski TypeClass aTypeClass = _oUnoObjectDefinition.getTypeClass(); 514*b1cdbd2cSJim Jagielski TypeClass aLocTypeClass = aTypeClass; 515*b1cdbd2cSJim Jagielski boolean bIsArray = false; 516*b1cdbd2cSJim Jagielski if (_oUnoObjectDefinition.getUnoObject() != null){ 517*b1cdbd2cSJim Jagielski bIsArray = m_oIntrospector.isObjectSequence(_oUnoObjectDefinition.getUnoObject()); 518*b1cdbd2cSJim Jagielski } 519*b1cdbd2cSJim Jagielski else{ 520*b1cdbd2cSJim Jagielski bIsArray = _oUnoObjectDefinition.getTypeClass().getValue() == TypeClass.SEQUENCE_value; 521*b1cdbd2cSJim Jagielski } 522*b1cdbd2cSJim Jagielski String sVariableName = _oUnoObjectDefinition.getVariableName(_sVariableDefaultName); 523*b1cdbd2cSJim Jagielski String sTypeName = _oUnoObjectDefinition.getTypeName(); 524*b1cdbd2cSJim Jagielski String sTypeString = getTypeString(sTypeName, aLocTypeClass, false); 525*b1cdbd2cSJim Jagielski if (bIsArray){ 526*b1cdbd2cSJim Jagielski XTypeDescription xTypeDescription = Introspector.getIntrospector().getReferencedType(sTypeName); 527*b1cdbd2cSJim Jagielski if (xTypeDescription != null){ 528*b1cdbd2cSJim Jagielski aLocTypeClass = xTypeDescription.getTypeClass(); 529*b1cdbd2cSJim Jagielski } 530*b1cdbd2cSJim Jagielski } 531*b1cdbd2cSJim Jagielski String sVariableDeclaration = m_xLanguageSourceCodeGenerator.getVariableDeclaration(sTypeString, sVariableName, bIsArray, aLocTypeClass, _bInitialize); 532*b1cdbd2cSJim Jagielski addUniqueVariableName(sVariableName, _oUnoObjectDefinition); 533*b1cdbd2cSJim Jagielski return sVariableDeclaration; 534*b1cdbd2cSJim Jagielski } 535*b1cdbd2cSJim Jagielski 536*b1cdbd2cSJim Jagielski getVariableInitialization(UnoObjectDefinition _oUnoObjectDefinition, boolean _bInitialize)537*b1cdbd2cSJim Jagielski public String getVariableInitialization(UnoObjectDefinition _oUnoObjectDefinition, boolean _bInitialize){ 538*b1cdbd2cSJim Jagielski String sObjectVariableDeclaration = ""; 539*b1cdbd2cSJim Jagielski String sVariableName = _oUnoObjectDefinition.getVariableName(); 540*b1cdbd2cSJim Jagielski if (isVariableDeclared(_oUnoObjectDefinition, "")){ 541*b1cdbd2cSJim Jagielski sObjectVariableDeclaration = sVariableName; 542*b1cdbd2cSJim Jagielski } 543*b1cdbd2cSJim Jagielski else{ 544*b1cdbd2cSJim Jagielski sObjectVariableDeclaration = getVariableDeclaration(_oUnoObjectDefinition, _bInitialize, ""); 545*b1cdbd2cSJim Jagielski } 546*b1cdbd2cSJim Jagielski return sObjectVariableDeclaration; 547*b1cdbd2cSJim Jagielski } 548*b1cdbd2cSJim Jagielski 549*b1cdbd2cSJim Jagielski 550*b1cdbd2cSJim Jagielski getVariableNameforUnoObject(String _sShortClassName)551*b1cdbd2cSJim Jagielski public String getVariableNameforUnoObject(String _sShortClassName){ 552*b1cdbd2cSJim Jagielski if (_sShortClassName.startsWith("X")){ 553*b1cdbd2cSJim Jagielski return "x" + _sShortClassName.substring(1); 554*b1cdbd2cSJim Jagielski } 555*b1cdbd2cSJim Jagielski else{ 556*b1cdbd2cSJim Jagielski return _sShortClassName; 557*b1cdbd2cSJim Jagielski } 558*b1cdbd2cSJim Jagielski } 559*b1cdbd2cSJim Jagielski 560*b1cdbd2cSJim Jagielski 561*b1cdbd2cSJim Jagielski class UnoObjectDefinition{ 562*b1cdbd2cSJim Jagielski Object m_oUnoObject = null; 563*b1cdbd2cSJim Jagielski Type aType = null; 564*b1cdbd2cSJim Jagielski String sVariableStemName = ""; 565*b1cdbd2cSJim Jagielski String m_sCentralVariableStemName = ""; 566*b1cdbd2cSJim Jagielski String sVariableName = ""; 567*b1cdbd2cSJim Jagielski String m_sTypeName = ""; 568*b1cdbd2cSJim Jagielski TypeClass m_aTypeClass = null; 569*b1cdbd2cSJim Jagielski Object[] m_oParameterObjects = null; 570*b1cdbd2cSJim Jagielski 571*b1cdbd2cSJim Jagielski UnoObjectDefinition(Any _oUnoObject)572*b1cdbd2cSJim Jagielski public UnoObjectDefinition(Any _oUnoObject){ 573*b1cdbd2cSJim Jagielski m_sTypeName = _oUnoObject.getType().getTypeName(); 574*b1cdbd2cSJim Jagielski m_aTypeClass = _oUnoObject.getType().getTypeClass(); 575*b1cdbd2cSJim Jagielski m_oUnoObject = _oUnoObject; 576*b1cdbd2cSJim Jagielski m_sCentralVariableStemName = getCentralVariableStemName(m_aTypeClass); 577*b1cdbd2cSJim Jagielski } 578*b1cdbd2cSJim Jagielski 579*b1cdbd2cSJim Jagielski UnoObjectDefinition(Object _oUnoObject, String _sTypeName, TypeClass _aTypeClass)580*b1cdbd2cSJim Jagielski public UnoObjectDefinition(Object _oUnoObject, String _sTypeName, TypeClass _aTypeClass){ 581*b1cdbd2cSJim Jagielski m_oUnoObject = _oUnoObject; 582*b1cdbd2cSJim Jagielski m_sTypeName = _sTypeName; 583*b1cdbd2cSJim Jagielski m_aTypeClass = _aTypeClass; 584*b1cdbd2cSJim Jagielski m_sCentralVariableStemName = getCentralVariableStemName(m_aTypeClass); 585*b1cdbd2cSJim Jagielski } 586*b1cdbd2cSJim Jagielski 587*b1cdbd2cSJim Jagielski UnoObjectDefinition(Object _oUnoObject, String _sTypeName)588*b1cdbd2cSJim Jagielski public UnoObjectDefinition(Object _oUnoObject, String _sTypeName){ 589*b1cdbd2cSJim Jagielski m_oUnoObject = _oUnoObject; 590*b1cdbd2cSJim Jagielski m_sTypeName = _sTypeName; 591*b1cdbd2cSJim Jagielski m_aTypeClass = AnyConverter.getType(_oUnoObject).getTypeClass(); 592*b1cdbd2cSJim Jagielski m_sCentralVariableStemName = getCentralVariableStemName(m_aTypeClass); 593*b1cdbd2cSJim Jagielski } 594*b1cdbd2cSJim Jagielski 595*b1cdbd2cSJim Jagielski getCentralVariableStemName(TypeClass _aTypeClass)596*b1cdbd2cSJim Jagielski private String getCentralVariableStemName(TypeClass _aTypeClass){ 597*b1cdbd2cSJim Jagielski String sCentralVariableStemName = ""; 598*b1cdbd2cSJim Jagielski int nTypeClass = _aTypeClass.getValue(); 599*b1cdbd2cSJim Jagielski switch(nTypeClass){ 600*b1cdbd2cSJim Jagielski case TypeClass.SEQUENCE_value: 601*b1cdbd2cSJim Jagielski //TODO consider mulitdimensional Arrays 602*b1cdbd2cSJim Jagielski XTypeDescription xTypeDescription = Introspector.getIntrospector().getReferencedType(getTypeName()); 603*b1cdbd2cSJim Jagielski if (xTypeDescription != null){ 604*b1cdbd2cSJim Jagielski sCentralVariableStemName = getCentralVariableStemName(xTypeDescription.getTypeClass()); 605*b1cdbd2cSJim Jagielski } 606*b1cdbd2cSJim Jagielski break; 607*b1cdbd2cSJim Jagielski case TypeClass.TYPE_value: 608*b1cdbd2cSJim Jagielski sCentralVariableStemName = SVARIABLENAME; 609*b1cdbd2cSJim Jagielski break; 610*b1cdbd2cSJim Jagielski case TypeClass.STRUCT_value: 611*b1cdbd2cSJim Jagielski sCentralVariableStemName = Introspector.getShortClassName(getTypeName()); 612*b1cdbd2cSJim Jagielski break; 613*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_ATTRIBUTE_value: 614*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_METHOD_value: 615*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_value: 616*b1cdbd2cSJim Jagielski case TypeClass.PROPERTY_value: 617*b1cdbd2cSJim Jagielski String sShortClassName = m_oIntrospector.getShortClassName(getTypeName()); 618*b1cdbd2cSJim Jagielski sCentralVariableStemName = getVariableNameforUnoObject(sShortClassName); 619*b1cdbd2cSJim Jagielski default: 620*b1cdbd2cSJim Jagielski sCentralVariableStemName = SVARIABLENAME; 621*b1cdbd2cSJim Jagielski } 622*b1cdbd2cSJim Jagielski return sCentralVariableStemName; 623*b1cdbd2cSJim Jagielski } 624*b1cdbd2cSJim Jagielski 625*b1cdbd2cSJim Jagielski /** may return null 626*b1cdbd2cSJim Jagielski */ getUnoObject()627*b1cdbd2cSJim Jagielski public Object getUnoObject(){ 628*b1cdbd2cSJim Jagielski return m_oUnoObject; 629*b1cdbd2cSJim Jagielski } 630*b1cdbd2cSJim Jagielski 631*b1cdbd2cSJim Jagielski setTypeClass(TypeClass _aTypeClass)632*b1cdbd2cSJim Jagielski public void setTypeClass(TypeClass _aTypeClass){ 633*b1cdbd2cSJim Jagielski sVariableStemName = ""; 634*b1cdbd2cSJim Jagielski m_aTypeClass = _aTypeClass; 635*b1cdbd2cSJim Jagielski } 636*b1cdbd2cSJim Jagielski 637*b1cdbd2cSJim Jagielski getTypeClass()638*b1cdbd2cSJim Jagielski public TypeClass getTypeClass(){ 639*b1cdbd2cSJim Jagielski return m_aTypeClass; 640*b1cdbd2cSJim Jagielski } 641*b1cdbd2cSJim Jagielski 642*b1cdbd2cSJim Jagielski setTypeName(String _sTypeName)643*b1cdbd2cSJim Jagielski public void setTypeName(String _sTypeName){ 644*b1cdbd2cSJim Jagielski sVariableStemName = ""; 645*b1cdbd2cSJim Jagielski m_sTypeName = _sTypeName; 646*b1cdbd2cSJim Jagielski } 647*b1cdbd2cSJim Jagielski 648*b1cdbd2cSJim Jagielski getTypeName()649*b1cdbd2cSJim Jagielski public String getTypeName(){ 650*b1cdbd2cSJim Jagielski return m_sTypeName; 651*b1cdbd2cSJim Jagielski } 652*b1cdbd2cSJim Jagielski 653*b1cdbd2cSJim Jagielski setCentralVariableStemName(String _sCentralVariableStemName)654*b1cdbd2cSJim Jagielski public void setCentralVariableStemName(String _sCentralVariableStemName){ 655*b1cdbd2cSJim Jagielski m_sCentralVariableStemName = _sCentralVariableStemName; 656*b1cdbd2cSJim Jagielski } 657*b1cdbd2cSJim Jagielski 658*b1cdbd2cSJim Jagielski getVariableStemName()659*b1cdbd2cSJim Jagielski public String getVariableStemName(){ 660*b1cdbd2cSJim Jagielski if (sVariableStemName.equals("")){ 661*b1cdbd2cSJim Jagielski sVariableStemName = getVariableStemName(m_aTypeClass); 662*b1cdbd2cSJim Jagielski } 663*b1cdbd2cSJim Jagielski return sVariableStemName; 664*b1cdbd2cSJim Jagielski } 665*b1cdbd2cSJim Jagielski 666*b1cdbd2cSJim Jagielski addParameterObjects(Object[] _oParameterObjects)667*b1cdbd2cSJim Jagielski public void addParameterObjects(Object[] _oParameterObjects){ 668*b1cdbd2cSJim Jagielski m_oParameterObjects = _oParameterObjects; 669*b1cdbd2cSJim Jagielski } 670*b1cdbd2cSJim Jagielski 671*b1cdbd2cSJim Jagielski getParameterObjects()672*b1cdbd2cSJim Jagielski public Object[] getParameterObjects(){ 673*b1cdbd2cSJim Jagielski return m_oParameterObjects; 674*b1cdbd2cSJim Jagielski } 675*b1cdbd2cSJim Jagielski 676*b1cdbd2cSJim Jagielski hasParameterObjects()677*b1cdbd2cSJim Jagielski public boolean hasParameterObjects(){ 678*b1cdbd2cSJim Jagielski boolean breturn = false; 679*b1cdbd2cSJim Jagielski if (m_oParameterObjects != null){ 680*b1cdbd2cSJim Jagielski breturn = m_oParameterObjects.length > 0; 681*b1cdbd2cSJim Jagielski } 682*b1cdbd2cSJim Jagielski return breturn; 683*b1cdbd2cSJim Jagielski } 684*b1cdbd2cSJim Jagielski 685*b1cdbd2cSJim Jagielski getVariableStemName(TypeClass _aTypeClass)686*b1cdbd2cSJim Jagielski public String getVariableStemName(TypeClass _aTypeClass){ 687*b1cdbd2cSJim Jagielski int nTypeClass = _aTypeClass.getValue(); 688*b1cdbd2cSJim Jagielski switch(nTypeClass){ 689*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 690*b1cdbd2cSJim Jagielski sVariableStemName = "b" + m_sCentralVariableStemName; 691*b1cdbd2cSJim Jagielski break; 692*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 693*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 694*b1cdbd2cSJim Jagielski sVariableStemName = "f" + m_sCentralVariableStemName; 695*b1cdbd2cSJim Jagielski break; 696*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 697*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 698*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 699*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 700*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 701*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 702*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 703*b1cdbd2cSJim Jagielski sVariableStemName = "n" + m_sCentralVariableStemName; 704*b1cdbd2cSJim Jagielski break; 705*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 706*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 707*b1cdbd2cSJim Jagielski sVariableStemName = "s" + m_sCentralVariableStemName; 708*b1cdbd2cSJim Jagielski break; 709*b1cdbd2cSJim Jagielski case TypeClass.SEQUENCE_value: 710*b1cdbd2cSJim Jagielski //TODO consider mulitdimensional Arrays 711*b1cdbd2cSJim Jagielski XTypeDescription xTypeDescription = Introspector.getIntrospector().getReferencedType(getTypeName()); 712*b1cdbd2cSJim Jagielski if (xTypeDescription != null){ 713*b1cdbd2cSJim Jagielski sVariableStemName = getVariableStemName(xTypeDescription.getTypeClass()); 714*b1cdbd2cSJim Jagielski } 715*b1cdbd2cSJim Jagielski break; 716*b1cdbd2cSJim Jagielski case TypeClass.TYPE_value: 717*b1cdbd2cSJim Jagielski sVariableStemName = "a" + m_sCentralVariableStemName; 718*b1cdbd2cSJim Jagielski break; 719*b1cdbd2cSJim Jagielski case TypeClass.ANY_value: 720*b1cdbd2cSJim Jagielski sVariableStemName = "o" + m_sCentralVariableStemName; 721*b1cdbd2cSJim Jagielski break; 722*b1cdbd2cSJim Jagielski case TypeClass.STRUCT_value: 723*b1cdbd2cSJim Jagielski case TypeClass.ENUM_value: 724*b1cdbd2cSJim Jagielski sVariableStemName = "a" + m_sCentralVariableStemName; 725*b1cdbd2cSJim Jagielski break; 726*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_ATTRIBUTE_value: 727*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_METHOD_value: 728*b1cdbd2cSJim Jagielski case TypeClass.INTERFACE_value: 729*b1cdbd2cSJim Jagielski case TypeClass.PROPERTY_value: 730*b1cdbd2cSJim Jagielski String sShortClassName = m_oIntrospector.getShortClassName(getTypeName()); 731*b1cdbd2cSJim Jagielski sVariableStemName = getVariableNameforUnoObject(sShortClassName); 732*b1cdbd2cSJim Jagielski default: 733*b1cdbd2cSJim Jagielski } 734*b1cdbd2cSJim Jagielski return sVariableStemName; 735*b1cdbd2cSJim Jagielski } 736*b1cdbd2cSJim Jagielski 737*b1cdbd2cSJim Jagielski setVariableName(String _sVariableName)738*b1cdbd2cSJim Jagielski private void setVariableName(String _sVariableName){ 739*b1cdbd2cSJim Jagielski sVariableName = _sVariableName; 740*b1cdbd2cSJim Jagielski } 741*b1cdbd2cSJim Jagielski 742*b1cdbd2cSJim Jagielski getVariableName(String _sCentralVariableStemName)743*b1cdbd2cSJim Jagielski private String getVariableName(String _sCentralVariableStemName){ 744*b1cdbd2cSJim Jagielski if (!_sCentralVariableStemName.equals("")){ 745*b1cdbd2cSJim Jagielski this.m_sCentralVariableStemName = _sCentralVariableStemName; 746*b1cdbd2cSJim Jagielski } 747*b1cdbd2cSJim Jagielski return getVariableName(); 748*b1cdbd2cSJim Jagielski } 749*b1cdbd2cSJim Jagielski 750*b1cdbd2cSJim Jagielski getVariableName()751*b1cdbd2cSJim Jagielski private String getVariableName() throws NullPointerException{ 752*b1cdbd2cSJim Jagielski if (sVariableName.equals("")){ 753*b1cdbd2cSJim Jagielski int a = 2; 754*b1cdbd2cSJim Jagielski sVariableName = getVariableStemName(); 755*b1cdbd2cSJim Jagielski boolean bleaveloop = false; 756*b1cdbd2cSJim Jagielski while (!bleaveloop){ 757*b1cdbd2cSJim Jagielski if (aVariables.containsKey(sVariableName)){ 758*b1cdbd2cSJim Jagielski String sUnoObjectIdentity = ((UnoObjectDefinition) aVariables.get(sVariableName)).getUnoObject().toString(); 759*b1cdbd2cSJim Jagielski if (m_oUnoObject != null){ 760*b1cdbd2cSJim Jagielski if ((sUnoObjectIdentity.equals(m_oUnoObject.toString()) && (!m_oIntrospector.isPrimitive(this.getTypeClass())) && 761*b1cdbd2cSJim Jagielski (! m_oIntrospector.isObjectSequence(m_oUnoObject)))){ 762*b1cdbd2cSJim Jagielski bleaveloop = true; 763*b1cdbd2cSJim Jagielski } 764*b1cdbd2cSJim Jagielski else{ 765*b1cdbd2cSJim Jagielski sVariableName = getVariableStemName() + SSUFFIXSEPARATOR + a++; 766*b1cdbd2cSJim Jagielski } 767*b1cdbd2cSJim Jagielski } 768*b1cdbd2cSJim Jagielski else{ 769*b1cdbd2cSJim Jagielski bleaveloop = true; 770*b1cdbd2cSJim Jagielski } 771*b1cdbd2cSJim Jagielski } 772*b1cdbd2cSJim Jagielski else{ 773*b1cdbd2cSJim Jagielski bleaveloop = true; 774*b1cdbd2cSJim Jagielski // throw new NullPointerException("SourceCode Variable " + _sStemVariableName + " not defined"); 775*b1cdbd2cSJim Jagielski } 776*b1cdbd2cSJim Jagielski } 777*b1cdbd2cSJim Jagielski } 778*b1cdbd2cSJim Jagielski return sVariableName; 779*b1cdbd2cSJim Jagielski } 780*b1cdbd2cSJim Jagielski } 781*b1cdbd2cSJim Jagielski 782*b1cdbd2cSJim Jagielski getStringValueOfObject(Object _oUnoObject, TypeClass _aTypeClass)783*b1cdbd2cSJim Jagielski public String getStringValueOfObject(Object _oUnoObject, TypeClass _aTypeClass){ 784*b1cdbd2cSJim Jagielski String sReturn = ""; 785*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 786*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 787*b1cdbd2cSJim Jagielski boolean bbooleanValue = ((Boolean) _oUnoObject).booleanValue(); 788*b1cdbd2cSJim Jagielski sReturn += Boolean.toString(bbooleanValue); 789*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 790*b1cdbd2cSJim Jagielski break; 791*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 792*b1cdbd2cSJim Jagielski double fdoubleValue = ((Double) _oUnoObject).doubleValue(); 793*b1cdbd2cSJim Jagielski sReturn += Double.toString(fdoubleValue); 794*b1cdbd2cSJim Jagielski break; 795*b1cdbd2cSJim Jagielski case TypeClass.ENUM_value: 796*b1cdbd2cSJim Jagielski break; 797*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 798*b1cdbd2cSJim Jagielski float floatValue = ((Float) _oUnoObject).floatValue(); 799*b1cdbd2cSJim Jagielski sReturn += Float.toString(floatValue); 800*b1cdbd2cSJim Jagielski break; 801*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 802*b1cdbd2cSJim Jagielski long nlongValue = ((Long) _oUnoObject).longValue(); 803*b1cdbd2cSJim Jagielski sReturn += Long.toString(nlongValue); 804*b1cdbd2cSJim Jagielski break; 805*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 806*b1cdbd2cSJim Jagielski int nintValue = ((Integer) _oUnoObject).intValue(); 807*b1cdbd2cSJim Jagielski sReturn += Integer.toString(nintValue); 808*b1cdbd2cSJim Jagielski break; 809*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 810*b1cdbd2cSJim Jagielski short nshortValue = ((Short) _oUnoObject).shortValue(); 811*b1cdbd2cSJim Jagielski sReturn += Short.toString(nshortValue); 812*b1cdbd2cSJim Jagielski break; 813*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 814*b1cdbd2cSJim Jagielski sReturn += (String) _oUnoObject; 815*b1cdbd2cSJim Jagielski break; 816*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 817*b1cdbd2cSJim Jagielski nlongValue = ((Long) _oUnoObject).longValue(); 818*b1cdbd2cSJim Jagielski sReturn += Long.toString(nlongValue); 819*b1cdbd2cSJim Jagielski break; 820*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 821*b1cdbd2cSJim Jagielski nintValue = ((Integer) _oUnoObject).intValue(); 822*b1cdbd2cSJim Jagielski sReturn += Integer.toString(nintValue); 823*b1cdbd2cSJim Jagielski break; 824*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 825*b1cdbd2cSJim Jagielski nshortValue = ((Short) _oUnoObject).shortValue(); 826*b1cdbd2cSJim Jagielski sReturn += Short.toString(nshortValue); 827*b1cdbd2cSJim Jagielski break; 828*b1cdbd2cSJim Jagielski default: 829*b1cdbd2cSJim Jagielski System.out.println("Type " + _aTypeClass.getValue() + " not yet defined in 'getStringValueOfObject()'"); 830*b1cdbd2cSJim Jagielski } 831*b1cdbd2cSJim Jagielski return sReturn; 832*b1cdbd2cSJim Jagielski } 833*b1cdbd2cSJim Jagielski 834*b1cdbd2cSJim Jagielski getMethodParameterValueDescription(XUnoMethodNode _oUnoMethodNode, Object[] _oParamObjects, boolean _bIncludeParameterNames)835*b1cdbd2cSJim Jagielski public String getMethodParameterValueDescription(XUnoMethodNode _oUnoMethodNode, Object[] _oParamObjects, boolean _bIncludeParameterNames){ 836*b1cdbd2cSJim Jagielski String sParamSourceCode = ""; 837*b1cdbd2cSJim Jagielski ParamInfo[] aParamInfos = _oUnoMethodNode.getXIdlMethod().getParameterInfos(); 838*b1cdbd2cSJim Jagielski if (_oParamObjects != null){ 839*b1cdbd2cSJim Jagielski for (int i = 0; i < _oParamObjects.length; i++){ 840*b1cdbd2cSJim Jagielski TypeClass aTypeClass = aParamInfos[i].aType.getTypeClass(); 841*b1cdbd2cSJim Jagielski if (_bIncludeParameterNames){ 842*b1cdbd2cSJim Jagielski sParamSourceCode += aParamInfos[i].aName + "="; 843*b1cdbd2cSJim Jagielski } 844*b1cdbd2cSJim Jagielski String sParamDescription = getStringValueOfObject(_oParamObjects[i], aTypeClass); 845*b1cdbd2cSJim Jagielski sParamDescription = this.m_xLanguageSourceCodeGenerator.castLiteral(sParamDescription, aTypeClass); 846*b1cdbd2cSJim Jagielski sParamSourceCode += sParamDescription; 847*b1cdbd2cSJim Jagielski 848*b1cdbd2cSJim Jagielski if (i < _oParamObjects.length - 1){ 849*b1cdbd2cSJim Jagielski sParamSourceCode += ", "; 850*b1cdbd2cSJim Jagielski } 851*b1cdbd2cSJim Jagielski } 852*b1cdbd2cSJim Jagielski } 853*b1cdbd2cSJim Jagielski return sParamSourceCode; 854*b1cdbd2cSJim Jagielski } 855*b1cdbd2cSJim Jagielski 856*b1cdbd2cSJim Jagielski 857*b1cdbd2cSJim Jagielski public class JavaCodeGenerator implements XLanguageSourceCodeGenerator{ 858*b1cdbd2cSJim Jagielski String sStatementsCode = ""; 859*b1cdbd2cSJim Jagielski boolean bAddAnyConverter = false; 860*b1cdbd2cSJim Jagielski // boolean bAddTypeImport = false; 861*b1cdbd2cSJim Jagielski boolean bIsPropertyUnoObjectDefined = false; 862*b1cdbd2cSJim Jagielski JavaCodeGenerator()863*b1cdbd2cSJim Jagielski public JavaCodeGenerator(){ 864*b1cdbd2cSJim Jagielski } 865*b1cdbd2cSJim Jagielski 866*b1cdbd2cSJim Jagielski getStatementTerminationCharacter()867*b1cdbd2cSJim Jagielski public String getStatementTerminationCharacter(){ 868*b1cdbd2cSJim Jagielski return ";"; 869*b1cdbd2cSJim Jagielski } 870*b1cdbd2cSJim Jagielski 871*b1cdbd2cSJim Jagielski getHeaderSourceCode(Object _oUnoObject, String _sClassName, TypeClass _aTypeClass)872*b1cdbd2cSJim Jagielski public String getHeaderSourceCode(Object _oUnoObject, String _sClassName, TypeClass _aTypeClass){ 873*b1cdbd2cSJim Jagielski String sClassName = _sClassName; 874*b1cdbd2cSJim Jagielski String sHeaderStatement = ""; 875*b1cdbd2cSJim Jagielski if (_oUnoObject != null){ 876*b1cdbd2cSJim Jagielski if (!m_oIntrospector.isObjectPrimitive(_oUnoObject)){ 877*b1cdbd2cSJim Jagielski if (m_oIntrospector.isObjectSequence(_oUnoObject)){ 878*b1cdbd2cSJim Jagielski XTypeDescription xTypeDescription = m_oIntrospector.getReferencedType(sClassName); 879*b1cdbd2cSJim Jagielski if (xTypeDescription != null){ 880*b1cdbd2cSJim Jagielski if (!m_oIntrospector.isPrimitive(xTypeDescription.getTypeClass())){ 881*b1cdbd2cSJim Jagielski sClassName = getTypeString(xTypeDescription.getName(), xTypeDescription.getTypeClass(), true); 882*b1cdbd2cSJim Jagielski } 883*b1cdbd2cSJim Jagielski // primitive Types are not supposed to turn up in the import section... 884*b1cdbd2cSJim Jagielski else{ 885*b1cdbd2cSJim Jagielski sClassName = ""; 886*b1cdbd2cSJim Jagielski } 887*b1cdbd2cSJim Jagielski } 888*b1cdbd2cSJim Jagielski } 889*b1cdbd2cSJim Jagielski else{ 890*b1cdbd2cSJim Jagielski sClassName = getTypeString(_sClassName, _aTypeClass, true); 891*b1cdbd2cSJim Jagielski } 892*b1cdbd2cSJim Jagielski } 893*b1cdbd2cSJim Jagielski else if (_aTypeClass.getValue() == TypeClass.ENUM_value){ 894*b1cdbd2cSJim Jagielski sClassName = _sClassName; 895*b1cdbd2cSJim Jagielski } 896*b1cdbd2cSJim Jagielski else{ 897*b1cdbd2cSJim Jagielski sClassName = ""; 898*b1cdbd2cSJim Jagielski } 899*b1cdbd2cSJim Jagielski if (!sClassName.equals("")){ 900*b1cdbd2cSJim Jagielski sHeaderStatement = "import " + sClassName + ";\n"; 901*b1cdbd2cSJim Jagielski } 902*b1cdbd2cSJim Jagielski } 903*b1cdbd2cSJim Jagielski return sHeaderStatement; 904*b1cdbd2cSJim Jagielski } 905*b1cdbd2cSJim Jagielski 906*b1cdbd2cSJim Jagielski getFinalHeaderStatements()907*b1cdbd2cSJim Jagielski public String getFinalHeaderStatements(){ 908*b1cdbd2cSJim Jagielski return ""; 909*b1cdbd2cSJim Jagielski } 910*b1cdbd2cSJim Jagielski 911*b1cdbd2cSJim Jagielski assignqueryInterfaceHeaderSourceCode()912*b1cdbd2cSJim Jagielski public void assignqueryInterfaceHeaderSourceCode(){ 913*b1cdbd2cSJim Jagielski sHeaderStatements.add("import com.sun.star.uno.UnoRuntime;\n"); 914*b1cdbd2cSJim Jagielski sHeaderStatements.add("import com.sun.star.uno.XInterface;\n"); 915*b1cdbd2cSJim Jagielski if (bAddAnyConverter){ 916*b1cdbd2cSJim Jagielski sHeaderStatements.add("import com.sun.star.uno.AnyConverter;\n"); 917*b1cdbd2cSJim Jagielski } 918*b1cdbd2cSJim Jagielski } 919*b1cdbd2cSJim Jagielski 920*b1cdbd2cSJim Jagielski 921*b1cdbd2cSJim Jagielski getConvertedSourceCodeValueOfObject(String _sReturnVariableName, String _sObjectDescription, TypeClass _aTypeClass, String _sTypeName)922*b1cdbd2cSJim Jagielski public String getConvertedSourceCodeValueOfObject(String _sReturnVariableName, String _sObjectDescription, TypeClass _aTypeClass, String _sTypeName){ 923*b1cdbd2cSJim Jagielski boolean bLocAddAnyConverter = true; 924*b1cdbd2cSJim Jagielski String sReturn = ""; 925*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 926*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 927*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toBoolean(" + _sObjectDescription + ")"; 928*b1cdbd2cSJim Jagielski break; 929*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 930*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toChar(" + _sObjectDescription + ")"; 931*b1cdbd2cSJim Jagielski break; 932*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 933*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toByte(" + _sObjectDescription + ")"; 934*b1cdbd2cSJim Jagielski break; 935*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 936*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toDouble(" + _sObjectDescription + ")"; 937*b1cdbd2cSJim Jagielski break; 938*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 939*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toFloat(" + _sObjectDescription + ")"; 940*b1cdbd2cSJim Jagielski break; 941*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 942*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toUnsignedLong(" + _sObjectDescription + ")"; 943*b1cdbd2cSJim Jagielski break; 944*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 945*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toLong(" + _sObjectDescription + ")"; 946*b1cdbd2cSJim Jagielski break; 947*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 948*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toUnsignedInt(" + _sObjectDescription + ")"; 949*b1cdbd2cSJim Jagielski break; 950*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 951*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toInt(" + _sObjectDescription + ")"; 952*b1cdbd2cSJim Jagielski break; 953*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 954*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toShort(" + _sObjectDescription + ")"; 955*b1cdbd2cSJim Jagielski break; 956*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 957*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toUnsignedShort(" + _sObjectDescription + ")"; 958*b1cdbd2cSJim Jagielski break; 959*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 960*b1cdbd2cSJim Jagielski sReturn = _sReturnVariableName + " = AnyConverter.toString(" + _sObjectDescription + ")"; 961*b1cdbd2cSJim Jagielski break; 962*b1cdbd2cSJim Jagielski default: 963*b1cdbd2cSJim Jagielski String sShortTypeName = Introspector.getShortClassName(_sTypeName); 964*b1cdbd2cSJim Jagielski if (bIsPropertyUnoObjectDefined){ 965*b1cdbd2cSJim Jagielski sReturn = "oUnoObject = " + _sObjectDescription + ";\n\t"; 966*b1cdbd2cSJim Jagielski } 967*b1cdbd2cSJim Jagielski else{ 968*b1cdbd2cSJim Jagielski sReturn = "Object oUnoObject = " + _sObjectDescription + ";\n\t"; 969*b1cdbd2cSJim Jagielski bIsPropertyUnoObjectDefined = true; 970*b1cdbd2cSJim Jagielski } 971*b1cdbd2cSJim Jagielski sReturn += _sReturnVariableName + " = (" + sShortTypeName + ") AnyConverter.toObject(" + sShortTypeName + ".class, oUnoObject);"; 972*b1cdbd2cSJim Jagielski // this.bAddTypeImport = true; 973*b1cdbd2cSJim Jagielski break; 974*b1cdbd2cSJim Jagielski } 975*b1cdbd2cSJim Jagielski if (!bAddAnyConverter){ 976*b1cdbd2cSJim Jagielski bAddAnyConverter = bLocAddAnyConverter; 977*b1cdbd2cSJim Jagielski } 978*b1cdbd2cSJim Jagielski return sReturn; 979*b1cdbd2cSJim Jagielski } 980*b1cdbd2cSJim Jagielski 981*b1cdbd2cSJim Jagielski getStructSourceCode(String _sReturnVariableDescription, String _sObjectDescription, String _sMember)982*b1cdbd2cSJim Jagielski public String getStructSourceCode(String _sReturnVariableDescription, String _sObjectDescription, String _sMember){ 983*b1cdbd2cSJim Jagielski return "\t" + _sReturnVariableDescription + " = " + _sObjectDescription + "." + _sMember + ";"; 984*b1cdbd2cSJim Jagielski } 985*b1cdbd2cSJim Jagielski getMainMethodSignatureSourceCode(XUnoNode _oUnoNode, String _soReturnObjectDescription)986*b1cdbd2cSJim Jagielski public String getMainMethodSignatureSourceCode(XUnoNode _oUnoNode, String _soReturnObjectDescription){ 987*b1cdbd2cSJim Jagielski //TODO try to use + _oUnoNode.getClassName() instead of the hack 988*b1cdbd2cSJim Jagielski String sReturn = "public void codesnippet(XInterface " + _soReturnObjectDescription + "){"; 989*b1cdbd2cSJim Jagielski if (baddExceptionHandling){ 990*b1cdbd2cSJim Jagielski sReturn += "\ntry{"; 991*b1cdbd2cSJim Jagielski } 992*b1cdbd2cSJim Jagielski return sReturn; 993*b1cdbd2cSJim Jagielski } 994*b1cdbd2cSJim Jagielski getMethodSeparator()995*b1cdbd2cSJim Jagielski public String getMethodSeparator(){ 996*b1cdbd2cSJim Jagielski return "."; 997*b1cdbd2cSJim Jagielski } 998*b1cdbd2cSJim Jagielski needsqueryInterface()999*b1cdbd2cSJim Jagielski public boolean needsqueryInterface(){ 1000*b1cdbd2cSJim Jagielski return true; 1001*b1cdbd2cSJim Jagielski } 1002*b1cdbd2cSJim Jagielski getqueryInterfaceSourceCode(String _sClassName, String _sReturnVariableName, String _sIncomingObjectName)1003*b1cdbd2cSJim Jagielski public String getqueryInterfaceSourceCode(String _sClassName, String _sReturnVariableName, String _sIncomingObjectName){ 1004*b1cdbd2cSJim Jagielski String sShortClassName = m_oIntrospector.getShortClassName(_sClassName); 1005*b1cdbd2cSJim Jagielski return "\t" + _sReturnVariableName + " = (" + sShortClassName + ") UnoRuntime.queryInterface(" + sShortClassName + ".class, " + _sIncomingObjectName + ");\n"; 1006*b1cdbd2cSJim Jagielski } 1007*b1cdbd2cSJim Jagielski 1008*b1cdbd2cSJim Jagielski getPropertyValueGetterSourceCode(String _sPropertyName, String _sReturnVariableName, String _sIncomingObjectName, TypeClass _aTypeClass, String _sTypeName)1009*b1cdbd2cSJim Jagielski public String getPropertyValueGetterSourceCode(String _sPropertyName, String _sReturnVariableName, String _sIncomingObjectName, TypeClass _aTypeClass, String _sTypeName){ 1010*b1cdbd2cSJim Jagielski String sObjectDescription = _sIncomingObjectName + ".getPropertyValue(\"" + _sPropertyName + "\")"; 1011*b1cdbd2cSJim Jagielski String sReturn = getConvertedSourceCodeValueOfObject(_sReturnVariableName, sObjectDescription, _aTypeClass, _sTypeName); 1012*b1cdbd2cSJim Jagielski sReturn += ";"; 1013*b1cdbd2cSJim Jagielski sReturn = "\t" + sReturn; 1014*b1cdbd2cSJim Jagielski return sReturn; 1015*b1cdbd2cSJim Jagielski // return "\t" + _sReturnVariableName + " = " + _sIncomingObjectName + ".getPropertyValue(\"" + _sPropertyName + "\");"; 1016*b1cdbd2cSJim Jagielski } 1017*b1cdbd2cSJim Jagielski 1018*b1cdbd2cSJim Jagielski getObjectTypeDescription(String _sClassName, boolean _bAsHeader)1019*b1cdbd2cSJim Jagielski public String getObjectTypeDescription(String _sClassName, boolean _bAsHeader){ 1020*b1cdbd2cSJim Jagielski String sReturn = ""; 1021*b1cdbd2cSJim Jagielski if (_bAsHeader){ 1022*b1cdbd2cSJim Jagielski sReturn = _sClassName; 1023*b1cdbd2cSJim Jagielski } 1024*b1cdbd2cSJim Jagielski else{ 1025*b1cdbd2cSJim Jagielski sReturn = m_oIntrospector.getShortClassName(_sClassName); 1026*b1cdbd2cSJim Jagielski } 1027*b1cdbd2cSJim Jagielski return sReturn; 1028*b1cdbd2cSJim Jagielski } 1029*b1cdbd2cSJim Jagielski 1030*b1cdbd2cSJim Jagielski getMethodTerminationSourceCode()1031*b1cdbd2cSJim Jagielski public String getMethodTerminationSourceCode(){ 1032*b1cdbd2cSJim Jagielski String sReturn = ""; 1033*b1cdbd2cSJim Jagielski int nIndex = 1; 1034*b1cdbd2cSJim Jagielski String sExceptionName = "e"; 1035*b1cdbd2cSJim Jagielski if (baddExceptionHandling){ 1036*b1cdbd2cSJim Jagielski for (int i = 0; i < sExceptions.size(); i++){ 1037*b1cdbd2cSJim Jagielski String sCurException = (String) sExceptions.get(i); 1038*b1cdbd2cSJim Jagielski if (sReturn.indexOf(sCurException) == -1){ 1039*b1cdbd2cSJim Jagielski if (nIndex > 1){ 1040*b1cdbd2cSJim Jagielski sExceptionName = "e"+ nIndex; 1041*b1cdbd2cSJim Jagielski } 1042*b1cdbd2cSJim Jagielski else{ 1043*b1cdbd2cSJim Jagielski sReturn +="\n}"; 1044*b1cdbd2cSJim Jagielski } 1045*b1cdbd2cSJim Jagielski sReturn += "catch (" + sCurException + " " + sExceptionName + "){\n"; 1046*b1cdbd2cSJim Jagielski sReturn += "\t" + sExceptionName + ".printStackTrace(System.out);\n"; 1047*b1cdbd2cSJim Jagielski sReturn += "\t" + getCommentSign() + "Enter your Code here...\n}"; 1048*b1cdbd2cSJim Jagielski nIndex++; 1049*b1cdbd2cSJim Jagielski } 1050*b1cdbd2cSJim Jagielski } 1051*b1cdbd2cSJim Jagielski } 1052*b1cdbd2cSJim Jagielski sReturn += "\n}"; 1053*b1cdbd2cSJim Jagielski return sReturn; 1054*b1cdbd2cSJim Jagielski } 1055*b1cdbd2cSJim Jagielski castLiteral(String _sExpression, TypeClass _aTypeClass)1056*b1cdbd2cSJim Jagielski public String castLiteral(String _sExpression, TypeClass _aTypeClass){ 1057*b1cdbd2cSJim Jagielski String sReturn = ""; 1058*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 1059*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 1060*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1061*b1cdbd2cSJim Jagielski break; 1062*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 1063*b1cdbd2cSJim Jagielski sReturn = "(byte) " + _sExpression; 1064*b1cdbd2cSJim Jagielski break; 1065*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 1066*b1cdbd2cSJim Jagielski sReturn = "'" + _sExpression + "'"; 1067*b1cdbd2cSJim Jagielski break; 1068*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 1069*b1cdbd2cSJim Jagielski sReturn = "(double) " + _sExpression; 1070*b1cdbd2cSJim Jagielski break; 1071*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 1072*b1cdbd2cSJim Jagielski sReturn = "(float) " + _sExpression; 1073*b1cdbd2cSJim Jagielski break; 1074*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 1075*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 1076*b1cdbd2cSJim Jagielski sReturn = "(short) " + _sExpression; 1077*b1cdbd2cSJim Jagielski break; 1078*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 1079*b1cdbd2cSJim Jagielski sReturn = "\"" + _sExpression + "\""; 1080*b1cdbd2cSJim Jagielski break; 1081*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 1082*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 1083*b1cdbd2cSJim Jagielski sReturn = "(long) " + _sExpression; 1084*b1cdbd2cSJim Jagielski break; 1085*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 1086*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1087*b1cdbd2cSJim Jagielski break; 1088*b1cdbd2cSJim Jagielski case TypeClass.ENUM_value: 1089*b1cdbd2cSJim Jagielski default: 1090*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1091*b1cdbd2cSJim Jagielski System.out.println("Type " + _aTypeClass.getValue() + " not yet defined in 'castliteral()'"); 1092*b1cdbd2cSJim Jagielski } 1093*b1cdbd2cSJim Jagielski return sReturn; 1094*b1cdbd2cSJim Jagielski } 1095*b1cdbd2cSJim Jagielski 1096*b1cdbd2cSJim Jagielski getbooleanTypeDescription()1097*b1cdbd2cSJim Jagielski public String getbooleanTypeDescription(){ 1098*b1cdbd2cSJim Jagielski return "boolean"; 1099*b1cdbd2cSJim Jagielski } 1100*b1cdbd2cSJim Jagielski getbyteTypeDescription()1101*b1cdbd2cSJim Jagielski public String getbyteTypeDescription(){ 1102*b1cdbd2cSJim Jagielski return "byte"; 1103*b1cdbd2cSJim Jagielski } 1104*b1cdbd2cSJim Jagielski getshortTypeDescription()1105*b1cdbd2cSJim Jagielski public String getshortTypeDescription(){ 1106*b1cdbd2cSJim Jagielski return "short"; 1107*b1cdbd2cSJim Jagielski } 1108*b1cdbd2cSJim Jagielski getunsignedshortTypeDescription()1109*b1cdbd2cSJim Jagielski public String getunsignedshortTypeDescription(){ 1110*b1cdbd2cSJim Jagielski return "short"; 1111*b1cdbd2cSJim Jagielski } 1112*b1cdbd2cSJim Jagielski getlongTypeDescription()1113*b1cdbd2cSJim Jagielski public String getlongTypeDescription(){ 1114*b1cdbd2cSJim Jagielski return "int"; 1115*b1cdbd2cSJim Jagielski } 1116*b1cdbd2cSJim Jagielski getunsignedlongTypeDescription()1117*b1cdbd2cSJim Jagielski public String getunsignedlongTypeDescription(){ 1118*b1cdbd2cSJim Jagielski return "int"; 1119*b1cdbd2cSJim Jagielski } 1120*b1cdbd2cSJim Jagielski gethyperTypeDescription()1121*b1cdbd2cSJim Jagielski public String gethyperTypeDescription(){ 1122*b1cdbd2cSJim Jagielski return "long"; 1123*b1cdbd2cSJim Jagielski } 1124*b1cdbd2cSJim Jagielski getunsignedhyperTypeDescription()1125*b1cdbd2cSJim Jagielski public String getunsignedhyperTypeDescription(){ 1126*b1cdbd2cSJim Jagielski return "long"; 1127*b1cdbd2cSJim Jagielski } 1128*b1cdbd2cSJim Jagielski getfloatTypeDescription()1129*b1cdbd2cSJim Jagielski public String getfloatTypeDescription(){ 1130*b1cdbd2cSJim Jagielski return "float"; 1131*b1cdbd2cSJim Jagielski } 1132*b1cdbd2cSJim Jagielski getdoubleTypeDescription()1133*b1cdbd2cSJim Jagielski public String getdoubleTypeDescription(){ 1134*b1cdbd2cSJim Jagielski return "double"; 1135*b1cdbd2cSJim Jagielski } 1136*b1cdbd2cSJim Jagielski getcharTypeDescription()1137*b1cdbd2cSJim Jagielski public String getcharTypeDescription(){ 1138*b1cdbd2cSJim Jagielski return "char"; 1139*b1cdbd2cSJim Jagielski } 1140*b1cdbd2cSJim Jagielski getstringTypeDescription(boolean _bAsHeaderSourceCode)1141*b1cdbd2cSJim Jagielski public String getstringTypeDescription(boolean _bAsHeaderSourceCode){ 1142*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1143*b1cdbd2cSJim Jagielski return ""; 1144*b1cdbd2cSJim Jagielski } 1145*b1cdbd2cSJim Jagielski else{ 1146*b1cdbd2cSJim Jagielski return "String"; 1147*b1cdbd2cSJim Jagielski } 1148*b1cdbd2cSJim Jagielski } 1149*b1cdbd2cSJim Jagielski gettypeTypeDescription(boolean _bAsHeaderSourceCode)1150*b1cdbd2cSJim Jagielski public String gettypeTypeDescription(boolean _bAsHeaderSourceCode){ 1151*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1152*b1cdbd2cSJim Jagielski return "com.sun.star.uno.Type"; 1153*b1cdbd2cSJim Jagielski } 1154*b1cdbd2cSJim Jagielski else{ 1155*b1cdbd2cSJim Jagielski return "Type"; 1156*b1cdbd2cSJim Jagielski } 1157*b1cdbd2cSJim Jagielski } 1158*b1cdbd2cSJim Jagielski getanyTypeDescription(boolean _bAsHeaderSourceCode)1159*b1cdbd2cSJim Jagielski public String getanyTypeDescription(boolean _bAsHeaderSourceCode){ 1160*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1161*b1cdbd2cSJim Jagielski return ""; 1162*b1cdbd2cSJim Jagielski } 1163*b1cdbd2cSJim Jagielski else{ 1164*b1cdbd2cSJim Jagielski return "Object"; 1165*b1cdbd2cSJim Jagielski } 1166*b1cdbd2cSJim Jagielski } 1167*b1cdbd2cSJim Jagielski 1168*b1cdbd2cSJim Jagielski getStringValue(String _sValue)1169*b1cdbd2cSJim Jagielski public String getStringValue(String _sValue){ 1170*b1cdbd2cSJim Jagielski return _sValue; 1171*b1cdbd2cSJim Jagielski } 1172*b1cdbd2cSJim Jagielski 1173*b1cdbd2cSJim Jagielski getVariableDeclaration(String _sTypeString, String _sVariableName, boolean _bIsArray, TypeClass _aTypeClass, boolean _bInitialize)1174*b1cdbd2cSJim Jagielski public String getVariableDeclaration(String _sTypeString, String _sVariableName, boolean _bIsArray, TypeClass _aTypeClass, boolean _bInitialize){ 1175*b1cdbd2cSJim Jagielski String sReturn = ""; 1176*b1cdbd2cSJim Jagielski if (_bIsArray){ 1177*b1cdbd2cSJim Jagielski sReturn = _sTypeString + "[] " + _sVariableName; 1178*b1cdbd2cSJim Jagielski } 1179*b1cdbd2cSJim Jagielski else{ 1180*b1cdbd2cSJim Jagielski sReturn = _sTypeString + " " + _sVariableName; 1181*b1cdbd2cSJim Jagielski } 1182*b1cdbd2cSJim Jagielski return sReturn; 1183*b1cdbd2cSJim Jagielski } 1184*b1cdbd2cSJim Jagielski 1185*b1cdbd2cSJim Jagielski getArrayDeclaration(String _sVariableDeclaration)1186*b1cdbd2cSJim Jagielski public String getArrayDeclaration(String _sVariableDeclaration){ 1187*b1cdbd2cSJim Jagielski String sReturn = ""; 1188*b1cdbd2cSJim Jagielski String[] sDeclarations = _sVariableDeclaration.split(" "); 1189*b1cdbd2cSJim Jagielski for (int i = 0; i< sDeclarations.length;i++){ 1190*b1cdbd2cSJim Jagielski sReturn += sDeclarations[i]; 1191*b1cdbd2cSJim Jagielski if (i == 0){ 1192*b1cdbd2cSJim Jagielski sReturn += "[]"; 1193*b1cdbd2cSJim Jagielski } 1194*b1cdbd2cSJim Jagielski if (i < (sDeclarations.length -1)){ 1195*b1cdbd2cSJim Jagielski sReturn += " "; 1196*b1cdbd2cSJim Jagielski } 1197*b1cdbd2cSJim Jagielski } 1198*b1cdbd2cSJim Jagielski return sReturn; 1199*b1cdbd2cSJim Jagielski } 1200*b1cdbd2cSJim Jagielski getCommentSign()1201*b1cdbd2cSJim Jagielski public String getCommentSign(){ 1202*b1cdbd2cSJim Jagielski return "//"; 1203*b1cdbd2cSJim Jagielski } 1204*b1cdbd2cSJim Jagielski } 1205*b1cdbd2cSJim Jagielski 1206*b1cdbd2cSJim Jagielski 1207*b1cdbd2cSJim Jagielski public class BasicCodeGenerator implements XLanguageSourceCodeGenerator{ 1208*b1cdbd2cSJim Jagielski String sStatementsCode = ""; 1209*b1cdbd2cSJim Jagielski BasicCodeGenerator()1210*b1cdbd2cSJim Jagielski public BasicCodeGenerator(){ 1211*b1cdbd2cSJim Jagielski } 1212*b1cdbd2cSJim Jagielski getHeaderSourceCode(Object _oUnoObject, String _sClassName, TypeClass _aTypeClass)1213*b1cdbd2cSJim Jagielski public String getHeaderSourceCode(Object _oUnoObject, String _sClassName, TypeClass _aTypeClass){ 1214*b1cdbd2cSJim Jagielski String sHeaderStatement = ""; 1215*b1cdbd2cSJim Jagielski return sHeaderStatement; 1216*b1cdbd2cSJim Jagielski } 1217*b1cdbd2cSJim Jagielski getFinalHeaderStatements()1218*b1cdbd2cSJim Jagielski public String getFinalHeaderStatements(){ 1219*b1cdbd2cSJim Jagielski return ""; 1220*b1cdbd2cSJim Jagielski } 1221*b1cdbd2cSJim Jagielski getMainMethodSignatureSourceCode(XUnoNode _oUnoNode, String _soReturnObjectDescription)1222*b1cdbd2cSJim Jagielski public String getMainMethodSignatureSourceCode(XUnoNode _oUnoNode, String _soReturnObjectDescription){ 1223*b1cdbd2cSJim Jagielski //TODO try to use + _oUnoNode.getClassName() instead of the hack 1224*b1cdbd2cSJim Jagielski return "Sub Main(" + _soReturnObjectDescription + " as " + getanyTypeDescription(false) + ")"; 1225*b1cdbd2cSJim Jagielski } 1226*b1cdbd2cSJim Jagielski needsqueryInterface()1227*b1cdbd2cSJim Jagielski public boolean needsqueryInterface(){ 1228*b1cdbd2cSJim Jagielski return false; 1229*b1cdbd2cSJim Jagielski } 1230*b1cdbd2cSJim Jagielski assignqueryInterfaceHeaderSourceCode()1231*b1cdbd2cSJim Jagielski public void assignqueryInterfaceHeaderSourceCode(){ 1232*b1cdbd2cSJim Jagielski } 1233*b1cdbd2cSJim Jagielski getMethodSeparator()1234*b1cdbd2cSJim Jagielski public String getMethodSeparator(){ 1235*b1cdbd2cSJim Jagielski return "."; 1236*b1cdbd2cSJim Jagielski } 1237*b1cdbd2cSJim Jagielski 1238*b1cdbd2cSJim Jagielski getqueryInterfaceSourceCode(String _sClassName, String _sReturnVariableName, String _sIncomingObjectName)1239*b1cdbd2cSJim Jagielski public String getqueryInterfaceSourceCode(String _sClassName, String _sReturnVariableName, String _sIncomingObjectName){ 1240*b1cdbd2cSJim Jagielski return _sIncomingObjectName; 1241*b1cdbd2cSJim Jagielski } 1242*b1cdbd2cSJim Jagielski 1243*b1cdbd2cSJim Jagielski getPropertyValueGetterSourceCode(String _sPropertyName, String _sReturnVariableName, String _sIncomingObjectName, TypeClass _aTypeClass, String _sTypeName)1244*b1cdbd2cSJim Jagielski public String getPropertyValueGetterSourceCode(String _sPropertyName, String _sReturnVariableName, String _sIncomingObjectName, TypeClass _aTypeClass, String _sTypeName){ 1245*b1cdbd2cSJim Jagielski return "\t" + _sReturnVariableName + " = " + _sIncomingObjectName + "." + _sPropertyName; 1246*b1cdbd2cSJim Jagielski } 1247*b1cdbd2cSJim Jagielski 1248*b1cdbd2cSJim Jagielski getStructSourceCode(String _sReturnVariableDescription, String _sObjectDescription, String _sMember)1249*b1cdbd2cSJim Jagielski public String getStructSourceCode(String _sReturnVariableDescription, String _sObjectDescription, String _sMember){ 1250*b1cdbd2cSJim Jagielski return getPropertyValueGetterSourceCode(_sMember, _sReturnVariableDescription, _sObjectDescription, null, "" ); 1251*b1cdbd2cSJim Jagielski } 1252*b1cdbd2cSJim Jagielski getConvertedSourceCodeValueOfObject(String _sReturnVariableName, String _sObjectDescription, TypeClass _aTypeClass, String _sTypeName)1253*b1cdbd2cSJim Jagielski public String getConvertedSourceCodeValueOfObject(String _sReturnVariableName, String _sObjectDescription, TypeClass _aTypeClass, String _sTypeName){ 1254*b1cdbd2cSJim Jagielski return _sReturnVariableName + " = " + _sObjectDescription; 1255*b1cdbd2cSJim Jagielski } 1256*b1cdbd2cSJim Jagielski 1257*b1cdbd2cSJim Jagielski getObjectTypeDescription(String _sClassName, boolean _bAsHeader)1258*b1cdbd2cSJim Jagielski public String getObjectTypeDescription(String _sClassName, boolean _bAsHeader){ 1259*b1cdbd2cSJim Jagielski return "Object"; 1260*b1cdbd2cSJim Jagielski } 1261*b1cdbd2cSJim Jagielski 1262*b1cdbd2cSJim Jagielski getMethodTerminationSourceCode()1263*b1cdbd2cSJim Jagielski public String getMethodTerminationSourceCode(){ 1264*b1cdbd2cSJim Jagielski return "\nEnd Sub\n"; 1265*b1cdbd2cSJim Jagielski } 1266*b1cdbd2cSJim Jagielski 1267*b1cdbd2cSJim Jagielski castLiteral(String _sExpression, TypeClass _aTypeClass)1268*b1cdbd2cSJim Jagielski public String castLiteral(String _sExpression, TypeClass _aTypeClass){ 1269*b1cdbd2cSJim Jagielski String sReturn = ""; 1270*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 1271*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 1272*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 1273*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 1274*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 1275*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 1276*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 1277*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 1278*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 1279*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 1280*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 1281*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1282*b1cdbd2cSJim Jagielski break; 1283*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 1284*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 1285*b1cdbd2cSJim Jagielski sReturn = "\"" +_sExpression + "\""; 1286*b1cdbd2cSJim Jagielski break; 1287*b1cdbd2cSJim Jagielski case TypeClass.ENUM_value: 1288*b1cdbd2cSJim Jagielski default: 1289*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1290*b1cdbd2cSJim Jagielski System.out.println("Type " + _aTypeClass.getValue() + " not yet defined in 'castliteral()'"); 1291*b1cdbd2cSJim Jagielski } 1292*b1cdbd2cSJim Jagielski return sReturn; 1293*b1cdbd2cSJim Jagielski } 1294*b1cdbd2cSJim Jagielski 1295*b1cdbd2cSJim Jagielski 1296*b1cdbd2cSJim Jagielski getbooleanTypeDescription()1297*b1cdbd2cSJim Jagielski public String getbooleanTypeDescription(){ 1298*b1cdbd2cSJim Jagielski return "Boolean"; 1299*b1cdbd2cSJim Jagielski } 1300*b1cdbd2cSJim Jagielski getbyteTypeDescription()1301*b1cdbd2cSJim Jagielski public String getbyteTypeDescription(){ 1302*b1cdbd2cSJim Jagielski return "Integer"; 1303*b1cdbd2cSJim Jagielski } 1304*b1cdbd2cSJim Jagielski getshortTypeDescription()1305*b1cdbd2cSJim Jagielski public String getshortTypeDescription(){ 1306*b1cdbd2cSJim Jagielski return "Integer"; 1307*b1cdbd2cSJim Jagielski } 1308*b1cdbd2cSJim Jagielski getunsignedshortTypeDescription()1309*b1cdbd2cSJim Jagielski public String getunsignedshortTypeDescription(){ 1310*b1cdbd2cSJim Jagielski return "Integer"; 1311*b1cdbd2cSJim Jagielski } 1312*b1cdbd2cSJim Jagielski getlongTypeDescription()1313*b1cdbd2cSJim Jagielski public String getlongTypeDescription(){ 1314*b1cdbd2cSJim Jagielski return "Integer"; 1315*b1cdbd2cSJim Jagielski } 1316*b1cdbd2cSJim Jagielski getunsignedlongTypeDescription()1317*b1cdbd2cSJim Jagielski public String getunsignedlongTypeDescription(){ 1318*b1cdbd2cSJim Jagielski return "Long"; 1319*b1cdbd2cSJim Jagielski } 1320*b1cdbd2cSJim Jagielski gethyperTypeDescription()1321*b1cdbd2cSJim Jagielski public String gethyperTypeDescription(){ 1322*b1cdbd2cSJim Jagielski return "Long"; 1323*b1cdbd2cSJim Jagielski } 1324*b1cdbd2cSJim Jagielski getunsignedhyperTypeDescription()1325*b1cdbd2cSJim Jagielski public String getunsignedhyperTypeDescription(){ 1326*b1cdbd2cSJim Jagielski return "Long"; 1327*b1cdbd2cSJim Jagielski } 1328*b1cdbd2cSJim Jagielski getfloatTypeDescription()1329*b1cdbd2cSJim Jagielski public String getfloatTypeDescription(){ 1330*b1cdbd2cSJim Jagielski return "Double"; 1331*b1cdbd2cSJim Jagielski } 1332*b1cdbd2cSJim Jagielski getdoubleTypeDescription()1333*b1cdbd2cSJim Jagielski public String getdoubleTypeDescription(){ 1334*b1cdbd2cSJim Jagielski return "Double"; 1335*b1cdbd2cSJim Jagielski } 1336*b1cdbd2cSJim Jagielski getcharTypeDescription()1337*b1cdbd2cSJim Jagielski public String getcharTypeDescription(){ 1338*b1cdbd2cSJim Jagielski return "String"; 1339*b1cdbd2cSJim Jagielski } 1340*b1cdbd2cSJim Jagielski getstringTypeDescription(boolean _bAsHeaderSourceCode)1341*b1cdbd2cSJim Jagielski public String getstringTypeDescription(boolean _bAsHeaderSourceCode){ 1342*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1343*b1cdbd2cSJim Jagielski return ""; 1344*b1cdbd2cSJim Jagielski } 1345*b1cdbd2cSJim Jagielski else{ 1346*b1cdbd2cSJim Jagielski return "String"; 1347*b1cdbd2cSJim Jagielski } 1348*b1cdbd2cSJim Jagielski } 1349*b1cdbd2cSJim Jagielski gettypeTypeDescription(boolean _bAsHeaderSourceCode)1350*b1cdbd2cSJim Jagielski public String gettypeTypeDescription(boolean _bAsHeaderSourceCode){ 1351*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1352*b1cdbd2cSJim Jagielski return ""; 1353*b1cdbd2cSJim Jagielski } 1354*b1cdbd2cSJim Jagielski else{ 1355*b1cdbd2cSJim Jagielski return "Object"; 1356*b1cdbd2cSJim Jagielski } 1357*b1cdbd2cSJim Jagielski } 1358*b1cdbd2cSJim Jagielski getanyTypeDescription(boolean _bAsHeaderSourceCode)1359*b1cdbd2cSJim Jagielski public String getanyTypeDescription(boolean _bAsHeaderSourceCode){ 1360*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1361*b1cdbd2cSJim Jagielski return ""; 1362*b1cdbd2cSJim Jagielski } 1363*b1cdbd2cSJim Jagielski else{ 1364*b1cdbd2cSJim Jagielski return "Object"; 1365*b1cdbd2cSJim Jagielski } 1366*b1cdbd2cSJim Jagielski } 1367*b1cdbd2cSJim Jagielski getStatementTerminationCharacter()1368*b1cdbd2cSJim Jagielski public String getStatementTerminationCharacter(){ 1369*b1cdbd2cSJim Jagielski return ""; 1370*b1cdbd2cSJim Jagielski } 1371*b1cdbd2cSJim Jagielski 1372*b1cdbd2cSJim Jagielski getVariableDeclaration(String _sTypeString, String _sVariableName, boolean bIsArray, TypeClass _aTypeClass, boolean _bInitialize)1373*b1cdbd2cSJim Jagielski public String getVariableDeclaration(String _sTypeString, String _sVariableName, boolean bIsArray, TypeClass _aTypeClass, boolean _bInitialize){ 1374*b1cdbd2cSJim Jagielski String sReturn = ""; 1375*b1cdbd2cSJim Jagielski if (bIsArray){ 1376*b1cdbd2cSJim Jagielski sReturn = "Dim " + _sVariableName + "() as " + _sTypeString + "\n\t" + _sVariableName; 1377*b1cdbd2cSJim Jagielski } 1378*b1cdbd2cSJim Jagielski else{ 1379*b1cdbd2cSJim Jagielski sReturn = "Dim " + _sVariableName + " as " + _sTypeString + "\n\t" + _sVariableName; 1380*b1cdbd2cSJim Jagielski } 1381*b1cdbd2cSJim Jagielski return sReturn; 1382*b1cdbd2cSJim Jagielski } 1383*b1cdbd2cSJim Jagielski 1384*b1cdbd2cSJim Jagielski getStringValue(String _sValue)1385*b1cdbd2cSJim Jagielski public String getStringValue(String _sValue){ 1386*b1cdbd2cSJim Jagielski return _sValue; 1387*b1cdbd2cSJim Jagielski } 1388*b1cdbd2cSJim Jagielski 1389*b1cdbd2cSJim Jagielski getArrayDeclaration(String _sVariableDeclaration)1390*b1cdbd2cSJim Jagielski public String getArrayDeclaration(String _sVariableDeclaration){ 1391*b1cdbd2cSJim Jagielski String sReturn = ""; 1392*b1cdbd2cSJim Jagielski String[] sDeclarations = _sVariableDeclaration.split(" "); 1393*b1cdbd2cSJim Jagielski for (int i = 0; i< sDeclarations.length;i++){ 1394*b1cdbd2cSJim Jagielski sReturn += sDeclarations[i]; 1395*b1cdbd2cSJim Jagielski if (i == 0){ 1396*b1cdbd2cSJim Jagielski sReturn += "[]"; 1397*b1cdbd2cSJim Jagielski } 1398*b1cdbd2cSJim Jagielski if (i < (sDeclarations.length -1)){ 1399*b1cdbd2cSJim Jagielski sReturn += " "; 1400*b1cdbd2cSJim Jagielski } 1401*b1cdbd2cSJim Jagielski } 1402*b1cdbd2cSJim Jagielski return sReturn; 1403*b1cdbd2cSJim Jagielski } 1404*b1cdbd2cSJim Jagielski getCommentSign()1405*b1cdbd2cSJim Jagielski public String getCommentSign(){ 1406*b1cdbd2cSJim Jagielski return "'"; 1407*b1cdbd2cSJim Jagielski } 1408*b1cdbd2cSJim Jagielski 1409*b1cdbd2cSJim Jagielski } 1410*b1cdbd2cSJim Jagielski 1411*b1cdbd2cSJim Jagielski public class CPlusPlusCodeGenerator implements XLanguageSourceCodeGenerator{ 1412*b1cdbd2cSJim Jagielski String sStatementsCode = ""; 1413*b1cdbd2cSJim Jagielski boolean bIncludeStringHeader = false; 1414*b1cdbd2cSJim Jagielski boolean bIncludeAny = false; 1415*b1cdbd2cSJim Jagielski boolean bIncludeSequenceHeader = false; 1416*b1cdbd2cSJim Jagielski CPlusPlusCodeGenerator()1417*b1cdbd2cSJim Jagielski public CPlusPlusCodeGenerator(){ 1418*b1cdbd2cSJim Jagielski } 1419*b1cdbd2cSJim Jagielski getCSSNameSpaceString()1420*b1cdbd2cSJim Jagielski private String getCSSNameSpaceString(){ 1421*b1cdbd2cSJim Jagielski return "css"; 1422*b1cdbd2cSJim Jagielski } 1423*b1cdbd2cSJim Jagielski getStatementTerminationCharacter()1424*b1cdbd2cSJim Jagielski public String getStatementTerminationCharacter(){ 1425*b1cdbd2cSJim Jagielski return ";"; 1426*b1cdbd2cSJim Jagielski } 1427*b1cdbd2cSJim Jagielski 1428*b1cdbd2cSJim Jagielski getHeaderSourceCode(Object _oUnoObject, String _sClassName, TypeClass _aTypeClass)1429*b1cdbd2cSJim Jagielski public String getHeaderSourceCode(Object _oUnoObject, String _sClassName, TypeClass _aTypeClass){ 1430*b1cdbd2cSJim Jagielski String sClassName = _sClassName; 1431*b1cdbd2cSJim Jagielski String sHeaderStatement = ""; 1432*b1cdbd2cSJim Jagielski if (_oUnoObject != null){ 1433*b1cdbd2cSJim Jagielski if (!m_oIntrospector.isObjectPrimitive(_oUnoObject)){ 1434*b1cdbd2cSJim Jagielski if (m_oIntrospector.isObjectSequence(_oUnoObject)){ 1435*b1cdbd2cSJim Jagielski XTypeDescription xTypeDescription = m_oIntrospector.getReferencedType(sClassName); 1436*b1cdbd2cSJim Jagielski if (xTypeDescription != null){ 1437*b1cdbd2cSJim Jagielski if (!m_oIntrospector.isPrimitive(xTypeDescription.getTypeClass())){ 1438*b1cdbd2cSJim Jagielski sClassName = getTypeString(xTypeDescription.getName(), xTypeDescription.getTypeClass(), true); 1439*b1cdbd2cSJim Jagielski } 1440*b1cdbd2cSJim Jagielski // primitive Types are not supposed to turn up in the import section... 1441*b1cdbd2cSJim Jagielski else{ 1442*b1cdbd2cSJim Jagielski sClassName = ""; 1443*b1cdbd2cSJim Jagielski } 1444*b1cdbd2cSJim Jagielski } 1445*b1cdbd2cSJim Jagielski } 1446*b1cdbd2cSJim Jagielski else{ 1447*b1cdbd2cSJim Jagielski sClassName = getTypeString(_sClassName, _aTypeClass, true); 1448*b1cdbd2cSJim Jagielski } 1449*b1cdbd2cSJim Jagielski if (!sClassName.equals("")){ 1450*b1cdbd2cSJim Jagielski sHeaderStatement = getHeaderOfClass(sClassName); 1451*b1cdbd2cSJim Jagielski } 1452*b1cdbd2cSJim Jagielski } 1453*b1cdbd2cSJim Jagielski } 1454*b1cdbd2cSJim Jagielski return sHeaderStatement; 1455*b1cdbd2cSJim Jagielski } 1456*b1cdbd2cSJim Jagielski 1457*b1cdbd2cSJim Jagielski 1458*b1cdbd2cSJim Jagielski getFinalHeaderStatements()1459*b1cdbd2cSJim Jagielski public String getFinalHeaderStatements(){ 1460*b1cdbd2cSJim Jagielski String sReturn = ""; 1461*b1cdbd2cSJim Jagielski sReturn += "\nnamespace " + getCSSNameSpaceString() + " = com::sun::star;\n"; 1462*b1cdbd2cSJim Jagielski sReturn += "using namespace rtl;\n"; 1463*b1cdbd2cSJim Jagielski return sReturn; 1464*b1cdbd2cSJim Jagielski } 1465*b1cdbd2cSJim Jagielski 1466*b1cdbd2cSJim Jagielski getHeaderOfClass(String _sClassName)1467*b1cdbd2cSJim Jagielski private String getHeaderOfClass(String _sClassName){ 1468*b1cdbd2cSJim Jagielski return "#include \"" + _sClassName.replace('.', '/') + ".hpp\"\n"; // #include <com/sun/star/uno/XComponentContext.hpp> 1469*b1cdbd2cSJim Jagielski } 1470*b1cdbd2cSJim Jagielski 1471*b1cdbd2cSJim Jagielski 1472*b1cdbd2cSJim Jagielski assignqueryInterfaceHeaderSourceCode()1473*b1cdbd2cSJim Jagielski public void assignqueryInterfaceHeaderSourceCode(){ 1474*b1cdbd2cSJim Jagielski sHeaderStatements.add("#include \"sal/config.h\"\n"); 1475*b1cdbd2cSJim Jagielski sHeaderStatements.add("#include \"sal/types.h\"\n"); 1476*b1cdbd2cSJim Jagielski if (bIncludeStringHeader){ 1477*b1cdbd2cSJim Jagielski sHeaderStatements.add("#include \"rtl/ustring.hxx\"\n"); 1478*b1cdbd2cSJim Jagielski } 1479*b1cdbd2cSJim Jagielski sHeaderStatements.add("#include \"com/sun/star/uno/Reference.hxx\"\n"); 1480*b1cdbd2cSJim Jagielski if (bIncludeSequenceHeader){ 1481*b1cdbd2cSJim Jagielski sHeaderStatements.add("#include \"com/sun/star/uno/Sequence.hxx\"\n"); 1482*b1cdbd2cSJim Jagielski } 1483*b1cdbd2cSJim Jagielski sHeaderStatements.add(getHeaderOfClass("com.sun.star.uno.XInterface")); 1484*b1cdbd2cSJim Jagielski if (bIncludeAny){ 1485*b1cdbd2cSJim Jagielski sHeaderStatements.add(getHeaderOfClass("com.sun.star.uno.Any")); 1486*b1cdbd2cSJim Jagielski } 1487*b1cdbd2cSJim Jagielski } 1488*b1cdbd2cSJim Jagielski 1489*b1cdbd2cSJim Jagielski getMainMethodSignatureSourceCode(XUnoNode _oUnoNode, String _soReturnObjectDescription)1490*b1cdbd2cSJim Jagielski public String getMainMethodSignatureSourceCode(XUnoNode _oUnoNode, String _soReturnObjectDescription){ 1491*b1cdbd2cSJim Jagielski String sReturn = ""; 1492*b1cdbd2cSJim Jagielski sReturn = "void codesnippet(const " + getCSSNameSpaceString() + "::uno::Reference<" + getCSSNameSpaceString() + "::uno::XInterface>& " + _soReturnObjectDescription + " ){"; 1493*b1cdbd2cSJim Jagielski int a = 0; 1494*b1cdbd2cSJim Jagielski if (!sExceptions.contains("com.sun.star.uno.RuntimeException")){ 1495*b1cdbd2cSJim Jagielski sExceptions.add("com.sun.star.uno.RuntimeException"); 1496*b1cdbd2cSJim Jagielski } 1497*b1cdbd2cSJim Jagielski if (baddExceptionHandling){ 1498*b1cdbd2cSJim Jagielski sReturn += "\n//throw "; 1499*b1cdbd2cSJim Jagielski for (int i = 0; i < sExceptions.size(); i++){ 1500*b1cdbd2cSJim Jagielski String sCurException = (String) sExceptions.get(i); 1501*b1cdbd2cSJim Jagielski if (sReturn.indexOf(sCurException) == -1){ 1502*b1cdbd2cSJim Jagielski if (a++ > 0){ 1503*b1cdbd2cSJim Jagielski sReturn += ", "; 1504*b1cdbd2cSJim Jagielski } 1505*b1cdbd2cSJim Jagielski sReturn += getObjectTypeDescription(sCurException, false); 1506*b1cdbd2cSJim Jagielski 1507*b1cdbd2cSJim Jagielski } 1508*b1cdbd2cSJim Jagielski } 1509*b1cdbd2cSJim Jagielski 1510*b1cdbd2cSJim Jagielski } 1511*b1cdbd2cSJim Jagielski sReturn += "{"; 1512*b1cdbd2cSJim Jagielski return sReturn; 1513*b1cdbd2cSJim Jagielski } 1514*b1cdbd2cSJim Jagielski 1515*b1cdbd2cSJim Jagielski needsqueryInterface()1516*b1cdbd2cSJim Jagielski public boolean needsqueryInterface(){ 1517*b1cdbd2cSJim Jagielski return true; 1518*b1cdbd2cSJim Jagielski } 1519*b1cdbd2cSJim Jagielski 1520*b1cdbd2cSJim Jagielski getqueryInterfaceSourceCode(String _sClassName, String _sReturnVariableName, String _sIncomingObjectName)1521*b1cdbd2cSJim Jagielski public String getqueryInterfaceSourceCode(String _sClassName, String _sReturnVariableName, String _sIncomingObjectName){ 1522*b1cdbd2cSJim Jagielski return "\t" + _sReturnVariableName + "( " + _sIncomingObjectName + ", " + getCSSNameSpaceString() + "::uno::UNO_QUERY_THROW);\n"; 1523*b1cdbd2cSJim Jagielski } 1524*b1cdbd2cSJim Jagielski 1525*b1cdbd2cSJim Jagielski getPropertyValueGetterSourceCode(String _sPropertyName, String _sReturnVariableName, String _sIncomingObjectName, TypeClass _aTypeClass, String _sTypeName)1526*b1cdbd2cSJim Jagielski public String getPropertyValueGetterSourceCode(String _sPropertyName, String _sReturnVariableName, String _sIncomingObjectName, TypeClass _aTypeClass, String _sTypeName){ 1527*b1cdbd2cSJim Jagielski String sFirstLine = "\t"; 1528*b1cdbd2cSJim Jagielski String sReturnVariableName = _sReturnVariableName; 1529*b1cdbd2cSJim Jagielski // e.g. uno::Any a = xPropSet->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" )) ); 1530*b1cdbd2cSJim Jagielski String[] sVarDefinition = _sReturnVariableName.split("="); 1531*b1cdbd2cSJim Jagielski if (sVarDefinition.length > 0){ 1532*b1cdbd2cSJim Jagielski String sVariable = sVarDefinition[0]; 1533*b1cdbd2cSJim Jagielski String[] sVarDeclaration = sVariable.split(" "); 1534*b1cdbd2cSJim Jagielski if (sVarDeclaration.length > 0){ 1535*b1cdbd2cSJim Jagielski sFirstLine += sReturnVariableName + ";\n"; 1536*b1cdbd2cSJim Jagielski sReturnVariableName = sVarDeclaration[sVarDeclaration.length-1]; 1537*b1cdbd2cSJim Jagielski } 1538*b1cdbd2cSJim Jagielski } 1539*b1cdbd2cSJim Jagielski String sObjectDescription = _sIncomingObjectName + "->getPropertyValue(" + getStringValue(_sPropertyName) + ")"; 1540*b1cdbd2cSJim Jagielski String sSecondLine = "\t" + getConvertedSourceCodeValueOfObject(sReturnVariableName, sObjectDescription, _aTypeClass, _sTypeName) + ";"; 1541*b1cdbd2cSJim Jagielski return sFirstLine + sSecondLine; 1542*b1cdbd2cSJim Jagielski } 1543*b1cdbd2cSJim Jagielski 1544*b1cdbd2cSJim Jagielski getStructSourceCode(String _sReturnVariableDescription, String _sObjectDescription, String _sMember)1545*b1cdbd2cSJim Jagielski public String getStructSourceCode(String _sReturnVariableDescription, String _sObjectDescription, String _sMember){ 1546*b1cdbd2cSJim Jagielski return "\t" + _sReturnVariableDescription + " = " + _sObjectDescription + "->" + _sMember + ";"; 1547*b1cdbd2cSJim Jagielski } 1548*b1cdbd2cSJim Jagielski 1549*b1cdbd2cSJim Jagielski getConvertedSourceCodeValueOfObject(String _sReturnVariableName, String _sObjectDescription, TypeClass _aTypeClass, String _sTypeName)1550*b1cdbd2cSJim Jagielski public String getConvertedSourceCodeValueOfObject(String _sReturnVariableName, String _sObjectDescription, TypeClass _aTypeClass, String _sTypeName){ 1551*b1cdbd2cSJim Jagielski // if (m_oIntrospector.isPrimitive(_aTypeClass)){ 1552*b1cdbd2cSJim Jagielski return _sObjectDescription + " >>= " + _sReturnVariableName; 1553*b1cdbd2cSJim Jagielski // } 1554*b1cdbd2cSJim Jagielski // else{ 1555*b1cdbd2cSJim Jagielski // return _sReturnVariableName + " = " + _sObjectDescription; 1556*b1cdbd2cSJim Jagielski // } 1557*b1cdbd2cSJim Jagielski } 1558*b1cdbd2cSJim Jagielski 1559*b1cdbd2cSJim Jagielski getStringValue(String _sValue)1560*b1cdbd2cSJim Jagielski public String getStringValue(String _sValue){ 1561*b1cdbd2cSJim Jagielski bIncludeStringHeader = true; 1562*b1cdbd2cSJim Jagielski return "OUString(RTL_CONSTASCII_USTRINGPARAM(\"" + _sValue + "\"))"; 1563*b1cdbd2cSJim Jagielski } 1564*b1cdbd2cSJim Jagielski 1565*b1cdbd2cSJim Jagielski getObjectTypeDescription(String _sClassName, boolean _bAsHeader)1566*b1cdbd2cSJim Jagielski public String getObjectTypeDescription(String _sClassName, boolean _bAsHeader){ 1567*b1cdbd2cSJim Jagielski String sReturn = ""; 1568*b1cdbd2cSJim Jagielski if (_bAsHeader){ 1569*b1cdbd2cSJim Jagielski sReturn = _sClassName.replace('.', '/'); 1570*b1cdbd2cSJim Jagielski } 1571*b1cdbd2cSJim Jagielski else{ 1572*b1cdbd2cSJim Jagielski String sModuleName = m_oIntrospector.getModuleName(_sClassName); 1573*b1cdbd2cSJim Jagielski sModuleName = m_oIntrospector.getShortClassName(sModuleName); 1574*b1cdbd2cSJim Jagielski sReturn = getCSSNameSpaceString() + "::" + sModuleName + "::" + m_oIntrospector.getShortClassName(_sClassName); 1575*b1cdbd2cSJim Jagielski } 1576*b1cdbd2cSJim Jagielski return sReturn; 1577*b1cdbd2cSJim Jagielski } 1578*b1cdbd2cSJim Jagielski 1579*b1cdbd2cSJim Jagielski getMethodTerminationSourceCode()1580*b1cdbd2cSJim Jagielski public String getMethodTerminationSourceCode(){ 1581*b1cdbd2cSJim Jagielski return "\n}"; 1582*b1cdbd2cSJim Jagielski } 1583*b1cdbd2cSJim Jagielski getMethodSeparator()1584*b1cdbd2cSJim Jagielski public String getMethodSeparator(){ 1585*b1cdbd2cSJim Jagielski return "->"; 1586*b1cdbd2cSJim Jagielski } 1587*b1cdbd2cSJim Jagielski 1588*b1cdbd2cSJim Jagielski castLiteral(String _sExpression, TypeClass _aTypeClass)1589*b1cdbd2cSJim Jagielski public String castLiteral(String _sExpression, TypeClass _aTypeClass){ 1590*b1cdbd2cSJim Jagielski String sReturn = ""; 1591*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 1592*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 1593*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 1594*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 1595*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 1596*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 1597*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 1598*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 1599*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 1600*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 1601*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 1602*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1603*b1cdbd2cSJim Jagielski break; 1604*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 1605*b1cdbd2cSJim Jagielski sReturn = "'" + _sExpression + "'"; 1606*b1cdbd2cSJim Jagielski break; 1607*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 1608*b1cdbd2cSJim Jagielski sReturn = getStringValue(_sExpression); 1609*b1cdbd2cSJim Jagielski break; 1610*b1cdbd2cSJim Jagielski case TypeClass.ENUM_value: 1611*b1cdbd2cSJim Jagielski default: 1612*b1cdbd2cSJim Jagielski sReturn = _sExpression; 1613*b1cdbd2cSJim Jagielski System.out.println("Type " + _aTypeClass.getValue() + " not yet defined in 'castliteral()'"); 1614*b1cdbd2cSJim Jagielski } 1615*b1cdbd2cSJim Jagielski return sReturn; 1616*b1cdbd2cSJim Jagielski } 1617*b1cdbd2cSJim Jagielski getbooleanTypeDescription()1618*b1cdbd2cSJim Jagielski public String getbooleanTypeDescription(){ 1619*b1cdbd2cSJim Jagielski return "sal_Bool"; 1620*b1cdbd2cSJim Jagielski } 1621*b1cdbd2cSJim Jagielski getbyteTypeDescription()1622*b1cdbd2cSJim Jagielski public String getbyteTypeDescription(){ 1623*b1cdbd2cSJim Jagielski return "sal_Int8"; 1624*b1cdbd2cSJim Jagielski } 1625*b1cdbd2cSJim Jagielski getshortTypeDescription()1626*b1cdbd2cSJim Jagielski public String getshortTypeDescription(){ 1627*b1cdbd2cSJim Jagielski return "sal_Int16"; 1628*b1cdbd2cSJim Jagielski } 1629*b1cdbd2cSJim Jagielski getunsignedshortTypeDescription()1630*b1cdbd2cSJim Jagielski public String getunsignedshortTypeDescription(){ 1631*b1cdbd2cSJim Jagielski return "sal_uInt16"; 1632*b1cdbd2cSJim Jagielski } 1633*b1cdbd2cSJim Jagielski getlongTypeDescription()1634*b1cdbd2cSJim Jagielski public String getlongTypeDescription(){ 1635*b1cdbd2cSJim Jagielski return "sal_Int32"; 1636*b1cdbd2cSJim Jagielski } 1637*b1cdbd2cSJim Jagielski getunsignedlongTypeDescription()1638*b1cdbd2cSJim Jagielski public String getunsignedlongTypeDescription(){ 1639*b1cdbd2cSJim Jagielski return "sal_uInt32"; 1640*b1cdbd2cSJim Jagielski } 1641*b1cdbd2cSJim Jagielski gethyperTypeDescription()1642*b1cdbd2cSJim Jagielski public String gethyperTypeDescription(){ 1643*b1cdbd2cSJim Jagielski return "sal_Int64"; 1644*b1cdbd2cSJim Jagielski } 1645*b1cdbd2cSJim Jagielski getunsignedhyperTypeDescription()1646*b1cdbd2cSJim Jagielski public String getunsignedhyperTypeDescription(){ 1647*b1cdbd2cSJim Jagielski return "sal_uInt64"; 1648*b1cdbd2cSJim Jagielski } 1649*b1cdbd2cSJim Jagielski getfloatTypeDescription()1650*b1cdbd2cSJim Jagielski public String getfloatTypeDescription(){ 1651*b1cdbd2cSJim Jagielski return "float"; 1652*b1cdbd2cSJim Jagielski } 1653*b1cdbd2cSJim Jagielski getdoubleTypeDescription()1654*b1cdbd2cSJim Jagielski public String getdoubleTypeDescription(){ 1655*b1cdbd2cSJim Jagielski return "double"; 1656*b1cdbd2cSJim Jagielski } 1657*b1cdbd2cSJim Jagielski getcharTypeDescription()1658*b1cdbd2cSJim Jagielski public String getcharTypeDescription(){ 1659*b1cdbd2cSJim Jagielski return "sal_Unicode"; 1660*b1cdbd2cSJim Jagielski } 1661*b1cdbd2cSJim Jagielski getstringTypeDescription(boolean _bAsHeaderSourceCode)1662*b1cdbd2cSJim Jagielski public String getstringTypeDescription(boolean _bAsHeaderSourceCode){ 1663*b1cdbd2cSJim Jagielski bIncludeStringHeader = true; 1664*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1665*b1cdbd2cSJim Jagielski return ""; 1666*b1cdbd2cSJim Jagielski } 1667*b1cdbd2cSJim Jagielski else{ 1668*b1cdbd2cSJim Jagielski return "OUString"; 1669*b1cdbd2cSJim Jagielski } 1670*b1cdbd2cSJim Jagielski } 1671*b1cdbd2cSJim Jagielski gettypeTypeDescription(boolean _bAsHeaderSourceCode)1672*b1cdbd2cSJim Jagielski public String gettypeTypeDescription(boolean _bAsHeaderSourceCode){ 1673*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1674*b1cdbd2cSJim Jagielski return "com/sun/star/uno/Type"; 1675*b1cdbd2cSJim Jagielski } 1676*b1cdbd2cSJim Jagielski else{ 1677*b1cdbd2cSJim Jagielski return "Type"; 1678*b1cdbd2cSJim Jagielski } 1679*b1cdbd2cSJim Jagielski } 1680*b1cdbd2cSJim Jagielski getanyTypeDescription(boolean _bAsHeaderSourceCode)1681*b1cdbd2cSJim Jagielski public String getanyTypeDescription(boolean _bAsHeaderSourceCode){ 1682*b1cdbd2cSJim Jagielski if (_bAsHeaderSourceCode){ 1683*b1cdbd2cSJim Jagielski return "com/sun/star/uno/XInterface"; 1684*b1cdbd2cSJim Jagielski } 1685*b1cdbd2cSJim Jagielski else{ 1686*b1cdbd2cSJim Jagielski return "XInterface"; 1687*b1cdbd2cSJim Jagielski } 1688*b1cdbd2cSJim Jagielski } 1689*b1cdbd2cSJim Jagielski 1690*b1cdbd2cSJim Jagielski getVariableDeclaration(String _sTypeString, String _sVariableName, boolean bIsArray, TypeClass _aTypeClass, boolean _bInitialize)1691*b1cdbd2cSJim Jagielski public String getVariableDeclaration(String _sTypeString, String _sVariableName, boolean bIsArray, TypeClass _aTypeClass, boolean _bInitialize){ 1692*b1cdbd2cSJim Jagielski boolean bIsPrimitive = m_oIntrospector.isPrimitive(_aTypeClass); 1693*b1cdbd2cSJim Jagielski 1694*b1cdbd2cSJim Jagielski // uno::Reference< frame::XDispatch > m_xDispatch 1695*b1cdbd2cSJim Jagielski String sReturn = ""; 1696*b1cdbd2cSJim Jagielski if (bIsArray){ 1697*b1cdbd2cSJim Jagielski bIncludeSequenceHeader = true; 1698*b1cdbd2cSJim Jagielski sReturn = getCSSNameSpaceString() + "::uno::Sequence<" + _sTypeString + "> " + _sVariableName; 1699*b1cdbd2cSJim Jagielski } 1700*b1cdbd2cSJim Jagielski else{ 1701*b1cdbd2cSJim Jagielski if (bIsPrimitive){ 1702*b1cdbd2cSJim Jagielski sReturn = _sTypeString + " " + _sVariableName; 1703*b1cdbd2cSJim Jagielski if (_bInitialize){ 1704*b1cdbd2cSJim Jagielski switch (_aTypeClass.getValue()){ 1705*b1cdbd2cSJim Jagielski case TypeClass.BOOLEAN_value: 1706*b1cdbd2cSJim Jagielski sReturn = sReturn + " = false"; 1707*b1cdbd2cSJim Jagielski break; 1708*b1cdbd2cSJim Jagielski case TypeClass.BYTE_value: 1709*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_SHORT_value: 1710*b1cdbd2cSJim Jagielski case TypeClass.SHORT_value: 1711*b1cdbd2cSJim Jagielski case TypeClass.LONG_value: 1712*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_LONG_value: 1713*b1cdbd2cSJim Jagielski case TypeClass.HYPER_value: 1714*b1cdbd2cSJim Jagielski case TypeClass.UNSIGNED_HYPER_value: 1715*b1cdbd2cSJim Jagielski sReturn = sReturn + " = 0"; 1716*b1cdbd2cSJim Jagielski break; 1717*b1cdbd2cSJim Jagielski case TypeClass.DOUBLE_value: 1718*b1cdbd2cSJim Jagielski case TypeClass.FLOAT_value: 1719*b1cdbd2cSJim Jagielski sReturn = sReturn + " = 0.0"; 1720*b1cdbd2cSJim Jagielski break; 1721*b1cdbd2cSJim Jagielski case TypeClass.CHAR_value: 1722*b1cdbd2cSJim Jagielski sReturn = sReturn + "'0'"; 1723*b1cdbd2cSJim Jagielski break; 1724*b1cdbd2cSJim Jagielski case TypeClass.STRING_value: 1725*b1cdbd2cSJim Jagielski sReturn = _sTypeString + " " + _sVariableName; 1726*b1cdbd2cSJim Jagielski break; 1727*b1cdbd2cSJim Jagielski default: 1728*b1cdbd2cSJim Jagielski sReturn = _sTypeString + " " + _sVariableName; 1729*b1cdbd2cSJim Jagielski System.out.println("Type " + _aTypeClass.getValue() + " not yet defined in 'getVariableDeclaration()'"); 1730*b1cdbd2cSJim Jagielski } 1731*b1cdbd2cSJim Jagielski } 1732*b1cdbd2cSJim Jagielski } 1733*b1cdbd2cSJim Jagielski else{ 1734*b1cdbd2cSJim Jagielski sReturn = getCSSNameSpaceString() + "::uno::Reference<" + _sTypeString + "> " +_sVariableName; 1735*b1cdbd2cSJim Jagielski } 1736*b1cdbd2cSJim Jagielski } 1737*b1cdbd2cSJim Jagielski return sReturn; 1738*b1cdbd2cSJim Jagielski } 1739*b1cdbd2cSJim Jagielski getArrayDeclaration(String _sVariableDeclaration)1740*b1cdbd2cSJim Jagielski public String getArrayDeclaration(String _sVariableDeclaration){ 1741*b1cdbd2cSJim Jagielski this.bIncludeSequenceHeader = true; 1742*b1cdbd2cSJim Jagielski String sReturn = ""; 1743*b1cdbd2cSJim Jagielski String[] sDeclarations = _sVariableDeclaration.split(" "); 1744*b1cdbd2cSJim Jagielski if (sDeclarations.length == 2){ 1745*b1cdbd2cSJim Jagielski sReturn = getCSSNameSpaceString() +"::uno::Sequence<" + sDeclarations[1] + ">"; 1746*b1cdbd2cSJim Jagielski } 1747*b1cdbd2cSJim Jagielski return sReturn; 1748*b1cdbd2cSJim Jagielski } 1749*b1cdbd2cSJim Jagielski getCommentSign()1750*b1cdbd2cSJim Jagielski public String getCommentSign(){ 1751*b1cdbd2cSJim Jagielski return "//"; 1752*b1cdbd2cSJim Jagielski } 1753*b1cdbd2cSJim Jagielski 1754*b1cdbd2cSJim Jagielski } 1755*b1cdbd2cSJim Jagielski } 1756