diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-12-08 13:04:02 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-12-08 13:04:02 +0000 |
commit | 8c3c0a274e70db8018a0d8c8817894ec541110bd (patch) | |
tree | d9231b2bfa6221a00348023efe347d4baca38b5c /cpp/src/IceGrid/DescriptorBuilder.cpp | |
parent | Added replicated IceStorm demo (diff) | |
download | ice-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.cpp | 59 |
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 |