diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-04-12 15:08:12 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-04-12 15:08:12 +0000 |
commit | 7c5db47e825684881b0aff96f6151063ab60ec56 (patch) | |
tree | 7904cb72e9ba087d66fd2199de57685c7dc9d4c6 /cpp/src | |
parent | Fix (diff) | |
download | ice-7c5db47e825684881b0aff96f6151063ab60ec56.tar.bz2 ice-7c5db47e825684881b0aff96f6151063ab60ec56.tar.xz ice-7c5db47e825684881b0aff96f6151063ab60ec56.zip |
Fix
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceGrid/DescriptorBuilder.cpp | 76 | ||||
-rw-r--r-- | cpp/src/IceGrid/DescriptorBuilder.h | 12 | ||||
-rw-r--r-- | cpp/src/IceGrid/DescriptorParser.cpp | 2 |
3 files changed, 53 insertions, 37 deletions
diff --git a/cpp/src/IceGrid/DescriptorBuilder.cpp b/cpp/src/IceGrid/DescriptorBuilder.cpp index 1a26d777b1b..a6f69f6322e 100644 --- a/cpp/src/IceGrid/DescriptorBuilder.cpp +++ b/cpp/src/IceGrid/DescriptorBuilder.cpp @@ -156,19 +156,14 @@ DescriptorBuilder::createPropertySet(const XmlAttributesHelper& attrs) const return new PropertySetDescriptorBuilder(attrs); } -PropertySetDescriptorBuilder* -DescriptorBuilder::createPropertySet() const -{ - return new PropertySetDescriptorBuilder(); -} - PropertySetDescriptorBuilder::PropertySetDescriptorBuilder(const XmlAttributesHelper& attrs) : _id(attrs("id")), _inPropertySetRef(false) { } -PropertySetDescriptorBuilder::PropertySetDescriptorBuilder() : +PropertySetDescriptorBuilder::PropertySetDescriptorBuilder(const PropertySetDescriptor& desc) : + _descriptor(desc), _inPropertySetRef(false) { } @@ -410,16 +405,16 @@ ServerInstanceDescriptorBuilder::ServerInstanceDescriptorBuilder(const XmlAttrib _descriptor.parameterValues.erase("template"); } +PropertySetDescriptorBuilder* +ServerInstanceDescriptorBuilder::createPropertySet() const +{ + return new PropertySetDescriptorBuilder(_descriptor.propertySet); +} + void ServerInstanceDescriptorBuilder::addPropertySet(const PropertySetDescriptor& desc) { - // - // Merge with existing property set. - // - _descriptor.propertySet.properties.insert(_descriptor.propertySet.properties.end(), - desc.properties.begin(), desc.properties.end()); - _descriptor.propertySet.references.insert(_descriptor.propertySet.references.end(), - desc.references.begin(), desc.references.end()); + _descriptor.propertySet = desc; } NodeDescriptorBuilder::NodeDescriptorBuilder(ApplicationDescriptorBuilder& app, const XmlAttributesHelper& attrs) : @@ -558,6 +553,19 @@ CommunicatorDescriptorBuilder::init(const CommunicatorDescriptorPtr& desc, const } void +CommunicatorDescriptorBuilder::finish() +{ + // + // Add the hidden properties at the begining of the communicator + // properties. These properties are not added directly to the + // property set because it's not allowed to define properties + // before references to property sets. + // + _descriptor->propertySet.properties.insert(_descriptor->propertySet.properties.begin(), + _hiddenProperties.begin(), _hiddenProperties.end()); +} + +void CommunicatorDescriptorBuilder::setDescription(const string& desc) { _descriptor->description = desc; @@ -566,19 +574,19 @@ CommunicatorDescriptorBuilder::setDescription(const string& desc) void CommunicatorDescriptorBuilder::addProperty(const XmlAttributesHelper& attrs) { - addProperty(attrs("name"), attrs("value", "")); + addProperty(_descriptor->propertySet.properties, attrs("name"), attrs("value", "")); +} + +PropertySetDescriptorBuilder* +CommunicatorDescriptorBuilder::createPropertySet() const +{ + return new PropertySetDescriptorBuilder(_descriptor->propertySet); } void CommunicatorDescriptorBuilder::addPropertySet(const PropertySetDescriptor& desc) { - // - // Merge with existing property set. - // - _descriptor->propertySet.properties.insert(_descriptor->propertySet.properties.end(), - desc.properties.begin(), desc.properties.end()); - _descriptor->propertySet.references.insert(_descriptor->propertySet.references.end(), - desc.references.begin(), desc.references.end()); + _descriptor->propertySet = desc; } void @@ -613,7 +621,7 @@ CommunicatorDescriptorBuilder::addAdapter(const XmlAttributesHelper& attrs) if(attrs.contains("endpoints")) { - addProperty(desc.name + ".Endpoints", attrs("endpoints")); + addProperty(_hiddenProperties, desc.name + ".Endpoints", attrs("endpoints")); } } @@ -685,12 +693,12 @@ CommunicatorDescriptorBuilder::setDbEnvDescription(const string& value) } void -CommunicatorDescriptorBuilder::addProperty(const string& name, const string& value) +CommunicatorDescriptorBuilder::addProperty(PropertyDescriptorSeq& properties, const string& name, const string& value) { PropertyDescriptor prop; prop.name = name; prop.value = value; - _descriptor->propertySet.properties.push_back(prop); + properties.push_back(prop); } ServiceInstanceDescriptorBuilder::ServiceInstanceDescriptorBuilder(const XmlAttributesHelper& attrs) @@ -700,16 +708,16 @@ ServiceInstanceDescriptorBuilder::ServiceInstanceDescriptorBuilder(const XmlAttr _descriptor.parameterValues.erase("template"); } +PropertySetDescriptorBuilder* +ServiceInstanceDescriptorBuilder::createPropertySet() const +{ + return new PropertySetDescriptorBuilder(_descriptor.propertySet); +} + void ServiceInstanceDescriptorBuilder::addPropertySet(const PropertySetDescriptor& desc) { - // - // Merge with existing property set. - // - _descriptor.propertySet.properties.insert(_descriptor.propertySet.properties.end(), - desc.properties.begin(), desc.properties.end()); - _descriptor.propertySet.references.insert(_descriptor.propertySet.references.end(), - desc.references.begin(), desc.references.end()); + _descriptor.propertySet = desc; } ServerDescriptorBuilder::ServerDescriptorBuilder(const XmlAttributesHelper& attrs) @@ -796,7 +804,7 @@ IceBoxDescriptorBuilder::init(const IceBoxDescriptorPtr& desc, const XmlAttribut ServerDescriptorBuilder::init(desc, attrs); _descriptor = desc; - addProperty("IceBox.InstanceName", _descriptor->id); + addProperty(_hiddenProperties, "IceBox.InstanceName", _descriptor->id); AdapterDescriptor adapter; adapter.name = "IceBox.ServiceManager"; @@ -805,7 +813,7 @@ IceBoxDescriptorBuilder::init(const IceBoxDescriptorPtr& desc, const XmlAttribut adapter.waitForActivation = true; _descriptor->adapters.push_back(adapter); - addProperty("IceBox.ServiceManager.Endpoints", "tcp -h 127.0.0.1"); + addProperty(_hiddenProperties, "IceBox.ServiceManager.Endpoints", "tcp -h 127.0.0.1"); } ServiceDescriptorBuilder* diff --git a/cpp/src/IceGrid/DescriptorBuilder.h b/cpp/src/IceGrid/DescriptorBuilder.h index 02f4a4e4fe0..26b68ac9952 100644 --- a/cpp/src/IceGrid/DescriptorBuilder.h +++ b/cpp/src/IceGrid/DescriptorBuilder.h @@ -53,7 +53,6 @@ public: virtual void addVariable(const XmlAttributesHelper&); virtual PropertySetDescriptorBuilder* createPropertySet(const XmlAttributesHelper&) const; - virtual PropertySetDescriptorBuilder* createPropertySet() const; }; class PropertySetDescriptorBuilder : DescriptorBuilder @@ -61,7 +60,7 @@ class PropertySetDescriptorBuilder : DescriptorBuilder public: PropertySetDescriptorBuilder(const XmlAttributesHelper&); - PropertySetDescriptorBuilder(); + PropertySetDescriptorBuilder(const PropertySetDescriptor&); const std::string& getId() const; const PropertySetDescriptor& getDescriptor() const; @@ -129,6 +128,7 @@ public: ServerInstanceDescriptorBuilder(const XmlAttributesHelper&); const ServerInstanceDescriptor& getDescriptor() const { return _descriptor; } + virtual PropertySetDescriptorBuilder* createPropertySet() const; virtual void addPropertySet(const PropertySetDescriptor&); private: @@ -194,6 +194,7 @@ class CommunicatorDescriptorBuilder : public DescriptorBuilder public: void init(const CommunicatorDescriptorPtr&, const XmlAttributesHelper&); + virtual void finish(); virtual void setDescription(const std::string&); virtual void addProperty(const XmlAttributesHelper&); @@ -205,9 +206,13 @@ public: virtual void addDbEnvProperty(const XmlAttributesHelper&); virtual void setDbEnvDescription(const std::string&); + virtual PropertySetDescriptorBuilder* createPropertySet() const; + protected: - void addProperty(const std::string&, const std::string&); + void addProperty(PropertyDescriptorSeq&, const std::string&, const std::string&); + + PropertyDescriptorSeq _hiddenProperties; private: @@ -221,6 +226,7 @@ public: ServiceInstanceDescriptorBuilder(const XmlAttributesHelper&); const ServiceInstanceDescriptor& getDescriptor() const { return _descriptor; } + virtual PropertySetDescriptorBuilder* createPropertySet() const; virtual void addPropertySet(const PropertySetDescriptor&); private: diff --git a/cpp/src/IceGrid/DescriptorParser.cpp b/cpp/src/IceGrid/DescriptorParser.cpp index 7730f6d6604..e734711e100 100644 --- a/cpp/src/IceGrid/DescriptorParser.cpp +++ b/cpp/src/IceGrid/DescriptorParser.cpp @@ -502,6 +502,7 @@ DescriptorHandler::endElement(const string& name, int line, int column) assert(_currentNode.get()); _currentNode->addServer(_currentServer->getDescriptor()); } + _currentServer->finish(); _currentServer.reset(0); _currentCommunicator = 0; } @@ -522,6 +523,7 @@ DescriptorHandler::endElement(const string& name, int line, int column) { _currentTemplate->setDescriptor(_currentService->getDescriptor()); } + _currentService->finish(); _currentService.reset(0); _currentCommunicator = _currentServer.get(); } |