You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2010/03/15 16:55:18 UTC

svn commit: r923310 - in /qpid/branches/qmf-devel0.7a/qpid/cpp: include/qpid/agent/ include/qpid/management/ managementgen/qmfgen/ managementgen/qmfgen/templates/ src/ src/qpid/management/ src/tests/

Author: kgiusti
Date: Mon Mar 15 15:55:17 2010
New Revision: 923310

URL: http://svn.apache.org/viewvc?rev=923310&view=rev
Log:
Added map encode/decode support for qmf code generation

Modified:
    qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/agent/ManagementAgent.h
    qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementEvent.h
    qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementObject.h
    qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/management-types.xml
    qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/schema.py
    qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp
    qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.h
    qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp
    qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.h
    qpid/branches/qmf-devel0.7a/qpid/cpp/src/Makefile.am
    qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
    qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementObject.cpp
    qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Makefile.am

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/agent/ManagementAgent.h
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/agent/ManagementAgent.h?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/agent/ManagementAgent.h (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/agent/ManagementAgent.h Mon Mar 15 15:55:17 2010
@@ -52,6 +52,20 @@ class ManagementAgent
         static ManagementAgent* agent;
     };
 
+    class Name {
+    public:
+        QMF_AGENT_EXTERN Name(std::string vendor,
+                              std::string product,
+                              std::string name);
+        QMF_AGENT_EXTERN Name();
+        QMF_AGENT_EXTERN operator std::string() const;
+
+    private:
+        std::string vendor;
+        std::string product;
+        std::string name;
+    };
+
     typedef enum {
     SEV_EMERG = 0,
     SEV_ALERT = 1,

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementEvent.h
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementEvent.h?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementEvent.h (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementEvent.h Mon Mar 15 15:55:17 2010
@@ -34,14 +34,17 @@ class ManagementAgent;
 class ManagementEvent : public ManagementItem {
 public:
     typedef void (*writeSchemaCall_t)(qpid::framing::Buffer&);
+    //typedef void (*mapEncodeSchemaCall_t)(qpid::messaging::MapContent&);
     virtual ~ManagementEvent() {}
 
     virtual writeSchemaCall_t getWriteSchemaCall(void) = 0;
+    //virtual mapEncodeSchemaCall_t getMapEncodeSchemaCall(void) = 0;
     virtual std::string& getEventName() const = 0;
     virtual std::string& getPackageName() const = 0;
     virtual uint8_t* getMd5Sum() const = 0;
     virtual uint8_t getSeverity() const = 0;
     virtual void encode(qpid::framing::Buffer&) const = 0;
+    virtual void mapEncode(qpid::messaging::MapContent&) const = 0;
 };
 
 }}

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementObject.h
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementObject.h?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementObject.h (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/include/qpid/management/ManagementObject.h Mon Mar 15 15:55:17 2010
@@ -26,6 +26,8 @@
 #include "qpid/sys/Mutex.h"
 #include <qpid/framing/Buffer.h>
 #include "qpid/CommonImportExport.h"
+#include "qpid/messaging/MapContent.h"
+#include "qpid/messaging/MapView.h"
 #include <map>
 #include <vector>
 
@@ -58,15 +60,19 @@ protected:
 public:
     QPID_COMMON_EXTERN ObjectId() : agent(0), first(0), second(0) {}
     QPID_COMMON_EXTERN ObjectId(framing::Buffer& buf) : agent(0) { decode(buf); }
+    QPID_COMMON_EXTERN ObjectId(const messaging::Variant& map) : agent(0) { mapDecode(map.asMap()); }
     QPID_COMMON_EXTERN ObjectId(uint8_t flags, uint16_t seq, uint32_t broker, uint32_t bank, uint64_t object);
     QPID_COMMON_EXTERN ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq, uint64_t object);
     QPID_COMMON_EXTERN ObjectId(std::istream&);
     QPID_COMMON_EXTERN ObjectId(const std::string&);
     QPID_COMMON_EXTERN bool operator==(const ObjectId &other) const;
     QPID_COMMON_EXTERN bool operator<(const ObjectId &other) const;
-    QPID_COMMON_EXTERN uint32_t encodedSize() const { return 16; };
+    QPID_COMMON_EXTERN uint32_t encodedBufSize() const { return 16; };
     QPID_COMMON_EXTERN void encode(framing::Buffer& buffer) const;
     QPID_COMMON_EXTERN void decode(framing::Buffer& buffer);
+    QPID_COMMON_EXTERN void mapEncode(messaging::VariantMap& map) const;
+    QPID_COMMON_EXTERN void mapDecode(const messaging::VariantMap& map);
+    QPID_COMMON_EXTERN operator messaging::VariantMap() const;
     QPID_COMMON_EXTERN void setV2Key(const std::string& _key) { v2Key = _key; }
     QPID_COMMON_EXTERN void setV2Key(const ManagementObject& object);
     QPID_COMMON_EXTERN bool equalV1(const ObjectId &other) const;
@@ -125,7 +131,7 @@ protected:
     uint64_t         updateTime;
     ObjectId         objectId;
     mutable bool     configChanged;
-    bool             instChanged;
+    mutable bool     instChanged;
     bool             deleted;
     Manageable*      coreObject;
     mutable sys::Mutex accessLock;
@@ -136,12 +142,17 @@ protected:
 
     QPID_COMMON_EXTERN int  getThreadIndex();
     QPID_COMMON_EXTERN void writeTimestamps(qpid::framing::Buffer& buf) const;
+    QPID_COMMON_EXTERN void writeTimestamps(messaging::VariantMap& map) const;
     QPID_COMMON_EXTERN void readTimestamps(qpid::framing::Buffer& buf);
