diff options
Diffstat (limited to 'TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp')
-rw-r--r-- | TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp b/TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp new file mode 100644 index 00000000000..3e2270c5442 --- /dev/null +++ b/TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp @@ -0,0 +1,88 @@ +// $Id$ + +// ============================================================================ +// +// = FILENAME +// Criteria_Evaluator.cpp +// +// = DESCRIPTION +// An Evaluator for the CosLifeCycle Criteria +// +// = AUTHOR +// Michael Kircher (mk1@cs.wustl.edu) +// +// ============================================================================ + +#include "Criteria_Evaluator.h" +#include "ace/OS_NS_string.h" + +ACE_RCSID(LifeCycle_Service, Criteria_Evaluator, "$Id$") + +Criteria_Evaluator::Criteria_Evaluator (const CosLifeCycle::Criteria &criteria) +: criteria_ (criteria) +{ +} + +Criteria_Evaluator::~Criteria_Evaluator () +{ +} + +LifeCycleService::Criteria_Evaluator::SeqNamedValuePair * +Criteria_Evaluator::getInitialization (ACE_ENV_SINGLE_ARG_DECL) +{ + LifeCycleService::Criteria_Evaluator::SeqNamedValuePair *sequence_ptr = 0; + + CORBA::Any *any_ptr = + this->getCriteriaMember ("initialization"); + + if (any_ptr == 0) + ACE_THROW_RETURN (LifeCycleService::Criteria_Evaluator::NotAvailable + ("No initialization member found.\n"), + 0); + + *any_ptr >>= sequence_ptr; + + return sequence_ptr; +} + +char * +Criteria_Evaluator::getFilter (ACE_ENV_SINGLE_ARG_DECL) +{ + const char* string; + CORBA::Any value; + CORBA::Any_ptr any_ptr = this->getCriteriaMember ("filter"); + + if (any_ptr == 0) + ACE_THROW_RETURN (LifeCycleService::Criteria_Evaluator::NotAvailable + ("No filter member found.\n"), + 0); + *any_ptr >>= string; + return CORBA::string_dup (string); +} + +CORBA::Any * +Criteria_Evaluator::getCriteriaMember (const char *member_name) +{ + if (!ACE_OS::strcmp(member_name, "initialization") + && !ACE_OS::strcmp(member_name, "filter") + && !ACE_OS::strcmp(member_name, "logical location") + && !ACE_OS::strcmp(member_name, "preferences")) + return 0; + + for (u_int i = 0; + i < criteria_.length(); + i++) + if (ACE_OS::strcmp (member_name, + criteria_[i].name) == 0) + { + CORBA::Any_ptr value_ptr; + + // @@ We should use ACE_NEW_THROW_EX + ACE_CHECK_RETURN here. + ACE_NEW_RETURN (value_ptr, + CORBA::Any(criteria_[i].value), + 0); + return value_ptr; + } + + return 0; +} |