1 #ifndef _MAPPROPERTYTYPE_H_
2 #define _MAPPROPERTYTYPE_H_
5 #include "abstractpropertytype.h"
12 class MapPropertyType: public AbstractPropertyType
15 MapPropertyType(std::string propertyName):AbstractPropertyType(propertyName){}
17 void append(std::string key, N value)
19 appendPriv(key, value);
22 AbstractPropertyType* copy()
24 MapPropertyType<N> *t = new MapPropertyType<N>(name);
27 t->timestamp = timestamp;
28 t->sequence = sequence;
29 t->sourceUuid = sourceUuid;
36 std::string toString() const
38 std::stringstream str;
48 str <<"\""<< itr.first <<"\":\""<<itr.second.toString()<<"\"";
56 void fromString(std::string str)
60 DebugOut() << str << endl;
62 picojson::value value;
63 picojson::parse(value, str);
65 std::string picojsonerr = picojson::get_last_error();
67 if(!value.is<picojson::object>() || !picojsonerr.empty())
69 DebugOut(DebugOut::Warning) << "JSon is invalid for MapPropertyType: " << str << endl;
70 DebugOut(DebugOut::Warning) << picojsonerr << endl;
74 const picojson::object& obj = value.get<picojson::object>();
76 DebugOut() << "obj size: " << obj.size() << endl;
80 std::string key = i.first;
82 val.fromString(i.second.to_str());
89 GVariantBuilder params;
90 g_variant_builder_init(¶ms, G_VARIANT_TYPE_DICTIONARY);
91 for(auto itr = mMap.begin(); itr != mMap.end(); itr++)
93 auto &foo = (*itr).first;
94 g_variant_builder_add(¶ms,"{sv}",foo.c_str(), (*itr).second.toVariant());
97 GVariant* var = g_variant_builder_end(¶ms);
102 void fromVariant(GVariant* variant)
105 gsize dictsize = g_variant_n_children(variant);
106 for (int i=0;i<dictsize;i++)
108 GVariant *childvariant = g_variant_get_child_value(variant,i);
109 gsize dictvalsize = g_variant_n_children(childvariant);
110 if (dictvalsize == 2)
112 //It is a dictionary entry
113 GVariant *keyvariant = g_variant_get_child_value(childvariant,0);
114 GVariant *valvariant = g_variant_get_child_value(childvariant,1);
115 std::string key = g_variant_get_string(keyvariant, nullptr);
117 GVariant *innerValue = nullptr;
119 DebugOut() << "variantType: " << g_variant_get_type_string(valvariant) << endl;
121 g_variant_get(valvariant, "v", &innerValue);
123 DebugOut() << "inner variange: " << g_variant_get_type_string(innerValue) << endl;
125 n.fromVariant(innerValue);
132 void setMap(std::map<std::string, N> m)
144 void appendPriv(std::string key, N value)
149 std::map<std::string, N> mMap;