00001 #include "tao/PI/PI_PolicyFactory.h"
00002
00003 #if TAO_HAS_INTERCEPTORS == 1
00004
00005 #include "tao/PI/ProcessingModePolicy.h"
00006 #include "tao/ORB_Constants.h"
00007
00008 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00009
00010 ACE_RCSID (tao,
00011 PI_PolicyFactory,
00012 "PI_PolicyFactory.cpp,v 1.3 2005/12/29 15:44:15 elliott_c Exp")
00013
00014 CORBA::Policy_ptr
00015 TAO_PI_PolicyFactory::create_policy (
00016 CORBA::PolicyType type,
00017 const CORBA::Any &value
00018 ACE_ENV_ARG_DECL)
00019 ACE_THROW_SPEC ((CORBA::SystemException,
00020 CORBA::PolicyError))
00021 {
00022 if (type == PortableInterceptor::PROCESSING_MODE_POLICY_TYPE)
00023 {
00024 TAO_ProcessingModePolicy *processing_mode_policy = 0;
00025 PortableInterceptor::ProcessingMode policy_value;
00026
00027 if ((value >>= policy_value) == 0)
00028 {
00029 ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_VALUE),
00030 CORBA::Policy::_nil ());
00031 }
00032
00033 ACE_NEW_THROW_EX (processing_mode_policy,
00034 TAO_ProcessingModePolicy (policy_value),
00035 CORBA::NO_MEMORY (TAO::VMCID,
00036 CORBA::COMPLETED_NO));
00037 ACE_CHECK_RETURN (CORBA::Policy::_nil ());
00038
00039 return processing_mode_policy;
00040 }
00041
00042 ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_TYPE),
00043 CORBA::Policy::_nil ());
00044 }
00045
00046 TAO_END_VERSIONED_NAMESPACE_DECL
00047
00048 #endif