-    QPID_COMMON_EXTERN uint32_t writeTimestampsSize() const;
+    QPID_COMMON_EXTERN void readTimestamps(const messaging::VariantMap& buf);
+    QPID_COMMON_EXTERN uint32_t writeTimestampsBufSize() const;
+
+    static const uint8_t MD5_LEN = 16;
 
   public:
     QPID_COMMON_EXTERN static int maxThreads;
     typedef void (*writeSchemaCall_t) (qpid::framing::Buffer&);
+    //typedef void (*mapEncodeSchemaCall_t) (messaging::MapContent&);
 
     ManagementObject(Manageable* _core) :
         createTime(uint64_t(qpid::sys::Duration(qpid::sys::now()))),
@@ -151,8 +162,9 @@ protected:
     virtual ~ManagementObject() {}
 
     virtual writeSchemaCall_t getWriteSchemaCall() = 0;
+    //virtual mapEncodeSchemaCall_t getMapEncodeSchemaCall() = 0;
     virtual void readProperties(qpid::framing::Buffer& buf) = 0;
-    virtual uint32_t writePropertiesSize() const = 0;
+    virtual uint32_t writePropertiesBufSize() const = 0;
     virtual void writeProperties(qpid::framing::Buffer& buf) const = 0;
     virtual void writeStatistics(qpid::framing::Buffer& buf,
                                  bool skipHeaders = false) = 0;
@@ -160,6 +172,18 @@ protected:
                           qpid::framing::Buffer& inBuf,
                           qpid::framing::Buffer& outBuf) = 0;
     virtual std::string getKey() const = 0;
+
+    // Encode & Decode the property and statistics values
+    // for this object.
+    virtual void mapEncodeValues(messaging::VariantMap& map,
+                                 bool includeProperties,
+                                 bool includeStatistics) = 0;
+    virtual void mapDecodeValues(const messaging::VariantMap& map) = 0;
+    // @TODO KAG: fix this
+    virtual void KAGdoMethod(std::string&           methodName,
+                             const messaging::VariantMap& inMap,
+                             messaging::VariantMap& outMap) = 0;
+
     QPID_COMMON_EXTERN virtual void setReference(ObjectId objectId);
 
     virtual std::string& getClassName() const = 0;
