/** * 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_*/"); } }