001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.activemq.openwire.tool; 018 019 import java.io.File; 020 import java.io.PrintWriter; 021 022 /** 023 * @version $Revision: 381410 $ 024 */ 025 public class CppMarshallingHeadersGenerator extends JavaMarshallingGenerator { 026 027 protected String targetDir = "./src"; 028 029 public Object run() { 030 filePostFix = getFilePostFix(); 031 if (destDir == null) { 032 destDir = new File(targetDir + "/marshal"); 033 } 034 return super.run(); 035 } 036 037 protected String getFilePostFix() { 038 return ".hpp"; 039 } 040 041 protected void generateLicence(PrintWriter out) { 042 out.println("/**"); 043 out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more"); 044 out.println(" * contributor license agreements. See the NOTICE file distributed with"); 045 out.println(" * this work for additional information regarding copyright ownership."); 046 out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0"); 047 out.println(" * (the \"License\"); you may not use this file except in compliance with"); 048 out.println(" * the License. You may obtain a copy of the License at"); 049 out.println(" *"); 050 out.println(" * http://www.apache.org/licenses/LICENSE-2.0"); 051 out.println(" *"); 052 out.println(" * Unless required by applicable law or agreed to in writing, software"); 053 out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,"); 054 out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); 055 out.println(" * See the License for the specific language governing permissions and"); 056 out.println(" * limitations under the License."); 057 out.println(" */"); 058 } 059 060 protected void generateFile(PrintWriter out) throws Exception { 061 generateLicence(out); 062 063 out.println("#ifndef " + className + "_hpp_"); 064 out.println("#define " + className + "_hpp_"); 065 out.println(""); 066 out.println("#include <string>"); 067 out.println(""); 068 out.println("#include \"command/IDataStructure.hpp\""); 069 out.println(""); 070 out.println("/* we could cut this down - for now include all possible headers */"); 071 out.println("#include \"command/BrokerId.hpp\""); 072 out.println("#include \"command/ConnectionId.hpp\""); 073 out.println("#include \"command/ConsumerId.hpp\""); 074 out.println("#include \"command/ProducerId.hpp\""); 075 out.println("#include \"command/SessionId.hpp\""); 076 out.println(""); 077 out.println("#include \"io/BinaryReader.hpp\""); 078 out.println("#include \"io/BinaryWriter.hpp\""); 079 out.println(""); 080 out.println("#include \"command/" + baseClass + ".hpp\""); 081 out.println("#include \"util/ifr/p.hpp\""); 082 out.println(""); 083 out.println("#include \"protocol/ProtocolFormat.hpp\""); 084 out.println(""); 085 out.println("namespace apache"); 086 out.println("{"); 087 out.println(" namespace activemq"); 088 out.println(" {"); 089 out.println(" namespace client"); 090 out.println(" {"); 091 out.println(" namespace marshal"); 092 out.println(" {"); 093 out.println(" using namespace ifr ;"); 094 out.println(" using namespace apache::activemq::client::command;"); 095 out.println(" using namespace apache::activemq::client::io;"); 096 out.println(" using namespace apache::activemq::client::protocol;"); 097 out.println(""); 098 out.println("/*"); 099 out.println(" *"); 100 out.println(" */"); 101 out.println("class " + className + " : public " + baseClass + ""); 102 out.println("{"); 103 out.println("public:"); 104 out.println(" " + className + "() ;"); 105 out.println(" virtual ~" + className + "() ;"); 106 out.println(""); 107 out.println(" virtual IDataStructure* createCommand() ;"); 108 out.println(" virtual char getDataStructureType() ;"); 109 out.println(" "); 110 out.println(" virtual void unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs) ;"); 111 out.println(" virtual int marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) ;"); 112 out.println(" virtual void marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) ;"); 113 out.println("} ;"); 114 out.println(""); 115 out.println("/* namespace */"); 116 out.println(" }"); 117 out.println(" }"); 118 out.println(" }"); 119 out.println("}"); 120 out.println("#endif /*" + className + "_hpp_*/"); 121 } 122 123 public void generateFactory(PrintWriter out) { 124 generateLicence(out); 125 out.println(""); 126 out.println("// Marshalling code for Open Wire Format "); 127 out.println("//"); 128 out.println("//"); 129 out.println("// NOTE!: This file is autogenerated - do not modify!"); 130 out.println("// if you need to make a change, please see the Groovy scripts in the"); 131 out.println("// activemq-openwire module"); 132 out.println("//"); 133 out.println(""); 134 out.println("#ifndef MarshallerFactory_hpp_"); 135 out.println("#define MarshallerFactory_hpp_"); 136 out.println(""); 137 out.println(""); 138 out.println("namespace apache"); 139 out.println("{"); 140 out.println(" namespace activemq"); 141 out.println(" {"); 142 out.println(" namespace client"); 143 out.println(" {"); 144 out.println(" namespace marshal"); 145 out.println(" {"); 146 out.println(" using namespace ifr ;"); 147 out.println(" using namespace std ;"); 148 out.println(" using namespace apache::activemq::client;"); 149 out.println(" using namespace apache::activemq::client::command;"); 150 out.println(" using namespace apache::activemq::client::io;"); 151 out.println(""); 152 out.println("/*"); 153 out.println(" * "); 154 out.println(" */"); 155 out.println("class MarshallerFactory"); 156 out.println("{"); 157 out.println("public:"); 158 out.println(" MarshallerFactory() ;"); 159 out.println(" virtual ~MarshallerFactory() ;"); 160 out.println(""); 161 out.println(" virtual void configure(ProtocolFormat& format) ;"); 162 out.println("} ;"); 163 out.println(""); 164 out.println("/* namespace */"); 165 out.println(" }"); 166 out.println(" }"); 167 out.println(" }"); 168 out.println("}"); 169 out.println(""); 170 out.println("#endif /*MarshallerFactory_hpp_*/"); 171 out.println(""); 172 } 173 174 public String getTargetDir() { 175 return targetDir; 176 } 177 178 public void setTargetDir(String targetDir) { 179 this.targetDir = targetDir; 180 } 181 }