@@ -183,7 +207,7 @@ protected:
     inline void setFlags(uint32_t f) { flags = f; }
     inline uint32_t getFlags() { return flags; }
     bool isSameClass(ManagementObject& other) {
-        for (int idx = 0; idx < 16; idx++)
+        for (int idx = 0; idx < MD5_LEN; idx++)
             if (other.getMd5Sum()[idx] != getMd5Sum()[idx])
                 return false;
         return other.getClassName() == getClassName() &&
@@ -192,7 +216,14 @@ protected:
 
     QPID_COMMON_EXTERN void encode(qpid::framing::Buffer& buf) const { writeProperties(buf); }
     QPID_COMMON_EXTERN void decode(qpid::framing::Buffer& buf) { readProperties(buf); }
-    QPID_COMMON_EXTERN uint32_t encodedSize() const { return writePropertiesSize(); }
+    QPID_COMMON_EXTERN uint32_t encodedBufSize() const { return writePropertiesBufSize(); }
+
+    // Encode/Decode the entire object as a map
+    QPID_COMMON_EXTERN void mapEncode(messaging::VariantMap& map,
+                                      bool includeProperties=true,
+                                      bool includeStatistics=true);
+
+    QPID_COMMON_EXTERN void mapDecode(const messaging::VariantMap& map);
 };
 
 typedef std::map<ObjectId, ManagementObject*> ManagementObjectMap;

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/management-types.xml
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/management-types.xml?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/management-types.xml (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/management-types.xml Mon Mar 15 15:55:17 2010
@@ -19,6 +19,10 @@
   under the License.
 -->
 
+<!-- "unmap": cast to convert from Variant to native type constructor,
+     "map":   cast to convert from native type to Variant constructor parameter
+-->
+
 <type name="objId"     base="REF"       cpp="::qpid::management::ObjectId"  encode="#.encode(@)" decode="#.decode(@)"  stream="#.getV2Key()" size="16" accessor="direct" init="::qpid::management::ObjectId()" byRef="y"/>
 <type name="uint8"     base="U8"        cpp="uint8_t"       encode="@.putOctet(#)"       decode="# = @.getOctet()"     stream="#" size="1" accessor="direct" init="0"/>
 <type name="uint16"    base="U16"       cpp="uint16_t"      encode="@.putShort(#)"       decode="# = @.getShort()"     stream="#" size="2" accessor="direct" init="0"/>
@@ -29,14 +33,14 @@
 <type name="int32"     base="S32"       cpp="int32_t"       encode="@.putInt32(#)"       decode="# = @.getInt32()"     stream="#" size="4" accessor="direct" init="0"/>
 <type name="int64"     base="S64"       cpp="int64_t"       encode="@.putInt64(#)"       decode="# = @.getInt64()"     stream="#" size="8" accessor="direct" init="0"/>
 <type name="bool"      base="BOOL"      cpp="uint8_t"       encode="@.putOctet(#?1:0)"   decode="# = @.getOctet()==1"  stream="#" size="1" accessor="direct" init="0"/>
-<type name="sstr"      base="SSTR"      cpp="std::string"   encode="@.putShortString(#)" decode="@.getShortString(#)"  stream="#" size="(1 + #.length())" accessor="direct" init='""' byRef="y"/>
-<type name="lstr"      base="LSTR"      cpp="std::string"   encode="@.putMediumString(#)" decode="@.getMediumString(#)" stream="#" size="(2 + #.length())" accessor="direct" init='""' byRef="y"/>
+<type name="sstr"      base="SSTR"      cpp="std::string"   encode="@.putShortString(#)" decode="@.getShortString(#)"  stream="#" size="(1 + #.length())" accessor="direct" init='""' byRef="y" unmap="(#).getString()"/>
+<type name="lstr"      base="LSTR"      cpp="std::string"   encode="@.putMediumString(#)" decode="@.getMediumString(#)" stream="#" size="(2 + #.length())" accessor="direct" init='""' byRef="y" unmap="(#).getString()"/>
 <type name="absTime"   base="ABSTIME"   cpp="int64_t"       encode="@.putLongLong(#)"    decode="# = @.getLongLong()"  stream="#" size="8" accessor="direct" init="0"/>
 <type name="deltaTime" base="DELTATIME" cpp="uint64_t"      encode="@.putLongLong(#)"    decode="# = @.getLongLong()"  stream="#" size="8" accessor="direct" init="0"/>
 <type name="float"     base="FLOAT"     cpp="float"         encode="@.putFloat(#)"       decode="# = @.getFloat()"     stream="#" size="4" accessor="direct" init="0."/>
 <type name="double"    base="DOUBLE"    cpp="double"        encode="@.putDouble(#)"      decode="# = @.getDouble()"    stream="#" size="8" accessor="direct" init="0."/>
-<type name="uuid"      base="UUID"      cpp="::qpid::framing::Uuid" encode="#.encode(@)"       decode="#.decode(@)"    stream="#" size="16" accessor="direct" init="::qpid::framing::Uuid()" byRef="y"/>
-<type name="map"       base="FTABLE"    cpp="::qpid::framing::FieldTable" encode="#.encode(@)" decode="#.decode(@)"    stream="#" size="#.encodedSize()" accessor="direct" init="::qpid::framing::FieldTable()" byRef="y"/>
+<type name="uuid"      base="UUID"      cpp="::qpid::framing::Uuid" encode="#.encode(@)"       decode="#.decode(@)"    stream="#" size="16" accessor="direct" init="::qpid::framing::Uuid()" byRef="y" unmap="(#).asUuid().data()" map="::qpid::messaging::Uuid((#).data())" />
+<type name="map"       base="FTABLE"    cpp="::qpid::framing::FieldTable" encode="#.encode(@)" decode="#.decode(@)"    stream="#" size="#.encodedSize()" accessor="direct" init="::qpid::framing::FieldTable()" byRef="y" unmap="::qpid::framing::FieldTable(); assert(false); /*TBD*/" map='(assert(false),"TBD: unsupported type")' />
 
 <type name="hilo8"   base="U8"   cpp="uint8_t"  encode="@.putOctet(#)"    decode="# = @.getOctet()"    style="wm" stream="#" size="1" accessor="counter" init="0"/>
 <type name="hilo16"  base="U16"  cpp="uint16_t" encode="@.putShort(#)"    decode="# = @.getShort()"    style="wm" stream="#" size="2" accessor="counter" init="0"/>

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/schema.py
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/schema.py?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/schema.py (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/schema.py Mon Mar 15 15:55:17 2010
@@ -19,12 +19,18 @@
 
 from xml.dom.minidom import parse, parseString, Node
 from cStringIO       import StringIO
-import md5
+#import md5
+try:
+    import hashlib
+    _md5Obj = hashlib.md5
+except ImportError:
+    import md5
+    _md5Obj = md5.new
 
 class Hash:
   """ Manage the hash of an XML sub-tree """
   def __init__(self, node):
-    self.md5Sum = md5.new()
+    self.md5Sum = _md5Obj()
     self._compute(node)
 
   def addSubHash(self, hash):
@@ -64,6 +70,8 @@ class SchemaType:
     self.init      = "0"
     self.perThread = False
     self.byRef     = False
+    self.unmap     = "#"
+    self.map       = "#"
 
     attrs = node.attributes
     for idx in range (attrs.length):
@@ -109,6 +117,12 @@ class SchemaType:
           raise ValueError ("Expected 'y' in byRef attribute")
         self.byRef = True
 
+      elif key == 'unmap':
+        self.unmap = val
+
+      elif key == 'map':
+        self.map = val
+
       else:
         raise ValueError ("Unknown attribute in type '%s'" % key)
 
@@ -211,6 +225,17 @@ class SchemaType:
   def genRead (self, stream, varName, indent="    "):
     stream.write(indent + self.decode.replace("@", "buf").replace("#", varName) + ";\n")
 
+  def genUnmap (self, stream, varName, indent="    ", key=None, mapName="_map",
+                _optional=False):
+    if key is None:
+      key = varName
+    stream.write(indent + "if ((_i = " + mapName + ".find(\"" + key + "\")) != " + mapName + ".end()) {\n")
+    stream.write(indent + "    " + varName + " = " +
+                 self.unmap.replace("#", "_i->second") + ";\n")
+    if _optional:
+        stream.write(indent + "    _found = true;\n")
+    stream.write(indent + "}\n")
+
   def genWrite (self, stream, varName, indent="    "):
     if self.style != "mma":
       stream.write (indent + self.encode.replace ("@", "buf").replace ("#", varName) + ";\n")
@@ -230,6 +255,31 @@ class SchemaType:
                     .replace ("#", varName + "Count ? " + varName + "Total / " +
                               varName + "Count : 0") + ";\n")
 
+  def genMap (self, stream, varName, indent="    ", key=None, mapName="_map"):
+    if key is None:
+      key = varName
+    if self.style != "mma":
+        var_cast = self.map.replace("#", varName)
+        stream.write(indent + mapName + "[\"" + key + "\"] = Variant(" + var_cast + ");\n")
+    if self.style == "wm":
+        var_cast_hi = self.map.replace("#", varName + "High")
+        var_cast_lo = self.map.replace("#", varName + "Low")
+        stream.write(indent + mapName + "[\"" + key + "High\"] = " +
+                     "Variant(" + var_cast_hi + ");\n")
+        stream.write(indent + mapName + "[\"" + key + "Low\"] = " +
+                     "Variant(" + var_cast_lo + ");\n")
+    if self.style == "mma":
+        var_cast = self.map.replace("#", varName + "Count")
+        stream.write(indent + mapName + "[\"" + key + "Count\"] = " + "Variant(" + var_cast + ");\n")
+        var_cast = self.map.replace("#", varName + "Min")
+        stream.write(indent + mapName + "[\"" + key + "Min\"] = " +
+                     "(" + varName + "Count ? Variant(" + var_cast + ") : Variant(0));\n")
+        var_cast = self.map.replace("#", varName + "Max")
+        stream.write(indent + mapName + "[\"" + key + "Max\"] = " + "Variant(" + var_cast + ");\n")
+
+        var_cast = self.map.replace("#", "(" + varName + "Total / " + varName + "Count)")
+        stream.write(indent + mapName + "[\"" + key + "Avg\"] = " +
+                     "(" + varName + "Count ? Variant(" + var_cast + ") : Variant(0));\n")
 
   def getReadCode (self, varName, bufName):
     result = self.decode.replace ("@", bufName).replace ("#", varName)
@@ -392,6 +442,29 @@ class SchemaProperty:
       stream.write ("    ft.setString (DESC,   \"" + self.desc   + "\");\n")
     stream.write ("    buf.put (ft);\n\n")
 
+
+  def genMapSchema(self, stream):
+    stream.write ("    {\n")
+    stream.write ("        ::qpid::messaging::VariantMap _value;\n")
+    stream.write ("        _value[TYPE] = TYPE_" + self.type.type.base +";\n")
+    stream.write ("        _value[ACCESS] = ACCESS_" + self.access + ";\n")
+    stream.write ("        _value[IS_INDEX] = " + str (self.isIndex) + ";\n")
+    stream.write ("        _value[IS_OPTIONAL] = " + str (self.isOptional) + ";\n")
+    if self.unit != None:
+      stream.write ("        _value[UNIT] = \"" + self.unit + "\";\n")
+    if self.min != None:
+      stream.write ("        _value[MIN] = " + self.min + ";\n")
+    if self.max != None:
+      stream.write ("        _value[MAX] = " + self.max + ";\n")
+    if self.maxLen != None:
+      stream.write ("        _value[MAXLEN] = " + self.maxLen + ";\n")
+    if self.desc != None:
+      stream.write ("        _value[DESC] = \"" + self.desc + "\";\n")
+    stream.write ("        _props[\"" + self.name + "\"] = _value;\n")
+    stream.write ("    }\n\n")
+
+
+
   def genSize (self, stream):
     indent = "    "
     if self.isOptional:
@@ -419,6 +492,43 @@ class SchemaProperty:
     if self.isOptional:
       stream.write("    }\n")
 
+  def genUnmap (self, stream):
+    indent = "    "
+    if self.isOptional:
+      stream.write("    _found = false;\n")
+    self.type.type.genUnmap (stream, self.name, indent, _optional=self.isOptional)
+    if self.isOptional:
+      stream.write("    if (_found) {\n")
+      stream.write("        presenceMask[presenceByte_%s] |= presenceMask_%s;\n" %
+                   (self.name, self.name))
+      stream.write("    }\n")
+
+  def genMap (self, stream):
+    indent = "    "
+    if self.isOptional:
+      stream.write("    if (presenceMask[presenceByte_%s] & presenceMask_%s) {\n" % (self.name, self.name))
+      indent = "        "
+    self.type.type.genMap (stream, self.name, indent)
+    if self.isOptional:
+      stream.write("    }\n")
+
+
+  def __repr__(self):
+    m = {}
+    m["name"] = self.name
+    m["type"] = self.type
+    m["ref"] = self.ref
+    m["access"] = self.access
+    m["isIndex"] = self.isIndex
+    m["isParentRef"] = self.isParentRef
+    m["isGeneralRef"] = self.isGeneralRef
+    m["isOptional"] = self.isOptional
+    m["unit"] = self.unit
+    m["min"] = self.min
+    m["max"] = self.max
+    m["maxLen"] = self.maxLen
+    m["desc"] = self.desc
+    return str(m)
 
 #=====================================================================================
 #
@@ -492,6 +602,17 @@ class SchemaStatistic:
       stream.write ("    ft.setString (DESC,   \"" + desc   + "\");\n")
     stream.write ("    buf.put (ft);\n\n")
 
+  def genMapSchemaText(self, stream, name, desc):
+    stream.write ("    {\n")
+    stream.write ("        ::qpid::messaging::VariantMap _value;\n")
+    stream.write ("        _value[TYPE] = TYPE_" + self.type.type.base +";\n")
+    if self.unit != None:
+      stream.write ("        _value[UNIT] = \"" + self.unit + "\";\n")
+    if desc != None:
+      stream.write ("        _value[DESC] = \"" + desc + "\";\n")
+    stream.write ("        _stats[\"" + self.name + "\"] = _value;\n")
+    stream.write ("    }\n\n")
+
   def genSchema (self, stream):
     if self.type.type.style != "mma":
       self.genSchemaText (stream, self.name, self.desc)
@@ -533,6 +654,12 @@ class SchemaStatistic:
     else:
       self.type.type.genWrite (stream, self.name)
 
+  def genMap (self, stream):
+    if self.type.type.perThread:
+      self.type.type.genMap(stream, "totals." + self.name)
+    else:
+      self.type.type.genMap(stream, self.name)
+
   def genInitialize (self, stream, prefix="", indent="    "):
     val = self.type.type.init
     if self.type.type.style != "mma":
@@ -648,6 +775,30 @@ class SchemaArg:
       stream.write ("    ft.setString (DESC,    \"" + self.desc + "\");\n")
     stream.write ("    buf.put (ft);\n\n")
 
+  def genMapSchema (self, stream, event=False):
+    stream.write ("        {\n")
+    stream.write ("            ::qpid::messaging::VariantMap _avalue;\n")
+    stream.write ("            _avalue[TYPE] = TYPE_" + self.type.type.base +";\n")
+    if (not event):
+      stream.write ("            _avalue[DIR] = \"" + self.dir + "\";\n")
+    if self.unit != None:
+      stream.write ("            _avalue[UNIT] = \"" + self.unit + "\";\n")
+    if not event:
+      if self.min != None:
+        stream.write ("            _avalue[MIN] = " + self.min + ";\n")
+      if self.max != None:
+        stream.write ("            _avalue[MAX] = " + self.max + ";\n")
+      if self.maxLen != None:
+        stream.write ("            _avalue[MAXLEN] = " + self.maxLen + ";\n")
+      if self.default != None:
+        stream.write ("            _avalue[DEFAULT] = \"" + self.default + "\";\n")
+    if self.desc != None:
+      stream.write ("            _avalue[DESC] = \"" + self.desc + "\";\n")
+    stream.write ("            _args[\"" + self.name + "\"] = _avalue;\n")
+    stream.write ("        }\n")
+
+
+
   def genFormalParam (self, stream, variables):
     stream.write ("%s _%s" % (self.type.type.asArg, self.name))
 
@@ -727,6 +878,21 @@ class SchemaMethod:
     for arg in self.args:
       arg.genSchema (stream)
 
+  def genMapSchema (self, stream, variables):
+    stream.write ("    {\n")
+    stream.write ("        ::qpid::messaging::VariantMap _value;\n")
+    stream.write ("        ::qpid::messaging::VariantMap _args;\n")
+    stream.write ("        _value[ARGCOUNT] = " + str(len(self.args)) + ";\n")
+    if self.desc != None:
+      stream.write ("        _value[DESC] = \"" + self.desc + "\";\n")
+
+    for arg in self.args:
+      arg.genSchema (stream)
+
+    stream.write ("        _value[ARGS] = _args;\n")
+    stream.write ("        _methods[\"" + self.name + "\"] = _value;\n")
+    stream.write ("    }\n\n")
+
 #=====================================================================================
 #
 #=====================================================================================
@@ -849,6 +1015,12 @@ class SchemaEvent:
     for arg in self.args:
       stream.write("    " + arg.type.type.encode.replace("@", "buf").replace("#", arg.name) + ";\n")
 
+  def genArgMap(self, stream, variables):
+      for arg in self.args:
+          arg.type.type.genMap(stream, arg.name, "    ", mapName="map")
+      #stream.write("    " + arg.type.type.encode.replace("@", "buf").replace("#", arg.name) + ";\n")
+
+
   def genArgSchema(self, stream, variables):
     for arg in self.args:
       arg.genSchema(stream, True)
@@ -1030,6 +1202,30 @@ class SchemaClass:
       else:
         stream.write ("string& methodName, Buffer& inBuf, Buffer& outBuf")
 
+
+  def genDoMapMethodArgs (self, stream, variables):
+    methodCount = 0
+    inArgCount  = 0
+    for method in self.methods:
+      methodCount = methodCount + 1
+      for arg in method.args:
+        if arg.getDir () == "I" or arg.getDir () == "IO":
+          inArgCount = inArgCount + 1
+
+    if methodCount == 0:
+      stream.write ("string&," +
+                    " const ::qpid::messaging::VariantMap&," +
+                    " ::qpid::messaging::VariantMap& outMap")
+    else:
+      if inArgCount == 0:
+        stream.write ("string& methodName," +
+                      " const ::qpid::messaging::VariantMap&," +
+                      " ::qpid::messaging::VariantMap& outMap")
+      else:
+        stream.write ("string& methodName," +
+                      " const ::qpid::messaging::VariantMap& inMap," +
+                      " ::qpid::messaging::VariantMap& outMap")
+
   def genHiLoStatResets (self, stream, variables):
     for inst in self.statistics:
       if not inst.type.type.perThread:
@@ -1133,6 +1329,39 @@ class SchemaClass:
                                                     arg.name, "outBuf") + ";\n")
       stream.write ("        return;\n    }\n")
 
