summaryrefslogtreecommitdiff
path: root/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp')
-rwxr-xr-xCIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp312
1 files changed, 312 insertions, 0 deletions
diff --git a/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp b/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp
new file mode 100755
index 00000000000..8c1ffda2579
--- /dev/null
+++ b/CIAO/DAnCE/NodeApplication/NodeApp_Configurator.cpp
@@ -0,0 +1,312 @@
+// $Id$
+
+#include "NodeApp_Configurator.h"
+#include "ace/Log_Msg.h"
+
+CIAO::NodeApp_Configurator::NodeApp_Configurator (void)
+ : rt_support_ (0)
+{
+}
+
+CIAO::NodeApp_Configurator::~NodeApp_Configurator (void)
+{
+ // Not much to do.
+}
+
+void
+CIAO::NodeApp_Configurator::set_rt_support (void)
+{
+ this->rt_support_ = 1;
+}
+
+int
+CIAO::NodeApp_Configurator::create_config_managers (void)
+{
+ typedef CIAO::Config_Manager * (*na_intelligent_designer)(void);
+ typedef CIAO::Config_Manager * (*rtna_intelligent_designer)(void);
+ CIAO::Config_Manager* ptr = 0;
+ CIAO::Config_Manager* rt_ptr = 0;
+
+ int retval = this->config_dll_.open (
+ ACE_DLL_PREFIX ACE_TEXT ("CIAO_NA_Configurator"),
+ ACE_DEFAULT_SHLIB_MODE,
+ 0);
+
+ if (0 != retval)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "dll.open"),
+ 0);
+ }
+
+ // Cast the void* to non-pointer type first - it's not legal to
+ // cast a pointer-to-object directly to a pointer-to-function.
+ void *void_ptr =
+ this->config_dll_.symbol (ACE_TEXT ("create_na_config_manager"));
+ ptrdiff_t tmp = reinterpret_cast<ptrdiff_t> (void_ptr);
+
+ // "id" is for na_intelligent-designer.
+ na_intelligent_designer config_id =
+ reinterpret_cast<na_intelligent_designer> (tmp);
+
+ if (0 == config_id)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p",
+ "dll.symbol"),
+ 0);
+ }
+
+ ptr = config_id ();
+
+ if (0 == ptr)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Error creating NodeApp_Configurator\n"),
+ 0);
+ }
+
+ this->na_config_manager_.reset (ptr);
+
+ if (this->rt_support_)
+ {
+ int rt_retval = this->config_dll_.open (
+ ACE_DLL_PREFIX ACE_TEXT ("CIAO_RTNA_Configurator"),
+ ACE_DEFAULT_SHLIB_MODE,
+ 0);
+
+ if (0 != rt_retval)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p\n",
+ "dll.open"),
+ 0);
+ }
+
+ // Cast the void* to non-pointer type first - it's not legal to
+ // cast a pointer-to-object directly to a pointer-to-function.
+ void *rt_void_ptr =
+ this->config_dll_.symbol (ACE_TEXT ("create_rt_config_manager"));
+ ptrdiff_t rt_tmp = reinterpret_cast<ptrdiff_t> (rt_void_ptr);
+
+ // "id" is for na_intelligent-designer.
+ rtna_intelligent_designer rt_config_id =
+ reinterpret_cast<rtna_intelligent_designer> (rt_tmp);
+
+ if (0 == rt_config_id)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "%p",
+ "dll.symbol"),
+ 0);
+ }
+
+ rt_ptr = rt_config_id ();
+
+ if (0 == rt_ptr)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Error creating RTNodeApp_Configurator\n"),
+ 0);
+ }
+
+ this->rt_config_manager_.reset (rt_ptr);
+ }
+
+ return 0;
+}
+
+int
+CIAO::NodeApp_Configurator::pre_orb_initialize ()
+{
+ ACE_DEBUG ((LM_DEBUG, "NodeApp_Configurator::pre_orb_init\n"));
+
+ (*this->na_config_manager_.get ()).pre_orb_initialize ();
+ if (this->rt_support_)
+ {
+ (*this->rt_config_manager_.get ()).pre_orb_initialize ();
+ }
+
+ return 0;
+}
+
+int
+CIAO::NodeApp_Configurator::post_orb_initialize (CORBA::ORB_ptr o)
+{
+ ACE_DEBUG ((LM_DEBUG, "NodeApp_Configurator::post_orb_init\n"));
+ this->orb_ = CORBA::ORB::_duplicate (o);
+
+ (*this->na_config_manager_.get ()).init (this->orb_.in ());
+ if (this->rt_support_ == 1)
+ {
+ (*this->rt_config_manager_.get ()).init (this->orb_.in ());
+ }
+
+ (*this->na_config_manager_.get ()).post_orb_initialize (this->orb_.in ());
+ if (this->rt_support_ == 1)
+ {
+ (*this->rt_config_manager_.get ()).post_orb_initialize (this->orb_.in ());
+ }
+
+ return 0;
+}
+
+int
+CIAO::NodeApp_Configurator::init_resource_manager
+(const ::Deployment::Properties &properties)
+{
+ for (CORBA::ULong i = 0; i < properties.length (); ++i)
+ {
+ if (ACE_OS::strcmp (
+ "CIAOServerResources", properties[i].name.in ()) == 0)
+ {
+ const CIAO::DAnCE::ServerResource *svr_resource;
+ if (properties[i].value >>= svr_resource)
+ {
+ (*this->na_config_manager_.get ()).
+ init_resources (*svr_resource);
+
+ if (this->rt_support_ == 1)
+ {
+ (*this->rt_config_manager_.get ()).
+ init_resources (*svr_resource);
+ }
+ }
+ else
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ERROR: NodeApp_Configurator::"
+ "init_resource_manager unable to extract"
+ "CIAOServerResources\n"), -1);
+ }
+ }
+ }
+
+ return 0;
+}
+
+CORBA::PolicyList *
+CIAO::NodeApp_Configurator::find_container_policies
+(const ::Deployment::Properties &properties)
+{
+ CORBA::PolicyList *configured_policies = 0;
+ CORBA::PolicyList *rt_configured_policies = 0;
+
+ for (CORBA::ULong i = 0; i < properties.length (); ++i)
+ {
+ if (ACE_OS::strcmp ("ContainerPolicySet", properties[i].name) == 0)
+ {
+ const char *policy_name;
+ if (properties[i].value >>= policy_name)
+ {
+ configured_policies = (*this->na_config_manager_.get ()).
+ find_policies_by_name (policy_name);
+
+ CORBA::ULong p_length = 0;
+ if (configured_policies != 0)
+ {
+ p_length = configured_policies->length ();
+ }
+
+ if (this->rt_support_ == 1)
+ {
+ rt_configured_policies = (*this->rt_config_manager_.get ()).
+ find_policies_by_name (policy_name);
+ }
+
+ CORBA::PolicyList_var temp_policies;
+ CORBA::ULong rtp_length = 0;
+ if (rt_configured_policies != 0)
+ {
+ rtp_length = rt_configured_policies->length ();
+ temp_policies = rt_configured_policies;
+ }
+ else
+ {
+ return configured_policies;
+ }
+
+ CORBA::ULong final_length = p_length + rtp_length;
+ temp_policies->length (final_length);
+
+ for (CORBA::ULong i = 0; i < p_length; ++i)
+ {
+ temp_policies[i+rtp_length] =
+ CORBA::Policy::_duplicate ((*configured_policies)[i]);
+ }
+ return temp_policies._retn ();
+ }
+ else
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ERROR: NodeApp_Configurator:"
+ "find_container_policies unable to extract"
+ "ContainerPolicySet\n"), 0);
+ }
+ }
+ }
+ return 0;
+}
+
+CORBA::PolicyList *
+CIAO::NodeApp_Configurator::find_policies_by_name (const char *policy_name)
+{
+ CORBA::PolicyList *configured_policies = 0;
+ CORBA::PolicyList *rt_configured_policies = 0;
+
+ configured_policies = (*this->na_config_manager_.get ()).
+ find_policies_by_name (policy_name);
+
+ CORBA::ULong p_length = 0;
+ if (configured_policies != 0)
+ {
+ p_length = configured_policies->length ();
+ }
+
+ if (this->rt_support_ == 1)
+ {
+ rt_configured_policies = (*this->rt_config_manager_.get ()).
+ find_policies_by_name (policy_name);
+ }
+
+ CORBA::PolicyList_var temp_policies;
+ CORBA::ULong rtp_length = 0;
+ if (rt_configured_policies != 0)
+ {
+ rtp_length = rt_configured_policies->length ();
+ temp_policies = rt_configured_policies;
+ }
+ else
+ {
+ return configured_policies;
+ }
+
+ CORBA::ULong final_length = p_length + rtp_length;
+ temp_policies->length (final_length);
+
+ for (CORBA::ULong i = 0; i < p_length; ++i)
+ {
+ temp_policies[i+rtp_length] =
+ CORBA::Policy::_duplicate ((*configured_policies)[i]);
+ }
+ return temp_policies._retn ();
+}
+
+bool
+CIAO::NodeApp_Configurator::policy_exists (const char *policy_set_id)
+{
+ bool result;
+ result = (*this->na_config_manager_.get ()).
+ policy_exists (policy_set_id);
+
+ if (result == false)
+ {
+ if (this->rt_support_ == 1)
+ {
+ result = (*this->rt_config_manager_.get ()).
+ policy_exists (policy_set_id);
+ }
+ }
+ return result;
+}