From 7cdce1d68b1a796ba7abe93ae27b9683d301d266 Mon Sep 17 00:00:00 2001 From: Rajith Muditha Attapattu Date: Sun, 10 Jun 2012 23:38:39 +0000 Subject: QPID-4027 Added a toString method to the Message class by using the swig "%extend" directive. Used the same for moving the methods I introduced in Mesage.h to java.i interface file. The BYTE_BUFFER struct is also moved into the swig file. The only extra methods we need to add to Message.h is to get/set the message headers as raw bytes. git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/address-refactor2@1348683 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/bindings/qpid/java/java.i | 44 ++++++++++++++++++++++++++++++++++ qpid/cpp/bindings/swig_java_typemaps.i | 17 ++++++------- 2 files changed, 53 insertions(+), 8 deletions(-) (limited to 'qpid/cpp/bindings') diff --git a/qpid/cpp/bindings/qpid/java/java.i b/qpid/cpp/bindings/qpid/java/java.i index fb5bc6cde7..be7b51ee8b 100644 --- a/qpid/cpp/bindings/qpid/java/java.i +++ b/qpid/cpp/bindings/qpid/java/java.i @@ -21,5 +21,49 @@ %include "std_string.i" %include "../../swig_java_typemaps.i" +%begin %{ +struct BYTE_BUFFER +{ + public : + BYTE_BUFFER(): start(0), size(0) {} + BYTE_BUFFER(void* p, long s) : start(p), size(s) {} + void* getStart() const { return start; } + long getSize() const { return size; } + private: + void* start; + long size; +}; +%} + +%extend qpid::messaging::Message { + +void setContentAsByteBuffer(const BYTE_BUFFER buf) +{ + self->setContent(reinterpret_cast(buf.getStart()), buf.getSize()); +} + +const BYTE_BUFFER getContentAsByteBuffer() const +{ + return BYTE_BUFFER(static_cast(const_cast(self->getContentPtr())),self->getContentSize()); +} + +std::string toString() +{ + std::ostringstream toStr; + toStr << "{" << std::endl; + toStr << " Message-ID=" << self->getMessageId() << std::endl; + toStr << " Correlation-ID=" << self->getCorrelationId() << std::endl; + toStr << " Subject=" << self->getSubject() << std::endl; + toStr << " Durability=" << (self->getDurable()? "true" : "false" ) << std::endl; + toStr << " TTL=" << self->getTtl().getMilliseconds() << std::endl; + toStr << " Redelivered=" << (self->getRedelivered()? "true" : "false" ) << std::endl; + toStr << " Application-Properties=" << self->getProperties() << std::endl; + toStr << "}" << std::endl; + + return toStr.str(); +} + +} + %include "../qpid.i" diff --git a/qpid/cpp/bindings/swig_java_typemaps.i b/qpid/cpp/bindings/swig_java_typemaps.i index 139b8399a8..785f5ed73d 100644 --- a/qpid/cpp/bindings/swig_java_typemaps.i +++ b/qpid/cpp/bindings/swig_java_typemaps.i @@ -22,6 +22,7 @@ #include "qpid/types/Variant.h" #include "jni.h" #include +#include %} /* =================================================================== */ @@ -47,9 +48,9 @@ * The "jstype" specifies the types exposed in the proxy classes. * -------------------------------------------------------------------VaraintMapWrapper.h~ */ -%typemap(jni) qpid::messaging::Message::BYTE_BUFFER "jobject" -%typemap(jtype) qpid::messaging::Message::BYTE_BUFFER "java.nio.ByteBuffer" -%typemap(jstype) qpid::messaging::Message::BYTE_BUFFER "java.nio.ByteBuffer" +%typemap(jni) BYTE_BUFFER "jobject" +%typemap(jtype) BYTE_BUFFER "java.nio.ByteBuffer" +%typemap(jstype) BYTE_BUFFER "java.nio.ByteBuffer" %typemap(jni) qpid::types::Variant::Map& "jlong" %typemap(jtype) qpid::types::Variant::Map& "long" @@ -72,19 +73,19 @@ %typemap(jstype) uint64_t "long" /* -- qpid::messaging::Message::BYTE_BUFFER -- */ -%typemap(in) (qpid::messaging::Message::BYTE_BUFFER) { +%typemap(in) (BYTE_BUFFER) { void* start = jenv->GetDirectBufferAddress($input); long size = (long)(jenv->GetDirectBufferCapacity($input)); - $1 = qpid::messaging::Message::BYTE_BUFFER(start,size); + $1 = BYTE_BUFFER(start,size); } -%typemap(javain) (qpid::messaging::Message::BYTE_BUFFER) "$module.isBufferDirect($javainput)" +%typemap(javain) (BYTE_BUFFER) "$module.isBufferDirect($javainput)" -%typemap(out) qpid::messaging::Message::BYTE_BUFFER { +%typemap(out) BYTE_BUFFER { jresult = jenv->NewDirectByteBuffer($1.getStart(), $1.getSize()); } -%typemap(javaout) qpid::messaging::Message::BYTE_BUFFER { +%typemap(javaout) BYTE_BUFFER { return $jnicall; } -- cgit v1.2.1