+
+
+  def genMapMethodHandlers (self, stream, variables):
+    for method in self.methods:
+      stream.write ("\n    if (methodName == \"" + method.getName () + "\") {\n")
+      if method.getArgCount () == 0:
+        stream.write ("        ::qpid::management::ArgsNone ioArgs;\n")
+      else:
+        stream.write ("        Args" + method.getFullName () + " ioArgs;\n")
+        stream.write ("        ::qpid::messaging::VariantMap::const_iterator _i;\n")
+
+      # decode each input argument from the input map
+      for arg in method.args:
+        if arg.getDir () == "I" or arg.getDir () == "IO":
+          arg.type.type.genUnmap(stream,
+                                 "ioArgs." + arg.dir.lower () + "_" + arg.name,
+                                 "        ",
+                                 arg.name,
+                                 "inMap")
+
+      stream.write ("        status = coreObject->ManagementMethod (METHOD_" +\
+                    method.getName().upper() + ", ioArgs, text);\n")
+      stream.write ("        outMap[\"_status_code\"] = (status);\n")
+      stream.write ("        outMap[\"_status_text\"] = ::qpid::management::Manageable::StatusText(status, text);\n")
+      for arg in method.args:
+        if arg.getDir () == "O" or arg.getDir () == "IO":
+          arg.type.type.genMap(stream,
+                                 "ioArgs." + arg.dir.lower () + "_" + arg.name,
+                                 "        ",
+                                 arg.name,
+                                 "outMap")
+      stream.write ("        return;\n    }\n")
+
   def genOpenNamespaces (self, stream, variables):
     for item in self.packageName.split("."):
       stream.write ("namespace %s {\n" % item)
