diff options
Diffstat (limited to 'TAO/CIAO/DAnCE/Old_Config_Handlers/Requirement_Handler.cpp')
-rw-r--r-- | TAO/CIAO/DAnCE/Old_Config_Handlers/Requirement_Handler.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/TAO/CIAO/DAnCE/Old_Config_Handlers/Requirement_Handler.cpp b/TAO/CIAO/DAnCE/Old_Config_Handlers/Requirement_Handler.cpp new file mode 100644 index 00000000000..2b6eb94fb9c --- /dev/null +++ b/TAO/CIAO/DAnCE/Old_Config_Handlers/Requirement_Handler.cpp @@ -0,0 +1,115 @@ +//$Id$ + +#include "Requirement_Handler.h" +#include "Property_Handler.h" +#include "Utils.h" +#include "tao/Exception.h" +#include "ace/SString.h" + + +using CIAO::Config_Handler::Property_Handler; + +void +CIAO::Config_Handler::Requirement_Handler::process_Requirement (DOMNodeIterator * iter, + Deployment::Requirement &ret_struct) +{ + int valid_resourceType = 0, valid_property = 0, valid_name = 0; + for (DOMNode * node = iter->nextNode (); + node != 0; + node = iter->nextNode ()) + { + XStr name (node->getNodeName ()); + if (name == XStr (ACE_TEXT ("resourceType"))) + { + valid_resourceType = 1; + // Populate the structure + ret_struct.resourceType = + CIAO::Config_Handler::Utils::parse_string (iter); + } + else if (name == XStr (ACE_TEXT ("property"))) + { + Deployment::Properties_var properties = 0; + ACE_NEW_THROW_EX (properties, + Deployment::Properties, + CORBA::NO_MEMORY ()); + properties->length (0); + + for (node = iter->nextNode (); + name == XStr (ACE_TEXT ("property")); + iter->nextNode ()) + { + // Increment length of sequence + ::CORBA::ULong index = properties->length (); + properties->length (properties->length () + 1); + DOMNodeIterator * property_iter = 0; + + // Check for <href> tags + if (node->hasAttributes ()) + { + xercesc::DOMNamedNodeMap * named_node_map = + node->getAttributes (); + int length = named_node_map->getLength (); + + if (length > 1) + { + for (int j = 0; j < length; j++) + { + DOMNode * attr_node = named_node_map->item (j); + XStr attr_node_name = attr_node->getNodeName (); + char* attr_node_value_ch = + XMLString::transcode (attr_node->getNodeValue ()); + ACE_TString attr_node_value = attr_node_value_ch; + auto_ptr<char> cleanup_char (attr_node_value_ch); + if (attr_node_name = XStr (ACE_TEXT ("href"))) + { + XMLURL url (attr_node_value.c_str ()); + DOMNodeIterator * value_iter = + Utils::parse_href_tag (url, + node->getOwnerDocument ()); + // Get to the root-node + value_iter->nextNode (); + + // Process the property href tag + property_iter = value_iter; + } + } + } + else + property_iter = iter; + + // Deep copy the value + CIAO::Config_Handler::Property_Handler:: + process_Property (property_iter, properties [index]); + } + } + valid_property = 1; + + // On exit go one step back to faciliate parsing next tag + iter->previousNode (); + + // Copy sequence on to return struct + ret_struct.property = properties; + } + else if (name == XStr (ACE_TEXT ("name"))) + { + valid_name = 1; + ret_struct.name = CIAO::Config_Handler::Utils::parse_string (iter); + } + else + { + if (! valid_resourceType || + ! valid_property || + ! valid_name) + { + ACE_DEBUG ((LM_DEBUG, + "Config_Handlers::Requirement_Handler::process_\ + Requirement element mismatch expected <resourceType>\ + , <property> or <name>")); + ACE_THROW (CORBA::INTERNAL ()); + } + // On exit go one step back as we have read one too many + iter->previousNode (); + break; + } + } +} |