diff options
Diffstat (limited to 'modules/CIAO/DAnCE/NodeApplicationManager/ImplementationInfo.cpp')
-rw-r--r-- | modules/CIAO/DAnCE/NodeApplicationManager/ImplementationInfo.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/modules/CIAO/DAnCE/NodeApplicationManager/ImplementationInfo.cpp b/modules/CIAO/DAnCE/NodeApplicationManager/ImplementationInfo.cpp new file mode 100644 index 00000000000..436715588c4 --- /dev/null +++ b/modules/CIAO/DAnCE/NodeApplicationManager/ImplementationInfo.cpp @@ -0,0 +1,96 @@ +//$Id$ +#ifndef CIAO_IMPLEMENTATION_INFO_CPP +#define CIAO_IMPLEMENTATION_INFO_CPP + +#include "ImplementationInfo.h" +#include "ace/SString.h" + +CIAO::NodeImplementationInfoHandler:: +NodeImplementationInfoHandler (const ::Deployment::DeploymentPlan & plan, + const Deployment::ComponentPlans & shared_components) : + plan_ (plan), + node_info_ (0), + containers_info_map_ (plan, shared_components) +{ + ACE_NEW (node_info_, ::Deployment::NodeImplementationInfo); + this->populate_server_resource_def (); + this->populate_container_impl_infos (); +} + +Deployment::NodeImplementationInfo * +CIAO::NodeImplementationInfoHandler::node_impl_info (void) const +{ + Deployment::NodeImplementationInfo_var retv; + ACE_NEW_RETURN (retv, + Deployment::NodeImplementationInfo (this->node_info_.in ()), + 0); + return retv._retn (); +} + +void +CIAO::NodeImplementationInfoHandler::populate_server_resource_def (void) +{ + const CORBA::ULong instance_len = plan_.instance.length (); + const char * target_resource_id = 0; + + CORBA::ULong i; + + // Iterate over the instance list to find whether any server resource + // has been specified + // TODO: We shoud do some sanity check here, since all the component + // instance in this NodeApplication should have the same "server_resource_def" + // defined. Since currently we ignored this sanity check, then will allow + // users to specify some self-conflicting configuration in the descriptor. + + // NW: this stuff is broken because it assumes all component + // instances in a node will use the same ServerResource file. This + // is not the case. Component instances using the same + // ServerResource file will be deployed in the same NA. However, + // those using different ServerResource files should be deployed to + // different NAs. Something to be fixed later. + for (i = 0; i < instance_len; ++i) + { + if (this->plan_.instance[i].deployedResource.length () != 0) + { + target_resource_id = + this->plan_.instance[i].deployedResource[0].resourceName.in (); + + // Some component instance has server resource usage defined, so we + // set the <nodeapp_config> field of the NodeImplementationInfo struct. + for (CORBA::ULong j = 0; j < this->plan_.infoProperty.length (); ++j) + { + CIAO::DAnCE::ServerResource *server_resource_def = 0; + this->plan_.infoProperty[j].value >>= server_resource_def; + + if (ACE_OS::strcmp ((*server_resource_def).Id, + target_resource_id) == 0) + { + // Found the target server resource def, and store it. + this->node_info_->nodeapp_config.length (1); + + this->node_info_->nodeapp_config[0].name = + CORBA::string_dup ("CIAOServerResources"); + + this->node_info_->nodeapp_config[0].value <<= + *server_resource_def; + break; + } + } + } + } +} + +void +CIAO::NodeImplementationInfoHandler::populate_container_impl_infos (void) +{ + CORBA::ULong const curr_len = + this->containers_info_map_.containers_info ()->length (); + + ACE_UNUSED_ARG (curr_len); + + // assignment operation + this->node_info_->impl_infos = + *(this->containers_info_map_.containers_info ()); +} + +#endif /* CIAO_IMPLEMENTATION_INFO_CPP */ |