summaryrefslogtreecommitdiff
path: root/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp')
-rw-r--r--CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp b/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp
new file mode 100644
index 00000000000..16a2f71f40a
--- /dev/null
+++ b/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp
@@ -0,0 +1,152 @@
+// $Id$
+
+#include "PS_Handler.h"
+#include "PM_Handler.h"
+#include "NPM_Handler.h"
+#include "CNPM_Handler.h"
+#include "CIAOServerResources.hpp"
+
+namespace CIAO
+{
+ namespace Config_Handlers
+ {
+ bool
+ PS_Handler::policy_set (const PolicySet &src,
+ ::CIAO::DAnCE::PolicySet &dest)
+ {
+ if (src.id_p ())
+ dest.Id = CORBA::string_dup (src.id ().c_str ());
+
+ // Make room for all of the policies
+ CORBA::ULong len (dest.policies.length ());
+ dest.policies.length (len +
+ src.count_priorityModel () +
+ src.count_nwpriorityModel () +
+ src.count_cnwpriorityModel () +
+ src.count_threadpool () +
+ src.count_priorityBandedConnection ());
+
+ for (PolicySet::priorityModel_const_iterator i = src.begin_priorityModel ();
+ i != src.end_priorityModel ();
+ ++i)
+ {
+ ::CIAO::DAnCE::PriorityModelPolicyDef pmd;
+
+ PM_Handler::priority_model_pd (*i, pmd);
+
+ dest.policies[len++].PriorityModelDef (pmd);
+ }
+
+ for (PolicySet::nwpriorityModel_const_iterator i =
+ src.begin_nwpriorityModel ();
+ i != src.end_nwpriorityModel ();
+ ++i)
+ {
+ ::CIAO::DAnCE::NWPriorityModelPolicyDef npmd;
+
+ NPM_Handler::nw_priority_model_pd (*i, npmd);
+
+ dest.policies[len++].NWPriorityModelDef (npmd);
+ }
+
+ for (PolicySet::cnwpriorityModel_const_iterator i =
+ src.begin_cnwpriorityModel ();
+ i != src.end_cnwpriorityModel ();
+ ++i)
+ {
+ ::CIAO::DAnCE::CNWPriorityModelPolicyDef cnpmd;
+
+ CNPM_Handler::cnw_priority_pd (*i, cnpmd);
+
+ dest.policies[len++].CNWPriorityModelDef (cnpmd);
+ }
+
+ for (PolicySet::threadpool_const_iterator i = src.begin_threadpool ();
+ i != src.end_threadpool ();
+ ++i)
+ {
+ ::CIAO::DAnCE::ThreadpoolPolicyDef tpd;
+
+ tpd.Id = CORBA::string_dup (i->id ().c_str ());
+
+ dest.policies[len++].ThreadpoolDef (tpd);
+ }
+
+
+ for (PolicySet::priorityBandedConnection_const_iterator i = src.begin_priorityBandedConnection ();
+ i != src.end_priorityBandedConnection ();
+ ++i)
+ {
+ ::CIAO::DAnCE::PriorityBandedConnectionPolicyDef pbc;
+
+ pbc.Id = CORBA::string_dup (i->id ().c_str ());
+
+ dest.policies[len++].PriorityBandedConnectionDef (pbc);
+ }
+ return true;
+ }
+
+ PolicySet
+ PS_Handler::policy_set (const ::CIAO::DAnCE::PolicySet &src)
+ {
+ PolicySet ps;
+
+ if (src.Id.in ())
+ ps.id (src.Id.in ());
+
+ for (CORBA::ULong i = 0;
+ i < src.policies.length ();
+ ++i)
+ {
+ ACE_DEBUG ((LM_ERROR,
+ "Attempting switch for i = %d\n",
+ i));
+
+ switch (src.policies[i]._d ())
+ {
+ case ::CIAO::DAnCE::PRIORITY_MODEL_POLICY_TYPE:
+ ps.add_priorityModel (
+ PM_Handler::priority_model_pd (
+ src.policies[i].PriorityModelDef ()));
+ break;
+
+ case ::CIAO::DAnCE::NETWORK_PRIORITY_TYPE:
+ ps.add_nwpriorityModel (
+ NPM_Handler::nw_priority_model_pd (
+ src.policies[i].NWPriorityModelDef ()));
+ break;
+
+ case ::CIAO::DAnCE::CLIENT_NETWORK_PRIORITY_TYPE:
+ ps.add_cnwpriorityModel (
+ CNPM_Handler::cnw_priority_pd (
+ src.policies[i].CNWPriorityModelDef ()));
+ break;
+
+ case ::CIAO::DAnCE::THREADPOOL_POLICY_TYPE:
+ ps.add_threadpool (src.policies[i].ThreadpoolDef ().Id.in ());
+ break;
+
+ case ::CIAO::DAnCE::PRIORITY_BANDED_CONNECTION_POLICY_TYPE:
+ ps.add_priorityBandedConnection (
+ src.policies[i].PriorityBandedConnectionDef ().Id.in ());
+ break;
+
+ case 0:
+ ACE_ERROR ((LM_ERROR,
+ "Skipping invalid policy.\n"));
+ break;
+
+ default:
+ ACE_ERROR ((LM_ERROR,
+ "Bad policy stored in policy_set: %i\n",
+ src.policies[i]._d ()));
+ throw 1;
+ }
+ }
+
+ return ps;
+ }
+
+ }
+
+}