@@ -1240,6 +1469,17 @@ class SchemaClass:
     for stat in self.statistics:
       stat.genWrite (stream)
 
+  def genMapEncodeProperties(self, stream, variables):
+      for prop in self.properties:
+          prop.genMap (stream)
+
+  def genMapEncodeStatistics (self, stream, variables):
+      for stat in self.statistics:
+          stat.genMap (stream)
+
+  def genMapDecodeProperties (self, stream, variables):
+      for prop in self.properties:
+          prop.genUnmap (stream)
 
 class SchemaEventArgs:
   def __init__(self, package, node, typespec, fragments, options):

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.cpp Mon Mar 15 15:55:17 2010
@@ -30,6 +30,7 @@
 
 using namespace qmf::/*MGEN:Class.Namespace*/;
 using namespace qpid::framing;
+using namespace qpid::messaging;
 using           qpid::management::ManagementAgent;
 using           qpid::management::Manageable;
 using           qpid::management::ManagementObject;
@@ -38,7 +39,7 @@ using           std::string;
 
 string  /*MGEN:Class.NameCap*/::packageName  = string ("/*MGEN:Class.NamePackageLower*/");
 string  /*MGEN:Class.NameCap*/::className    = string ("/*MGEN:Class.NameLower*/");
-uint8_t /*MGEN:Class.NameCap*/::md5Sum[16]   =
+uint8_t /*MGEN:Class.NameCap*/::md5Sum[MD5_LEN]   =
     {/*MGEN:Class.SchemaMD5*/};
 
 /*MGEN:Class.NameCap*/::/*MGEN:Class.NameCap*/ (ManagementAgent*, Manageable* _core/*MGEN:Class.ParentArg*//*MGEN:Class.ConstructorArgs*/) :
