summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp')
-rw-r--r--TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp86
1 files changed, 86 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..bb6be70b13c
--- /dev/null
+++ b/TAO/orbsvcs/LifeCycle_Service/Criteria_Evaluator.cpp
@@ -0,0 +1,86 @@
+// $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 (void)
+{
+ LifeCycleService::Criteria_Evaluator::SeqNamedValuePair *sequence_ptr = 0;
+
+ CORBA::Any *any_ptr =
+ this->getCriteriaMember ("initialization");
+
+ if (any_ptr == 0)
+ throw LifeCycleService::Criteria_Evaluator::NotAvailable(
+ "No initialization member found.\n");
+
+ *any_ptr >>= sequence_ptr;
+
+ return sequence_ptr;
+}
+
+char *
+Criteria_Evaluator::getFilter (void)
+{
+ const char* string;
+ CORBA::Any value;
+ CORBA::Any_ptr any_ptr = this->getCriteriaMember ("filter");
+
+ if (any_ptr == 0)
+ throw LifeCycleService::Criteria_Evaluator::NotAvailable(
+ "No filter member found.\n");
+ *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;
+}