/** * 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.File; import java.io.PrintWriter; /** * */ public class CppMarshallingHeadersGenerator extends JavaMarshallingGenerator { protected String targetDir = "./src"; public Object run() { filePostFix = getFilePostFix(); if (destDir == null) { destDir = new File(targetDir + "/marshal"); } return super.run(); } protected String getFilePostFix() { return ".hpp"; } protected void generateLicence(PrintWriter out) { out.println("/**"); out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more"); out.println(" * contributor license agreements. See the NOTICE file distributed with"); out.println(" * this work for additional information regarding copyright ownership."); out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0"); out.println(" * (the \"License\"); you may not use this file except in compliance with"); out.println(" * the License. You may obtain a copy of the License at"); out.println(" *"); out.println(" * http://www.apache.org/licenses/LICENSE-2.0"); out.println(" *"); out.println(" * Unless required by applicable law or agreed to in writing, software"); out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,"); out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); out.println(" * See the License for the specific language governing permissions and"); out.println(" * limitations under the License."); out.println(" */"); } protected void generateFile(PrintWriter out) throws Exception { generateLicence(out); out.println("#ifndef " + className + "_hpp_"); out.println("#define " + className + "_hpp_"); out.println(""); out.println("#include <string>"); out.println(""); out.println("#include \"command/IDataStructure.hpp\""); out.println(""); out.println("/* we could cut this down - for now include all possible headers */"); out.println("#include \"command/BrokerId.hpp\""); out.println("#include \"command/ConnectionId.hpp\""); out.println("#include \"command/ConsumerId.hpp\""); out.println("#include \"command/ProducerId.hpp\""); out.println("#include \"command/SessionId.hpp\""); out.println(""); out.println("#include \"io/BinaryReader.hpp\""); out.println("#include \"io/BinaryWriter.hpp\""); out.println(""); out.println("#include \"command/" + baseClass + ".hpp\""); out.println("#include \"util/ifr/p.hpp\""); out.println(""); out.println("#include \"protocol/ProtocolFormat.hpp\""); out.println(""); out.println("namespace apache"); out.println("{"); out.println(" namespace activemq"); out.println(" {"); out.println(" namespace client"); out.println(" {"); out.println(" namespace marshal"); out.println(" {"); out.println(" using namespace ifr ;"); out.println(" using namespace apache::activemq::client::command;"); out.println(" using namespace apache::activemq::client::io;"); out.println(" using namespace apache::activemq::client::protocol;"); out.println(""); out.println("/*"); out.println(" *"); out.println(" */"); out.println("class " + className + " : public " + baseClass + ""); out.println("{"); out.println("public:"); out.println(" " + className + "() ;"); out.println(" virtual ~" + className + "() ;"); out.println(""); out.println(" virtual IDataStructure* createCommand() ;"); out.println(" virtual char getDataStructureType() ;"); out.println(" "); out.println(" virtual void unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs) ;"); out.println(" virtual int marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) ;"); out.println(" virtual void marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) ;"); out.println("} ;"); out.println(""); out.println("/* namespace */"); out.println(" }"); out.println(" }"); out.println(" }"); out.println("}"); out.println("#endif /*" + className + "_hpp_*/"); } public void generateFactory(PrintWriter out) { generateLicence(out); out.println(""); out.println("// Marshalling code for Open Wire Format "); 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-openwire module"); out.println("//"); out.println(""); out.println("#ifndef MarshallerFactory_hpp_"); out.println("#define MarshallerFactory_hpp_"); out.println(""); out.println(""); out.println("namespace apache"); out.println("{"); out.println(" namespace activemq"); out.println(" {"); out.println(" namespace client"); out.println(" {"); out.println(" namespace marshal"); out.println(" {"); out.println(" using namespace ifr ;"); out.println(" using namespace std ;"); out.println(" using namespace apache::activemq::client;"); out.println(" using namespace apache::activemq::client::command;"); out.println(" using namespace apache::activemq::client::io;"); out.println(""); out.println("/*"); out.println(" * "); out.println(" */"); out.println("class MarshallerFactory"); out.println("{"); out.println("public:"); out.println(" MarshallerFactory() ;"); out.println(" virtual ~MarshallerFactory() ;"); out.println(""); out.println(" virtual void configure(ProtocolFormat& format) ;"); out.println("} ;"); out.println(""); out.println("/* namespace */"); out.println(" }"); out.println(" }"); out.println(" }"); out.println("}"); out.println(""); out.println("#endif /*MarshallerFactory_hpp_*/"); out.println(""); } public String getTargetDir() { return targetDir; } public void setTargetDir(String targetDir) { this.targetDir = targetDir; } }