summaryrefslogtreecommitdiff
path: root/qpid/cpp/gentools
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-07-19 08:27:36 +0000
committerGordon Sim <gsim@apache.org>2007-07-19 08:27:36 +0000
commit1f4463ff0c56261e2ee7f5a163ba2ba8ced80793 (patch)
treec57b784be11c1eb3e203f433b81660d4cc339eb5 /qpid/cpp/gentools
parent3f8fc92fbc2303d3a97b04e65a18d25f1d6cc7e8 (diff)
downloadqpid-python-1f4463ff0c56261e2ee7f5a163ba2ba8ced80793.tar.gz
removed the need to pass MethodContext/RequestId through proxy and handler/adapter interfaces
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@557522 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/gentools')
-rw-r--r--qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpClass.java3
-rw-r--r--qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpMethod.java1
-rw-r--r--qpid/cpp/gentools/src/org/apache/qpid/gentools/CppGenerator.java43
-rw-r--r--qpid/cpp/gentools/src/org/apache/qpid/gentools/Utils.java7
4 files changed, 45 insertions, 9 deletions
diff --git a/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpClass.java b/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpClass.java
index 2e8bdaf971..1bc9dc456a 100644
--- a/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpClass.java
+++ b/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpClass.java
@@ -93,6 +93,9 @@ public class AmqpClass implements Printable, NodeAware
thisMethod = new AmqpMethod(methodName, converter);
methodMap.put(methodName, thisMethod);
}
+ int content = Utils.getNamedIntegerAttribute(child, Utils.ATTRIBUTE_CONTENT, 0);
+ thisMethod.content = (content == 1);
+
if (!thisMethod.addFromNode(child, 0, version))
{
String className = converter.prepareClassName(Utils.getNamedAttribute(classNode,
diff --git a/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpMethod.java b/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpMethod.java
index f3c5bdd935..e78eec112f 100644
--- a/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpMethod.java
+++ b/qpid/cpp/gentools/src/org/apache/qpid/gentools/AmqpMethod.java
@@ -36,6 +36,7 @@ public class AmqpMethod implements Printable, NodeAware, VersionConsistencyCheck
public AmqpFlagMap clientMethodFlagMap; // Method called on client (<chassis name="server"> in XML)
public AmqpFlagMap serverMethodFlagMap; // Method called on server (<chassis name="client"> in XML)
public AmqpFlagMap isResponseFlagMap;
+ public boolean content;
public AmqpMethod(String name, LanguageConverter converter)
{
diff --git a/qpid/cpp/gentools/src/org/apache/qpid/gentools/CppGenerator.java b/qpid/cpp/gentools/src/org/apache/qpid/gentools/CppGenerator.java
index 26b189a1ff..edcf9e09e3 100644
--- a/qpid/cpp/gentools/src/org/apache/qpid/gentools/CppGenerator.java
+++ b/qpid/cpp/gentools/src/org/apache/qpid/gentools/CppGenerator.java
@@ -763,14 +763,23 @@ public class CppGenerator extends Generator
AmqpVersionSet versionSet = overloadededParameterMap.get(thisFieldMap);
if (!first) sb.append(cr);
sb.append(indent + "virtual "+returnType+" "+ methodName + "(");
- if (abstractMethodFlag) sb.append("const MethodContext& context");
- boolean leadingComma = abstractMethodFlag;
- int paramIndent = indentSize + (5*tabSize);
- sb.append(generateMethodParameterList(thisFieldMap, paramIndent, leadingComma, true, true));
+
+ if (abstractMethodFlag && isSpecialCase(thisClass.name, method.name)) {
+ sb.append("const MethodContext& context");
+ } else {
+ sb.append(generateMethodParameterList(thisFieldMap, indentSize + (5*tabSize), false, true, true));
+ }
+
+ //if (abstractMethodFlag) sb.append("const MethodContext& context");
+ //boolean leadingComma = abstractMethodFlag;
+ //int paramIndent = indentSize + (5*tabSize);
+ // sb.append(generateMethodParameterList(thisFieldMap, paramIndent, leadingComma, true, true));
+ /*
if (!abstractMethodFlag && method.isResponse(null)) {
if (!thisFieldMap.isEmpty()) sb.append(", \n"+Utils.createSpaces(paramIndent));
sb.append(" RequestId responseTo");
}
+ */
sb.append(" )");
if (abstractMethodFlag)
sb.append(" = 0");
@@ -888,6 +897,7 @@ public class CppGenerator extends Generator
sb.append(indent + "{" + cr);
sb.append(indent + "private:" + cr);
sb.append(indent + tab + "ChannelAdapter& channel;" + cr);
+ sb.append(indent + tab + "RequestId responseTo;" + cr);
sb.append(cr);
sb.append(indent + "public:" + cr);
sb.append(indent + tab + "// Constructors and destructors" + cr);
@@ -897,6 +907,9 @@ public class CppGenerator extends Generator
sb.append(indent + tab + "virtual ~" + className + "() {}" + cr);
sb.append(cr);
sb.append(indent + tab + "static "+className+"& get(" + proxyOuterClassName(serverFlag)+"& proxy) { return proxy.get"+className+"();}\n\n");
+ sb.append(indent + tab + "// set for response correlation" + cr);
+ sb.append(indent + tab + "void setResponseTo(RequestId r) { responseTo = r; }" + cr);
+ sb.append(cr);
sb.append(indent + tab + "// Protocol methods" + cr);
sb.append(cr);
sb.append(generateInnerClassMethods(thisClass, serverFlag, false, indentSize + tabSize, tabSize));
@@ -1004,8 +1017,10 @@ public class CppGenerator extends Generator
methodName + "(");
sb.append(generateMethodParameterList(thisFieldMap, indentSize + (5*tabSize), false, true, true));
if (method.isResponse(null)) {
+ /*
if (!thisFieldMap.isEmpty()) sb.append(", ");
- sb.append("RequestId responseTo");
+ sb.append("RequestId responseTo");
+ */
}
sb.append(")");
if (versionSet.size() != globalVersionSet.size())
@@ -1457,6 +1472,7 @@ public class CppGenerator extends Generator
String indent = Utils.createSpaces(indentSize);
String tab = Utils.createSpaces(tabSize);
StringBuffer sb = new StringBuffer();
+ boolean special = isSpecialCase(thisClass.name, method.name);
if (method.serverMethodFlagMap.size() > 0) // At least one AMQP version defines this method as a server method
{
@@ -1466,14 +1482,18 @@ public class CppGenerator extends Generator
if (bItr.next()) // This is a server operation
{
boolean fieldMapNotEmptyFlag = method.fieldMap.size() > 0;
- sb.append(indent + "void invoke(AMQP_ServerOperations& target, const MethodContext& context)" + cr);
+ sb.append(indent + "void invoke(AMQP_ServerOperations& target, const MethodContext&"
+ + (special ? " context)" : " )") + cr);
sb.append(indent + "{" + cr);
sb.append(indent + tab + "target.get" + thisClass.name + "Handler()->" +
parseForReservedWords(Utils.firstLower(method.name),
- thisClass.name + Utils.firstUpper(method.name) + "Body.invoke()") + "(context");
- if (fieldMapNotEmptyFlag)
+ thisClass.name + Utils.firstUpper(method.name) + "Body.invoke()") + "(");
+ if (special)
+ {
+ sb.append("context");
+ }
+ else if (fieldMapNotEmptyFlag)
{
- sb.append("," + cr);
sb.append(generateFieldList(method.fieldMap, version, false, false, indentSize + 4*tabSize));
sb.append(indent + tab + tab + tab + tab);
}
@@ -1632,4 +1652,9 @@ public class CppGenerator extends Generator
}
return ccn.toString();
}
+
+ private boolean isSpecialCase(String className, String methodName)
+ {
+ return "message".equalsIgnoreCase(className) && ("transfer".equalsIgnoreCase(methodName) || "append".equalsIgnoreCase(methodName));
+ }
}
diff --git a/qpid/cpp/gentools/src/org/apache/qpid/gentools/Utils.java b/qpid/cpp/gentools/src/org/apache/qpid/gentools/Utils.java
index ade00cd8c7..e1c4661acf 100644
--- a/qpid/cpp/gentools/src/org/apache/qpid/gentools/Utils.java
+++ b/qpid/cpp/gentools/src/org/apache/qpid/gentools/Utils.java
@@ -70,6 +70,13 @@ public class Utils
{
return Integer.parseInt(getNamedAttribute(n, attrName));
}
+
+ public static int getNamedIntegerAttribute(Node node, String name, int defaultValue) throws AmqpParseException
+ {
+ NamedNodeMap attributes = node.getAttributes();
+ Attr a = attributes == null ? null : (Attr) attributes.getNamedItem(name);
+ return a == null ? defaultValue : Integer.parseInt(a.getNodeValue());
+ }
// Element functions