diff --git a/activemq-core/src/gram/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java b/activemq-core/src/gram/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java index ae3251d33d..d1d603e52d 100644 --- a/activemq-core/src/gram/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java +++ b/activemq-core/src/gram/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java @@ -1,4 +1,4 @@ -/** +/* * * Copyright 2005-2006 The Apache Software Foundation * @@ -46,20 +46,37 @@ public abstract class OpenWireCppClassesScript extends OpenWireClassesScript { if (name.equals("String")) { return "p"; } + else if (type.isArrayType()) { + if( name.equals("byte[]") ) + name = "char[]" ; + else if( name.equals("DataStructure[]") ) + name = "IDataStructure[]" ; + + return "ap<" + name.substring(0, name.length()-2) + ">"; + } else if (name.equals("Throwable") || name.equals("Exception")) { - return "BrokerError"; + return "p"; } else if (name.equals("ByteSequence")) { - return "void*"; + return "char*"; } else if (name.equals("boolean")) { return "bool"; } - else if (name.endsWith("Id")) { - return "p<" + name + ">"; + else if (name.equals("long")) { + return "long long"; + } + else if (name.equals("byte")) { + return "char"; + } + else if( name.equals("Command") || name.equals("DataStructure") ) { + return "p" ; + } + else if( !type.isPrimitiveType() ) { + return "p<" + name + ">" ; } else { - return name; + return name ; } } @@ -67,6 +84,6 @@ public abstract class OpenWireCppClassesScript extends OpenWireClassesScript { * Converts the Java type to a C++ default value */ public String toCppDefaultValue(JClass type) { - return "NULL"; + return "0"; } } diff --git a/activemq-core/src/gram/script/GenerateCppHeaders.groovy b/activemq-core/src/gram/script/GenerateCppHeaders.groovy index 8b020b8cd0..4a79bbabfb 100755 --- a/activemq-core/src/gram/script/GenerateCppHeaders.groovy +++ b/activemq-core/src/gram/script/GenerateCppHeaders.groovy @@ -1,121 +1,149 @@ -/** - * - * Copyright 2005-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import org.apache.activemq.openwire.tool.OpenWireCppHeadersScript - -/** - * Generates the C++ commands for the Open Wire Format - * - * @version $Revision$ - */ -class GenerateCppHeaders extends OpenWireCppHeadersScript { - - void generateFile(PrintWriter out) { - out << """/* -* Copyright 2006 The Apache Software Foundation or its licensors, as -* applicable. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -#ifndef ${className}_hpp_ -#define ${className}_hpp_ - -#include - -/* we could cut this down - for now include all possible headers */ -#include "command/BaseCommand.hpp" -#include "command/BrokerId.hpp" -#include "command/ConnectionId.hpp" -#include "command/ConsumerId.hpp" -#include "command/ProducerId.hpp" -#include "command/SessionId.hpp" - -#include "command/${baseClass}.hpp" -#include "util/ifr/p" - -namespace apache -{ - namespace activemq - { - namespace client - { - namespace command - { - using namespace ifr; - using namespace apache::activemq::client; - -/* - * - * Marshalling code for Open Wire Format for ${className} - * - * - * NOTE!: This file is autogenerated - do not modify! - * if you need to make a change, please see the Groovy scripts in the - * activemq-core module - * - */ -class ${className} : public ${baseClass} -{ -private: -""" - for (property in properties) { - def type = toCppType(property.type) - def name = decapitalize(property.simpleName) - out << """ $type $name ; -""" - } - out << """ -public: - const static int TYPE = ${getOpenWireOpCode(jclass)}; - -public: - ${className}() ; - virtual ~${className}() ; - -""" - for (property in properties) { - def type = toCppType(property.type) - def propertyName = property.simpleName - def parameterName = decapitalize(propertyName) - out << """ - virtual ${type} get${propertyName}() ; - virtual void set${propertyName}(${type} ${parameterName}) ; -""" - } - out << """ - -} ; - -/* namespace */ - } - } - } -} - -#endif /*${className}_hpp_*/ -""" - } +/** + * + * Copyright 2005-2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import org.apache.activemq.openwire.tool.OpenWireCppHeadersScript + +/** + * Generates the C++ commands for the Open Wire Format + * + * @version $Revision$ + */ +class GenerateCppHeaders extends OpenWireCppHeadersScript { + + void generateFile(PrintWriter out) { + out << """/* +* Copyright 2006 The Apache Software Foundation or its licensors, as +* applicable. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +#ifndef ${className}_hpp_ +#define ${className}_hpp_ + +#include +""" +if( baseClass.equals("BrokerError") ) + out << """#include "${baseClass}.hpp" +""" +else + out << """#include "command/${baseClass}.hpp" + +""" +for (property in properties) +{ + if( !property.type.isPrimitiveType() && + property.type.simpleName != "String" && + property.type.simpleName != "ByteSequence" ) + { + def includeName = toCppType(property.type) + if( property.type.isArrayType() ) + { + def arrayType = property.type.arrayComponentType ; + if( arrayType.isPrimitiveType() ) + continue ; + } + if( includeName.startsWith("ap<") ) + includeName = includeName.substring(3, includeName.length()-1) ; + else if( includeName.startsWith("p<") ) + includeName = includeName.substring(2, includeName.length()-1) + + if( includeName.equals("BrokerError") ) + out << """#include "${includeName}.hpp" +""" + else + out << """#include "command/${includeName}.hpp" +""" + } +} +out << """ +#include "util/ifr/ap" +#include "util/ifr/p" + +namespace apache +{ + namespace activemq + { + namespace client + { + namespace command + { + using namespace ifr; + using namespace std; + using namespace apache::activemq::client; + +/* + * + * Marshalling code for Open Wire Format for ${className} + * + * + * NOTE!: This file is autogenerated - do not modify! + * if you need to make a change, please see the Groovy scripts in the + * activemq-core module + * + */ +class ${className} : public ${baseClass} +{ +private: +""" + for (property in properties) { + def type = toCppType(property.type) + def name = decapitalize(property.simpleName) + out << """ $type $name ; +""" + } + out << """ +public: + const static int TYPE = ${getOpenWireOpCode(jclass)}; + +public: + ${className}() ; + virtual ~${className}() ; + + virtual int getCommandType() ; +""" + for (property in properties) { + def type = toCppType(property.type) + def propertyName = property.simpleName + def parameterName = decapitalize(propertyName) + out << """ + virtual ${type} get${propertyName}() ; + virtual void set${propertyName}(${type} ${parameterName}) ; +""" + } + out << """ + +} ; + +/* namespace */ + } + } + } +} + +#endif /*${className}_hpp_*/ +""" + } } \ No newline at end of file