00001 #include "tao/RTCORBA/RT_PolicyFactory.h"
00002
00003 #if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
00004
00005 ACE_RCSID (RTCORBA,
00006 RT_PolicyFactory,
00007 "$Id: RT_PolicyFactory.cpp 77409 2007-02-26 23:48:49Z ossama $")
00008
00009 #include "tao/RTCORBA/RT_Policy_i.h"
00010
00011 #include "tao/PolicyC.h"
00012 #include "tao/ORB_Constants.h"
00013
00014 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00015
00016 CORBA::Policy_ptr
00017 TAO_RT_PolicyFactory::create_policy (
00018 CORBA::PolicyType type,
00019 const CORBA::Any &value)
00020 {
00021 if (type == RTCORBA::PRIORITY_MODEL_POLICY_TYPE)
00022 return TAO_PriorityModelPolicy::create (value);
00023
00024 if (type == RTCORBA::THREADPOOL_POLICY_TYPE)
00025 return TAO_ThreadpoolPolicy::create (value);
00026
00027 if (type == RTCORBA::SERVER_PROTOCOL_POLICY_TYPE)
00028 return TAO_ServerProtocolPolicy::create (value);
00029
00030 if (type == RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE)
00031 return TAO_ClientProtocolPolicy::create (value);
00032
00033 if (type == RTCORBA::PRIVATE_CONNECTION_POLICY_TYPE)
00034 return TAO_PrivateConnectionPolicy::create (value);
00035
00036 if (type == RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE)
00037 return TAO_PriorityBandedConnectionPolicy::create (value);
00038
00039 throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE);
00040 }
00041
00042 CORBA::Policy_ptr
00043 TAO_RT_PolicyFactory::_create_policy (CORBA::PolicyType type)
00044 {
00045 CORBA::Policy_ptr policy = CORBA::Policy_ptr ();
00046
00047 if (type == RTCORBA::PRIORITY_MODEL_POLICY_TYPE)
00048 {
00049 ACE_NEW_THROW_EX (policy,
00050 TAO_PriorityModelPolicy,
00051 CORBA::NO_MEMORY (
00052 CORBA::SystemException::_tao_minor_code (
00053 TAO::VMCID,
00054 ENOMEM),
00055 CORBA::COMPLETED_NO));
00056
00057 return policy;
00058 }
00059
00060 if (type == RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE)
00061 {
00062 ACE_NEW_THROW_EX (policy,
00063 TAO_PriorityBandedConnectionPolicy,
00064 CORBA::NO_MEMORY (
00065 CORBA::SystemException::_tao_minor_code (
00066 TAO::VMCID,
00067 ENOMEM),
00068 CORBA::COMPLETED_NO));
00069
00070 return policy;
00071 }
00072
00073 if (type == RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE)
00074 {
00075 ACE_NEW_THROW_EX (policy,
00076 TAO_ClientProtocolPolicy,
00077 CORBA::NO_MEMORY (
00078 CORBA::SystemException::_tao_minor_code (
00079 TAO::VMCID,
00080 ENOMEM),
00081 CORBA::COMPLETED_NO));
00082
00083 return policy;
00084 }
00085
00086 throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE);
00087 }
00088
00089 TAO_END_VERSIONED_NAMESPACE_DECL
00090
00091 #endif