summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DnC/Config_Handlers/NIA_Handler.cpp
blob: 17877dc1803f1ab25f25a0b4cd836f36a371a683 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//==================================================================
/**
 *  @file  NIA_Handler.cpp
 *
 *  $Id$
 *
 *  @author Emre Turkay  <turkaye@dre.vanderbilt.edu>
 */
//=====================================================================

#ifndef NIA_HANDLER_C
#define NIA_HANDLER_C

#include "tao/Exception.h"
#include "ace/Auto_Ptr.h"
#include "ace/Log_Msg.h"

#include "IAD_Handler.h"
#include "NIA_Handler.h"

#include <iostream>

using std::cerr;
using std::endl;

namespace CIAO
{
  namespace Config_Handler
  {
    NIA_Handler::NIA_Handler (DOMDocument* doc, unsigned long filter)
      : doc_ (doc),
        root_ (doc->getDocumentElement()),
        filter_ (filter),
        iter_ (doc_->createNodeIterator (this->root_,
                                              this->filter_,
                                              0,
                                              true)),
        release_ (true)
    {}

    NIA_Handler::NIA_Handler (DOMNodeIterator* iter, bool release)
      : doc_ (0), root_ (0), filter_ (0), iter_ (iter), release_ (release)
    {}


    NIA_Handler::~NIA_Handler()
    {
      if (this->release_)
        this->iter_->release();
    }

    /// handle the package configuration and populate it
    void NIA_Handler::process_NamedImplementationArtifact
      (::Deployment::NamedImplementationArtifact &nia)
    {
      // This is bogus and should be replaced later.
      ACE_DECLARE_NEW_CORBA_ENV;

      for (DOMNode* node = this->iter_->nextNode();
           node != 0;
           node = this->iter_->nextNode())
        {
          XStr node_name (node->getNodeName());
          if (node_name == XStr (ACE_TEXT ("name")))
            {
              // Fetch the text node which contains the "label"
	      node = this->iter_->nextNode();
	      DOMText* text = ACE_reinterpret_cast (DOMText*, node);
              this->process_name (text->getNodeValue(), nia);
	    }
	  else if (node_name == XStr (ACE_TEXT ("referencedArtifact")))
            {
              // fetch the component package reference handler
              IAD_Handler iad_handler (iter_, false);

              // delegate the populating process
              iad_handler.process_ImplementationArtifactDescription (nia.referencedArtifact);
            }
          else
            {
              // ??? How did we get here ???
              ACE_THROW (CORBA::INTERNAL());
            }
        }
      return;
    }

    /// handle name attribute
    void NIA_Handler::process_name
      (const XMLCh* name, ::Deployment::NamedImplementationArtifact &nia)
    {
      if (name)
        {
          nia.name = XMLString::transcode (name);
        }
    }

  }
}

#endif /* NIA_HANDLER_C */