CasePacker.cpp 2.23 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1
#include "ros_bridge/include/CasePacker.h"
2 3 4 5

const char* ROSBridge::CasePacker::topicKey         = "topic";
const char* ROSBridge::CasePacker::messageTypeKey   = "messageType";

Valentin Platzgummer's avatar
Valentin Platzgummer committed
6 7 8
ROSBridge::CasePacker::CasePacker(TypeFactory *typeFactory, JsonFactory *jsonFactory) :
    _typeFactory(typeFactory)
  , _jsonFactory(jsonFactory)
9 10 11 12
{

}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
13
bool ROSBridge::CasePacker::getTag(const JsonDocUPtr &pDoc, Tag &tag) const
Valentin Platzgummer's avatar
Valentin Platzgummer committed
14
{
Valentin Platzgummer's avatar
Valentin Platzgummer committed
15
    if( !getTopic(pDoc, tag.topic()) )
Valentin Platzgummer's avatar
Valentin Platzgummer committed
16
        return false;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
17
    if( !getMessageType(pDoc, tag.messageType()) )
Valentin Platzgummer's avatar
Valentin Platzgummer committed
18 19 20 21
        return false;
    return true;
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
22
void ROSBridge::CasePacker::addTag(JsonDocUPtr &pDoc, const std::string &topic, const std::string &messageType) const
23 24 25 26 27 28
{
    using namespace ROSBridge;
    using namespace rapidjson;

    {
    // add topic
Valentin Platzgummer's avatar
Valentin Platzgummer committed
29 30 31
    rapidjson::Value key(CasePacker::topicKey, pDoc->GetAllocator());
    rapidjson::Value value(topic.c_str(), pDoc->GetAllocator());
    pDoc->AddMember(key, value, pDoc->GetAllocator());
32 33 34
    }

    // add messageType
Valentin Platzgummer's avatar
Valentin Platzgummer committed
35 36 37
    rapidjson::Value key(CasePacker::messageTypeKey, pDoc->GetAllocator());
    rapidjson::Value value(messageType.c_str(), pDoc->GetAllocator());
    pDoc->AddMember(key, value, pDoc->GetAllocator());
38 39
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
40
void ROSBridge::CasePacker::addTag(JsonDocUPtr &doc, const ROSBridge::CasePacker::Tag &tag) const
Valentin Platzgummer's avatar
Valentin Platzgummer committed
41 42 43 44
{
    addTag(doc, tag.topic(), tag.messageType());
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
45
void ROSBridge::CasePacker::removeTag(JsonDocUPtr &pDoc) const
46 47 48
{
    using namespace ROSBridge;
    using namespace rapidjson;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
49 50 51 52
    if ( pDoc->HasMember(CasePacker::topicKey) )
        pDoc->RemoveMember(CasePacker::topicKey);
    if ( pDoc->HasMember(CasePacker::messageTypeKey) )
        pDoc->RemoveMember(CasePacker::messageTypeKey);
53 54
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
55
bool ROSBridge::CasePacker::getTopic(const JsonDocUPtr &pDoc, std::string &topic) const
Valentin Platzgummer's avatar
Valentin Platzgummer committed
56
{
Valentin Platzgummer's avatar
Valentin Platzgummer committed
57
    if (!pDoc->HasMember(CasePacker::topicKey) || !(*pDoc)[CasePacker::topicKey].IsString())
Valentin Platzgummer's avatar
Valentin Platzgummer committed
58
        return false;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
59
    topic = (*pDoc)[CasePacker::topicKey].GetString();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
60 61
    return true;
}
62

Valentin Platzgummer's avatar
Valentin Platzgummer committed
63
bool ROSBridge::CasePacker::getMessageType(const JsonDocUPtr&pDoc, std::string &messageType) const
Valentin Platzgummer's avatar
Valentin Platzgummer committed
64
{
Valentin Platzgummer's avatar
Valentin Platzgummer committed
65
    if (!pDoc->HasMember(CasePacker::messageTypeKey) || !(*pDoc)[CasePacker::messageTypeKey].IsString())
Valentin Platzgummer's avatar
Valentin Platzgummer committed
66
        return false;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
67
    messageType = (*pDoc)[CasePacker::messageTypeKey].GetString();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
68 69
    return true;
}