summaryrefslogtreecommitdiff
path: root/modules/CIAO/tools/Config_Handlers/CPD_Handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/tools/Config_Handlers/CPD_Handler.cpp')
-rw-r--r--modules/CIAO/tools/Config_Handlers/CPD_Handler.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/modules/CIAO/tools/Config_Handlers/CPD_Handler.cpp b/modules/CIAO/tools/Config_Handlers/CPD_Handler.cpp
new file mode 100644
index 00000000000..0b7b54d1adf
--- /dev/null
+++ b/modules/CIAO/tools/Config_Handlers/CPD_Handler.cpp
@@ -0,0 +1,150 @@
+// $Id$
+
+#include "CPD_Handler.h"
+#include "Basic_Deployment_Data.hpp"
+#include "ciao/Deployment_DataC.h"
+#include "ciao/CIAO_common.h"
+
+namespace CIAO
+{
+ namespace Config_Handlers
+ {
+ void
+ CPD_Handler::handle_component_port_description (
+ const ComponentPortDescription& desc,
+ Deployment::ComponentPortDescription& toconfig)
+ {
+ CIAO_TRACE("CPD_Handler::component_port_description");
+ toconfig.name =
+ desc.name ().c_str ();
+
+ if (desc.specificType_p ())
+ toconfig.specificType =
+ desc.specificType ().c_str ();
+
+ toconfig.supportedType.length (desc.count_supportedType ());
+ std::for_each (desc.begin_supportedType (),
+ desc.end_supportedType (),
+ String_Seq_Functor (toconfig.supportedType));
+
+
+ switch (desc.kind ().integral ())
+ {
+ case CCMComponentPortKind::Facet_l:
+ toconfig.kind = Deployment::Facet;
+ break;
+
+ case CCMComponentPortKind::SimplexReceptacle_l:
+ toconfig.kind = Deployment::SimplexReceptacle;
+ break;
+
+ case CCMComponentPortKind::MultiplexReceptacle_l:
+ toconfig.kind = Deployment::MultiplexReceptacle;
+ break;
+
+ case CCMComponentPortKind::EventEmitter_l:
+ toconfig.kind = Deployment::EventEmitter;
+ break;
+
+ case CCMComponentPortKind::EventPublisher_l:
+ toconfig.kind = Deployment::EventPublisher;
+ break;
+
+ case CCMComponentPortKind::EventConsumer_l:
+ toconfig.kind = Deployment::EventConsumer;
+ break;
+
+ default:
+ ACE_ERROR ((LM_ERROR, "Invalid port type in connection %s\n",
+ desc.name ().c_str ()));
+ throw 1;
+ }
+
+ /* @@BUG: We need to consider how to handle booleans. */
+ toconfig.provider = desc.provider ();
+ toconfig.exclusiveProvider = desc.exclusiveProvider ();
+ toconfig.exclusiveUser = desc.exclusiveUser ();
+ toconfig.optional = desc.optional ();
+ }
+
+ ComponentPortDescription
+ CPD_Handler::component_port_description (
+ const Deployment::ComponentPortDescription& src)
+ {
+ CIAO_TRACE("CPD_Handler::component_port_description - reverse");
+ ::XMLSchema::string< char > name ((src.name));
+ ::XMLSchema::string< char > stype ((src.specificType));
+
+ ::XMLSchema::string< char > tval ("true");
+ ::XMLSchema::string< char > fval ("false");
+ XMLSchema::boolean provider;
+ XMLSchema::boolean exclusiveProvider;
+ XMLSchema::boolean exclusiveUser;
+ XMLSchema::boolean optional;
+
+ if (src.provider)
+ provider = true;
+ else
+ provider = false;
+
+ if (src.exclusiveUser)
+ exclusiveUser = true;
+ else
+ provider = false;
+
+ if (src.exclusiveProvider)
+ exclusiveProvider = true;
+ else
+ provider = false;
+
+ if (src.optional)
+ optional = true;
+ else
+ provider = false;
+
+ ComponentPortDescription cpd (name,
+ provider,
+ exclusiveProvider,
+ exclusiveUser,
+ optional,
+ CCMComponentPortKind::Facet);
+
+ switch (src.kind)
+ {
+ case ::Deployment::Facet:
+ cpd.kind (CCMComponentPortKind::Facet);
+ break;
+
+ case ::Deployment::SimplexReceptacle:
+ cpd.kind (CCMComponentPortKind::SimplexReceptacle);
+ break;
+
+ case ::Deployment::MultiplexReceptacle:
+ cpd.kind (CCMComponentPortKind::MultiplexReceptacle);
+ break;
+
+ case ::Deployment::EventEmitter:
+ cpd.kind (CCMComponentPortKind::EventEmitter);
+ break;
+
+ case ::Deployment::EventPublisher:
+ cpd.kind (CCMComponentPortKind::EventPublisher);
+ break;
+
+ case ::Deployment::EventConsumer:
+ cpd.kind (CCMComponentPortKind::EventConsumer);
+ break;
+
+ default:
+ ACE_ERROR ((LM_ERROR, "Invalid port kind in connection %s\n",
+ name.c_str ()));
+ }
+
+ for (CORBA::ULong i = 0; i < src.supportedType.length (); ++i)
+ cpd.add_supportedType (XMLSchema::string< char > ((src.supportedType[i])));
+
+ return cpd;
+ }
+
+ }
+}