@@ -105,14 +106,16 @@ void /*MGEN:Class.NameCap*/::writeSchema
 
     // Properties
 /*MGEN:Class.PropertySchema*/
+
     // Statistics
 /*MGEN:Class.StatisticSchema*/
+
     // Methods
 /*MGEN:Class.MethodSchema*/
 }
 
 /*MGEN:IF(Class.ExistPerThreadStats)*/
-void /*MGEN:Class.NameCap*/::aggregatePerThreadStats(struct PerThreadStats* totals)
+void /*MGEN:Class.NameCap*/::aggregatePerThreadStats(struct PerThreadStats* totals) const
 {
 /*MGEN:Class.InitializeTotalPerThreadStats*/
     for (int idx = 0; idx < maxThreads; idx++) {
@@ -124,9 +127,9 @@ void /*MGEN:Class.NameCap*/::aggregatePe
 }
 /*MGEN:ENDIF*/
 
-uint32_t /*MGEN:Class.NameCap*/::writePropertiesSize() const
+uint32_t /*MGEN:Class.NameCap*/::writePropertiesBufSize() const
 {
-    uint32_t size = writeTimestampsSize();
+    uint32_t size = writeTimestampsBufSize();
 /*MGEN:IF(Class.ExistOptionals)*/
     size += /*MGEN:Class.PresenceMaskBytes*/;
 /*MGEN:ENDIF*/
@@ -209,3 +212,67 @@ std::string /*MGEN:Class.NameCap*/::getK
     return key.str();
 }
 
+
+
+void /*MGEN:Class.NameCap*/::mapEncodeValues (::qpid::messaging::VariantMap& _map,
+                                              bool includeProperties,
+                                              bool includeStatistics)
+{
+    using namespace ::qpid::messaging;
+    ::qpid::sys::Mutex::ScopedLock mutex(accessLock);
+
+    if (includeProperties) {
+        configChanged = false;
+/*MGEN:Class.MapEncodeProperties*/
+    }
+
+    if (includeStatistics) {
+        instChanged = false;
+/*MGEN:IF(Class.ExistPerThreadAssign)*/
+        for (int idx = 0; idx < maxThreads; idx++) {
+            struct PerThreadStats* threadStats = perThreadStatsArray[idx];
+            if (threadStats != 0) {
+/*MGEN:Class.PerThreadAssign*/
+            }
+        }
+/*MGEN:ENDIF*/
+/*MGEN:IF(Class.ExistPerThreadStats)*/
+        struct PerThreadStats totals;
+        aggregatePerThreadStats(&totals);
+/*MGEN:ENDIF*/
+/*MGEN:Class.Assign*/
+
+/*MGEN:Class.MapEncodeStatistics*/
+
+    // Maintenance of hi-lo statistics
+/*MGEN:Class.HiLoStatResets*/
+/*MGEN:IF(Class.ExistPerThreadResets)*/
+        for (int idx = 0; idx < maxThreads; idx++) {
+            struct PerThreadStats* threadStats = perThreadStatsArray[idx];
+            if (threadStats != 0) {
+/*MGEN:Class.PerThreadHiLoStatResets*/
+            }
+        }
+/*MGEN:ENDIF*/
+    }
+}
+
+void /*MGEN:Class.NameCap*/::mapDecodeValues (const ::qpid::messaging::VariantMap& _map)
+{
+    ::qpid::messaging::VariantMap::const_iterator _i;
+    ::qpid::sys::Mutex::ScopedLock mutex(accessLock);
+/*MGEN:IF(Class.ExistOptionals)*/
+    bool _found;
+/*MGEN:ENDIF*/
+/*MGEN:Class.MapDecodeProperties*/
+}
+
+void /*MGEN:Class.NameCap*/::KAGdoMethod (/*MGEN:Class.DoMapMethodArgs*/)
+{
+    Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD;
+    std::string          text;
+
+/*MGEN:Class.MapMethodHandlers*/
+    outMap["_status_code"] = status;
+    outMap["_status_text"] = Manageable::StatusText(status, text);
+}

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.h
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.h?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.h (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Class.h Mon Mar 15 15:55:17 2010
@@ -26,6 +26,8 @@
 #include "qpid/management/ManagementObject.h"
 #include "qpid/framing/FieldTable.h"
 #include "qpid/framing/Uuid.h"
+#include "qpid/messaging/MapContent.h"
+#include "qpid/messaging/MapView.h"
 
 namespace qpid {
     namespace management {
@@ -42,7 +44,7 @@ class /*MGEN:Class.NameCap*/ : public ::
 
     static std::string packageName;
     static std::string className;
-    static uint8_t     md5Sum[16];
+    static uint8_t     md5Sum[MD5_LEN];
 /*MGEN:IF(Class.ExistOptionals)*/
     uint8_t presenceMask[/*MGEN:Class.PresenceMaskBytes*/];
 /*MGEN:Class.PresenceMaskConstants*/
@@ -71,17 +73,24 @@ class /*MGEN:Class.NameCap*/ : public ::
         return threadStats;
     }
 
-    void aggregatePerThreadStats(struct PerThreadStats*);
+    void aggregatePerThreadStats(struct PerThreadStats*) const;
 /*MGEN:ENDIF*/
   public:
     static void writeSchema(::qpid::framing::Buffer& buf);
-    uint32_t writePropertiesSize() const;
+    uint32_t writePropertiesBufSize() const;
     void readProperties(::qpid::framing::Buffer& buf);
     void writeProperties(::qpid::framing::Buffer& buf) const;
     void writeStatistics(::qpid::framing::Buffer& buf, bool skipHeaders = false);
     void doMethod(std::string& methodName,
                   ::qpid::framing::Buffer& inBuf,
                   ::qpid::framing::Buffer& outBuf);
+    void mapEncodeValues(::qpid::messaging::VariantMap& map,
+                         bool includeProperties=true,
+                         bool includeStatistics=true);
+    void mapDecodeValues(const ::qpid::messaging::VariantMap& map);
+    void KAGdoMethod(std::string&           methodName,
+                  const ::qpid::messaging::VariantMap& inMap,
+                  ::qpid::messaging::VariantMap& outMap);
     std::string getKey() const;
     writeSchemaCall_t getWriteSchemaCall() { return writeSchema; }
 /*MGEN:IF(Class.NoStatistics)*/

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.cpp Mon Mar 15 15:55:17 2010
@@ -76,3 +76,9 @@ void Event/*MGEN:Event.NameCap*/::encode
 {
 /*MGEN:Event.ArgEncodes*/
 }
+
+void Event/*MGEN:Event.NameCap*/::mapEncode(::qpid::messaging::MapContent& map) const
+{
+    using namespace ::qpid::messaging;
+/*MGEN:Event.ArgMap*/
+}

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.h
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.h?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.h (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/managementgen/qmfgen/templates/Event.h Mon Mar 15 15:55:17 2010
@@ -26,6 +26,8 @@
 #include "qpid/management/ManagementEvent.h"
 #include "qpid/framing/FieldTable.h"
 #include "qpid/framing/Uuid.h"
+#include "qpid/messaging/MapContent.h"
+#include "qpid/messaging/MapView.h"
 
 namespace qmf {
 /*MGEN:Event.OpenNamespaces*/
@@ -52,6 +54,7 @@ class Event/*MGEN:Event.NameCap*/ : publ
     uint8_t* getMd5Sum() const { return md5Sum; }
     uint8_t getSeverity() const { return /*MGEN:Event.Severity*/; }
     void encode(::qpid::framing::Buffer& buffer) const;
+    void mapEncode(::qpid::messaging::MapContent& map) const;
 };
 
 }/*MGEN:Event.CloseNamespaces*/

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/Makefile.am?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/Makefile.am (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/Makefile.am Mon Mar 15 15:55:17 2010
@@ -129,7 +129,9 @@ libqpidclient_la_CXXFLAGS = $(AM_CXXFLAG
 
 qpidd_LDADD =					\
   libqpidbroker.la				\
-  libqpidcommon.la
+  libqpidcommon.la				\
+  libqpidclient.la
+
 
 posix_qpidd_src = posix/QpiddBroker.cpp
 
@@ -255,12 +257,12 @@ cmodule_LTLIBRARIES += \
 noinst_PROGRAMS = RdmaServer RdmaClient
 RdmaServer_SOURCES = qpid/sys/rdma/RdmaServer.cpp
 RdmaServer_LDADD = \
-  librdmawrap.la libqpidcommon.la
+  librdmawrap.la libqpidcommon.la libqpidclient.la
 RdmaClient_SOURCES = qpid/sys/rdma/RdmaClient.cpp
 RdmaClient_CXXFLAGS = \
   $(AM_CXXFLAGS) -Wno-missing-field-initializers
 RdmaClient_LDADD = \
-  librdmawrap.la libqpidcommon.la
+  librdmawrap.la libqpidcommon.la libqpidclient.la
 
 endif
 

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp Mon Mar 15 15:55:17 2010
@@ -1473,8 +1473,8 @@ void ManagementAgent::RemoteAgent::decod
 uint32_t ManagementAgent::RemoteAgent::encodedSize() const {
     return sizeof(uint32_t) + sizeof(uint32_t) // 2 x Long
         + routingKey.size() + sizeof(uint8_t) // ShortString
-        + connectionRef.encodedSize()
-        + mgmtObject->writePropertiesSize();
+        + connectionRef.encodedBufSize()
+        + mgmtObject->writePropertiesBufSize();
 }
 
 void ManagementAgent::exportAgents(std::string& out) {
@@ -1485,7 +1485,7 @@ void ManagementAgent::exportAgents(std::
     {
         ObjectId id = i->first;
         RemoteAgent* agent = i->second;
-        size_t encodedSize = id.encodedSize() + agent->encodedSize();
+        size_t encodedSize = id.encodedBufSize() + agent->encodedSize();
         size_t end = out.size();
         out.resize(end + encodedSize);
         framing::Buffer outBuf(&out[end], encodedSize);
@@ -1497,7 +1497,7 @@ void ManagementAgent::exportAgents(std::
 void ManagementAgent::importAgents(qpid::framing::Buffer& inBuf) {
     while (inBuf.available()) {
         ObjectId id;
-        inBuf.checkAvailable(id.encodedSize());
+        inBuf.checkAvailable(id.encodedBufSize());
         id.decode(inBuf);
         std::auto_ptr<RemoteAgent> agent(new RemoteAgent(*this));
         agent->decode(inBuf);

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementObject.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementObject.cpp?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementObject.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementObject.cpp Mon Mar 15 15:55:17 2010
@@ -145,6 +145,39 @@ void ObjectId::setV2Key(const Management
     v2Key = oname.str();
 }
 
+void ObjectId::mapEncode(messaging::VariantMap& map) const
+{
+    if (agent == 0)
+        map["_first"] = first;
+    else
+        map["_first"] = (first | agent->first);
+    map["_second"] = second;
+    map["_object_id"] = v2Key;
+}
+
+void ObjectId::mapDecode(const messaging::VariantMap& map)
+{
+    messaging::MapView::const_iterator i;
+
+    if ((i = map.find("_first")) != map.end())
+        first  = i->second.asUint64();
+
+    if ((i = map.find("_second")) != map.end())
+        second = i->second.asUint64();
+
+    if ((i = map.find("_object_id")) != map.end())
+        v2Key = i->second.asString();
+}
+
+
+ObjectId::operator messaging::VariantMap() const
+{
+    messaging::VariantMap m;
+    mapEncode(m);
+    return m;
+}
+
+
 
 namespace qpid {
 namespace management {
@@ -194,7 +227,7 @@ void ManagementObject::readTimestamps (f
     unusedObjectId.decode(buf);
 }
 
-uint32_t ManagementObject::writeTimestampsSize() const
+uint32_t ManagementObject::writeTimestampsBufSize() const
 {
     return 1 + getPackageName().length() +  // str8
         1 + getClassName().length() +       // str8
@@ -202,9 +235,40 @@ uint32_t ManagementObject::writeTimestam
         8 +                                 // uint64
         8 +                                 // uint64
         8 +                                 // uint64
-        objectId.encodedSize();             // objectId
+        objectId.encodedBufSize();             // objectId
 }
 
+
+void ManagementObject::writeTimestamps (messaging::VariantMap& map) const
+{
+    messaging::VariantMap oid, sid;
+
+    sid["_package_name"] = getPackageName();
+    sid["_class_name"] = getClassName();
+    sid["_hash_str"] = std::string((const char *)getMd5Sum(), MD5_LEN);
+    map["_schema_id"] = sid;
+
+    objectId.mapEncode(oid);
+    map["_object_id"] = oid;
+
+    map["_update_ts"] = updateTime;
+    map["_create_ts"] = createTime;
+    map["_delete_ts"] = destroyTime;
+}
+
+void ManagementObject::readTimestamps (const ::qpid::messaging::VariantMap& map)
+{
+    messaging::MapView::const_iterator i;
+
+    if ((i = map.find("_update_ts")) != map.end())
+        updateTime = i->second.asUint64();
+    if ((i = map.find("_create_ts")) != map.end())
+        createTime = i->second.asUint64();
+    if ((i = map.find("_delete_ts")) != map.end())
+        destroyTime = i->second.asUint64();
+}
+
+
 void ManagementObject::setReference(ObjectId) {}
 
 int ManagementObject::getThreadIndex() {
@@ -217,3 +281,26 @@ int ManagementObject::getThreadIndex() {
     }
     return thisIndex;
 }
+
+
+void ManagementObject::mapEncode(::qpid::messaging::VariantMap& map,
+                                 bool includeProperties,
+                                 bool includeStatistics)
+{
+    messaging::VariantMap values;
+
+    writeTimestamps(map);
+
+    mapEncodeValues(values, includeProperties, includeStatistics);
+    map["_values"] = values;
+}
+
+void ManagementObject::mapDecode(const ::qpid::messaging::VariantMap& map)
+{
+    ::qpid::messaging::MapView::const_iterator i;
+
+    readTimestamps(map);
+
+    if ((i = map.find("_values")) != map.end())
+        mapDecodeValues(i->second.asMap());
+}

Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Makefile.am?rev=923310&r1=923309&r2=923310&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Makefile.am (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Makefile.am Mon Mar 15 15:55:17 2010
@@ -269,15 +269,15 @@ txjob_LDADD=$(lib_client) 
 
 check_PROGRAMS+=PollerTest
 PollerTest_SOURCES=PollerTest.cpp
-PollerTest_LDADD=$(lib_common) $(SOCKLIBS)
+PollerTest_LDADD=$(lib_common) $(lib_client) $(SOCKLIBS)
 
 check_PROGRAMS+=DispatcherTest
 DispatcherTest_SOURCES=DispatcherTest.cpp
-DispatcherTest_LDADD=$(lib_common) $(SOCKLIBS)
+DispatcherTest_LDADD=$(lib_common) $(lib_client) $(SOCKLIBS)
 
 check_PROGRAMS+=datagen
 datagen_SOURCES=datagen.cpp
-datagen_LDADD=$(lib_common)
+datagen_LDADD=$(lib_common) $(lib_client)
 
 check_PROGRAMS+=qrsh_server
 qrsh_server_SOURCES=qrsh_server.cpp



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org