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