summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/Config_Handlers/PCD_Handler.cpp
blob: a849aa90f000665ce37f1e0a28a75f5409a575a8 (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
102
103
104
105
106
107
108
109
110
111
112
113
// $Id$

#include "PCD_Handler.h"
#include "Req_Handler.h"
#include "CEPE_Handler.h"
#include "PSPE_Handler.h"
#include "ERE_Handler.h"
#include "Basic_Deployment_Data.hpp"
#include "ciao/Deployment_DataC.h"

namespace CIAO
{
  namespace Config_Handlers
  {

    PCD_Handler::PCD_Handler (void)
    {
    }

    PCD_Handler::~PCD_Handler (void)
    {
    }
 
    ///This method takes a <Deployment::PlanConnectionDescription>
    ///and maps the values from the passed in XSC 
    ///PlanConnectionDescription to its members.
    void PCD_Handler::get_PlanConnectionDescription (
                Deployment::PlanConnectionDescription& toconfig,
                PlanConnectionDescription& desc)
    {
      toconfig.name = CORBA::string_dup (desc.name ().c_str ());
      
      //Source is mapped to a string in the schema and a sequence
      //in the IDL. We just assign the source string from the xml
      //to the first position in the IDL type's sequence. We
      //make sure that the source is present before lengthening
      //the sequence.
      if (desc.source_p ())
        {
          toconfig.source.length (toconfig.source.length () + 1); 
          toconfig.source[toconfig.source.length () - 1] =
            CORBA::string_dup (desc.source ().c_str ());
        }
        
        
      if (desc.deployRequirement_p ())
        {
          //Create the handler for the requirements.
          Requirement_Handler reqhandler;
          
          //Increase the sequence length and delgate
          //the Requirement to the Req_Handler.
          toconfig.deployRequirement.length (
            toconfig.deployRequirement.length () + 1);
          reqhandler.get_Requirement (  
            toconfig.deployRequirement[toconfig.deployRequirement.length () - 1],
            desc.deployRequirement ());
        }
      
      //Create the ComponentExternalPortEndpoint handler.
      CEPE_Handler cepehandler;
      
      //Iterate through and configure each port in the 
      //externalEndpoint sequence.
      for (PlanConnectionDescription::externalEndpoint_iterator
           port (desc.begin_externalEndpoint ());
           port != desc.end_externalEndpoint ();
           ++port)
        {
          toconfig.externalEndpoint.length (
            toconfig.externalEndpoint.length () + 1);
  
          cepehandler.get_ComponentExternalPortEndpoint (
            toconfig.externalEndpoint [toconfig.externalEndpoint.length () - 1],
            *port); 
        }
        
      //Configure the PlanSubcomponentPortEndpoint's.  
      PSPE_Handler pspehandler;
        
      for (PlanConnectionDescription::internalEndpoint_iterator
           ipoint (desc.begin_internalEndpoint ());
           ipoint != desc.end_internalEndpoint ();
           ++ipoint)
        {
          toconfig.internalEndpoint.length (
            toconfig.internalEndpoint.length () + 1);
  
          pspehandler.get_PlanSubcomponentPortEndpoint (
            toconfig.internalEndpoint [toconfig.internalEndpoint.length () - 1],
            *ipoint); 
        }
        
      //Configure the ExternalReferenceEndpoint's.  
      ERE_Handler erehandler;
        
      for (PlanConnectionDescription::externalReference_iterator
           ipoint (desc.begin_externalReference ());
           ipoint != desc.end_externalReference ();
           ++ipoint)
        {
          toconfig.externalReference.length (
            toconfig.externalReference.length () + 1);
  
          erehandler.get_ExternalReferenceEndpoint (
            toconfig.externalReference [toconfig.externalReference.length () - 1],
            *ipoint); 
        }
      
    }
    
  }
}