mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-22 16:02:29 +02:00
Add removeRaw, create default JSON::Object in default ctor, trigger events when enabled.
This commit is contained in:
@@ -113,15 +113,20 @@ public:
|
|||||||
/// Saves the configuration to the given stream
|
/// Saves the configuration to the given stream
|
||||||
|
|
||||||
|
|
||||||
void setInt(const std::string& key, int value);
|
virtual void setInt(const std::string& key, int value);
|
||||||
|
|
||||||
|
|
||||||
void setBool(const std::string& key, bool value);
|
virtual void setBool(const std::string& key, bool value);
|
||||||
|
|
||||||
|
|
||||||
void setDouble(const std::string& key, double value);
|
virtual void setDouble(const std::string& key, double value);
|
||||||
|
|
||||||
|
|
||||||
|
virtual void setString(const std::string& key, const std::string& value);
|
||||||
|
|
||||||
|
|
||||||
|
virtual void removeRaw(const std::string& key);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@@ -46,7 +46,7 @@ namespace Poco
|
|||||||
namespace Util
|
namespace Util
|
||||||
{
|
{
|
||||||
|
|
||||||
JSONConfiguration::JSONConfiguration()
|
JSONConfiguration::JSONConfiguration() : _object(new JSON::Object())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ JSON::Object::Ptr JSONConfiguration::findStart(const std::string& key, std::stri
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: throw an error
|
throw SyntaxException("Expected a JSON object");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -240,13 +240,13 @@ JSON::Object::Ptr JSONConfiguration::findStart(const std::string& key, std::stri
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: throw an error
|
throw SyntaxException("Expected a JSON object");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: throw an error
|
throw SyntaxException("Expected a JSON array");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -255,7 +255,15 @@ JSON::Object::Ptr JSONConfiguration::findStart(const std::string& key, std::stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JSONConfiguration::setValue(const std::string& key, const Poco::DynamicAny& value)
|
void JSONConfiguration::setValue(const std::string& key, const Poco::DynamicAny& value)
|
||||||
{
|
{
|
||||||
|
std::string sValue;
|
||||||
|
value.convert<std::string>(sValue);
|
||||||
|
KeyValue kv(key, sValue);
|
||||||
|
if (eventsEnabled())
|
||||||
|
{
|
||||||
|
propertyChanging(this, kv);
|
||||||
|
}
|
||||||
|
|
||||||
std::string lastPart;
|
std::string lastPart;
|
||||||
JSON::Object::Ptr parentObject = findStart(key, lastPart);
|
JSON::Object::Ptr parentObject = findStart(key, lastPart);
|
||||||
|
|
||||||
@@ -276,7 +284,7 @@ void JSONConfiguration::setValue(const std::string& key, const Poco::DynamicAny&
|
|||||||
}
|
}
|
||||||
else if ( result.type() != typeid(JSON::Array::Ptr) )
|
else if ( result.type() != typeid(JSON::Array::Ptr) )
|
||||||
{
|
{
|
||||||
//TODO: throw error
|
throw SyntaxException("Expected a JSON array");
|
||||||
}
|
}
|
||||||
|
|
||||||
JSON::Array::Ptr arr = result.extract<JSON::Array::Ptr>();
|
JSON::Array::Ptr arr = result.extract<JSON::Array::Ptr>();
|
||||||
@@ -296,12 +304,21 @@ void JSONConfiguration::setValue(const std::string& key, const Poco::DynamicAny&
|
|||||||
arr = nextArray;
|
arr = nextArray;
|
||||||
}
|
}
|
||||||
arr->add(value);
|
arr->add(value);
|
||||||
|
}
|
||||||
|
if (eventsEnabled())
|
||||||
|
{
|
||||||
|
propertyChanged(this, kv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JSONConfiguration::setString(const std::string& key, const std::string& value)
|
||||||
|
{
|
||||||
|
setValue(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void JSONConfiguration::setRaw(const std::string& key, const std::string& value)
|
void JSONConfiguration::setRaw(const std::string& key, const std::string& value)
|
||||||
{
|
{
|
||||||
setValue(key, value);
|
setValue(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,7 +333,7 @@ void JSONConfiguration::setBool(const std::string& key, bool value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JSONConfiguration::setDouble(const std::string& key, double value)
|
void JSONConfiguration::setDouble(const std::string& key, double value)
|
||||||
{
|
{
|
||||||
setValue(key, value);
|
setValue(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,6 +352,33 @@ void JSONConfiguration::enumerate(const std::string& key, Keys& range) const
|
|||||||
void JSONConfiguration::save(std::ostream& ostr, unsigned int indent) const
|
void JSONConfiguration::save(std::ostream& ostr, unsigned int indent) const
|
||||||
{
|
{
|
||||||
_object->stringify(ostr, indent);
|
_object->stringify(ostr, indent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JSONConfiguration::removeRaw(const std::string& key)
|
||||||
|
{
|
||||||
|
std::string lastPart;
|
||||||
|
JSON::Object::Ptr parentObject = findStart(key, lastPart);
|
||||||
|
|
||||||
|
std::vector<int> indexes;
|
||||||
|
getIndexes(lastPart, indexes);
|
||||||
|
|
||||||
|
if ( indexes.empty() ) // No Array
|
||||||
|
{
|
||||||
|
parentObject->remove(lastPart);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DynamicAny result = parentObject->get(lastPart);
|
||||||
|
if ( !result.isEmpty() && result.type() == typeid(JSON::Array::Ptr) )
|
||||||
|
{
|
||||||
|
JSON::Array::Ptr arr = result.extract<JSON::Array::Ptr>();
|
||||||
|
for(std::vector<int>::iterator it = indexes.begin(); it != indexes.end() - 1; ++it)
|
||||||
|
{
|
||||||
|
arr = arr->getArray(*it);
|
||||||
|
}
|
||||||
|
arr->remove(indexes.back());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}} // Namespace Poco::Util
|
}} // Namespace Poco::Util
|
||||||
|
Reference in New Issue
Block a user