blob: 9099e4eb0b1638bed5d1a8b41cc4b8edb5de2c5d [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.openwire.tool;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import org.codehaus.jam.JClass;
import org.codehaus.jam.JProperty;
/**
*
*/
public class CppHeadersGenerator extends CppClassesGenerator {
protected String getFilePostFix() {
return ".hpp";
}
protected void generateFile(PrintWriter out) {
generateLicence(out);
out.println("#ifndef ActiveMQ_" + className + "_hpp_");
out.println("#define ActiveMQ_" + className + "_hpp_");
out.println("");
out.println("// Turn off warning message for ignored exception specification");
out.println("#ifdef _MSC_VER");
out.println("#pragma warning( disable : 4290 )");
out.println("#endif");
out.println("");
out.println("#include <string>");
out.println("#include \"activemq/command/" + baseClass + ".hpp\"");
List properties = getProperties();
for (Iterator iter = properties.iterator(); iter.hasNext();) {
JProperty property = (JProperty)iter.next();
if (!property.getType().isPrimitiveType() && !property.getType().getSimpleName().equals("String") && !property.getType().getSimpleName().equals("ByteSequence")) {
String includeName = toCppType(property.getType());
if (property.getType().isArrayType()) {
JClass arrayType = property.getType().getArrayComponentType();
if (arrayType.isPrimitiveType()) {
continue;
}
}
if (includeName.startsWith("array<")) {
includeName = includeName.substring(6, includeName.length() - 1);
} else if (includeName.startsWith("p<")) {
includeName = includeName.substring(2, includeName.length() - 1);
}
if (includeName.equals("IDataStructure")) {
out.println("#include \"activemq/" + includeName + ".hpp\"");
} else {
out.println("#include \"activemq/command/" + includeName + ".hpp\"");
}
}
}
out.println("");
out.println("#include \"activemq/protocol/IMarshaller.hpp\"");
out.println("#include \"ppr/io/IOutputStream.hpp\"");
out.println("#include \"ppr/io/IInputStream.hpp\"");
out.println("#include \"ppr/io/IOException.hpp\"");
out.println("#include \"ppr/util/ifr/array\"");
out.println("#include \"ppr/util/ifr/p\"");
out.println("");
out.println("namespace apache");
out.println("{");
out.println(" namespace activemq");
out.println(" {");
out.println(" namespace command");
out.println(" {");
out.println(" using namespace ifr;");
out.println(" using namespace std;");
out.println(" using namespace apache::activemq;");
out.println(" using namespace apache::activemq::protocol;");
out.println(" using namespace apache::ppr::io;");
out.println("");
out.println("/*");
out.println(" *");
out.println(" * Command and marshalling code for OpenWire format for " + className + "");
out.println(" *");
out.println(" *");
out.println(" * NOTE!: This file is autogenerated - do not modify!");
out.println(" * if you need to make a change, please see the Groovy scripts in the");
out.println(" * activemq-core module");
out.println(" *");
out.println(" */");
out.println("class " + className + " : public " + baseClass + "");
out.println("{");
out.println("protected:");
for (Iterator iter = properties.iterator(); iter.hasNext();) {
JProperty property = (JProperty)iter.next();
String type = toCppType(property.getType());
String name = decapitalize(property.getSimpleName());
out.println(" " + type + " " + name + " ;");
}
out.println("");
out.println("public:");
out.println(" const static unsigned char TYPE = " + getOpenWireOpCode(jclass) + ";");
out.println("");
out.println("public:");
out.println(" " + className + "() ;");
out.println(" virtual ~" + className + "() ;");
out.println("");
out.println(" virtual unsigned char getDataStructureType() ;");
for (Iterator iter = properties.iterator(); iter.hasNext();) {
JProperty property = (JProperty)iter.next();
String type = toCppType(property.getType());
String propertyName = property.getSimpleName();
String parameterName = decapitalize(propertyName);
out.println("");
out.println(" virtual " + type + " get" + propertyName + "() ;");
out.println(" virtual void set" + propertyName + "(" + type + " " + parameterName + ") ;");
}
out.println("");
out.println(" virtual int marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException) ;");
out.println(" virtual void unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException) ;");
out.println("} ;");
out.println("");
out.println("/* namespace */");
out.println(" }");
out.println(" }");
out.println("}");
out.println("");
out.println("#endif /*ActiveMQ_" + className + "_hpp_*/");
}
}