summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-07-01 21:00:46 +0000
committerjai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-07-01 21:00:46 +0000
commit402ac51fb8e507cd03fafe2d707be02907b527c1 (patch)
treec2434704c69bab206f23bf589fb4b15a59b858d5
parent4c555a4d9a3e6549e15e27347ddd9c7042f75c14 (diff)
downloadATCD-402ac51fb8e507cd03fafe2d707be02907b527c1.tar.gz
Thu Jul 1 15:54:15 2004 Jaiganesh B <jai@dre.vanderbilt.edu>
-rw-r--r--TAO/CIAO/ChangeLog49
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.cpp403
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.h127
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.cpp27
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.h63
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.cpp73
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.h99
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.cpp28
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.h64
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.cpp58
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.h106
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.cpp54
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.h116
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.cpp44
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.h84
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.cpp47
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.h87
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.cpp75
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.h91
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.cpp624
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.h251
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Process_Element.cpp121
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Process_Element.h192
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.cpp294
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.h90
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.cpp81
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.h57
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.cpp128
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.h57
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.cpp61
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.h77
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.cpp113
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.h57
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.cpp41
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.h57
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.cpp79
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.h56
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.cpp88
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.h87
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Utils.cpp353
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/Utils.h118
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/XercesString.cpp145
-rw-r--r--TAO/CIAO/DAnCE/Config_Handlers/XercesString.h76
43 files changed, 4998 insertions, 0 deletions
diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog
index 5f1f76e12e0..ffcb2d4a6f1 100644
--- a/TAO/CIAO/ChangeLog
+++ b/TAO/CIAO/ChangeLog
@@ -1,3 +1,52 @@
+Thu Jul 1 15:54:15 2004 Jaiganesh B <jai@dre.vanderbilt.edu>
+
+ * DAnCE/Config_Handlers/Domain_Handler.cpp:
+ * DAnCE/Config_Handlers/Domain_Handler.h:
+ * DAnCE/Config_Handlers/ERE_Handler.cpp:
+ * DAnCE/Config_Handlers/ERE_Handler.h:
+ * DDAnCE/Config_Handlers/IAD_Handler.h
+ * DAnCE/Config_Handlers/IAD_Handler.cpp:
+ * DAnCE/Config_Handlers/ID_Handler.cpp:
+ * DAnCE/Config_Handlers/ID_Handler.h:
+ * DAnCE/Config_Handlers/IR_Handler.cpp:
+ * DAnCE/Config_Handlers/IR_Handler.h:
+ * DAnCE/Config_Handlers/MID_Handler.cpp:
+ * DAnCE/Config_Handlers/MID_Handler.h:
+ * DAnCE/Config_Handlers/NIA_Handler.cpp:
+ * DAnCE/Config_Handlers/NIA_Handler.h:
+ * DAnCE/Config_Handlers/PCI_Handler.cpp:
+ * DAnCE/Config_Handlers/PCI_Handler.h:
+ * DAnCE/Config_Handlers/PC_Handler.cpp:
+ * DAnCE/Config_Handlers/PC_Handler.h:
+ * DAnCE/Config_Handlers/Plan_Handler.cpp:
+ * DAnCE/Config_Handlers/Plan_Handler.h:
+ * DAnCE/Config_Handlers/Process_Element.cpp:
+ * DAnCE/Config_Handlers/Process_Element.h:
+ * DAnCE/Config_Handlers/Process_Element_T.cpp:
+ * DAnCE/Config_Handlers/Process_Element_T.h:
+ * DAnCE/Config_Handlers/Property_Handler.cpp:
+ * DAnCE/Config_Handlers/Property_Handler.h:
+ * DAnCE/Config_Handlers/RS_Handler.cpp:
+ * DAnCE/Config_Handlers/RS_Handler.h:
+ * DAnCE/Config_Handlers/RUK_Handler.cpp:
+ * DAnCE/Config_Handlers/RUK_Handler.h:
+ * DAnCE/Config_Handlers/Requirement_Handler.cpp:
+ * DAnCE/Config_Handlers/Requirement_Handler.h:
+ * DAnCE/Config_Handlers/SPK_Handler.cpp:
+ * DAnCE/Config_Handlers/SPK_Handler.h:
+ * DAnCE/Config_Handlers/SP_Handler.cpp:
+ * DAnCE/Config_Handlers/SP_Handler.h:
+ * DAnCE/Config_Handlers/TPD_Handler.cpp:
+ * DAnCE/Config_Handlers/TPD_Handler.h:
+ * DAnCE/Config_Handlers/Utils.cpp:
+ * DAnCE/Config_Handlers/Utils.h:
+ * DAnCE/Config_Handlers/XercesString.cpp:
+ * DAnCE/Config_Handlers/XercesString.h:
+
+ First cut check-in for XML handlers.
+
+
+
Thu Jul 1 15:51:14 2004 Jaiganesh B <jai@dre.vanderbilt.edu>
* DAnCE/DomainApplicationManager/Deployment_Configuration.cpp:
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.cpp
new file mode 100644
index 00000000000..5d6d1456e07
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.cpp
@@ -0,0 +1,403 @@
+// $Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "Domain_Handler.h"
+#include "Property_Handler.h"
+#include "SP_Handler.h"
+#include "Process_Element.h"
+#include "Utils.h"
+#include <iostream>
+#include "string.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the Domain type and populate the IDL structure
+void Domain_Handler::process_domain (Deployment::Domain& domain)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName ());
+
+ if (node_name == XStr (ACE_TEXT ("Deployment:Domain")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "UUID", domain.UUID));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "label", domain.label));
+ else if
+ (process_sequence_local<Deployment::SharedResource>
+ (this->doc_, this->iter_, node,
+ node_name, "sharedResource", domain.sharedResource,
+ this, &Domain_Handler::process_sr));
+ else if
+ (process_sequence_local<Deployment::Node>
+ (this->doc_, this->iter_, node,
+ node_name, "node", domain.node,
+ this, &Domain_Handler::process_node));
+ else if
+ (process_sequence_local<Deployment::Interconnect>
+ (this->doc_, this->iter_, node,
+ node_name, "interconnect", domain.interconnect,
+ this, &Domain_Handler::process_interconnect));
+ else if
+ (process_sequence_local<Deployment::Bridge>
+ (this->doc_, this->iter_, node,
+ node_name, "bridge", domain.bridge,
+ this, &Domain_Handler::process_bridge));
+ else if
+ (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "infoProperty", domain.infoProperty,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else
+ {
+ // ??? How did we get here ???
+ ACE_THROW (CORBA::INTERNAL());
+ }
+ }
+
+ this->update_node_refs (domain);
+ this->update_ic_refs (domain);
+ this->update_bridge_refs (domain);
+ this->update_sr_refs (domain);
+
+ return;
+}
+
+void Domain_Handler::process_node (DOMNodeIterator* iter,
+ Deployment::Node& domain_node)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:Node")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", domain_node.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "label", domain_node.label));
+ else if
+ (process_sequence_local<Deployment::Resource>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "resource", domain_node.resource,
+ this, &Domain_Handler::process_resource));
+ else if
+ (process_reference_seq (node, node_name, "connection",
+ domain_node.connectionRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_reference_seq (node, node_name, "sharedResource",
+ domain_node.sharedResourceRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Domain_Handler::process_resource (DOMNodeIterator* iter,
+ Deployment::Resource& domain_resource)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:Resource")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", domain_resource.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "resourceType", domain_resource.resourceType));
+ else if
+ (process_sequence_common<Deployment::SatisfierProperty>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "property", domain_resource.property,
+ &SP_Handler::process_SatisfierProperty,
+ this->id_map_));
+ else
+ {
+ node = iter->previousNode ();
+ break;
+ }
+ }
+}
+
+void Domain_Handler::process_bridge (DOMNodeIterator* iter,
+ Deployment::Bridge& domain_bridge)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:Bridge")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", domain_bridge.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "label", domain_bridge.label));
+ else if
+ (process_reference_seq (node, node_name, "connect",
+ domain_bridge.connectRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_sequence_local<Deployment::Resource>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "resource", domain_bridge.resource,
+ this, &Domain_Handler::process_resource));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+
+void Domain_Handler::process_interconnect (DOMNodeIterator* iter,
+ Deployment::Interconnect& domain_ic)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:Interconnect")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", domain_ic.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "label", domain_ic.label));
+ else if
+ (process_reference_seq (node, node_name, "connect",
+ domain_ic.connectRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_reference_seq (node, node_name, "connection",
+ domain_ic.connectionRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_sequence_local<Deployment::Resource>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "resource", domain_ic.resource,
+ this, &Domain_Handler::process_resource));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+
+void Domain_Handler::process_sr (DOMNodeIterator* iter,
+ Deployment::SharedResource& domain_sr)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:SharedResource")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", domain_sr.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "resourceType",
+ domain_sr.resourceType));
+ else if
+ (process_reference_seq (node, node_name, "node",
+ domain_sr.nodeRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_sequence_common<Deployment::SatisfierProperty>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "property", domain_sr.property,
+ &SP_Handler::process_SatisfierProperty,
+ this->id_map_));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Domain_Handler::update_node_refs (Deployment::Domain& domain)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < domain.node.length (); ++x)
+ {
+ for (y = 0; y < domain.node[x].connectionRef.length (); ++y)
+ {
+ ref_value = domain.node[x].connectionRef[y];
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ domain.node[x].connectionRef[y] = orig_value;
+ }
+ }
+ }
+
+ for (y = 0; y < domain.node[x].sharedResourceRef.length (); ++y)
+ {
+ ref_value = domain.node[x].sharedResourceRef[y];
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ domain.node[x].sharedResourceRef[y] = orig_value;
+ }
+ }
+ }
+
+ }
+}
+
+void Domain_Handler::update_ic_refs (Deployment::Domain& domain)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < domain.interconnect.length (); ++x)
+ {
+ for (y = 0; y < domain.interconnect[x].connectionRef.length (); ++y)
+ {
+ ref_value = domain.interconnect[x].connectionRef[y];
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ domain.interconnect[x].connectionRef[y] = orig_value;
+ }
+ }
+ }
+
+ for (y = 0; y < domain.interconnect[x].connectRef.length (); ++y)
+ {
+ ref_value = domain.interconnect[x].connectRef[y];
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ domain.interconnect[x].connectRef[y] = orig_value;
+ }
+ }
+ }
+ }
+}
+
+void Domain_Handler::update_bridge_refs (Deployment::Domain& domain)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < domain.bridge.length (); ++x)
+ {
+ for (y = 0; y < domain.bridge[x].connectRef.length (); ++y)
+ {
+ ref_value = domain.bridge[x].connectRef[y];
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ domain.bridge[x].connectRef[y] = orig_value;
+ }
+ }
+ }
+ }
+}
+
+void Domain_Handler::update_sr_refs (Deployment::Domain& domain)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < domain.sharedResource.length (); ++x)
+ {
+ for (y = 0; y < domain.sharedResource[x].nodeRef.length (); ++y)
+ {
+ ref_value = domain.sharedResource[x].nodeRef[y];
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ domain.sharedResource[x].nodeRef[y] = orig_value;
+ }
+ }
+ }
+ }
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.h
new file mode 100644
index 00000000000..a29e7cf7fd1
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Domain_Handler.h
@@ -0,0 +1,127 @@
+//==================================================================
+/**
+ * @file Domain_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jaiganesh Balasubramanian <jai@dre.vanderbilt.edu>
+ */
+//=====================================================================
+#ifndef DOMAIN_HANDLER_H
+#define DOMAIN_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "Basic_Handler.h"
+#include "XercesString.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_main.h"
+#include "tao/Exception.h"
+#include "XercesString.h"
+#include <xercesc/util/XMLUniDefs.hpp>
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLUri.hpp>
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLUri;
+using xercesc::XMLURL;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMInputSource;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMNodeFilter;
+using xercesc::DOMNamedNodeMap;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class Domain_Handler
+ *
+ * @brief Handler class for <Domain> type
+ *
+ * This class is within the Target Data Model subpackage of the
+ * Deployment & Configuration package.
+ *
+ * This class defines handler methods to parse the aforementioned type
+ * in the description files. The corresponding CORBA IDL type for this
+ * element is returned.
+ */
+
+class Config_Handler_Export Domain_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ Domain_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ Domain_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ Domain_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the Domain type
+ void process_domain (Deployment::Domain& domain);
+
+ /// process the node attribute
+ void process_node (DOMNodeIterator* iter,
+ Deployment::Node& domain_node);
+
+ /// process the node attribute
+ void process_bridge (DOMNodeIterator* iter,
+ Deployment::Bridge& domain_bridge);
+
+ /// process the node attribute
+ void process_interconnect (DOMNodeIterator* iter,
+ Deployment::Interconnect& domain_ic);
+
+ /// process the resource attribute
+ void process_resource (DOMNodeIterator* iter,
+ Deployment::Resource& domain_resource);
+
+ /// process the node attribute
+ void process_sr (DOMNodeIterator* iter,
+ Deployment::SharedResource& domain_sr);
+
+ /// update node refs
+ void update_node_refs (Deployment::Domain& domain);
+
+ /// update ic refs
+ void update_ic_refs (Deployment::Domain& domain);
+
+ /// update bridge refs
+ void update_bridge_refs (Deployment::Domain& domain);
+
+ /// update sr refs
+ void update_sr_refs (Deployment::Domain& domain);
+
+ /// process IDREFs
+ void process_refs (DOMNamedNodeMap* named_node_map);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* DOMAIN_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.cpp
new file mode 100644
index 00000000000..9251ab3adb5
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.cpp
@@ -0,0 +1,27 @@
+//$Id$
+
+#include "ERE_Handler.h"
+#include "Utils.h"
+
+using CIAO::Config_Handler::Utils;
+
+void
+CIAO::Config_Handler::ERE_Handler::
+process_ExternalReferenceEndpoint (DOMNodeIterator * iter,
+ Deployment::ExternalReferenceEndpoint &ret_struct)
+{
+ //Check if the Schema IDs for both the elements match
+ DOMNode * node = iter->nextNode ();
+ XStr name (node->getNodeName ());
+
+ if (name != XStr (ACE_TEXT ("location")))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Config_Handlers::ERE_Handler::process_ExternalRefEndPoint \
+ element mismatch expected <location>"));
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ // Populate the structure
+ ret_struct.location = Utils::parse_string (iter);
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.h
new file mode 100644
index 00000000000..3fdafe87009
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/ERE_Handler.h
@@ -0,0 +1,63 @@
+
+//==================================================================
+/**
+ * @file ERE_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef ERE_HANDLER_H
+#define ERE_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class ERE_Handler
+ *
+ * @brief Handler class for <ExternalReferenceEndpoint> tag
+ *
+ * This class defines handler methods to parse the aforementioned type
+ * in the descriptor files. The corresponding CORBA IDL type for this
+ * element is returned.
+ */
+
+ class Config_Handler_Export ERE_Handler
+ {
+ public:
+ static void
+ process_ExternalReferenceEndpoint (DOMNodeIterator * iter,
+ Deployment::ExternalReferenceEndpoint &ret_struct);
+ // process <ExternalReferenceEndpoint> definitions in the descriptor
+ // files
+
+ };
+ }
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* ERE_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.cpp
new file mode 100644
index 00000000000..9e4ff47cf28
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.cpp
@@ -0,0 +1,73 @@
+//$Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "Property_Handler.h"
+#include "Requirement_Handler.h"
+#include "NIA_Handler.h"
+#include "IAD_Handler.h"
+#include "Utils.h"
+#include "Process_Element.h"
+#include <iostream>
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the package configuration and populate it
+void IAD_Handler::process_ImplementationArtifactDescription
+(::Deployment::ImplementationArtifactDescription &iad)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:ImplementationArtifactDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "label", iad.label));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "UUID", iad.UUID));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (this->iter_, node_name, "location",
+ iad.location));
+ else if
+ (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "execParameter", iad.execParameter,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else if
+ (process_sequence_common<Deployment::Requirement>
+ (node->getOwnerDocument(), this->iter_, node,
+ node_name, "deployRequirement", iad.deployRequirement,
+ &Requirement_Handler::process_Requirement,
+ this->id_map_));
+ else if
+ (process_sequence_remote<Deployment::NamedImplementationArtifact,
+ NIA_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "dependsOn", iad.dependsOn,
+ &NIA_Handler::process_NamedImplementationArtifact, this->id_map_));
+ else if
+ (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "infoProperty", iad.infoProperty,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else
+ {
+ this->iter_->previousNode ();
+ return;
+ }
+ }
+ return;
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.h
new file mode 100644
index 00000000000..a46de1d885f
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/IAD_Handler.h
@@ -0,0 +1,99 @@
+//==================================================================
+/**
+ * @file IAD_Handler.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef IAD_HANDLER_H
+#define IAD_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "ace/SString.h"
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Null_Mutex.h"
+#include "Basic_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_main.h"
+#include "tao/Exception.h"
+#include "XercesString.h"
+#include <xercesc/util/XMLUniDefs.hpp>
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLUri.hpp>
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLUri;
+using xercesc::XMLURL;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMInputSource;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+using xercesc::DOMNamedNodeMap;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class IAD_Handler
+ *
+ * @brief Handler class for <ImplementationArtifactDescription> tag
+ *
+ * This class defines handler methods to parse the
+ * ImplementationArtifactDescription type
+ * in the descriptor files. The corresponding CORBA IDL type for this
+ * element is returned.
+ */
+
+class Config_Handler_Export IAD_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ IAD_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ IAD_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ IAD_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the component package description
+ void process_ImplementationArtifactDescription
+ (::Deployment::ImplementationArtifactDescription &iad);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* IAD_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.cpp
new file mode 100644
index 00000000000..71f700f596e
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.cpp
@@ -0,0 +1,28 @@
+//$Id$
+
+#include "ID_Handler.h"
+#include "tao/Exception.h"
+#include "Utils.h"
+
+using CIAO::Config_Handler::Utils;
+
+void
+CIAO::Config_Handler::ID_Handler::
+process_ImplementationDependency (DOMNodeIterator * iter,
+ Deployment::ImplementationDependency &ret_struct)
+{
+ //Check if the Schema IDs for both the elements match
+ DOMNode * node = iter->nextNode ();
+ XStr name (node->getNodeName ());
+
+ if (name != XStr (ACE_TEXT ("elementType")))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Config_Handlers::ID_Handler::process_ImplDependency \
+ element mismatch expected <elementType>"));
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ // Populate the structure
+ ret_struct.requiredType = Utils::parse_string (iter);
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.h
new file mode 100644
index 00000000000..ef7f9c5c86d
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/ID_Handler.h
@@ -0,0 +1,64 @@
+//==================================================================
+/**
+ * @file ID_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef ID_HANDLER_H
+#define ID_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class ID_Handler
+ *
+ * @brief Handler class for <ImplementationDependency> type
+ *
+ * This class defines handler methods to parse Implementation
+ * Dependency types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ * KNOWN ISSUE:
+ * The IDL mapping for this type defines a struct containing a
+ * string type. However, the schema defines an unbounded string.
+ * Currently, this Handler handles what the IDL requires as this is
+ * valid via the schema definition also.
+ *
+ */
+ class Config_Handler_Export ID_Handler
+ {
+ public:
+ static void
+ process_ImplementationDependency (DOMNodeIterator * iter,
+ Deployment::ImplementationDependency &ret_struct);
+ // process elements of type Implementation Dependency definitions in
+ // the descriptor files
+
+ };
+ }
+
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* ID_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.cpp
new file mode 100644
index 00000000000..d4255b5555e
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.cpp
@@ -0,0 +1,58 @@
+//$Id$
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "IAD_Handler.h"
+#include "IR_Handler.h"
+#include "RUK_Handler.h"
+#include "Utils.h"
+#include "Utils.h"
+#include "Process_Element.h"
+#include "Property_Handler.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the package configuration and populate it
+void IR_Handler::process_ImplementationRequirement
+(::Deployment::ImplementationRequirement &ir)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:ImplementationRequirement")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "resourcePort",
+ ir.resourcePort));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "componentPort",
+ ir.componentPort));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "resourceType",
+ ir.resourceType));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "name", ir.name));
+ else if
+ (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "Property", ir.property,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else
+ {
+ this->iter_->previousNode ();
+ return;
+ }
+ }
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.h
new file mode 100644
index 00000000000..9e159ed2636
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/IR_Handler.h
@@ -0,0 +1,106 @@
+//==================================================================
+/**
+ * @file IR_Handler.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef IR_HANDLER_H
+#define IR_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "Basic_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/SString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+#include "RUK_Handler.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class IR_Handler
+ *
+ * @brief Handler class for <ImplementationRequirement> type
+ *
+ * This class defines handler methods to parse Implementation
+ * Requirement types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+
+class Config_Handler_Export IR_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ IR_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ IR_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ IR_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the package configuration
+ void process_ImplementationRequirement (::Deployment::ImplementationRequirement &ir);
+
+protected:
+ /// Process the resourceUsage attribute
+ void process_resourceUsage (const XMLCh* name, ::Deployment::ImplementationRequirement &ir);
+
+ /// Process the resourcePort attribute
+ void process_resourcePort (const XMLCh* name, ::Deployment::ImplementationRequirement &ir);
+
+ /// Process the componentPort attribute
+ void process_componentPort (const XMLCh* name, ::Deployment::ImplementationRequirement &ir);
+
+ /*
+ * Derived from Requirement
+ */
+
+ /// Process the label attribute
+ void process_name (const XMLCh* name, ::Deployment::ImplementationRequirement &ir);
+
+ /// Process the label attribute
+ void process_resourceType (const XMLCh* name, ::Deployment::ImplementationRequirement &ir);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* IR_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.cpp
new file mode 100644
index 00000000000..bce6afd2e7a
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.cpp
@@ -0,0 +1,54 @@
+// $Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "Property_Handler.h"
+#include "Requirement_Handler.h"
+#include "NIA_Handler.h"
+#include "MID_Handler.h"
+#include "IR_Handler.h"
+#include "Process_Element.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+void MID_Handler::process_MonolithicImplementationDescription
+ (::Deployment::MonolithicImplementationDescription &mid)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName());
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:MonolithicImplementationDescription")))
+ {
+ }
+ else if
+ (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "execParameter", mid.execParameter,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else if
+ (process_sequence_remote<Deployment::NamedImplementationArtifact,
+ NIA_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "primaryArtifact", mid.primaryArtifact,
+ &NIA_Handler::process_NamedImplementationArtifact,
+ this->id_map_));
+ else if
+ (process_sequence_remote<Deployment::ImplementationRequirement,
+ IR_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "deployRequirement", mid.deployRequirement,
+ &IR_Handler::process_ImplementationRequirement, this->id_map_));
+ else
+ {
+ this->iter_->previousNode ();
+ return;
+ }
+ }
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.h
new file mode 100644
index 00000000000..17c3a2c4a3d
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/MID_Handler.h
@@ -0,0 +1,116 @@
+// $Id$
+
+#ifndef MID_HANDLER_H
+#define MID_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "ace/SString.h"
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Null_Mutex.h"
+#include "Basic_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_main.h"
+#include "tao/Exception.h"
+#include "XercesString.h"
+#include <xercesc/util/XMLUniDefs.hpp>
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLUri.hpp>
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLUri;
+using xercesc::XMLURL;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMInputSource;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+using xercesc::DOMNamedNodeMap;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class MID_Handler
+ *
+ * @brief Handler class for <MonolithicImplementationDescription> type
+ *
+ * This class defines handler methods to parse Monolithic Implementation
+ * Descroption types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+
+class Config_Handler_Export MID_Handler: public Basic_Handler
+{
+public:
+
+ MID_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ MID_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ MID_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ void process_MonolithicImplementationDescription (::Deployment::MonolithicImplementationDescription &mid);
+
+protected:
+ /// process exec parameter element
+ void process_exec_parameter_element (DOMNode* node,
+ DOMDocument* doc, DOMNodeIterator* iter,
+ Deployment::MonolithicImplementationDescription& mid);
+
+ /// process attributes for property element
+ void process_attributes_for_property (DOMNamedNodeMap* named_node_map,
+ DOMDocument* doc,
+ DOMNodeIterator* iter,
+ int value,
+ Deployment::Property& ccd_property);
+
+ /// process attributes for deploy requirement
+ void process_attributes_for_deploy_requirement (DOMNamedNodeMap* nm,
+ DOMDocument* doc,
+ DOMNodeIterator* iter,
+ int value,
+ Deployment::ImplementationRequirement& req);
+
+ /// process attributes for NIA
+ void process_attributes_for_nia (DOMNamedNodeMap* nm,
+ DOMDocument* doc,
+ DOMNodeIterator* iter,
+ int value,
+ Deployment::NamedImplementationArtifact& nia);
+
+ /// process IDREFS
+ void process_refs (DOMNamedNodeMap* named_node_map);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* MID_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.cpp
new file mode 100644
index 00000000000..11db8839207
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.cpp
@@ -0,0 +1,44 @@
+//$Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "IAD_Handler.h"
+#include "NIA_Handler.h"
+#include "Utils.h"
+#include "Process_Element.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the package configuration and populate it
+void NIA_Handler::process_NamedImplementationArtifact
+(::Deployment::NamedImplementationArtifact &nia)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName());
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:NamedImplementationArtifact")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "name", nia.name));
+ else if
+ (process_element_remote<Deployment::ImplementationArtifactDescription,
+ IAD_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "referencedArtifact", nia.referencedArtifact,
+ &IAD_Handler::process_ImplementationArtifactDescription,
+ this->id_map_));
+ else
+ {
+ this->iter_->previousNode ();
+ return;
+ }
+ }
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.h
new file mode 100644
index 00000000000..38ad44beed2
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/NIA_Handler.h
@@ -0,0 +1,84 @@
+//==================================================================
+/**
+ * @file NIA_Handler.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef NIA_HANDLER_H
+#define NIA_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "Basic_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/SString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class NIA_Handler
+ *
+ * @brief Handler class for <NamedImplementationArtifact> type
+ *
+ * This class defines handler methods to parse Named Implementation
+ * Artifact types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+
+class Config_Handler_Export NIA_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ NIA_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ NIA_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ NIA_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the package configuration
+ void process_NamedImplementationArtifact (::Deployment::NamedImplementationArtifact &nia);
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* NIA_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.cpp
new file mode 100644
index 00000000000..e26a73dab27
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.cpp
@@ -0,0 +1,47 @@
+// $Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "CompImplDesc_Handler.h"
+#include "PCI_Handler.h"
+#include "Utils.h"
+#include "Process_Element.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the package configuration and populate it
+void PCI_Handler::process_PackagedComponentImplementation
+ (::Deployment::PackagedComponentImplementation &pci)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:PackagedComponentImplementation")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "name", pci.name));
+ else if
+ (process_element_remote<Deployment::ComponentImplementationDescription,
+ CompImplDesc_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "referencedImplementation",
+ pci.referencedImplementation,
+ &CompImplDesc_Handler::process_ComponentImplementationDescription,
+ this->id_map_));
+ else
+ {
+ this->iter_->previousNode ();
+ return;
+ }
+ }
+ return;
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.h
new file mode 100644
index 00000000000..841db0fc0a6
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/PCI_Handler.h
@@ -0,0 +1,87 @@
+//==================================================================
+/**
+ * @file PCI_Handler.h
+ *
+ * $Id$
+ *
+ * @author George Edwards <g.edwards@vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef PCI_HANDLER_H
+#define PCI_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/SString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+#include "Basic_Handler.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class PCI_Handler
+ *
+ * @brief Handler class for <PackagedComponentImplementation> type
+ *
+ * This class is within the Component Data Model subpackage of the
+ * Deployment & Configuration package.
+ *
+ * This class defines handler methods to parse the aforementioned type
+ * in the description files. The corresponding CORBA IDL type for this
+ * element is returned.
+ */
+
+class Config_Handler_Export PCI_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ PCI_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ PCI_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ PCI_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the package configuration
+ void process_PackagedComponentImplementation (::Deployment::PackagedComponentImplementation &pci);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* PCI_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.cpp
new file mode 100644
index 00000000000..25804bd71c3
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.cpp
@@ -0,0 +1,75 @@
+// $Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "Property_Handler.h"
+#include "Requirement_Handler.h"
+#include "CPR_Handler.h"
+#include "CompPkgDesc_Handler.h"
+#include "PC_Handler.h"
+#include "Process_Element.h"
+#include "Utils.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the package configuration and populate it
+void PC_Handler::process_PackageConfiguration
+ (::Deployment::PackageConfiguration &pc)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName());
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:PackageConfiguration")))
+ {
+ }
+ else if (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "label", pc.label))
+ {
+ }
+ else if (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "UUID", pc.UUID))
+ {
+ }
+ else if (process_sequence_remote
+ <Deployment::ComponentPackageDescription,
+ CompPkgDesc_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "basePackage", pc.basePackage,
+ &CompPkgDesc_Handler::process_ComponentPackageDescription,
+ this->id_map_))
+ {
+ }
+ else if (process_sequence_remote
+ <Deployment::ComponentPackageReference, CPR_Handler>
+ (this->doc_, this->iter_, node,
+ node_name, "reference", pc.reference,
+ &CPR_Handler::process_ComponentPackageReference,
+ this->id_map_))
+ {
+ }
+ else if (process_sequence_common
+ <Deployment::Requirement>
+ (this->doc_, this->iter_, node,
+ node_name, "selectRequirement", pc.selectRequirement,
+ &Requirement_Handler::process_Requirement,this->id_map_))
+ {
+ }
+ else if (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "configProperty", pc.configProperty,
+ &Property_Handler::process_Property, this->id_map_))
+ {
+ }
+ else
+ {
+ ACE_THROW (CORBA::INTERNAL());
+ }
+ }
+ return;
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.h
new file mode 100644
index 00000000000..224f298f0a4
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/PC_Handler.h
@@ -0,0 +1,91 @@
+//==================================================================
+/**
+ * @file PC_Handler.h
+ *
+ * $Id$
+ *
+ * @author George Edwards <g.edwards@vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef PC_HANDLER_H
+#define PC_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "Basic_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/SString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class PC_Handler
+ *
+ * @brief Handler class for <PackageConfiguration> type
+ *
+ * This class is within the Component Data Model subpackage of the
+ * Deployment & Configuration package.
+ *
+ * This class defines handler methods to parse the aforementioned type
+ * in the description files. The corresponding CORBA IDL type for this
+ * element is returned.
+ */
+
+class Config_Handler_Export PC_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ PC_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ PC_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ PC_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the package configuration
+ void process_PackageConfiguration (::Deployment::PackageConfiguration &pc);
+
+ /// Process the specializedConfig attribute
+ void process_specializedConfig
+ (const XMLCh* specializedConfig, ::Deployment::PackageConfiguration &pc);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* PC_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.cpp
new file mode 100644
index 00000000000..bf4b22c2c3f
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.cpp
@@ -0,0 +1,624 @@
+// $Id$
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "Plan_Handler.h"
+#include "ID_Handler.h"
+#include "CompIntrDesc_Handler.h"
+#include "Property_Handler.h"
+#include "SP_Handler.h"
+#include "Requirement_Handler.h"
+#include "Any_Handler.h"
+#include "RUK_Handler.h"
+#include "CEPE_Handler.h"
+#include "ERE_Handler.h"
+#include "CPK_Handler.h"
+#include "Process_Element.h"
+#include "Utils.h"
+#include <iostream>
+#include "string.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the DeploymentPlan type and populate the IDL structure
+void Plan_Handler::process_plan(Deployment::DeploymentPlan& plan)
+{
+ for (DOMNode* node = this->iter_->nextNode();
+ node != 0;
+ node = this->iter_->nextNode())
+ {
+ XStr node_name (node->getNodeName ());
+
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:DeploymentPlan")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "label", plan.label));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (this->iter_, node_name, "UUID", plan.UUID));
+ else if
+ (process_element<Deployment::ComponentInterfaceDescription>
+ (this->doc_, this->iter_, node,
+ node_name, "realizes", plan.realizes,
+ this, &Plan_Handler::process_ccd,
+ this->id_map_));
+ else if
+ (process_sequence_local<Deployment::MonolithicDeploymentDescription>
+ (this->doc_, this->iter_, node,
+ node_name, "implementation", plan.implementation,
+ this, &Plan_Handler::process_mdd));
+ else if
+ (process_sequence_local<Deployment::InstanceDeploymentDescription>
+ (this->doc_, this->iter_, node,
+ node_name, "instance", plan.instance,
+ this, &Plan_Handler::process_idd));
+ else if
+ (process_sequence_local<Deployment::PlanConnectionDescription>
+ (this->doc_, this->iter_, node,
+ node_name, "connection", plan.connection,
+ this, &Plan_Handler::process_pcd));
+ else if
+ (process_sequence_local<Deployment::PlanPropertyMapping>
+ (this->doc_, this->iter_, node,
+ node_name, "externalProperty", plan.externalProperty,
+ this, &Plan_Handler::process_ppm));
+ else if
+ (process_sequence_common<Deployment::ImplementationDependency>
+ (this->doc_, this->iter_, node,
+ node_name, "dependsOn", plan.dependsOn,
+ &ID_Handler::process_ImplementationDependency, this->id_map_));
+ else if
+ (process_sequence_local<Deployment::ArtifactDeploymentDescription>
+ (this->doc_, this->iter_, node,
+ node_name, "artifact", plan.artifact,
+ this, &Plan_Handler::process_add));
+ else if
+ (process_sequence_common<Deployment::Property>
+ (this->doc_, this->iter_, node,
+ node_name, "infoProperty", plan.infoProperty,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else
+ {
+ // ??? How did we get here ???
+ ACE_THROW (CORBA::INTERNAL());
+ }
+ }
+
+ this->update_mdd_refs (plan);
+ this->update_idd_refs (plan);
+ this->update_pspe_refs (plan);
+ this->update_pspr_refs (plan);
+ return;
+}
+
+void Plan_Handler::process_rdd (DOMNodeIterator* iter,
+ Deployment::
+ ResourceDeploymentDescription& rdd)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:ResourceDeploymentDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "requirementName",
+ rdd.requirementName));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "resourceName", rdd.resourceName));
+ else if (node_name == XStr (ACE_TEXT ("resourceValue")))
+ {
+ Any_Handler::process_Any (iter, rdd.resourceValue);
+ }
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_irdd (DOMNodeIterator* iter,
+ Deployment::
+ InstanceResourceDeploymentDescription &irdd)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:InstanceResourceDeploymentDescription")))
+ {
+ }
+ else if (node_name == "resourceUsage")
+ {
+ RUK_Handler::process_ResourceUsageKind (iter, irdd.resourceUsage);
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "requirementName",
+ irdd.requirementName));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "resourceName", irdd.resourceName));
+ else if (node_name == XStr (ACE_TEXT ("resourceValue")))
+ {
+ Any_Handler::process_Any (iter, irdd.resourceValue);
+ }
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_add (DOMNodeIterator* iter,
+ Deployment::ArtifactDeploymentDescription& add)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:ArtifactDeploymentDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", add.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "location", add.location));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "node", add.node));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "source", add.source));
+ else if
+ (process_sequence_common<Deployment::Property>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "execParameter", add.execParameter,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else if
+ (process_sequence_common<Deployment::Requirement>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "deployRequirement", add.deployRequirement,
+ &Requirement_Handler::process_Requirement,
+ this->id_map_));
+ else if
+ (process_sequence_local<Deployment::ResourceDeploymentDescription>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "deployedResource", add.deployedResource,
+ this, &Plan_Handler::process_rdd));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_idd (DOMNodeIterator* iter,
+ Deployment::InstanceDeploymentDescription& idd)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:InstanceDeploymentDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", idd.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "node", idd.node));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "source", idd.source));
+ else if
+ (process_reference (node, node_name, "implementation",
+ idd.implementationRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_sequence_common<Deployment::Property>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "configProperty", idd.configProperty,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else if
+ (process_sequence_local<Deployment::
+ InstanceResourceDeploymentDescription>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "deployedResource", idd.deployedResource,
+ this, &Plan_Handler::process_irdd));
+ else if
+ (process_sequence_local<Deployment::
+ InstanceResourceDeploymentDescription>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "deployedSharedResource", idd.deployedSharedResource,
+ this, &Plan_Handler::process_irdd));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_mdd (DOMNodeIterator* iter,
+ Deployment::MonolithicDeploymentDescription&
+ mdd)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:MonolithicDeploymentDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", mdd.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "source", mdd.source));
+ else if
+ (process_reference_seq (node, node_name, "artifact",
+ mdd.artifactRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else if
+ (process_sequence_common<Deployment::Property>
+ (node->getOwnerDocument(), this->iter_, node,
+ node_name, "execParameter", mdd.execParameter,
+ &Property_Handler::process_Property,
+ this->id_map_));
+ else if
+ (process_sequence_common<Deployment::Requirement>
+ (node->getOwnerDocument(), this->iter_, node,
+ node_name, "deployRequirement", mdd.deployRequirement,
+ &Requirement_Handler::process_Requirement,
+ this->id_map_));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_ccd (DOMNodeIterator* iter,
+ Deployment::ComponentInterfaceDescription&
+ cid)
+{
+ CompIntrDesc_Handler handler (iter, false);
+ handler.process_ComponentInterfaceDescription (cid);
+}
+
+void Plan_Handler::process_pspr (DOMNodeIterator* iter,
+ Deployment::PlanSubcomponentPropertyReference& pspr)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:PlanSubcomponentPropertyReference")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "propertyName", pspr.propertyName));
+ else if
+ (process_reference (node, node_name, "instance", pspr.instanceRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_pspe (DOMNodeIterator* iter,
+ Deployment::PlanSubcomponentPortEndpoint& pspe)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:PlanSubcomponentPortEndpoint")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "portName", pspe.portName));
+ else if
+ (CIAO::Config_Handler::Utils::process_boolean
+ (iter, node_name, "provider", pspe.provider));
+ else if (node_name == XStr (ACE_TEXT ("kind")))
+ {
+ CPK_Handler::process_CCMComponentPortKind (iter, pspe.kind);
+ }
+ else if
+ (process_reference (node, node_name, "instance",
+ pspe.instanceRef,
+ this->index_, this->idref_map_))
+ {
+ this->index_ = this->index_ + 1;
+ }
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_ppm(DOMNodeIterator* iter,
+ Deployment::PlanPropertyMapping& ppm)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:PlanPropertyMapping")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", ppm.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "source", ppm.source));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "externalName", ppm.externalName));
+ else if
+ (process_sequence_local<Deployment::PlanSubcomponentPropertyReference>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "delegatesTo", ppm.delegatesTo,
+ this, &Plan_Handler::process_pspr));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_crdd (DOMNodeIterator* iter,
+ Deployment::
+ ConnectionResourceDeploymentDescription& crdd)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:ConnectionResourceDeploymentDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "targetName", crdd.targetName));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "requirementName",
+ crdd.requirementName));
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "resourceName", crdd.resourceName));
+ else if (node_name == XStr (ACE_TEXT ("resourceValue")))
+ {
+ Any_Handler::process_Any (iter, crdd.resourceValue);
+ }
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::process_pcd (DOMNodeIterator* iter,
+ Deployment::PlanConnectionDescription& pcd)
+{
+ for (DOMNode* node = iter->nextNode();
+ node != 0;
+ node = iter->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:PlanConnectionDescription")))
+ {
+ }
+ else if
+ (CIAO::Config_Handler::Utils::process_string
+ (iter, node_name, "name", pcd.name));
+ else if
+ (CIAO::Config_Handler::Utils::process_string_seq
+ (iter, node_name, "source", pcd.source));
+ else if
+ (process_sequence_common<Deployment::Requirement>
+ (node->getOwnerDocument(), this->iter_, node,
+ node_name, "deployRequirement", pcd.deployRequirement,
+ &Requirement_Handler::process_Requirement,
+ this->id_map_));
+ else if
+ (process_sequence_common<Deployment::ComponentExternalPortEndpoint>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "externalEndpoint", pcd.externalEndpoint,
+ &CEPE_Handler::process_ComponentExternalPortEndpoint,
+ this->id_map_));
+ else if
+ (process_sequence_local<Deployment::PlanSubcomponentPortEndpoint>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "internalEndpoint", pcd.internalEndpoint,
+ this, &Plan_Handler::process_pspe));
+ else if
+ (process_sequence_common<Deployment::ExternalReferenceEndpoint>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "externalReference", pcd.externalReference,
+ &ERE_Handler::process_ExternalReferenceEndpoint,
+ this->id_map_));
+ else if
+ (process_sequence_local<Deployment::
+ ConnectionResourceDeploymentDescription>
+ (node->getOwnerDocument(), iter, node,
+ node_name, "deployedResource", pcd.deployedResource,
+ this, &Plan_Handler::process_crdd));
+ else
+ {
+ iter->previousNode();
+ return;
+ }
+ }
+}
+
+void Plan_Handler::update_mdd_refs (Deployment::DeploymentPlan& plan)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < plan.implementation.length (); ++x)
+ {
+ for (y = 0; y < plan.implementation[x].artifactRef.length (); ++y)
+ {
+ ref_value = plan.implementation[x].artifactRef[y];
+ //ACE_DEBUG ((LM_DEBUG, "ref_value in ADD is %d \n", ref_value));
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ plan.implementation[x].artifactRef[y] = orig_value;
+ }
+ }
+ }
+ }
+}
+
+void Plan_Handler::update_idd_refs (Deployment::DeploymentPlan& plan)
+{
+ CORBA::ULong x;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < plan.instance.length (); ++x)
+ {
+ ref_value = plan.instance[x].implementationRef;
+ //ACE_DEBUG ((LM_DEBUG, "ref_value in MDD is %d \n", ref_value));
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ plan.instance[x].implementationRef = orig_value;
+ }
+ }
+ }
+}
+
+void Plan_Handler::update_pspe_refs (Deployment::DeploymentPlan& plan)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < plan.connection.length (); ++x)
+ {
+ for (y = 0; y < plan.connection[x].internalEndpoint.length (); ++y)
+ {
+ ref_value = plan.connection[x].internalEndpoint[y].
+ instanceRef;
+ //ACE_DEBUG ((LM_DEBUG, "ref_value in IDD is %d \n", ref_value));
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ plan.connection[x].internalEndpoint[y].
+ instanceRef = orig_value;
+ }
+ }
+ }
+ }
+}
+
+void Plan_Handler::update_pspr_refs (Deployment::DeploymentPlan& plan)
+{
+ CORBA::ULong x;
+ CORBA::ULong y;
+ int ref_value;
+ int orig_value;
+ ACE_TString ref_name;
+
+ for (x = 0; x < plan.externalProperty.length (); ++x)
+ {
+ for (y = 0; y < plan.externalProperty[x].delegatesTo.length (); ++y)
+ {
+ ref_value = plan.externalProperty[x].delegatesTo[y].
+ instanceRef;
+ if (idref_map_.find (ref_value, ref_name) == 0)
+ {
+ if (id_map_.find (ref_name, orig_value) == 0)
+ {
+ plan.externalProperty[x].delegatesTo[y].
+ instanceRef = orig_value;
+ }
+ }
+ }
+ }
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.h
new file mode 100644
index 00000000000..3983e4f1faf
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Plan_Handler.h
@@ -0,0 +1,251 @@
+//==================================================================
+/**
+ * @file Plan_Handler.h
+ *
+ * $Id$
+ *
+ * @author Jaiganesh Balasubramanian <jai@dre.vanderbilt.edu>
+ */
+//=====================================================================
+#ifndef PLAN_HANDLER_H
+#define PLAN_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Basic_Handler.h"
+#include "Config_Handler_export.h"
+#include "ace/SString.h"
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Null_Mutex.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_main.h"
+#include "tao/Exception.h"
+#include "XercesString.h"
+#include <xercesc/util/XMLUniDefs.hpp>
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLUri.hpp>
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLUri;
+using xercesc::XMLURL;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMInputSource;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+using xercesc::DOMNamedNodeMap;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class Plan_Handler
+ *
+ * @brief Handler class for <DeploymentPlan> type
+ *
+ */
+
+class Config_Handler_Export Plan_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ Plan_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ Plan_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ Plan_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the plan type
+ void process_plan (Deployment::DeploymentPlan& plan);
+
+ /// process cid
+ void process_ccd (DOMNodeIterator* iter,
+ Deployment::ComponentInterfaceDescription& cid);
+
+ /// process pspr
+ void process_pspr (DOMNodeIterator* iter,
+ Deployment::PlanSubcomponentPropertyReference& pspr);
+
+ /// process pspe
+ void process_pspe (DOMNodeIterator* iter,
+ Deployment::PlanSubcomponentPortEndpoint& pspe);
+
+ /// process add
+ void process_add (DOMNodeIterator* iter,
+ Deployment::ArtifactDeploymentDescription& add);
+
+ /// process con
+ void process_pcd (DOMNodeIterator* iter,
+ Deployment::PlanConnectionDescription& con);
+
+ /// process external property
+ void process_ppm (DOMNodeIterator* iter,
+ Deployment::PlanPropertyMapping& ppm);
+
+ /// process idd
+ void process_idd (DOMNodeIterator* iter,
+ Deployment::InstanceDeploymentDescription& idd);
+
+ /// process mdd
+ void process_mdd (DOMNodeIterator* iter,
+ Deployment::MonolithicDeploymentDescription& mdd);
+
+ /// process rdd
+ void process_rdd (DOMNodeIterator* iter,
+ Deployment::ResourceDeploymentDescription& rdd);
+
+ /// process crdd
+ void process_crdd (DOMNodeIterator* iter,
+ Deployment::ConnectionResourceDeploymentDescription& crdd);
+ /// process irdd
+ void process_irdd (DOMNodeIterator* iter,
+ Deployment::InstanceResourceDeploymentDescription &irdd);
+
+ /// process the add name
+ void process_add_name (const XMLCh* name,
+ Deployment::ArtifactDeploymentDescription& add);
+
+ /// process the pspr property name
+ void process_pspr_prop_name (const XMLCh* name,
+ Deployment::PlanSubcomponentPropertyReference& pspr);
+
+ /// process the pspe port name
+ void process_pspe_port_name (const XMLCh* name,
+ Deployment::PlanSubcomponentPortEndpoint& pspe);
+
+ /// process the pspe provider
+ void process_pspe_provider (const XMLCh* value,
+ Deployment::PlanSubcomponentPortEndpoint& pspe);
+
+ /// process the idd name
+ void process_idd_name (const XMLCh* name,
+ Deployment::InstanceDeploymentDescription& idd);
+
+ /// process the ppm name
+ void process_ppm_name (const XMLCh* name,
+ Deployment::PlanPropertyMapping& ppm);
+
+ /// process the ppm external name
+ void process_ppm_ext_name (const XMLCh* name,
+ Deployment::PlanPropertyMapping& ppm);
+
+ /// process the idd node
+ void process_idd_node (const XMLCh* node,
+ Deployment::InstanceDeploymentDescription& idd);
+
+ /// process the idd source
+ void process_idd_source (const XMLCh* source,
+ Deployment::InstanceDeploymentDescription& idd);
+
+ /// process the add location
+ void process_add_location (const XMLCh* location,
+ Deployment::ArtifactDeploymentDescription& add);
+
+ /// process the add source
+ void process_add_source (const XMLCh* source,
+ Deployment::ArtifactDeploymentDescription& add);
+
+ /// process the add node
+ void process_add_node (const XMLCh* node,
+ Deployment::ArtifactDeploymentDescription& add);
+
+ /// process the mdd source
+ void process_mdd_source (const XMLCh* source,
+ Deployment::MonolithicDeploymentDescription& mdd);
+
+ /// process the ppm source
+ void process_ppm_source (const XMLCh* source,
+ Deployment::PlanPropertyMapping& ppm);
+
+ /// process the pcd source
+ void process_pcd_source (const XMLCh* source,
+ Deployment::PlanConnectionDescription& pcd);
+
+ /// process the pcd name
+ void process_pcd_name (const XMLCh* name,
+ Deployment::PlanConnectionDescription& pcd);
+
+ /// process the add node
+ void process_mdd_name (const XMLCh* name,
+ Deployment::MonolithicDeploymentDescription& mdd);
+
+ /// process the rdd req name
+ void process_rdd_req_name (const XMLCh* name,
+ Deployment::ResourceDeploymentDescription& rdd);
+
+ /// process the rdd res name
+ void process_rdd_res_name (const XMLCh* name,
+ Deployment::ResourceDeploymentDescription& rdd);
+
+ /// process the irdd res name
+ void process_irdd_res_name (const XMLCh* name,
+ Deployment::InstanceResourceDeploymentDescription &irdd);
+
+ /// process the crdd res name
+ void process_crdd_res_name (const XMLCh* name,
+ Deployment::ConnectionResourceDeploymentDescription& crdd);
+
+ /// process the crdd req name
+ void process_crdd_req_name (const XMLCh* name,
+ Deployment::ConnectionResourceDeploymentDescription& crdd);
+
+ /// process the crdd target name
+ void process_crdd_target_name (const XMLCh* name,
+ Deployment::ConnectionResourceDeploymentDescription& crdd);
+
+ /// process the irdd req name
+ void process_irdd_req_name (const XMLCh* name,
+ Deployment::InstanceResourceDeploymentDescription &irdd);
+
+ /// process the irdd res usage
+ void process_irdd_res_usage (const XMLCh* name,
+ Deployment::InstanceResourceDeploymentDescription &irdd);
+
+ /// process references
+ void process_refs (DOMNamedNodeMap* named_node_map);
+
+ /// update mdd refs
+ void update_mdd_refs (Deployment::DeploymentPlan& plan);
+
+ /// update idd refs
+ void update_idd_refs (Deployment::DeploymentPlan& plan);
+
+ /// update pspe refs
+ void update_pspe_refs (Deployment::DeploymentPlan& plan);
+
+ /// update pspr refs
+ void update_pspr_refs (Deployment::DeploymentPlan& plan);
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* PLAN_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Process_Element.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element.cpp
new file mode 100644
index 00000000000..9bfb99b7cb2
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element.cpp
@@ -0,0 +1,121 @@
+//==================================================================
+/**
+ * @file Process_Element.cpp
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#include "Process_Element.h"
+#include "ace/Auto_Ptr.h"
+#include "Utils.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/*
+ * Process references
+ */
+
+void
+process_refs(DOMNode*& node,
+ CORBA::ULongSeq& seq,
+ int& index,
+ IDREF_MAP& idref_map)
+{
+ CORBA::ULong i (seq.length ());
+ seq.length (i + 1);
+ seq[i] = index;
+ if (node->hasAttributes())
+ {
+ DOMNamedNodeMap* named_node_map = node->getAttributes ();
+ //auto_ptr<DOMNamedNodeMap> cleanup_nodemap (named_node_map);
+
+ int length = named_node_map->getLength ();
+
+ for (int j = 0; j < length; j++)
+ {
+ DOMNode* attribute_node = named_node_map->item (j);
+ XStr strattrnodename (attribute_node->getNodeName ());
+ char* aceattrnodevalue_ch = XMLString::transcode
+ (attribute_node->getNodeValue ());
+ ACE_TString aceattrnodevalue = aceattrnodevalue_ch;
+ XMLString::release (&aceattrnodevalue_ch);
+ if (strattrnodename == XStr (ACE_TEXT ("xmi:idref")))
+ {
+ //index = index + 1;
+ idref_map.bind (index, aceattrnodevalue);
+ }
+ }
+ }
+}
+
+void
+process_ref(DOMNode*& node,
+ CORBA::ULong& ref,
+ int& index,
+ IDREF_MAP& idref_map)
+{
+ ref = index;
+ if (node->hasAttributes ())
+ {
+ DOMNamedNodeMap* named_node_map = node->getAttributes ();
+ //auto_ptr<DOMNamedNodeMap> cleanup_nodemap (named_node_map);
+
+ int length = named_node_map->getLength ();
+
+ for (int j = 0; j < length; j++)
+ {
+ DOMNode* attribute_node = named_node_map->item (j);
+ XStr strattrnodename (attribute_node->getNodeName ());
+ char* aceattrnodevalue_ch = XMLString::transcode
+ (attribute_node->getNodeValue ());
+ ACE_TString aceattrnodevalue = aceattrnodevalue_ch;
+ XMLString::release (&aceattrnodevalue_ch);
+ if (strattrnodename == XStr (ACE_TEXT ("xmi:idref")))
+ {
+ //index = index + 1;
+ idref_map.bind (index, aceattrnodevalue);
+ }
+ }
+ }
+}
+
+/*
+ * Process function for references
+ */
+
+bool
+process_reference_seq (DOMNode* node,
+ XStr& node_name, const char* name,
+ CORBA::ULongSeq& seq,
+ int& index,
+ IDREF_MAP& idref_map)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ process_refs (node, seq, index, idref_map);
+
+ return result;
+}
+
+// Process reference
+bool
+process_reference (DOMNode* node,
+ XStr& node_name, const char* name,
+ CORBA::ULong& ref,
+ int& index,
+ IDREF_MAP& idref_map)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ process_ref (node, ref, index, idref_map);
+
+ return result;
+}
+
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Process_Element.h b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element.h
new file mode 100644
index 00000000000..c60c1e14b75
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element.h
@@ -0,0 +1,192 @@
+//==================================================================
+/**
+ * @file Process_Element.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ * Jaiganesh Balasubramanian <jai@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef PROCESS_ELEMENT_H
+#define PROCESS_ELEMENT_H
+
+#include "DeploymentC.h"
+#include "Deployment.h"
+#include "Basic_Handler.h"
+#include "Config_Handler_export.h"
+#include "ace/SString.h"
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Null_Mutex.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_main.h"
+#include "tao/Exception.h"
+#include "XercesString.h"
+#include <xercesc/util/XMLUniDefs.hpp>
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLUri.hpp>
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLUri;
+using xercesc::XMLURL;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMInputSource;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+using xercesc::DOMNamedNodeMap;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+// ID map type definition
+typedef ACE_Hash_Map_Manager<ACE_TString, int, ACE_Null_Mutex> REF_MAP;
+typedef ACE_Hash_Map_Iterator<ACE_TString, int, ACE_Null_Mutex> REF_ITER;
+typedef ACE_Hash_Map_Manager<int, ACE_TString, ACE_Null_Mutex> IDREF_MAP;
+
+template <typename DATA>
+class Process_Function
+{
+public:
+ virtual void call(DOMDocument*, DOMNodeIterator*, DATA&)=0;
+
+ void operator() (DOMDocument* doc, DOMNodeIterator* iter, DATA& data)
+ {
+ call(doc, iter, data);
+ }
+};
+
+/*
+ * Wrapper class for the process member functions.
+ */
+
+template <typename OBJ, typename DATA>
+class Process_Member_Function: public Process_Function<DATA>
+{
+public:
+ typedef void (OBJ::*func_type) (DOMNodeIterator*, DATA&);
+ typedef DATA data_type;
+
+ Process_Member_Function(OBJ& obj, func_type f)
+ : obj_(&obj), f_(f)
+ {
+ }
+
+ Process_Member_Function(OBJ* obj, func_type f)
+ : obj_(obj), f_(f)
+ {
+ }
+
+ virtual void call(DOMDocument* doc, DOMNodeIterator* iter, DATA& data)
+ {
+ obj_->set_doc (doc);
+ obj_->set_iter (iter);
+ (obj_->*f_) (iter, data);
+ }
+
+private:
+ OBJ* obj_;
+ func_type f_;
+};
+
+/*
+ * Wrapper class for the process member functions which does not have
+ DOMNodeIterator parameter
+ */
+
+template <typename OBJ, typename DATA>
+class Process_Member_Function_Remote: public Process_Function<DATA>
+{
+public:
+ typedef void (OBJ::*func_type) (DATA&);
+ typedef DATA data_type;
+
+ Process_Member_Function_Remote(OBJ& obj, func_type f)
+ : obj_(&obj), f_(f)
+ {
+ }
+
+ Process_Member_Function_Remote(OBJ* obj, func_type f)
+ : obj_(obj), f_(f)
+ {
+ }
+
+ virtual void call(DOMDocument* doc, DOMNodeIterator* iter, DATA& data)
+ {
+ obj_->set_iter(iter);
+ obj_->set_doc(doc);
+ (obj_->*f_) (data);
+ }
+
+private:
+ OBJ* obj_;
+ func_type f_;
+};
+
+/*
+ * Wrapper class for the static process member functions.
+ */
+
+template <typename DATA>
+class Process_Static_Function: public Process_Function<DATA>
+{
+public:
+ typedef void (*func_type) (DOMNodeIterator*, DATA&);
+ typedef DATA data_type;
+
+ Process_Static_Function(func_type f)
+ : f_(f)
+ {
+ }
+
+ virtual void call(DOMDocument*, DOMNodeIterator* iter, DATA& data)
+ {
+ (*f_) (iter, data);
+ }
+
+private:
+ func_type f_;
+};
+
+// Processes reference sequences
+bool
+process_reference_seq (DOMNode* node,
+ XStr& node_name, const char* name,
+ CORBA::ULongSeq& seq,
+ int& index,
+ IDREF_MAP& idref_map);
+
+// Process reference
+bool
+process_reference (DOMNode* node,
+ XStr& node_name, const char* name,
+ CORBA::ULong& ref,
+ int& index,
+ IDREF_MAP& idref_map);
+
+END_DEPLOYMENT_NAMESPACE
+
+#include "Process_Element_T.h"
+
+#endif // PROCESS_ELEMENT_H
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.cpp
new file mode 100644
index 00000000000..56d0f530315
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.cpp
@@ -0,0 +1,294 @@
+//=====================================================================
+/**
+ * @file Process_Element_T.cpp
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ * Jaiganesh Balasubramanian <jai@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#include "Process_Element_T.h"
+#include "Config_Handlers/Config_Error_Handler.h"
+#include "ace/Auto_Ptr.h"
+#include "Utils.h"
+#include <iostream>
+#include <memory>
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+class parser_error { };
+
+template<typename DATA, typename OBJECT, typename SEQUENCE, typename FUNCTION>
+bool
+process_sequence_local(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ SEQUENCE& seq, OBJECT* obj, FUNCTION func)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ Process_Member_Function<OBJECT, DATA>
+ pf(obj, func);
+ process_sequential_element (node, doc, iter, seq, &pf, obj->id_map());
+ }
+
+ return result;
+}
+
+template<typename DATA, typename OBJECT, typename SEQUENCE, typename FUNCTION>
+bool
+process_sequence_remote(DOMDocument* doc, DOMNodeIterator* iter, DOMNode*
+node,
+ XStr& node_name, const char* name,
+ SEQUENCE& seq, FUNCTION func,
+ REF_MAP& id_map)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ OBJECT obj (doc, iter, false);
+
+ Process_Member_Function_Remote<OBJECT, DATA>
+ pf(obj, func);
+ process_sequential_element (node, doc, iter, seq, &pf, id_map);
+ }
+
+ return result;
+}
+
+template<typename DATA, typename SEQUENCE, typename FUNCTION>
+bool
+process_sequence_common(DOMDocument* doc, DOMNodeIterator* iter, DOMNode*
+node,
+ XStr& node_name, const char* name,
+ SEQUENCE& seq, FUNCTION func,
+ REF_MAP& id_map)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ Process_Static_Function<DATA>
+ pf(func);
+ process_sequential_element (node, doc, iter, seq, &pf, id_map);
+ }
+
+ return result;
+}
+
+template<typename DATA, typename OBJECT, typename ELEMENT, typename FUNCTION>
+bool
+process_element(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ ELEMENT& elem, OBJECT* obj, FUNCTION func,
+ REF_MAP& id_map)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ if (node->hasAttributes ())
+ {
+ DOMNamedNodeMap* named_node_map = node->getAttributes ();
+ int length = named_node_map->getLength ();
+
+ Process_Member_Function<OBJECT, DATA>
+ pf(obj, func);
+
+ if (length == 1)
+ pf(doc, iter, elem);
+ else
+ process_element_attributes(named_node_map, doc, iter, 0, elem,
+&pf, id_map);
+ }
+ }
+
+ return result;
+}
+
+template<typename DATA, typename OBJECT, typename ELEMENT, typename FUNCTION>
+bool
+process_element_remote(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char *name,
+ ELEMENT& elem, FUNCTION func,
+ REF_MAP& id_map)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ OBJECT obj (iter, false);
+
+ if (node->hasAttributes ())
+ {
+ DOMNamedNodeMap* named_node_map = node->getAttributes ();
+ int length = named_node_map->getLength ();
+
+ Process_Member_Function_Remote<OBJECT, DATA>
+ pf(&obj, func);
+
+ if (length == 1)
+ pf(doc, iter, elem);
+ else
+ process_element_attributes(named_node_map, doc, iter, 0, elem,
+&pf, id_map);
+ }
+ }
+
+ return result;
+}
+
+template <typename VALUE, typename DATA>
+void process_element_attributes(DOMNamedNodeMap* named_node_map,
+ DOMDocument* doc,
+ DOMNodeIterator* iter,
+ VALUE value,
+ DATA& data,
+ Process_Function <DATA>* func,
+ REF_MAP& id_map)
+{
+ char* final_url_ch;
+ try
+ {
+ // the number of attributes
+ int length = named_node_map->getLength();
+ // iterate the attributes
+ for (int j = 0; j < length; ++j)
+ {
+ DOMNode* attribute_node = named_node_map->item (j);
+ XStr strattrnodename (attribute_node->getNodeName ());
+ char* aceattrnodevalue_ch =
+ XMLString::transcode (attribute_node->getNodeValue ());
+ ACE_TString aceattrnodevalue = aceattrnodevalue_ch;
+ XMLString::release (&aceattrnodevalue_ch);
+
+ // if xmi::id is given process the element and bind the value
+ if (strattrnodename == XStr (ACE_TEXT ("xmi:id")))
+ {
+ (*func) (doc, iter, data);
+ id_map.bind (aceattrnodevalue, value);
+ }
+ // if href is given find out the referenced position
+ // and process the element
+ else if (strattrnodename == XStr (ACE_TEXT ("href")))
+ {
+ XMLURL xml_url (aceattrnodevalue.c_str ());
+ XMLURL result (aceattrnodevalue.c_str ());
+ std::string url_string = aceattrnodevalue.c_str ();
+ char* doc_path_ch =
+ XMLString::transcode ( doc->getDocumentURI ());
+ ACE_TString doc_path = doc_path_ch;
+ XMLString::release (&doc_path_ch);
+ XMLCh* rel_str =
+ (XMLString::transcode (doc_path.c_str ()));
+ result.makeRelativeTo
+ (rel_str);
+ final_url_ch =
+ XMLString::transcode (result.getURLText ());
+ ACE_TString final_url = final_url_ch;
+ XMLString::release (&final_url_ch);
+ XMLString::release (&rel_str);
+
+ DOMDocument* href_doc;
+
+ std::auto_ptr<DOMBuilder> parser (
+ CIAO::Config_Handler::Utils::create_parser ());
+
+ CIAO::Config_Handler::Config_Error_Handler handler;
+ parser->setErrorHandler(&handler);
+
+ if (xml_url.isRelative ())
+ {
+ href_doc = parser->parseURI (final_url.c_str ());
+ if (handler.getErrors ())
+ {
+ ACE_DEBUG ((LM_DEBUG, "XML descriptor error\n"));
+ //throw parser_error ();
+ throw DOMException ();
+ }
+ }
+ else
+ {
+ href_doc = parser->parseURI (url_string.c_str ());
+ if (handler.getErrors ())
+ {
+ ACE_DEBUG ((LM_DEBUG, "XML descriptor error\n"));
+ //throw parser_error ();
+ throw DOMException ();
+ }
+ }
+
+ DOMDocumentTraversal* traverse = href_doc;
+ DOMNode* root = (href_doc->getDocumentElement ());
+ unsigned long filter = DOMNodeFilter::SHOW_ELEMENT |
+ DOMNodeFilter::SHOW_TEXT;
+ DOMNodeIterator* href_iter = traverse->createNodeIterator
+ (root,
+ filter,
+ 0,
+ true);
+ href_iter->nextNode ();
+ (*func) (href_doc, href_iter, data);
+ }
+ }
+ }
+ catch (const DOMException& e)
+ {
+ const unsigned int maxChars = 2047;
+ XMLCh errText[maxChars + 1];
+
+ ACE_ERROR ((LM_ERROR, "\nException occured while parsing %s: \
+ \n",final_url_ch));
+ ACE_ERROR ((LM_ERROR, "DOMException code: %d\n ", e.code));
+ if (DOMImplementation::loadDOMExceptionMsg (e.code, errText, maxChars))
+ {
+ char* message = XMLString::transcode (errText);
+ ACE_Auto_Basic_Array_Ptr<char> cleanup_message (message);
+ ACE_ERROR ((LM_ERROR, "Message is: %s\n", message));
+ }
+ ACE_ERROR ((LM_ERROR, "Caught DOM exception\n\n"));
+ return;
+ }
+ catch (...)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Caught unknown exception\n\n"));
+ return;
+ }
+}
+
+template <typename SEQUENCE, typename DATA>
+void
+process_sequential_element (DOMNode* node,
+ DOMDocument* doc,
+ DOMNodeIterator* iter,
+ SEQUENCE& seq,
+ Process_Function <DATA>* func,
+ REF_MAP& id_map)
+{
+ if (node->hasAttributes ())
+ {
+ // the size of the sequence
+ CORBA::ULong i = seq.length ();
+
+ // add 1 to the size of the sequence
+ seq.length (i + 1);
+
+ // fetch attributes
+ DOMNamedNodeMap* named_node_map = node->getAttributes ();
+
+ // the number of attributes the element have
+ int length = named_node_map->getLength();
+ // if there is no other attribute but 'version'
+
+ if (length == 1) // call directly the static process_ method
+ (*func) (doc, iter, seq[i]);
+ else // Check the xmi::id & href attributes
+ process_element_attributes(named_node_map, doc, iter, i, seq[i], func, id_map);
+ }
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.h b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.h
new file mode 100644
index 00000000000..693f0338a47
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Process_Element_T.h
@@ -0,0 +1,90 @@
+//==================================================================
+/**
+ * @file Process_Element_T.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ * Jaiganesh Balasubramanian <jai@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef PROCESS_ELEMENT_T_H
+#define PROCESS_ELEMENT_T_H
+
+#include "Process_Element.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+// processes sequence - not for common elements, process function is a
+// member of "this" -
+template<typename DATA, typename OBJECT, typename SEQUENCE, typename FUNCTION>
+bool
+process_sequence_local(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ SEQUENCE& seq, OBJECT* obj, FUNCTION func);
+
+// processes sequence - not for common elements, process function is not a
+// member of "this" -
+template<typename DATA, typename OBJECT, typename SEQUENCE, typename FUNCTION>
+bool
+process_sequence_remote(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ SEQUENCE& seq, FUNCTION func,
+ REF_MAP& id_map);
+
+// Processes sequence - common elements -
+template<typename DATA, typename SEQUENCE, typename FUNCTION>
+bool
+process_sequence_common(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ SEQUENCE& seq, FUNCTION func,
+ REF_MAP& id_map);
+
+// Process function for non-sequential elements
+template<typename DATA, typename OBJECT, typename ELEMENT, typename FUNCTION>
+bool
+process_element(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ ELEMENT& elem, OBJECT* obj, FUNCTION func,
+ REF_MAP& id_map);
+
+// Process function for non-sequential non-local elements
+template<typename DATA, typename OBJECT, typename ELEMENT, typename FUNCTION>
+bool
+process_element_remote(DOMDocument* doc, DOMNodeIterator* iter, DOMNode* node,
+ XStr& node_name, const char* name,
+ ELEMENT& elem, OBJECT* obj, FUNCTION func,
+ REF_MAP& id_map);
+
+template <typename SEQUENCE, typename DATA>
+void
+process_sequential_element (DOMNode* node,
+ DOMDocument* doc,
+ DOMNodeIterator* iter,
+ SEQUENCE& seq,
+ Process_Function <DATA>* func,
+ REF_MAP& id_map);
+
+template <typename VALUE, typename DATA>
+void process_element_attributes (DOMNamedNodeMap* named_node_map,
+ DOMDocument* doc, DOMNodeIterator* iter,
+ VALUE value, DATA& data,
+ Process_Function <DATA>* func,
+ REF_MAP& id_map);
+
+END_DEPLOYMENT_NAMESPACE
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "Process_Element_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Process_Element_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#endif // PROCESS_ELEMENT_H
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.cpp
new file mode 100644
index 00000000000..1272ad9dcc6
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.cpp
@@ -0,0 +1,81 @@
+//$Id$
+
+#include "Property_Handler.h"
+#include "Any_Handler.h"
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "Utils.h"
+
+using CIAO::Config_Handler::Utils;
+using CIAO::Config_Handler::Any_Handler;
+
+void
+CIAO::Config_Handler::Property_Handler::process_Property (DOMNodeIterator * iter,
+ Deployment::Property &property)
+{
+ int valid_name = 0, valid_value = 0;
+ for (DOMNode * node = iter->nextNode (); node != 0; node = iter->nextNode ())
+ {
+ //Check if the Schema IDs for both the elements match
+ XStr name (node->getNodeName ());
+ if (name == XStr (ACE_TEXT ("name")))
+ {
+ valid_name = 1;
+ property.name = Utils::parse_string (iter);
+ }
+ else if (name == XStr (ACE_TEXT ("value")))
+ {
+ valid_value = 1;
+ 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;
+ XMLString::release (&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 value node present there
+ Any_Handler::process_Any (value_iter,
+ property.value);
+ }
+ }
+ }
+ else if (length == 1)
+ Any_Handler::process_Any (iter, property.value);
+ }
+ else
+ // Process the value associated
+ Any_Handler::process_Any (iter, property.value);
+ }
+ else
+ {
+ if (! valid_name || ! valid_value)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Config_Handlers::Property_Handler::\
+ process_Property element mismatch expected <name> \
+ or <value>"));
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+
+ // Processed one element more go back one and exit
+ iter->previousNode ();
+ break;
+ }
+ }/* End Outer for */
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.h
new file mode 100644
index 00000000000..3367a2e1348
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Property_Handler.h
@@ -0,0 +1,57 @@
+//==================================================================
+/**
+ * @file Property_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//===================================================================
+
+#ifndef PROPERTY_HANDLER_H
+#define PROPERTY_HANDLER_H
+
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class Property_Handler
+ *
+ * @brief Handler class for <Property> type
+ *
+ * This class defines handler methods to parse Property
+ * types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+ class Config_Handler_Export Property_Handler
+ {
+ public:
+ static void process_Property (DOMNodeIterator * iter,
+ Deployment::Property &property);
+ // process elements of type Property definitions in
+ // the descriptor files
+
+ };
+ }
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* PROPERTY_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.cpp
new file mode 100644
index 00000000000..f27f02c2d7b
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.cpp
@@ -0,0 +1,128 @@
+//$Id$
+
+#include "RS_Handler.h"
+#include "SP_Handler.h"
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "Utils.h"
+
+void
+CIAO::Config_Handler::RS_Handler::
+process_RequirementSatisfier (DOMNodeIterator * iter,
+ Deployment::RequirementSatisfier &ret_struct)
+{
+ // boolean to represent valid <RequirementSatisfier> definition
+ int valid_name = 0, valid_resourceType = 0, valid_property = 0;
+
+ for (DOMNode * node = iter->nextNode (); ; node = iter->nextNode ())
+ {
+ XStr name (node->getNodeName ());
+ if (name == XStr (ACE_TEXT ("name")))
+ {
+ ret_struct.name = CIAO::Config_Handler::Utils::parse_string (iter);
+ valid_name = 1;
+ }
+ else if (name == XStr (ACE_TEXT ("resourceType")))
+ {
+ valid_resourceType = 1;
+ // Requirement: Atleast one <resourceType> definition present
+ ::CORBA::StringSeq_var res_seq = 0;
+ ACE_NEW_THROW_EX (res_seq,
+ ::CORBA::StringSeq (1),
+ CORBA::NO_MEMORY ());
+ res_seq->length (0);
+
+ while (name == XStr (ACE_TEXT ("resourceType")))
+ {
+ ::CORBA::ULong index = res_seq->length ();
+ res_seq->length (res_seq->length () + 1);
+ res_seq [index] =
+ CIAO::Config_Handler::Utils::parse_string (iter);
+ name = node->getNodeName ();
+ }
+
+ // On exit go one step back to faciliate parsing next tag
+ iter->previousNode ();
+
+ // Assign this sequence to the Return Structure
+ ret_struct.resourceType = res_seq;
+ }
+
+ else if (name == XStr (ACE_TEXT ("property")))
+ {
+ valid_property = 1;
+ Deployment::SatisfierProperties_var property_seq = 0;
+ DOMNodeIterator * property_iter = 0;
+ ACE_NEW_THROW_EX (property_seq,
+ Deployment::SatisfierProperties,
+ CORBA::NO_MEMORY ());
+ property_seq->length (0);
+ while (name == XStr (ACE_TEXT ("property")))
+ {
+ // 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;
+ XMLString::release (&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;
+
+ // Copy the property onto the sequence
+ ::CORBA::ULong index = property_seq->length ();
+ property_seq->length (property_seq->length () + 1);
+ CIAO::Config_Handler::SP_Handler::
+ process_SatisfierProperty (property_iter,
+ property_seq [index]);
+
+ // Get next node
+ iter->nextNode ();
+ name = node->getNodeName ();
+ }
+
+ // On exit go one step back to faciliate parsing next tag
+ iter->previousNode ();
+
+ // Copy the sequence to return structure
+ ret_struct.property = property_seq;
+ }
+ else
+ {
+ if (! valid_name || ! valid_resourceType || ! valid_property)
+ ACE_DEBUG ((LM_DEBUG, "Config_Handlers::RS_Handler::process_ \
+ RequirementSatisfier element mismatch expected <name>,\
+ <resourceType> <property>\n"));
+ // On exit go one step back as one might have processed the next
+ // valid tag
+ iter->previousNode ();
+
+ // Exit out of the for loop
+ break;
+ }
+ }
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.h
new file mode 100644
index 00000000000..11d858b4141
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/RS_Handler.h
@@ -0,0 +1,57 @@
+//==================================================================
+/**
+ * @file RS_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//==================================================================
+
+#ifndef RS_HANDLER_H
+#define RS_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class RS_Handler
+ *
+ * @brief Handler class for <RequirementSatisfier> type
+ *
+ * This class defines handler methods to parse RequirementSatisfier
+ * types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+ class Config_Handler_Export RS_Handler
+ {
+ public:
+ static void
+ process_RequirementSatisfier (DOMNodeIterator * iter,
+ Deployment::RequirementSatisfier &ret_struct);
+ // process elements of type RequirementSatisfier definitions in
+ // the descriptor files
+
+ };
+ }
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* ID_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.cpp
new file mode 100644
index 00000000000..08f390824dc
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.cpp
@@ -0,0 +1,61 @@
+//==================================================================
+/**
+ * @file RUK_Handler.cpp
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Log_Msg.h"
+
+#include "IAD_Handler.h"
+#include "RUK_Handler.h"
+#include "Utils.h"
+
+#include <iostream>
+
+using std::cerr;
+using std::endl;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /*
+ * Class ResourceUsageKind_Handler
+ */
+
+ void RUK_Handler::process_ResourceUsageKind
+ (DOMNodeIterator *iter, ::Deployment::ResourceUsageKind &kind)
+ {
+ // -- ResourceUsageKind enum
+ XStr none ("None");
+ XStr instance_uses_resource ("InstanceUsesResource");
+ XStr resource_uses_instance ("ResourceUsesInstance");
+ XStr port_uses_resource ("PortUsesResource");
+ XStr resource_uses_port ("ResourceUsesPort");
+
+ XStr kind_str = XStr (Utils::parse_string (iter));
+ if (kind_str == none)
+ kind = Deployment::None;
+ else if (kind_str = instance_uses_resource)
+ kind = Deployment::InstanceUsesResource;
+ else if (kind_str == resource_uses_instance)
+ kind = Deployment::ResourceUsesInstance;
+ else if (kind_str == port_uses_resource)
+ kind = Deployment::PortUsesResource;
+ else if (kind_str == resource_uses_port)
+ kind = Deployment::ResourceUsesPort;
+
+ // Something wrong here.. Throw exception
+ ACE_DEBUG ((LM_DEBUG,
+ "Config_Handler::RUK_Handler::process_ResourceUsageKind \
+ illegal <ResourceUsageKind> value found \n"));
+ ACE_THROW (CORBA::INTERNAL ());
+ }
+ }
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.h
new file mode 100644
index 00000000000..70536e39072
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/RUK_Handler.h
@@ -0,0 +1,77 @@
+//==================================================================
+/**
+ * @file RUK_Handler.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef RUK_HANDLER_H
+#define RUK_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/SString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+
+ /**
+ * @class RUK_Handler
+ *
+ * @brief Handler class for <ResourceUsageKind> type
+ *
+ * This class defines handler methods to parse ResourceUsage
+ * Kind types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+
+ class Config_Handler_Export RUK_Handler {
+ public:
+
+ /// Process elements of type ResourceUsageKind definitions in
+ /// the description files.
+ static void
+ process_ResourceUsageKind (DOMNodeIterator *iter, ::Deployment::ResourceUsageKind &kind);
+ };
+
+ }
+
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* RUK_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.cpp
new file mode 100644
index 00000000000..bc5b1fcb56a
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.cpp
@@ -0,0 +1,113 @@
+//$Id$
+
+#include "Requirement_Handler.h"
+#include "Property_Handler.h"
+#include "tao/Exception.h"
+#include "Utils.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;
+ }
+ }
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.h
new file mode 100644
index 00000000000..b960e9b70d7
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Requirement_Handler.h
@@ -0,0 +1,57 @@
+//==================================================================
+/**
+ * @file Requirement_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef REQUIREMENT_HANDLER_H
+#define REQUIREMENT_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class Requirement_Handler
+ *
+ * @brief Handler class for <ImplementationDependency> type
+ *
+ * This class defines handler methods to parse Implementation
+ * Dependency types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+ class Config_Handler_Export Requirement_Handler
+ {
+ public:
+ static void
+ process_Requirement (DOMNodeIterator * iter,
+ Deployment::Requirement &ret_struct);
+ // process elements of type Requirement in the descriptor files
+
+ };
+ }
+
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* REQUIREMENT_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.cpp
new file mode 100644
index 00000000000..e7731252994
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.cpp
@@ -0,0 +1,41 @@
+//$Id$
+
+#include "SPK_Handler.h"
+#include "tao/Exception.h"
+#include "Utils.h"
+
+using CIAO::Config_Handler::Utils;
+
+void
+CIAO::Config_Handler::SPK_Handler::
+process_SatisfierPropertyKind (DOMNodeIterator * iter,
+ Deployment::SatisfierPropertyKind &kind)
+{
+ // -- SatisfierPropertyKind enum
+ XStr quantity ("Quantity");
+ XStr capacity ("Capacity");
+ XStr minimum ("Minimum");
+ XStr maximum ("Maximum");
+ XStr attribute ("Attribute");
+ XStr selection ("Selection");
+
+ XStr kind_str = XStr (Utils::parse_string (iter));
+ if (kind_str == quantity)
+ kind = Deployment::Quantity;
+ else if (kind_str = capacity)
+ kind = Deployment::Capacity;
+ else if (kind_str == minimum)
+ kind = Deployment::Minimum;
+ else if (kind_str == maximum)
+ kind = Deployment::Maximum;
+ else if (kind_str == attribute)
+ kind = Deployment::Attribute;
+ else if (kind_str == selection)
+ kind = Deployment::Selection;
+
+ // Something wrong here.. Throw exception
+ ACE_DEBUG ((LM_DEBUG,
+ "Config_Handler::SPK_Handler::process_SPK \
+ illegal <SatisfierPropertyKind> value found \n"));
+ ACE_THROW (CORBA::INTERNAL ());
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.h
new file mode 100644
index 00000000000..51b6f1eb8b2
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/SPK_Handler.h
@@ -0,0 +1,57 @@
+//==================================================================
+/**
+ * @file SPK_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef SPK_HANDLER_H
+#define SPK_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class SPK_Handler
+ *
+ * @brief Handler class for <SatisfierPropertyKind> type
+ *
+ * This class defines handler methods to parse Implementation
+ * Dependency types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+ class Config_Handler_Export SPK_Handler
+ {
+ public:
+ static void process_SatisfierPropertyKind (DOMNodeIterator * iter,
+ Deployment::SatisfierPropertyKind &kind);
+ // process elements of type SatisfierPropertyKind definitions in
+ // the descriptor files
+
+ };
+ }
+
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* SPK_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.cpp
new file mode 100644
index 00000000000..842912db9ca
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.cpp
@@ -0,0 +1,79 @@
+//$Id$
+
+#include "SP_Handler.h"
+#include "Any_Handler.h"
+#include "SPK_Handler.h"
+#include "tao/Exception.h"
+#include "ace/Auto_Ptr.h"
+#include "Utils.h"
+
+using CIAO::Config_Handler::Utils;
+using CIAO::Config_Handler::Any_Handler;
+
+void
+CIAO::Config_Handler::SP_Handler::
+process_SatisfierProperty (DOMNodeIterator * iter,
+ Deployment::SatisfierProperty &property)
+{
+ for (DOMNode * node = iter->nextNode (); ; node = iter->nextNode ())
+ {
+ // Get name of the current element
+ XStr name (node->getNodeName ());
+
+ if (name == XStr (ACE_TEXT ("name")))
+ property.name = Utils::parse_string (iter);
+ else if (name == XStr (ACE_TEXT ("kind")))
+ SPK_Handler::process_SatisfierPropertyKind (iter, property.kind);
+ else if (name == XStr (ACE_TEXT ("value")))
+ {
+ // 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;
+ XMLString::release (&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
+ Any_Handler::process_Any (value_iter,
+ property.value);
+ }
+ }
+ }
+ }
+ else
+ // Populate value for the Property
+ Any_Handler::process_Any (iter, property.value);
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "Config_Handlers::SP_Handler::process_ \
+ RequirementSatisfier element mismatch expected <name> \
+ or <PropertyKind> <Deployment:Any>"));
+
+ // Get the previous iterator
+ iter->previousNode ();
+
+ // Exit from the for loop
+ break;
+ }
+ }
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.h
new file mode 100644
index 00000000000..a5402097793
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/SP_Handler.h
@@ -0,0 +1,56 @@
+//==================================================================
+/**
+ * @file SP_Handler.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef SP_HANDLER_H
+#define SP_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLString;
+using xercesc::DOMText;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+
+namespace CIAO
+{
+ namespace Config_Handler
+ {
+ /**
+ * @class SP_Handler
+ *
+ * @brief Handler class for <SatisfierProperty> type
+ *
+ * This class defines handler methods to parse Implementation
+ * Dependency types in the descriptor files. The corresponding
+ * CORBA IDL type for the schema element is returned.
+ *
+ */
+ class Config_Handler_Export SP_Handler
+ {
+ public:
+ static void process_SatisfierProperty (DOMNodeIterator * iter,
+ Deployment::SatisfierProperty &property);
+ // process elements of type SatisfierProperty definitions in
+ // the descriptor files
+
+ };
+ }
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* ID_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.cpp b/TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.cpp
new file mode 100644
index 00000000000..d145106bae5
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.cpp
@@ -0,0 +1,88 @@
+// $Id$
+
+#include "tao/Exception.h"
+#include "ace/Log_Msg.h"
+#include "Property_Handler.h"
+#include "Requirement_Handler.h"
+#include "CPR_Handler.h"
+#include "CompPkgDesc_Handler.h"
+#include "TPD_Handler.h"
+#include "Process_Element.h"
+#include "Utils.h"
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/// handle the package configuration and populate it
+ACE_TString TPD_Handler::process_TopLevelPackageDescription()
+{
+ for (DOMNode* node = this->iter_->nextNode ();
+ node != 0;
+ node = this->iter_->nextNode ())
+ {
+ XStr node_name (node->getNodeName());
+ if (node_name == XStr
+ (ACE_TEXT ("Deployment:TopLevelPackageDescription")))
+ {
+ }
+ else if (node_name == XStr(ACE_TEXT ("package")))
+ {
+ if (node->hasAttributes ())
+ {
+ DOMNamedNodeMap* named_node_map = node->getAttributes ();
+
+ // the number of attributes
+ int length = named_node_map->getLength();
+ // iterate the attributes
+ for (int j = 0; j < length; ++j)
+ {
+ DOMNode* attribute_node = named_node_map->item (j);
+ XStr strattrnodename (attribute_node->getNodeName ());
+
+ char * temp =
+ XMLString::transcode (attribute_node->getNodeValue ());
+ ACE_TString aceattrnodevalue = temp;
+ XMLString::release (&temp);
+
+ // if href is given find out the referenced position
+ // and process the element
+ if (strattrnodename == XStr (ACE_TEXT ("href")))
+ {
+ XMLURL xml_url (aceattrnodevalue.c_str ());
+ XMLURL result (aceattrnodevalue.c_str ());
+ ACE_TString url_string = aceattrnodevalue.c_str ();
+
+ char * temp =
+ XMLString::transcode ( doc_->getDocumentURI ());
+ ACE_TString doc_path = temp;
+ XMLString::release (&temp);
+
+ XMLCh * relative_path =
+ XMLString::transcode (doc_path.c_str ());
+ result.makeRelativeTo (relative_path);
+ XMLString::release (&relative_path);
+
+ temp = XMLString::transcode (result.getURLText ());
+ ACE_TString final_url = temp;
+ XMLString::release (&temp);
+
+ if (xml_url.isRelative ())
+ {
+ return final_url;
+ }
+ else
+ {
+ return url_string;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+ ACE_THROW (CORBA::INTERNAL());
+}
+
+END_DEPLOYMENT_NAMESPACE
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.h b/TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.h
new file mode 100644
index 00000000000..30265026f8c
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/TPD_Handler.h
@@ -0,0 +1,87 @@
+//==================================================================
+/**
+ * @file TPD_Handler.h
+ *
+ * $Id$
+ *
+ * @author Emre Turkay <turkaye@dre.vanderbilt.edu>
+ */
+//=====================================================================
+
+#ifndef TPD_HANDLER_H
+#define TPD_HANDLER_H
+#include /**/ "ace/pre.h"
+
+#include "DeploymentC.h"
+#include "Config_Handler_export.h"
+#include "Basic_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/SString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include "XercesString.h"
+
+using Config_Handler::XStr;
+using xercesc::XMLUni;
+using xercesc::XMLString;
+using xercesc::XMLException;
+using xercesc::DOMException;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMImplementationLS;
+using xercesc::DOMImplementation;
+using xercesc::DOMText;
+using xercesc::DOMNamedNodeMap;
+using xercesc::DOMLocator;
+using xercesc::DOMError;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMNodeFilter;
+
+BEGIN_DEPLOYMENT_NAMESPACE
+
+/**
+ * @class TPD_Handler
+ *
+ * @brief Handler class for <TopLevelPackageConfiguration> type
+ *
+ * This class is within the Component Data Model subpackage of the
+ * Deployment & Configuration package.
+ *
+ * This class defines handler methods to parse the aforementioned type
+ * in the description files. The corresponding CORBA IDL type for this
+ * element is returned.
+ */
+
+class Config_Handler_Export TPD_Handler: public Basic_Handler
+{
+public:
+
+ /// constructor
+ TPD_Handler (DOMDocument* doc, unsigned long filter_)
+ : Basic_Handler (doc, filter_) { }
+
+ /// constructor
+ TPD_Handler (DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (iter, release) { }
+
+ /// constructor
+ TPD_Handler (DOMDocument* doc, DOMNodeIterator* iter, bool release = false)
+ : Basic_Handler (doc, iter, release) { }
+
+ /// Process the package configuration
+ ACE_TString process_TopLevelPackageDescription ();
+
+};
+
+END_DEPLOYMENT_NAMESPACE
+
+#include /**/ "ace/post.h"
+
+#endif /* TPD_HANDLER_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Utils.cpp b/TAO/CIAO/DAnCE/Config_Handlers/Utils.cpp
new file mode 100644
index 00000000000..526d757dbd9
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Utils.cpp
@@ -0,0 +1,353 @@
+//$Id$
+
+#include "Utils.h"
+#include "ace/OS_NS_stdlib.h"
+#include "ace/Log_Msg.h"
+#include "ace/SString.h"
+#include "ace/Auto_Ptr.h"
+
+#include "XercesString.h"
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLUri.hpp>
+#include <xercesc/util/XMLUniDefs.hpp>
+
+using xercesc::XMLUri;
+using xercesc::XMLURL;
+using xercesc::DOMDocument;
+using xercesc::DOMDocumentTraversal;
+using xercesc::XMLUni;
+using xercesc::DOMImplementation;
+using xercesc::DOMImplementationRegistry;
+using xercesc::DOMNodeFilter;
+using xercesc::DOMBuilder;
+using xercesc::DOMImplementationLS;
+
+char *
+CIAO::Config_Handler::Utils::parse_string (DOMNodeIterator * iter)
+{
+ DOMNode * node = iter->nextNode();
+ DOMText* text = ACE_reinterpret_cast (DOMText*, node);
+ return XMLString::transcode (text->getNodeValue ());
+}
+
+CORBA::Short
+CIAO::Config_Handler::Utils::parse_short (DOMNodeIterator * iter)
+{
+ char *temp = Config_Handler::Utils::parse_string (iter);
+ CORBA::Short ret_val = ACE_OS::atoi (temp);
+ XMLString::release (&temp);
+ return ret_val;
+}
+
+CORBA::ULong
+CIAO::Config_Handler::Utils::parse_ulong (DOMNodeIterator * iter)
+{
+ char *temp = Config_Handler::Utils::parse_string (iter);
+ CORBA::ULong ret_val = ACE_OS::strtoul (temp, 0, 10);
+ XMLString::release (&temp);
+ return ret_val;
+}
+
+CORBA::Long
+CIAO::Config_Handler::Utils::parse_long (DOMNodeIterator * iter)
+{
+ char *temp = Config_Handler::Utils::parse_string (iter);
+ CORBA::ULong ret_val = ACE_OS::strtol (temp, 0, 10);
+ XMLString::release (&temp);
+ return ret_val;
+}
+
+CORBA::Double
+CIAO::Config_Handler::Utils::parse_double (DOMNodeIterator * iter)
+{
+ char *temp = Config_Handler::Utils::parse_string (iter);
+ CORBA::Double ret_val = ACE_OS::strtod (temp, 0);
+ XMLString::release (&temp);
+ return ret_val;
+}
+
+CORBA::Float
+CIAO::Config_Handler::Utils::parse_float (DOMNodeIterator * iter)
+{
+ return ACE_static_cast (CORBA::Float, Utils::parse_double (iter));
+}
+
+CORBA::Boolean
+CIAO::Config_Handler::Utils::parse_bool (DOMNodeIterator * iter)
+{
+ XStr true_val ("true");
+ XStr true_cap_val ("TRUE");
+
+ DOMText * text = ACE_reinterpret_cast (DOMText *, iter->nextNode ());
+ XStr value (text->getNodeValue ());
+
+ if (value == true_val || value == true_cap_val)
+ return 1;
+ else
+ return 0;
+}
+
+CORBA::Char
+CIAO::Config_Handler::Utils::parse_char (DOMNodeIterator * iter)
+{
+ DOMText * text = ACE_reinterpret_cast (DOMText *, iter->nextNode ());
+ char * temp_string = XMLString::transcode (text->getNodeValue ());
+
+ // Should be non-null
+ ACE_ASSERT (temp_string != 0);
+
+ // Return the first character in the node as char value
+ char ret_char = temp_string [0];
+ XMLString::release (&temp_string);
+ return ret_char;
+}
+
+CORBA::Octet
+CIAO::Config_Handler::Utils::parse_octet (DOMNodeIterator * iter)
+{
+ return Utils::parse_char (iter);
+}
+
+bool
+CIAO::Config_Handler::Utils::process_string (DOMNodeIterator* iter,
+ const XStr& node_name, const char* name,
+ TAO_String_Manager& var)
+{
+ bool result = (node_name == XStr(ACE_TEXT (name)));
+ if (result == true)
+ {
+ DOMNode* node = iter->nextNode();
+ const XMLCh* text = ACE_reinterpret_cast(DOMText*, node)->getNodeValue
+();
+ if (text)
+ var = XMLString::transcode (text);
+ }
+ return result;
+}
+
+bool
+CIAO::Config_Handler::Utils::process_string_seq (DOMNodeIterator* iter,
+ const XStr& node_name, const char* name,
+ CORBA::StringSeq& seq)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ DOMNode* node = iter->nextNode ();
+ const XMLCh* text = ACE_reinterpret_cast
+ (DOMText*, node)->getNodeValue ();
+
+ if (text)
+ {
+ CORBA::ULong i (seq.length ());
+ seq.length (i + 1);
+ seq[i] = XMLString::transcode (text);
+ }
+ }
+
+ return result;
+}
+
+bool
+CIAO::Config_Handler::Utils::process_ulong (DOMNodeIterator* iter,
+ const XStr& node_name, const char* name,
+ CORBA::ULong& var)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ DOMNode* node = iter->nextNode ();
+ const XMLCh* text = ACE_reinterpret_cast
+ (DOMText*, node)->getNodeValue ();
+
+ if (text)
+ {
+ CORBA::String_var temp = XMLString::transcode (text);
+ var = ACE_static_cast (CORBA::ULong, ACE_OS::strtol (temp.in (),
+ 0, 10));
+ }
+ }
+
+ return result;
+}
+
+bool
+CIAO::Config_Handler::Utils::process_boolean (DOMNodeIterator* iter,
+ const XStr& node_name, const char* name,
+ CORBA::Boolean& var)
+{
+ bool result = (node_name == XStr (ACE_TEXT (name)));
+
+ if (result == true)
+ {
+ DOMNode* node = iter->nextNode ();
+ const XMLCh* text = ACE_reinterpret_cast
+ (DOMText*, node)->getNodeValue ();
+
+ if (text)
+ {
+ CORBA::String_var temp = XMLString::transcode (text);
+ var = ACE_static_cast (CORBA::Boolean, ACE_OS::strtol (temp.in (),
+ 0, 10));
+ }
+ }
+
+ return result;
+}
+
+DOMDocument*
+CIAO::Config_Handler::Utils::create_document (const char * url)
+{
+ xercesc::XMLPlatformUtils::Initialize();
+ static const XMLCh gLS[] = { xercesc::chLatin_L,
+ xercesc::chLatin_S,
+ xercesc::chNull };
+
+ DOMImplementation* impl
+ = DOMImplementationRegistry::getDOMImplementation(gLS);
+ //auto_ptr<DOMImplementation> cleanup_impl (impl);
+
+ DOMBuilder* parser =
+ ((DOMImplementationLS*)impl)->
+ createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
+ //auto_ptr<DOMBuilder> cleanup_parser (parser);
+
+ // Discard comment nodes in the document
+ parser->setFeature (XMLUni::fgDOMComments, false);
+
+ // Disable datatype normalization. The XML 1.0 attribute value
+ // normalization always occurs though.
+ parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true);
+
+ // Do not create EntityReference nodes in the DOM tree. No
+ // EntityReference nodes will be created, only the nodes
+ // corresponding to their fully expanded sustitution text will be
+ // created.
+ parser->setFeature (XMLUni::fgDOMEntities, false);
+
+ // Perform Namespace processing.
+ parser->setFeature (XMLUni::fgDOMNamespaces, true);
+
+ // Perform Validation
+ parser->setFeature (XMLUni::fgDOMValidation, true);
+
+ // Do not include ignorable whitespace in the DOM tree.
+ parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false);
+
+ // Enable the parser's schema support.
+ parser->setFeature (XMLUni::fgXercesSchema, true);
+
+ // Enable full schema constraint checking, including checking which
+ // may be time-consuming or memory intensive. Currently, particle
+ // unique attribution constraint checking and particle derivation
+ // restriction checking are controlled by this option.
+ parser->setFeature (XMLUni::fgXercesSchemaFullChecking, true);
+
+ // The parser will treat validation error as fatal and will exit.
+ parser->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true);
+
+
+ DOMDocument* doc = parser->parseURI (url);
+ //auto_ptr<DOMDocument> cleanup_doc (doc);
+
+ return doc;
+}
+
+DOMBuilder*
+CIAO::Config_Handler::Utils::create_parser ()
+{
+ xercesc::XMLPlatformUtils::Initialize();
+ static const XMLCh gLS[] = { xercesc::chLatin_L,
+ xercesc::chLatin_S,
+ xercesc::chNull };
+
+ DOMImplementation* impl
+ = DOMImplementationRegistry::getDOMImplementation(gLS);
+ //auto_ptr<DOMImplementation> cleanup_impl (impl);
+
+ DOMBuilder* parser =
+ ((DOMImplementationLS*)impl)->
+ createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
+ //auto_ptr<DOMBuilder> cleanup_parser (parser);
+
+ // Discard comment nodes in the document
+ parser->setFeature (XMLUni::fgDOMComments, false);
+
+ // Disable datatype normalization. The XML 1.0 attribute value
+ // normalization always occurs though.
+ parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true);
+
+ // Do not create EntityReference nodes in the DOM tree. No
+ // EntityReference nodes will be created, only the nodes
+ // corresponding to their fully expanded sustitution text will be
+ // created.
+ parser->setFeature (XMLUni::fgDOMEntities, false);
+
+ // Perform Namespace processing.
+ parser->setFeature (XMLUni::fgDOMNamespaces, true);
+
+ // Perform Validation
+ parser->setFeature (XMLUni::fgDOMValidation, true);
+
+ // Do not include ignorable whitespace in the DOM tree.
+ parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false);
+
+ // Enable the parser's schema support.
+ parser->setFeature (XMLUni::fgXercesSchema, true);
+
+ // Enable full schema constraint checking, including checking which
+ // may be time-consuming or memory intensive. Currently, particle
+ // unique attribution constraint checking and particle derivation
+ // restriction checking are controlled by this option.
+ parser->setFeature (XMLUni::fgXercesSchemaFullChecking, true);
+
+ // The parser will treat validation error as fatal and will exit.
+ parser->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true);
+
+
+ //DOMDocument* doc = parser->parseURI (url);
+ //auto_ptr<DOMDocument> cleanup_doc (doc);
+
+ return parser;
+}
+
+DOMNodeIterator *
+CIAO::Config_Handler::Utils::parse_href_tag (XMLURL url, DOMDocument * doc)
+{
+ char * document_path = 0;
+ if (url.isRelative ())
+ {
+ char * doc_path = XMLString::transcode (doc->getDocumentURI ());
+ XMLCh * temp = XMLString::transcode (doc_path);
+ url.makeRelativeTo (temp);
+ document_path = XMLString::transcode (url.getURLText ());
+
+ // Release allocated memory
+ XMLString::release (&doc_path);
+ XMLString::release (&temp);
+ }
+ else
+ {
+ document_path = XMLString::transcode (url.getURLText ());
+
+ }
+
+ DOMDocument* href_doc =
+ CIAO::Config_Handler::Utils::create_document (document_path);
+ //auto_ptr<DOMDocument> cleanup_doc (href_doc);
+
+ DOMDocumentTraversal* traverse = href_doc;
+ DOMNode* root = (href_doc->getDocumentElement ());
+ unsigned long filter = DOMNodeFilter::SHOW_ELEMENT |
+ DOMNodeFilter::SHOW_TEXT;
+
+ // release allocated memory
+ XMLString::release (&document_path);
+
+ return traverse->createNodeIterator (root,
+ filter,
+ 0,
+ true);
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/Utils.h b/TAO/CIAO/DAnCE/Config_Handlers/Utils.h
new file mode 100644
index 00000000000..dd051603d40
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/Utils.h
@@ -0,0 +1,118 @@
+//====================================================================
+/**
+ * @file Utils.h
+ *
+ * $Id$
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * @author Tao Lu <lu@dre.vanderbilt.edu>,
+ * @author Boris <boris@dre.vanderbilt.edu>
+ *
+ */
+//=====================================================================
+
+#ifndef UTILS_H
+#define UTILS_H
+
+#include /**/ "ace/pre.h"
+
+#include "Config_Handler_export.h"
+#include "DeploymentC.h"
+
+#include "tao/Basic_Types.h"
+#include "XercesString.h"
+#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/dom/DOM.hpp>
+#include <xercesc/util/XMLURL.hpp>
+
+using xercesc::XMLURL;
+using xercesc::DOMNodeIterator;
+using xercesc::DOMNode;
+using xercesc::DOMText;
+using xercesc::DOMBuilder;
+using xercesc::XMLString;
+using xercesc::DOMDocument;
+using Config_Handler::XStr;
+
+namespace CIAO {
+
+ namespace Config_Handler
+ {
+
+ /**
+ * @class Utils
+ *
+ * @brief Utility class for parsing basic types such as string float
+ * double etc.
+ *
+ * Helper methods for each type are defined as parse_<type> where type
+ * equals string, float, double etc. The corresponding C++ types are
+ * returned. These follow the IDL to C++ mapping defined by the CORBA
+ * specification.
+ *
+ */
+
+ class Config_Handler_Export Utils
+ {
+ public:
+ static char * parse_string (DOMNodeIterator * iter);
+ // Parse string type
+
+ static CORBA::ULong parse_ulong (DOMNodeIterator * iter);
+ // Parse ulong type
+
+ static CORBA::Long parse_long (DOMNodeIterator * iter);
+ // Parse long type
+
+ static CORBA::Short parse_short (DOMNodeIterator * iter);
+ // Parse short type
+
+ static CORBA::Float parse_float (DOMNodeIterator * iter);
+ // Parse float type
+
+ static CORBA::Double parse_double (DOMNodeIterator * iter);
+ // Parse double type
+
+ static CORBA::Boolean parse_bool (DOMNodeIterator * iter);
+ // Parse bool type
+
+ static CORBA::Char parse_char (DOMNodeIterator * iter);
+ // Parse char type
+
+ static CORBA::Octet parse_octet (DOMNodeIterator * iter);
+ // Parse octect type
+
+ static DOMDocument* create_document (const char * url);
+ // Create a document from the URL
+
+ static DOMBuilder* create_parser ();
+ // Create a parser from the URL
+
+ static bool process_string (DOMNodeIterator* iter, const XStr& node_name,
+ const char* name, TAO_String_Manager& var);
+ // process strings
+
+ static bool process_string_seq (DOMNodeIterator* iter,
+ const XStr& node_name,
+ const char* name, CORBA::StringSeq& seq);
+ // process string sequence
+
+ static bool process_boolean (DOMNodeIterator* iter,
+ const XStr& node_name,
+ const char* name, CORBA::Boolean& var);
+ // process strings
+
+ static bool process_ulong (DOMNodeIterator* iter, const XStr& node_name,
+ const char* name, CORBA::ULong& var);
+ // process ulong
+
+
+ static DOMNodeIterator * parse_href_tag (XMLURL xml_url,
+ DOMDocument * doc);
+ // Process the <href = "URL"> and return an iterator to the
+ // new document
+ };
+ }
+
+}
+#endif /* UTILS_H */
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/XercesString.cpp b/TAO/CIAO/DAnCE/Config_Handlers/XercesString.cpp
new file mode 100644
index 00000000000..7b719e4dc80
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/XercesString.cpp
@@ -0,0 +1,145 @@
+// $Id$
+
+#include <ostream>
+
+#include "XercesString.h"
+using xercesc::XMLString;
+
+namespace Config_Handler
+{
+
+ XStr::XStr (const char* str)
+ : _wstr(0)
+ {
+ _wstr = XMLString::transcode(str);
+ }
+
+ XStr::XStr (XMLCh *wstr)
+ : _wstr(wstr)
+ {
+
+ }
+
+ XStr::XStr (const XMLCh* wstr)
+ : _wstr(0)
+ {
+ _wstr = XMLString::replicate(wstr);
+ }
+
+ XStr::XStr (const XStr &right)
+ : _wstr(0)
+ {
+ _wstr = XMLString::replicate(right._wstr);
+ }
+
+ XStr& XStr::operator= (const XStr& rhs)
+ {
+ if (&rhs == this)
+ return *this;
+ XStr temp (rhs);
+ ACE_Swap<XMLCh*>::swap (this->_wstr, temp._wstr);
+ return *this;
+ }
+
+ XStr::~XStr ()
+ {
+ if (_wstr)
+ XMLString::release(&_wstr);
+ }
+
+ const XMLCh* XStr::begin () const
+ {
+ return _wstr;
+ }
+
+ const XMLCh* XStr::end () const
+ {
+ return _wstr + size();
+ }
+
+ bool XStr::append(const XMLCh *tail)
+ {
+ int iTailLen = XMLString::stringLen(tail);
+ int iWorkLen = XMLString::stringLen(_wstr);
+ XMLCh *result = new XMLCh[ iWorkLen + iTailLen + 1 ];
+ bool bOK = result != 0;
+ if (bOK)
+ {
+ XMLCh *target = result;
+ XMLString::moveChars(target, _wstr, iWorkLen);
+ target += iWorkLen;
+ XMLString::moveChars(target, tail, iTailLen);
+ target += iTailLen;
+ *target++ = 0;
+ XMLString::release(&_wstr);
+ _wstr = result;
+ }
+ return bOK;
+ }
+
+ bool XStr::erase(const XMLCh *head, const XMLCh *tail)
+ {
+ bool bOK = head <= tail && head >= begin() && tail <= end();
+ if (bOK)
+ {
+ XMLCh *result = new XMLCh[ size() - (tail - head) + 1 ];
+ XMLCh *target = result;
+ bOK = target != NULL;
+ if (bOK)
+ {
+ const XMLCh *cursor = begin();
+
+ while (cursor != head) *target++ = *cursor++;
+ cursor = tail;
+ while ( cursor != end() ) *target++ = *cursor++;
+ *target ++ = 0;
+ XMLString::release(&_wstr);
+ _wstr = result;
+ }
+ }
+ return bOK;
+ }
+
+ int XStr::size () const
+ {
+ return XMLString::stringLen(_wstr);
+ }
+
+ XMLCh XStr::operator [] (const int i)
+ {
+ return _wstr[i];
+ }
+
+ const XMLCh XStr::operator [] (const int i) const
+ {
+ return _wstr[i];
+ }
+
+ bool XStr::operator== (const XMLCh* wstr) const
+ {
+ return XMLString::compareIString (wstr, this->_wstr) == 0;
+ }
+
+ bool operator== (const XStr& lhs, const XStr& rhs)
+ {
+ return XMLString::compareIString (lhs,rhs) == 0;
+ }
+
+ bool operator!= (const XStr& lhs, const XStr& rhs)
+ {
+ return !operator==(lhs, rhs);
+ }
+
+
+ std::ostream&
+ operator<< (std::ostream& o, XStr const& str)
+ {
+ char* s = XMLString::transcode (str);
+
+ o << s;
+
+ XMLString::release (&s); // idiots?
+ return o;
+ }
+
+}
diff --git a/TAO/CIAO/DAnCE/Config_Handlers/XercesString.h b/TAO/CIAO/DAnCE/Config_Handlers/XercesString.h
new file mode 100644
index 00000000000..87ef31c3c2c
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Config_Handlers/XercesString.h
@@ -0,0 +1,76 @@
+// $Id$
+
+#ifndef _XERCESSTRING_H
+#define _XERCESSTRING_H
+
+#include /**/ "ace/pre.h"
+
+#include "ace/Swap.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include <iosfwd>
+
+#include <xercesc/util/XMLString.hpp>
+
+// Utility class that provides a std::string like facade to XMLString.
+// Doesn't implement all of the methods of std::string.
+
+namespace Config_Handler
+{
+
+ class XStr
+ {
+ public:
+ XStr() : _wstr(0L) { };
+
+ XStr (const char* str);
+
+ XStr (XMLCh* wstr);
+
+ XStr (const XMLCh* wstr);
+
+ XStr (const XStr& copy);
+
+ XStr& operator= (const XStr& rhs);
+
+ ~XStr();
+
+ const XMLCh* begin() const;
+
+ const XMLCh* end() const;
+
+ bool append(const XMLCh* tail);
+
+ bool erase(const XMLCh* head, const XMLCh* tail);
+
+ int size() const;
+
+ XMLCh operator [] (const int i);
+
+ const XMLCh operator [] (const int i) const;
+
+ operator const XMLCh* () const { return _wstr; };
+
+ bool operator== (const XMLCh* wstr) const;
+
+
+ private:
+
+ XMLCh* _wstr; // Internal representation
+
+ };
+
+ bool operator== (const XStr& lhs, const XStr& rhs);
+ bool operator!= (const XStr& lhs, const XStr& rhs);
+
+ std::ostream&
+ operator<< (std::ostream& o, XStr const& str);
+
+}
+
+#include /**/ "ace/post.h"
+
+#endif /* _XERCESSTRING_H */