diff options
| -rw-r--r-- | gentools/org/apache/qpid/gentools/CppGenerator.java | 227 | ||||
| -rw-r--r-- | gentools/org/apache/qpid/gentools/Generator.java | 3 | ||||
| -rw-r--r-- | gentools/org/apache/qpid/gentools/JavaGenerator.java | 92 | ||||
| -rw-r--r-- | gentools/org/apache/qpid/gentools/Main.java | 2 | ||||
| -rw-r--r-- | gentools/templ.cpp/AMQP_Constants.h.tmpl | 4 | ||||
| -rw-r--r-- | gentools/templ.cpp/AMQP_ServerOperations.h.tmpl | 15 | ||||
| -rw-r--r-- | gentools/templ.cpp/MethodBodyClass.h.tmpl | 13 |
7 files changed, 180 insertions, 176 deletions
diff --git a/gentools/org/apache/qpid/gentools/CppGenerator.java b/gentools/org/apache/qpid/gentools/CppGenerator.java index 3dd07b4c69..27db34418e 100644 --- a/gentools/org/apache/qpid/gentools/CppGenerator.java +++ b/gentools/org/apache/qpid/gentools/CppGenerator.java @@ -29,7 +29,6 @@ import java.util.TreeMap; public class CppGenerator extends Generator { - protected static final String cr = Utils.lineSeparator; protected static final String versionNamespaceStartToken = "${version_namespace_start}"; protected static final String versionNamespaceEndToken = "${version_namespace_end}"; protected static final int FIELD_NAME = 0; @@ -40,7 +39,7 @@ public class CppGenerator extends Generator "enum", "explicit", "extern", "false", "float", "for", "friend", "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "not", "not_eq", "operator", "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast", "return", "short", - "signed", "sizeof", "static", "static_cast", "struct", "switch", "template", "this", + "signed", "sizeof", "static", "static_cast", "string", "struct", "switch", "template", "this", "throw", "true", "try", "typedef", "typeid", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq"}; @@ -78,12 +77,12 @@ public class CppGenerator extends Generator "u_int32_t", // type "4", // size "buffer.putLong(#)", // encodeExpression - "buffer.getLong(#)")); // decodeExpression + "# = buffer.getLong()")); // decodeExpression typeMap.put("longlong", new DomainInfo( "u_int64_t", // type "8", // size "buffer.putLongLong(#)", // encodeExpression - "buffer.getLongLong(#)")); // decodeExpression + "# = buffer.getLongLong()")); // decodeExpression typeMap.put("longstr", new DomainInfo( "string", // type "4 + #.length()", // size @@ -93,12 +92,12 @@ public class CppGenerator extends Generator "u_int8_t", // type "1", // size "buffer.putOctet(#)", // encodeExpression - "buffer.getOctet(#)")); // decodeExpression + "# = buffer.getOctet()")); // decodeExpression typeMap.put("short", new DomainInfo( "u_int16_t", // type "2", // size "buffer.putShort(#)", // encodeExpression - "buffer.getShort(#)")); // decodeExpression + "# = buffer.getShort()")); // decodeExpression typeMap.put("shortstr", new DomainInfo( "string", // type "1 + #.length()", // size @@ -473,11 +472,7 @@ public class CppGenerator extends Generator String token = tline.substring(tokxStart).trim(); sb.delete(listMarkerStartIndex, lend); - if (token.compareTo("${ch_static_const_decl}") == 0) - { - codeSnippet = generateConstantDeclarations(constantSet, 4, 4); - } - else if (token.compareTo("${ch_get_value_method}") == 0) + if (token.compareTo("${ch_get_value_method}") == 0) { codeSnippet = generateConstantGetMethods(constantSet, 4, 4); } @@ -493,30 +488,11 @@ public class CppGenerator extends Generator // Methods for generation of code snippets for AMQP_Constants.h file - protected String generateConstantDeclarations(AmqpConstantSet constantSet, - int indentSize, int tabSize) - { - String indent = Utils.createSpaces(indentSize); - String tab = Utils.createSpaces(tabSize); - StringBuffer sb = new StringBuffer(); - Iterator<AmqpConstant> cItr = constantSet.iterator(); - while (cItr.hasNext()) - { - AmqpConstant constant = cItr.next(); - // Do nothing if version is consistent across all versions - if (!constant.isVersionConsistent(globalVersionSet)) - { - - } - } - return sb.toString(); - } - protected String generateConstantGetMethods(AmqpConstantSet constantSet, int indentSize, int tabSize) + throws AmqpTypeMappingException { String indent = Utils.createSpaces(indentSize); - String tab = Utils.createSpaces(tabSize); StringBuffer sb = new StringBuffer(); Iterator<AmqpConstant> cItr = constantSet.iterator(); while (cItr.hasNext()) @@ -526,29 +502,98 @@ public class CppGenerator extends Generator { // return a constant String value = constant.firstKey(); - sb.append(indent + "public const char* " + constant.name + "() const { return \"" + + sb.append(indent + "static const char* " + constant.name + "() { return \"" + constant.firstKey() + "\"; }" + cr); - sb.append(indent + "public const string& " + constant.name + "AsString() const { return new string(\"" + - constant.firstKey() + "\"); }" + cr); +// sb.append(indent + "std::string " + constant.name + "Str(\"" + +// constant.firstKey() + "\");" + cr); +// sb.append(indent + "static const std::string& " + constant.name + "AsString() { return " + +// constant.name + "Str; }" + cr); if (Utils.containsOnlyDigits(value)) { - sb.append(indent + "public int " + constant.name + "AsInt() const { return " + + sb.append(indent + "static int " + constant.name + "AsInt() { return " + constant.firstKey() + "; }" + cr); } if (Utils.containsOnlyDigitsAndDecimal(value)) { - sb.append(indent + "public double " + constant.name + "AsDouble() const { return (double)" + + sb.append(indent + "static double " + constant.name + "AsDouble() { return (double)" + constant.firstKey() + "; }" + cr); } sb.append(cr); } else { - // return value from version map + // Return version-specific constant + sb.append(generateVersionDependentGet(constant, "const char*", "", "\"", "\"", indentSize, tabSize)); +// sb.append(generateVersionDependentGet(constant, "const string&", "AsString", "string(\"", "\")", indentSize, tabSize)); + sb.append(generateVersionDependentGet(constant, "int", "AsInt", "", "", indentSize, tabSize)); + sb.append(generateVersionDependentGet(constant, "double", "AsDouble", "(double)", "", indentSize, tabSize)); + sb.append(cr); } } return sb.toString(); } + + protected String generateVersionDependentGet(AmqpConstant constant, String methodReturnType, + String methodNameSuffix, String returnPrefix, String returnPostfix, int indentSize, int tabSize) + throws AmqpTypeMappingException + { + String indent = Utils.createSpaces(indentSize); + String tab = Utils.createSpaces(tabSize); + StringBuffer sb = new StringBuffer(); + sb.append(indent + methodReturnType + " " + constant.name + methodNameSuffix + + "() const" + cr); + sb.append(indent + "{" + cr); + boolean first = true; + Iterator<String> sItr = constant.keySet().iterator(); + while (sItr.hasNext()) + { + String value = sItr.next(); + AmqpVersionSet versionSet = constant.get(value); + sb.append(indent + tab + (first ? "" : "else ") + "if (" + generateVersionCheck(versionSet) + + ")" + cr); + sb.append(indent + tab + "{" + cr); + if (methodReturnType.compareTo("int") == 0 && !Utils.containsOnlyDigits(value)) + { + sb.append(generateConstantDeclarationException(constant.name, methodReturnType, + indentSize + (2*tabSize), tabSize)); + } + else if (methodReturnType.compareTo("double") == 0 && !Utils.containsOnlyDigitsAndDecimal(value)) + { + sb.append(generateConstantDeclarationException(constant.name, methodReturnType, + indentSize + (2*tabSize), tabSize)); + } + else + { + sb.append(indent + tab + tab + "return " + returnPrefix + value + returnPostfix + ";" + cr); + } + sb.append(indent + tab + "}" + cr); + first = false; + } + sb.append(indent + tab + "else" + cr); + sb.append(indent + tab + "{" + cr); + sb.append(indent + tab + tab + "std::stringstream ss;" + cr); + sb.append(indent + tab + tab + "ss << \"Constant \\\"" + constant.name + + "\\\" is undefined for AMQP version \" <<" + cr); + sb.append(indent + tab + tab + tab + "version.toString() << \".\";" + cr); + sb.append(indent + tab + tab + "throw ProtocolVersionException(ss.str());" + cr); + sb.append(indent + tab + "}" + cr); + sb.append(indent + "}" + cr); + return sb.toString(); + } + + protected String generateConstantDeclarationException(String name, String methodReturnType, + int indentSize, int tabSize) + { + String indent = Utils.createSpaces(indentSize); + String tab = Utils.createSpaces(tabSize); + StringBuffer sb = new StringBuffer(); + sb.append(indent + "std::stringstream ss;" + cr); + sb.append(indent + "ss << \"Constant \\\"" + name + "\\\" cannot be converted to type " + + methodReturnType + " for AMQP version \" <<" + cr); + sb.append(indent + tab + "version.toString() << \".\";" + cr); + sb.append(indent + "throw ProtocolVersionException(ss.str());" + cr); + return sb.toString(); + } // Methods used for generation of code snippets for Server/ClientOperations class generation @@ -628,6 +673,7 @@ public class CppGenerator extends Generator { String indent = Utils.createSpaces(indentSize); StringBuffer sb = new StringBuffer(); + String outerClassName = "AMQP_" + (serverFlag ? "Server" : "Client") + (abstractMethodFlag ? "Operations" : "Proxy"); boolean first = true; Iterator<String> mItr = thisClass.methodMap.keySet().iterator(); while (mItr.hasNext()) @@ -637,7 +683,7 @@ public class CppGenerator extends Generator boolean serverChassisFlag = method.serverMethodFlagMap.isSet(); if ((serverFlag && serverChassisFlag) || (!serverFlag && clientChassisFlag)) { - String methodName = parseForReservedWords(method.name, thisClass.name); + String methodName = parseForReservedWords(method.name, outerClassName + "." + thisClass.name); AmqpOverloadedParameterMap overloadededParameterMap = method.getOverloadedParameterLists(thisClass.versionSet, this); Iterator<AmqpOrdinalFieldMap> ofmItr = overloadededParameterMap.keySet().iterator(); @@ -670,11 +716,12 @@ public class CppGenerator extends Generator { String indent = Utils.createSpaces(indentSize); StringBuffer sb = new StringBuffer(); + String outerClassName = "AMQP_" + (serverFlag ? "Server" : "Client") + "Proxy"; Iterator<String> cItr = model.classMap.keySet().iterator(); while (cItr.hasNext()) { AmqpClass thisClass = model.classMap.get(cItr.next()); - String instanceName = parseForReservedWords(Utils.firstLower(thisClass.name), null); + String instanceName = parseForReservedWords(Utils.firstLower(thisClass.name), outerClassName); String className = parseForReservedWords(thisClass.name, null); sb.append(indent + instanceName + " " + className + ";"); if (thisClass.versionSet.size() != globalVersionSet.size()) @@ -690,11 +737,12 @@ public class CppGenerator extends Generator { String indent = Utils.createSpaces(indentSize); StringBuffer sb = new StringBuffer(); + String outerClassName = "AMQP_" + (serverFlag ? "Server" : "Client") + "Proxy"; Iterator<String> cItr = model.classMap.keySet().iterator(); while (cItr.hasNext()) { AmqpClass thisClass = model.classMap.get(cItr.next()); - String className = parseForReservedWords(thisClass.name, null); + String className = parseForReservedWords(thisClass.name, outerClassName); sb.append(indent + className + "& get" + className + "();"); if (thisClass.versionSet.size() != globalVersionSet.size()) sb.append(" // AMQP Version(s) " + thisClass.versionSet + cr); @@ -756,13 +804,14 @@ public class CppGenerator extends Generator { String indent = Utils.createSpaces(indentSize); StringBuffer sb = new StringBuffer(indent + "out(out)," + cr); + String outerClassName = "AMQP_" + (serverFlag ? "Server" : "Client") + "Proxy"; sb.append(indent + "major(major)," + cr); sb.append(indent + "minor(minor)"); Iterator<String> cItr = model.classMap.keySet().iterator(); while (cItr.hasNext()) { AmqpClass thisClass = model.classMap.get(cItr.next()); - String instanceName = parseForReservedWords(Utils.firstLower(thisClass.name), null); + String instanceName = parseForReservedWords(Utils.firstLower(thisClass.name), outerClassName); sb.append("," + cr); sb.append(indent + instanceName + "(out)"); if (!cItr.hasNext()) @@ -784,7 +833,7 @@ public class CppGenerator extends Generator { AmqpClass thisClass = model.classMap.get(cItr.next()); String className = thisClass.name; - String instanceName = parseForReservedWords(Utils.firstLower(thisClass.name), null); + String instanceName = parseForReservedWords(Utils.firstLower(thisClass.name), outerClassName); sb.append(indent + outerClassName + "::" + className + "& " + outerClassName + "::get" + className + "()" + cr); sb.append(indent + "{" + cr); @@ -840,7 +889,7 @@ public class CppGenerator extends Generator boolean serverChassisFlag = method.serverMethodFlagMap.isSet(); if ((serverFlag && serverChassisFlag) || (!serverFlag && clientChassisFlag)) { - String methodName = parseForReservedWords(method.name, thisClass.name); + String methodName = parseForReservedWords(method.name, outerclassName + "." + thisClass.name); AmqpOverloadedParameterMap overloadededParameterMap = method.getOverloadedParameterLists(thisClass.versionSet, this); Iterator<AmqpOrdinalFieldMap> ofmItr = overloadededParameterMap.keySet().iterator(); @@ -944,31 +993,42 @@ public class CppGenerator extends Generator { String indent = Utils.createSpaces(indentSize); StringBuffer sb = new StringBuffer(); - Iterator<String> fItr = fieldMap.keySet().iterator(); - while(fItr.hasNext()) - { - AmqpField fieldDetails = fieldMap.get(fItr.next()); - if (version == null) // Version consistent - there *should* be only one domain - { - String domainName = fieldDetails.domainMap.firstKey(); - String codeType = getGeneratedType(domainName, globalVersionSet.first()); - sb.append(indent + codeType + " " + fieldDetails.name + ";" + cr); - } - else - { - Iterator<String> dItr = fieldDetails.domainMap.keySet().iterator(); - while (dItr.hasNext()) - { - String domainName = dItr.next(); - AmqpVersionSet versionSet = fieldDetails.domainMap.get(domainName); - if (versionSet.contains(version)) - { - String codeType = getGeneratedType(domainName, version); - sb.append(indent + codeType + " " + fieldDetails.name + ";" + cr); - } - } - } - } + + if (version == null) + version = globalVersionSet.first(); + AmqpOrdinalFieldMap ordinalFieldMap = fieldMap.getMapForVersion(version, true, this); + Iterator<Integer> oItr = ordinalFieldMap.keySet().iterator(); + while (oItr.hasNext()) + { + String[] fieldDomainPair = ordinalFieldMap.get(oItr.next()); + sb.append(indent + fieldDomainPair[FIELD_DOMAIN] + " " + fieldDomainPair[FIELD_NAME] + ";" + cr); + } + +// Iterator<String> fItr = fieldMap.keySet().iterator(); +// while(fItr.hasNext()) +// { +// AmqpField fieldDetails = fieldMap.get(fItr.next()); +// if (version == null) // Version consistent - there *should* be only one domain +// { +// String domainName = fieldDetails.domainMap.firstKey(); +// String codeType = getGeneratedType(domainName, globalVersionSet.first()); +// sb.append(indent + codeType + " " + fieldDetails.name + ";" + cr); +// } +// else +// { +// Iterator<String> dItr = fieldDetails.domainMap.keySet().iterator(); +// while (dItr.hasNext()) +// { +// String domainName = dItr.next(); +// AmqpVersionSet versionSet = fieldDetails.domainMap.get(domainName); +// if (versionSet.contains(version)) +// { +// String codeType = getGeneratedType(domainName, version); +// sb.append(indent + codeType + " " + fieldDetails.name + ";" + cr); +// } +// } +// } +// } return sb.toString(); } @@ -1139,8 +1199,8 @@ public class CppGenerator extends Generator int numBytes = ((bitFieldList.size() - 1) / 8) + 1; String indent = Utils.createSpaces(indentSize); String bitArrayName = "flags_" + ordinal; - StringBuffer sb = new StringBuffer(indent + "u_int8_t[" + numBytes + "] " + - bitArrayName + " = {0};" + + StringBuffer sb = new StringBuffer(indent + "u_int8_t " + bitArrayName + + "[" + numBytes + "] = {0};" + (numBytes != 1 ? " /* All array elements will be initialized to 0 */" : "") + cr); for (int i=0; i<bitFieldList.size(); i++) @@ -1207,11 +1267,11 @@ public class CppGenerator extends Generator int numBytes = ((bitFieldList.size() - 1) / 8) + 1; String indent = Utils.createSpaces(indentSize); String bitArrayName = "flags_" + ordinal; - StringBuffer sb = new StringBuffer(indent + "u_int8_t[" + numBytes + "] " + - bitArrayName + ";" + cr); + StringBuffer sb = new StringBuffer(indent + "u_int8_t " + bitArrayName + + "[" + numBytes + "];" + cr); for (int i=0; i<numBytes; i++) { - sb.append(indent + "buffer.getOctet(" + bitArrayName + "[" + i + "]);" + cr); + sb.append(indent + bitArrayName + "[" + i + "] = buffer.getOctet();" + cr); } for (int i=0; i<bitFieldList.size(); i++) { @@ -1233,10 +1293,9 @@ public class CppGenerator extends Generator StringBuffer sb = new StringBuffer(); AmqpOrdinalFieldMap ordinalFieldMap = fieldMap.getMapForVersion(version, true, this); Iterator<Integer> oItr = ordinalFieldMap.keySet().iterator(); - int ordinal = 0; while (oItr.hasNext()) { - ordinal = oItr.next(); + int ordinal = oItr.next(); String[] fieldDomainPair = ordinalFieldMap.get(ordinal); sb.append(indent + (defineFlag ? fieldDomainPair[FIELD_DOMAIN] + " " : "") + fieldDomainPair[FIELD_NAME] + (initializerFlag ? "(" + fieldDomainPair[FIELD_NAME] + ")" : "") + @@ -1296,24 +1355,14 @@ public class CppGenerator extends Generator return sb.toString(); } - private String parseForReservedWords(String name, String className) + private String parseForReservedWords(String name, String context) { for (int i=0; i<cppReservedWords.length; i++) if (name.compareTo(cppReservedWords[i]) == 0) { - if (className == null) - { - System.out.println("WARNING: Found name \"" + name + - "\", which is a C/C++ reserved word. " + - "Changing generated name to \"" + name + "_\"."); - } - else - { - System.out.println("WARNING: Found method \"" + name + - "\" in class \"" + className + - "\", which is a C/C++ reserved word. " + - "Changing generated method name to \"" + name + "_\"."); - } + System.out.println("WARNING: " + (context == null ? "" : context + ": ") + + "Found XML method \"" + name + "\", which is a C++ reserved word. " + + "Changing generated name to \"" + name + "_\"."); return name + "_"; } return name; diff --git a/gentools/org/apache/qpid/gentools/Generator.java b/gentools/org/apache/qpid/gentools/Generator.java index 1b9c6a9f04..75b980cc7b 100644 --- a/gentools/org/apache/qpid/gentools/Generator.java +++ b/gentools/org/apache/qpid/gentools/Generator.java @@ -32,6 +32,9 @@ import java.util.Iterator; public abstract class Generator implements LanguageConverter { + protected static String cr = Utils.lineSeparator; + protected static enum EnumConstOutputTypes { OUTPUT_STRING, OUTPUT_INTEGER, OUTPUT_DOUBLE; }; + // This string is reproduced in every generated file as a comment // TODO: Tie the version info into the build system. protected static final String generatorInfo = "Qpid Gentools v.0.1"; diff --git a/gentools/org/apache/qpid/gentools/JavaGenerator.java b/gentools/org/apache/qpid/gentools/JavaGenerator.java index b6a4de172e..177c6f6546 100644 --- a/gentools/org/apache/qpid/gentools/JavaGenerator.java +++ b/gentools/org/apache/qpid/gentools/JavaGenerator.java @@ -30,9 +30,6 @@ import java.util.TreeMap; public class JavaGenerator extends Generator { - private static String cr = Utils.lineSeparator; - private enum OutputTypes { OUTPUT_STRING, OUTPUT_INTEGER, OUTPUT_DOUBLE; }; - private class DomainInfo { public String type; @@ -818,36 +815,26 @@ public class JavaGenerator extends Generator } else { - // return value from version map - sb.append(generateVersionDependentGet(constant, OutputTypes.OUTPUT_STRING, indentSize, tabSize)); - sb.append(generateVersionDependentGet(constant, OutputTypes.OUTPUT_INTEGER, indentSize, tabSize)); - sb.append(generateVersionDependentGet(constant, OutputTypes.OUTPUT_DOUBLE, indentSize, tabSize)); + // Return version-specific constant + sb.append(generateVersionDependentGet(constant, "String", "", "\"", "\"", indentSize, tabSize)); + sb.append(generateVersionDependentGet(constant, "int", "AsInt", "", "", indentSize, tabSize)); + sb.append(generateVersionDependentGet(constant, "double", "AsDouble", "(double)", "", indentSize, tabSize)); sb.append(cr); } } return sb.toString(); } - protected String generateVersionDependentGet(AmqpConstant constant, OutputTypes outType, int indentSize, int tabSize) + protected String generateVersionDependentGet(AmqpConstant constant, + String methodReturnType, String methodNameSuffix, String returnPrefix, String returnPostfix, + int indentSize, int tabSize) throws AmqpTypeMappingException { String indent = Utils.createSpaces(indentSize); String tab = Utils.createSpaces(tabSize); StringBuffer sb = new StringBuffer(); - String methodNameSuffix = ""; - String methodReturnType = "String"; - if (outType == OutputTypes.OUTPUT_INTEGER) - { - methodNameSuffix = "AsInt"; - methodReturnType = "int"; - } - else if (outType == OutputTypes.OUTPUT_DOUBLE) - { - methodNameSuffix = "AsDouble"; - methodReturnType = "double"; - } sb.append(indent + "public static " + methodReturnType + " " + constant.name + - methodNameSuffix + "(byte major, byte minor) throws AMQProtocolVersionException" + cr); + methodNameSuffix + "(byte major, byte minor) throws AMQProtocolVersionException" + cr); sb.append(indent + "{" + cr); boolean first = true; Iterator<String> sItr = constant.keySet().iterator(); @@ -855,36 +842,22 @@ public class JavaGenerator extends Generator { String value = sItr.next(); AmqpVersionSet versionSet = constant.get(value); - sb.append(indent + tab + (first ? "" : "else ") + "if (" + - generateVersionCheck(versionSet) + ")" + cr); + sb.append(indent + tab + (first ? "" : "else ") + "if (" + generateVersionCheck(versionSet) + + ")" + cr); sb.append(indent + tab + "{" + cr); - if (outType == OutputTypes.OUTPUT_STRING) + if (methodReturnType.compareTo("int") == 0 && !Utils.containsOnlyDigits(value)) { - sb.append(indent + tab + tab + "return \"" + value + "\";" + cr); + sb.append(generateConstantDeclarationException(constant.name, methodReturnType, + indentSize + (2*tabSize), tabSize)); } - else if (outType == OutputTypes.OUTPUT_INTEGER) + else if (methodReturnType.compareTo("double") == 0 && !Utils.containsOnlyDigitsAndDecimal(value)) { - if (Utils.containsOnlyDigits(value)) - { - sb.append(indent + tab + tab + "return " + value + ";" + cr); - } - else - { - sb.append(generateConstantDeclarationException(constant.name, outType, - indentSize + (2*tabSize), tabSize)); - } + sb.append(generateConstantDeclarationException(constant.name, methodReturnType, + indentSize + (2*tabSize), tabSize)); } - else if (outType == OutputTypes.OUTPUT_DOUBLE) + else { - if (Utils.containsOnlyDigitsAndDecimal(value)) - { - sb.append(indent + tab + tab + "return (double)" + value + ";" + cr); - } - else - { - sb.append(generateConstantDeclarationException(constant.name, outType, - indentSize + (2*tabSize), tabSize)); - } + sb.append(indent + tab + tab + "return " + returnPrefix + value + returnPostfix + ";" + cr); } sb.append(indent + tab + "}" + cr); first = false; @@ -894,37 +867,22 @@ public class JavaGenerator extends Generator sb.append(indent + tab + tab + "throw new AMQProtocolVersionException(\"Constant \\\"" + constant.name + "\\\" \" +" + cr); sb.append(indent + tab + tab + tab + - "\"undefined for AMQP version \" + major + \"-\" + minor + \".\");" + cr); + "\"is undefined for AMQP version \" + major + \"-\" + minor + \".\");" + cr); sb.append(indent + tab + "}" + cr); - sb.append(indent + "}" + cr); + sb.append(indent + "}" + cr); return sb.toString(); } - - protected String generateConstantDeclarationException(String name, OutputTypes outType, + + protected String generateConstantDeclarationException(String name, String methodReturnType, int indentSize, int tabSize) { String indent = Utils.createSpaces(indentSize); String tab = Utils.createSpaces(tabSize); StringBuffer sb = new StringBuffer(); - String typeStr; - switch (outType) - { - case OUTPUT_STRING: - typeStr = "a String"; - break; - case OUTPUT_INTEGER: - typeStr = "an integer"; - break; - case OUTPUT_DOUBLE: - typeStr = "a double"; - break; - default: - typeStr = "*ERROR*"; - } sb.append(indent + "throw new AMQProtocolVersionException(\"Constant \\\"" + - name + "\\\" \" +" + cr); - sb.append(indent + tab + "\"is not " + typeStr + - " type for AMQP version \" + major + \"-\" + minor + \".\");" + cr); + name + "\\\" \" +" + cr); + sb.append(indent + tab + "\"cannot be converted to type " + methodReturnType + + " for AMQP version \" + major + \"-\" + minor + \".\");" + cr); return sb.toString(); } diff --git a/gentools/org/apache/qpid/gentools/Main.java b/gentools/org/apache/qpid/gentools/Main.java index b125bba3a9..7c170f8337 100644 --- a/gentools/org/apache/qpid/gentools/Main.java +++ b/gentools/org/apache/qpid/gentools/Main.java @@ -162,7 +162,7 @@ public class Main // System.out.println(); // System.out.println("*** Debug output ***"); // System.out.println(); - constants.print(System.out, 0, 2); +// constants.print(System.out, 0, 2); // System.out.println(); // versionSet.print(System.out, 0, 2); // System.out.println(); diff --git a/gentools/templ.cpp/AMQP_Constants.h.tmpl b/gentools/templ.cpp/AMQP_Constants.h.tmpl index 87592119ed..c60407b014 100644 --- a/gentools/templ.cpp/AMQP_Constants.h.tmpl +++ b/gentools/templ.cpp/AMQP_Constants.h.tmpl @@ -27,10 +27,6 @@ */ // NOTE: This file is intended to be included within the class structure of both // the client and server operations classes. - - // Constant declarations for constants that change by version - -%{TLIST} ${ch_static_const_decl} // Constant getValue methods diff --git a/gentools/templ.cpp/AMQP_ServerOperations.h.tmpl b/gentools/templ.cpp/AMQP_ServerOperations.h.tmpl index b802cbcdce..eed4d7960f 100644 --- a/gentools/templ.cpp/AMQP_ServerOperations.h.tmpl +++ b/gentools/templ.cpp/AMQP_ServerOperations.h.tmpl @@ -30,6 +30,9 @@ #define _AMQP_ServerOperations_ #include "qpid/framing/FieldTable.h" +#include "qpid/framing/ProtocolVersion.h" +#include "qpid/framing/ProtocolVersionException.h" +#include <sstream> namespace qpid { namespace framing { @@ -47,11 +50,11 @@ public: inline u_int8_t getMajor() const { return version.getMajor(); } inline u_int8_t getMinor() const { return version.getMinor(); } inline const ProtocolVersion& getVersion() const { return version; } - inline isVersion(u_int8_t _major, u_int8_t _minor) const + inline bool isVersion(u_int8_t _major, u_int8_t _minor) const { return version.equals(_major, _minor); } - inline isVersion(ProtocolVersion& _version) const + inline bool isVersion(ProtocolVersion& _version) const { return version.equals(_version); } @@ -59,14 +62,14 @@ public: // Include framing constant declarations #include "AMQP_Constants.h" - // Method handler get methods - -%{CLIST} ${soh_method_handler_get_method} - // Inner classes %{CLIST} ${soh_inner_class} + // Method handler get methods + +%{CLIST} ${soh_method_handler_get_method} + }; /* class AMQP_ServerOperations */ } /* namespace framing */ diff --git a/gentools/templ.cpp/MethodBodyClass.h.tmpl b/gentools/templ.cpp/MethodBodyClass.h.tmpl index f62e24729e..5d68ac4f2d 100644 --- a/gentools/templ.cpp/MethodBodyClass.h.tmpl +++ b/gentools/templ.cpp/MethodBodyClass.h.tmpl @@ -47,16 +47,13 @@ ${version_namespace_start} class ${CLASS}${METHOD}Body : virtual public AMQMethodBody { - const int classId = ${CLASS_ID_INIT}; - const int methodId = ${METHOD_ID_INIT}; - // Method field declarations %{FLIST} ${mb_field_declaration} public: - typedef std::tr1::shared_ptr<${CLASS}${METHOD}Body> shared_ptr; + typedef boost::shared_ptr<${CLASS}${METHOD}Body> shared_ptr; // Constructors and destructors @@ -68,8 +65,6 @@ public: inline ${CLASS}${METHOD}Body() {} - ${CLASS}${METHOD}Body() {} - virtual ~${CLASS}${METHOD}Body() {} // Attribute get methods @@ -86,12 +81,12 @@ public: inline u_int16_t amqpClassId() const { - return classId; + return ${CLASS_ID_INIT}; } inline u_int16_t amqpMethodId() const { - return methodId; + return ${METHOD_ID_INIT}; } inline u_int32_t bodySize() const @@ -113,7 +108,7 @@ public: inline void invoke(AMQP_ServerOperations& target, u_int16_t channel) { - target.getBasicHandler()->consume( + target.getBasicHandler()->publish(channel, %{FLIST} ${mb_field_list} ); } |
