Go to the documentation of this file.00001 #include "tao/ZIOP/ZIOP_PolicyFactory.h"
00002 #include "tao/ZIOP/ZIOP.h"
00003 #include "tao/ZIOP/ZIOP_Policy_i.h"
00004
00005 #include "tao/ORB_Constants.h"
00006 #include "tao/AnyTypeCode/Any.h"
00007
00008 ACE_RCSID (ZIOP_GIOP,
00009 ZIOP_PolicyFactory,
00010 "$Id: ZIOP_PolicyFactory.cpp 84457 2009-02-13 14:52:13Z msmit $")
00011
00012 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00013
00014 CORBA::Policy_ptr
00015 TAO_ZIOP_PolicyFactory::create_policy (
00016 CORBA::PolicyType type,
00017 const CORBA::Any &value)
00018 {
00019 CORBA::Policy_ptr policy = CORBA::Policy::_nil ();
00020
00021 switch (type)
00022 {
00023 case ZIOP::COMPRESSION_ENABLING_POLICY_ID:
00024 {
00025 ::CORBA::Boolean val;
00026
00027
00028 if (!(value >>= CORBA::Any::to_boolean (val)))
00029 {
00030 throw CORBA::PolicyError (CORBA::BAD_POLICY_VALUE);
00031 }
00032
00033 ACE_NEW_THROW_EX (policy,
00034 TAO::CompressionEnablingPolicy (val),
00035 CORBA::NO_MEMORY (
00036 CORBA::SystemException::_tao_minor_code (
00037 TAO::VMCID,
00038 ENOMEM),
00039 CORBA::COMPLETED_NO));
00040
00041 return policy;
00042 }
00043 case ZIOP::COMPRESSOR_ID_LEVEL_LIST_POLICY_ID :
00044 {
00045 ::Compression::CompressorIdLevelList* val = 0;
00046
00047
00048 if (!(value >>= val))
00049 {
00050 throw CORBA::PolicyError (CORBA::BAD_POLICY_VALUE);
00051 }
00052
00053 ACE_NEW_THROW_EX (policy,
00054 TAO::CompressorIdLevelListPolicy (*val),
00055 CORBA::NO_MEMORY (
00056 CORBA::SystemException::_tao_minor_code (
00057 TAO::VMCID,
00058 ENOMEM),
00059 CORBA::COMPLETED_NO));
00060
00061 return policy;
00062 }
00063 case ZIOP::COMPRESSION_LOW_VALUE_POLICY_ID:
00064 {
00065 ::CORBA::ULong val;
00066
00067
00068 if (!(value >>= val))
00069 {
00070 throw CORBA::PolicyError (CORBA::BAD_POLICY_VALUE);
00071 }
00072
00073 ACE_NEW_THROW_EX (policy,
00074 TAO::CompressionLowValuePolicy (val),
00075 CORBA::NO_MEMORY (
00076 CORBA::SystemException::_tao_minor_code (
00077 TAO::VMCID,
00078 ENOMEM),
00079 CORBA::COMPLETED_NO));
00080
00081 return policy;
00082 }
00083 case ZIOP::COMPRESSION_MIN_RATIO_POLICY_ID:
00084 {
00085 ::Compression::CompressionRatio val;
00086
00087
00088 if (!(value >>= val))
00089 {
00090 throw CORBA::PolicyError (CORBA::BAD_POLICY_VALUE);
00091 }
00092
00093 ACE_NEW_THROW_EX (policy,
00094 TAO::CompressionMinRatioPolicy (val),
00095 CORBA::NO_MEMORY (
00096 CORBA::SystemException::_tao_minor_code (
00097 TAO::VMCID,
00098 ENOMEM),
00099 CORBA::COMPLETED_NO));
00100
00101 return policy;
00102 }
00103 }
00104
00105 throw CORBA::PolicyError (CORBA::BAD_POLICY_TYPE);
00106 }
00107
00108 CORBA::Policy_ptr
00109 TAO_ZIOP_PolicyFactory::_create_policy (CORBA::PolicyType type)
00110 {
00111 CORBA::Policy_ptr policy = CORBA::Policy_ptr ();
00112
00113 switch (type)
00114 {
00115 case ZIOP::COMPRESSION_ENABLING_POLICY_ID:
00116 {
00117 ACE_NEW_THROW_EX (policy,
00118 TAO::CompressionEnablingPolicy,
00119 CORBA::NO_MEMORY (
00120 CORBA::SystemException::_tao_minor_code (
00121 TAO::VMCID,
00122 ENOMEM),
00123 CORBA::COMPLETED_NO));
00124
00125 return policy;
00126 }
00127 case ZIOP::COMPRESSOR_ID_LEVEL_LIST_POLICY_ID:
00128 {
00129 ACE_NEW_THROW_EX (policy,
00130 TAO::CompressorIdLevelListPolicy,
00131 CORBA::NO_MEMORY (
00132 CORBA::SystemException::_tao_minor_code (
00133 TAO::VMCID,
00134 ENOMEM),
00135 CORBA::COMPLETED_NO));
00136
00137 return policy;
00138 }
00139 }
00140 throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE);
00141 }
00142
00143
00144 TAO_END_VERSIONED_NAMESPACE_DECL
00145