summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/DescriptorBuilder.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-12-08 13:04:02 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-12-08 13:04:02 +0000
commit8c3c0a274e70db8018a0d8c8817894ec541110bd (patch)
treed9231b2bfa6221a00348023efe347d4baca38b5c /cpp/src/IceGrid/DescriptorBuilder.cpp
parentAdded replicated IceStorm demo (diff)
downloadice-8c3c0a274e70db8018a0d8c8817894ec541110bd.tar.bz2
ice-8c3c0a274e70db8018a0d8c8817894ec541110bd.tar.xz
ice-8c3c0a274e70db8018a0d8c8817894ec541110bd.zip
Added support for service property sets in server instances
Diffstat (limited to 'cpp/src/IceGrid/DescriptorBuilder.cpp')
-rw-r--r--cpp/src/IceGrid/DescriptorBuilder.cpp59
1 files changed, 51 insertions, 8 deletions
diff --git a/cpp/src/IceGrid/DescriptorBuilder.cpp b/cpp/src/IceGrid/DescriptorBuilder.cpp
index 5a45f597ac5..ddec59870e7 100644
--- a/cpp/src/IceGrid/DescriptorBuilder.cpp
+++ b/cpp/src/IceGrid/DescriptorBuilder.cpp
@@ -150,8 +150,7 @@ DescriptorBuilder::addVariable(const XmlAttributesHelper&)
throw "the <variable> element can't be a child of this element";
}
-PropertySetDescriptorBuilder::PropertySetDescriptorBuilder(const XmlAttributesHelper& attrs) :
- _id(attrs("id")),
+PropertySetDescriptorBuilder::PropertySetDescriptorBuilder() :
_inPropertySetRef(false)
{
}
@@ -162,6 +161,24 @@ PropertySetDescriptorBuilder::PropertySetDescriptorBuilder(const PropertySetDesc
{
}
+void
+PropertySetDescriptorBuilder::setId(const string& id)
+{
+ _id = id;
+}
+
+void
+PropertySetDescriptorBuilder::setService(const string& service)
+{
+ _service = service;
+}
+
+const string&
+PropertySetDescriptorBuilder::getService() const
+{
+ return _service;
+}
+
const string&
PropertySetDescriptorBuilder::getId() const
{
@@ -342,7 +359,11 @@ ApplicationDescriptorBuilder::createServiceTemplate(const XmlAttributesHelper& a
PropertySetDescriptorBuilder*
ApplicationDescriptorBuilder::createPropertySet(const XmlAttributesHelper& attrs) const
{
- return new PropertySetDescriptorBuilder(attrs);
+ string id = attrs("id");
+
+ PropertySetDescriptorBuilder* builder = new PropertySetDescriptorBuilder();
+ builder->setId(id);
+ return builder;
}
void
@@ -412,15 +433,33 @@ ServerInstanceDescriptorBuilder::ServerInstanceDescriptorBuilder(const XmlAttrib
}
PropertySetDescriptorBuilder*
-ServerInstanceDescriptorBuilder::createPropertySet() const
+ServerInstanceDescriptorBuilder::createPropertySet(const XmlAttributesHelper& attrs) const
{
- return new PropertySetDescriptorBuilder(_descriptor.propertySet);
+ string service;
+ if(attrs.contains("service"))
+ {
+ service = attrs("service"); // Can't be empty.
+ }
+
+ PropertySetDescriptorBuilder* builder = new PropertySetDescriptorBuilder();
+ builder->setService(service);
+ return builder;
}
void
-ServerInstanceDescriptorBuilder::addPropertySet(const PropertySetDescriptor& desc)
+ServerInstanceDescriptorBuilder::addPropertySet(const string& service, const PropertySetDescriptor& desc)
{
- _descriptor.propertySet = desc;
+ if(service.empty())
+ {
+ _descriptor.propertySet = desc;
+ }
+ else
+ {
+ if(!_descriptor.servicePropertySets.insert(make_pair(service, desc)).second)
+ {
+ throw "duplicate property set for service `" + service + "'";
+ }
+ }
}
NodeDescriptorBuilder::NodeDescriptorBuilder(ApplicationDescriptorBuilder& app,
@@ -454,7 +493,11 @@ NodeDescriptorBuilder::createServerInstance(const XmlAttributesHelper& attrs)
PropertySetDescriptorBuilder*
NodeDescriptorBuilder::createPropertySet(const XmlAttributesHelper& attrs) const
{
- return new PropertySetDescriptorBuilder(attrs);
+ string id = attrs("id");
+
+ PropertySetDescriptorBuilder* builder = new PropertySetDescriptorBuilder();
+ builder->setId(id);
+ return builder;
}
void