summaryrefslogtreecommitdiff
path: root/modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp
diff options
context:
space:
mode:
authorjai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-01-29 21:15:18 +0000
committerjai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-01-29 21:15:18 +0000
commitb71531b42b3325fd6079a7039aae8641262c8adf (patch)
treea5b9aa16924c541fcb424ee9460b1ac7f5a89352 /modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp
parenta0f67cc97c0050d907145e312135b60c0125e56e (diff)
downloadATCD-b71531b42b3325fd6079a7039aae8641262c8adf.tar.gz
branching/taggingDS-main
Diffstat (limited to 'modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp')
-rw-r--r--modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp b/modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp
new file mode 100644
index 00000000000..8773f7b9014
--- /dev/null
+++ b/modules/CIAO/tools/Config_Handlers/DynAny_Handler/DynEnum_Handler.cpp
@@ -0,0 +1,72 @@
+// $Id$
+
+#include "DynEnum_Handler.h"
+#include "DynAny_Handler.h"
+
+#include "Basic_Deployment_Data.hpp"
+#include "tao/AnyTypeCode/TypeCode.h"
+#include "tao/TypeCodeFactory/TypeCodeFactory_Adapter_Impl.h"
+#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
+#include "tao/AnyTypeCode/Enum_TypeCode.h"
+#include "tao/IFR_Client/IFR_BasicC.h"
+
+namespace CIAO
+{
+ namespace Config_Handlers
+ {
+ DynamicAny::DynAny_ptr
+ DynEnum_Handler::extract_into_dynany (const DataType &type,
+ const DataValue &value)
+ {
+ if (!type.enum_p ())
+ {
+ ACE_ERROR ((LM_ERROR, "ERROR: Enum type descriptioin required"));
+ throw 1;
+ }
+
+ // Construct TypeCode for the enum
+ CORBA::EnumMemberSeq members;
+ members.length (type.enum_ ().count_member ());
+ CORBA::ULong index (0);
+
+ for (EnumType::member_const_iterator i = type.enum_ ().begin_member ();
+ i != type.enum_ ().end_member ();
+ ++i)
+ {
+ members[index++] = i->c_str ();
+ }
+
+ // Grab pointer to the DynAny_Handler to use the orb and any factory.
+ // DynAny_Handler *dah = DynAny_Handler::instance ();
+
+ // @@ Leak this guy onto the heap to avoid a compile problem.
+ CORBA::TypeCode_ptr tc =
+ DYNANY_HANDLER->orb ()->create_enum_tc (type.enum_ ().typeId ().c_str (),
+ type.enum_ ().name ().c_str (),
+ members);
+
+ ACE_ERROR ((LM_ERROR, "Type: %s \nName: %s\nvalue: %s\n",
+ type.enum_ ().typeId ().c_str (),
+ type.enum_ ().name ().c_str (),
+ value.begin_enum ()->c_str ()));
+
+ // Make the actual DynEnum
+ DynamicAny::DynAny_var temp =
+ DYNANY_HANDLER->daf ()->create_dyn_any_from_type_code (tc);
+ DynamicAny::DynEnum_var retval = DynamicAny::DynEnum::_narrow (temp.in ());
+
+ retval->set_as_string (value.begin_enum ()->c_str ());
+
+ return retval._retn ();
+ }
+
+ void
+ DynEnum_Handler::extract_out_of_dynany (const DynamicAny::DynAny_ptr dyn)
+ {
+ ACE_UNUSED_ARG (dyn);
+ ACE_ERROR ((LM_ERROR, "Extracting Enums not yet supported\n"));
+ }
+ }
+}
+
+