blob: 5c55e981203de50dc7c0edee043a68e9b1a6384f [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.tests;
import java.io.PrintWriter;
/**
*
* @version $Revision: 381410 $
*/
public class AmqCppTestMarshallingClassesGenerator extends AmqCppTestMarshallingHeadersGenerator {
protected String getFilePostFix() {
return ".cpp";
}
protected void generateFile(PrintWriter out) throws Exception {
generateLicence(out);
out.println("");
out.println("#include <activemq/wireformat/openwire/marshal/generated/"+className+".h>");
out.println("");
out.println("#include <activemq/wireformat/openwire/marshal/generated/"+super.getTargetClassName(jclass)+".h>");
out.println("#include <activemq/commands/"+jclass.getSimpleName()+".h>");
out.println("");
out.println("#include <activemq/wireformat/openwire/OpenWireFormat.h>");
out.println("#include <activemq/commands/DataStructure.h>");
out.println("#include <activemq/commands/MessageId.h>");
out.println("#include <activemq/commands/ProducerId.h>");
out.println("#include <activemq/wireformat/openwire/utils/BooleanStream.h>");
out.println("#include <decaf/io/DataInputStream.h>");
out.println("#include <decaf/io/DataOutputStream.h>");
out.println("#include <decaf/io/IOException.h>");
out.println("#include <decaf/io/ByteArrayOutputStream.h>");
out.println("#include <decaf/io/ByteArrayInputStream.h>");
out.println("#include <decaf/util/Properties.h>");
out.println("#include <decaf/lang/Pointer.h>");
out.println("//");
out.println("// NOTE!: This file is autogenerated - do not modify!");
out.println("// if you need to make a change, please see the Java Classes in the");
out.println("// activemq-core module");
out.println("//");
out.println("");
out.println("using namespace std;");
out.println("using namespace activemq;");
out.println("using namespace activemq::util;");
out.println("using namespace activemq::exceptions;");
out.println("using namespace activemq::commands;");
out.println("using namespace activemq::wireformat;");
out.println("using namespace activemq::wireformat::openwire;");
out.println("using namespace activemq::wireformat::openwire::marshal;");
out.println("using namespace activemq::wireformat::openwire::utils;");
out.println("using namespace activemq::wireformat::openwire::marshal::generated;");
out.println("using namespace decaf::io;");
out.println("using namespace decaf::lang;");
out.println("using namespace decaf::util;");
out.println("");
out.println("///////////////////////////////////////////////////////////////////////////////");
out.println("void "+className+"::test() {");
out.println("");
out.println(" "+ super.getTargetClassName(jclass) + " myMarshaller;");
out.println(" "+ jclass.getSimpleName() + " myCommand;");
out.println(" "+ jclass.getSimpleName() + "* myCommand2;");
out.println("");
out.println(" CPPUNIT_ASSERT( myMarshaller.getDataStructureType() == myCommand.getDataStructureType() );");
out.println(" myCommand2 = dynamic_cast<"+jclass.getSimpleName()+"*>( myMarshaller.createObject() );");
out.println(" CPPUNIT_ASSERT( myCommand2 != NULL );");
out.println(" delete myCommand2;");
out.println("}");
out.println("");
out.println("///////////////////////////////////////////////////////////////////////////////");
out.println("void "+className+"::testLooseMarshal() {");
out.println("");
out.println(" "+ super.getTargetClassName(jclass) +" marshaller;");
out.println(" Properties props;");
out.println(" OpenWireFormat openWireFormat( props );");
out.println("");
out.println(" // Configure for this test.");
out.println(" openWireFormat.setVersion( "+getOpenwireVersion()+" );");
out.println(" openWireFormat.setTightEncodingEnabled( false );");
out.println("");
out.println(" "+jclass.getSimpleName()+" outCommand;");
out.println(" "+jclass.getSimpleName()+" inCommand;");
out.println("");
if( jclass.getSimpleName().endsWith("Message") ) {
out.println(" Pointer<ProducerId> producerId( new ProducerId() );");
out.println(" producerId->setConnectionId( \"ConnectionId\" );");
out.println(" producerId->setSessionId( 123 );");
out.println(" producerId->setValue( 42 );");
out.println("");
out.println(" Pointer<MessageId> messageId( new MessageId() );");
out.println(" messageId->setBrokerSequenceId( 1 );");
out.println(" messageId->setProducerSequenceId( 3 );");
out.println(" messageId->setProducerId( producerId );");
out.println("");
out.println(" outCommand.setMessageId( messageId );");
out.println("");
}
out.println(" try {");
out.println("");
out.println(" // Marshal the dataStructure to a byte array.");
out.println(" ByteArrayOutputStream baos;");
out.println(" DataOutputStream dataOut( &baos );");
out.println(" dataOut.writeByte( outCommand.getDataStructureType() );");
out.println(" marshaller.looseMarshal( &openWireFormat, &outCommand, &dataOut );");
out.println("");
out.println(" // Now read it back in and make sure it's all right.");
out.println(" std::pair<const unsigned char*, int> array = baos.toByteArray();");
out.println(" ByteArrayInputStream bais( array.first, array.second, true );");
out.println(" DataInputStream dataIn( &bais );");
out.println(" unsigned char dataType = dataIn.readByte();");
out.println(" CPPUNIT_ASSERT( dataType == outCommand.getDataStructureType() );");
out.println(" marshaller.looseUnmarshal( &openWireFormat, &inCommand, &dataIn );");
out.println("");
out.println(" CPPUNIT_ASSERT( inCommand.equals( (DataStructure*) &outCommand ) == true );");
out.println("");
out.println(" } catch( ActiveMQException& e ) {");
out.println(" e.printStackTrace();");
out.println(" CPPUNIT_ASSERT( false );");
out.println(" } catch( ... ) {");
out.println(" CPPUNIT_ASSERT( false );");
out.println(" }");
out.println("}");
out.println("");
out.println("///////////////////////////////////////////////////////////////////////////////");
out.println("void "+className+"::testTightMarshal() {");
out.println("");
out.println(" "+ super.getTargetClassName(jclass) +" marshaller;");
out.println(" Properties props;");
out.println(" OpenWireFormat openWireFormat( props );");
out.println("");
out.println(" // Configure for this test.");
out.println(" openWireFormat.setVersion( "+getOpenwireVersion()+" );");
out.println(" openWireFormat.setTightEncodingEnabled( true );");
out.println("");
out.println(" "+jclass.getSimpleName()+" outCommand;");
out.println(" "+jclass.getSimpleName()+" inCommand;");
out.println("");
if( jclass.getSimpleName().endsWith("Message") ) {
out.println(" Pointer<ProducerId> producerId( new ProducerId() );");
out.println(" producerId->setConnectionId( \"ConnectionId\" );");
out.println(" producerId->setSessionId( 123 );");
out.println(" producerId->setValue( 42 );");
out.println("");
out.println(" Pointer<MessageId> messageId( new MessageId() );");
out.println(" messageId->setBrokerSequenceId( 1 );");
out.println(" messageId->setProducerSequenceId( 3 );");
out.println(" messageId->setProducerId( producerId );");
out.println("");
out.println(" outCommand.setMessageId( messageId );");
out.println("");
}
out.println(" try {");
out.println("");
out.println(" // Marshal the dataStructure to a byte array.");
out.println(" ByteArrayOutputStream baos;");
out.println(" DataOutputStream dataOut( &baos );");
out.println(" // Phase 1 - count the size");
out.println(" int size = 1;");
out.println(" BooleanStream bs;");
out.println(" size += marshaller.tightMarshal1( &openWireFormat, &outCommand, &bs );");
out.println(" size += bs.marshalledSize();");
out.println(" // Phase 2 - marshal");
out.println(" dataOut.writeByte( outCommand.getDataStructureType() );");
out.println(" bs.marshal( &dataOut );");
out.println(" marshaller.tightMarshal2( &openWireFormat, &outCommand, &dataOut, &bs );");
out.println("");
out.println(" // Now read it back in and make sure it's all right.");
out.println(" std::pair<const unsigned char*, int> array = baos.toByteArray();");
out.println(" ByteArrayInputStream bais( array.first, array.second, true );");
out.println(" DataInputStream dataIn( &bais );");
out.println("");
out.println(" unsigned char dataType = dataIn.readByte();");
out.println(" CPPUNIT_ASSERT( dataType == outCommand.getDataStructureType() );");
out.println(" bs.clear();");
out.println(" bs.unmarshal( &dataIn );");
out.println(" marshaller.tightUnmarshal( &openWireFormat, &inCommand, &dataIn, &bs );");
out.println("");
out.println(" CPPUNIT_ASSERT( inCommand.equals( (DataStructure*) &outCommand ) == true );");
out.println("");
out.println(" } catch( ActiveMQException& e ) {");
out.println(" e.printStackTrace();");
out.println(" CPPUNIT_ASSERT( false );");
out.println(" } catch( ... ) {");
out.println(" CPPUNIT_ASSERT( false );");
out.println(" }");
out.println("}");
out.println("");
}
}