summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/Old_Config_Handlers/Utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/Old_Config_Handlers/Utils.cpp')
-rw-r--r--TAO/CIAO/DAnCE/Old_Config_Handlers/Utils.cpp350
1 files changed, 350 insertions, 0 deletions
diff --git a/TAO/CIAO/DAnCE/Old_Config_Handlers/Utils.cpp b/TAO/CIAO/DAnCE/Old_Config_Handlers/Utils.cpp
new file mode 100644
index 00000000000..02068be58ad
--- /dev/null
+++ b/TAO/CIAO/DAnCE/Old_Config_Handlers/Utils.cpp
@@ -0,0 +1,350 @@
+//$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 = 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 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 = 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 = 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 = 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 = 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 = reinterpret_cast<DOMText*> (node)->getNodeValue ();
+
+ if (text)
+ {
+ CORBA::String_var temp = XMLString::transcode (text);
+ var = 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 = reinterpret_cast<DOMText*> (node)->getNodeValue ();
+
+ if (text)
+ {
+ CORBA::String_var temp = XMLString::transcode (text);
+ var = 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);
+}