00001 /* -*- C++ -*- */ 00002 /** 00003 * @file ETCL_Filter.h 00004 * 00005 * $Id: ETCL_Filter.h 81422 2008-04-24 12:33:29Z johnnyw $ 00006 * 00007 * @author Pradeep Gore <pradeep@oomworks.com> 00008 */ 00009 00010 #ifndef TAO_Notify_ETCL_FILTER_H 00011 #define TAO_Notify_ETCL_FILTER_H 00012 #include /**/ "ace/pre.h" 00013 00014 #include "orbsvcs/Notify/notify_serv_export.h" 00015 00016 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00017 # pragma once 00018 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00019 00020 #include "ace/Containers_T.h" 00021 #include "ace/Hash_Map_Manager.h" 00022 #include "ace/Atomic_Op.h" 00023 #include "orbsvcs/CosNotifyFilterS.h" 00024 #include "orbsvcs/Notify/Notify_Constraint_Interpreter.h" 00025 #include "ace/Null_Mutex.h" 00026 00027 #if defined(_MSC_VER) 00028 #pragma warning(push) 00029 #pragma warning(disable:4250) 00030 #endif /* _MSC_VER */ 00031 00032 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00033 00034 /** 00035 * @class TAO_ETCL_Filter 00036 * 00037 * @brief Implementation of CosNotifyFilter::Filter servant. 00038 * 00039 */ 00040 class TAO_Notify_Serv_Export TAO_Notify_ETCL_Filter 00041 : public POA_CosNotifyFilter::Filter 00042 { 00043 public: 00044 /// Constructor 00045 TAO_Notify_ETCL_Filter (PortableServer::POA_ptr poa); 00046 00047 /// Destructor 00048 virtual ~TAO_Notify_ETCL_Filter (void); 00049 00050 protected: 00051 virtual char * constraint_grammar (void); 00052 00053 virtual CosNotifyFilter::ConstraintInfoSeq * add_constraints (const CosNotifyFilter::ConstraintExpSeq & constraint_list); 00054 00055 virtual void modify_constraints (const CosNotifyFilter::ConstraintIDSeq & del_list, 00056 const CosNotifyFilter::ConstraintInfoSeq & modify_list); 00057 00058 virtual CosNotifyFilter::ConstraintInfoSeq * get_constraints (const CosNotifyFilter::ConstraintIDSeq & id_list); 00059 00060 virtual CosNotifyFilter::ConstraintInfoSeq * get_all_constraints (void); 00061 00062 virtual void remove_all_constraints (void); 00063 00064 virtual void destroy (void); 00065 00066 virtual CORBA::Boolean match (const CORBA::Any & filterable_data); 00067 00068 virtual CORBA::Boolean match_structured (const CosNotification::StructuredEvent & filterable_data); 00069 00070 virtual CORBA::Boolean match_typed (const CosNotification::PropertySeq & filterable_data); 00071 00072 virtual CosNotifyFilter::CallbackID attach_callback (CosNotifyComm::NotifySubscribe_ptr callback); 00073 00074 virtual void detach_callback (CosNotifyFilter::CallbackID callback); 00075 00076 virtual CosNotifyFilter::CallbackIDSeq * get_callbacks (void); 00077 00078 private: 00079 void add_constraints_i (const CosNotifyFilter::ConstraintInfoSeq& constraint_info_seq); 00080 00081 void remove_all_constraints_i (void); 00082 00083 /** 00084 * Structure for associating ConstraintInfo with an interpreter. 00085 */ 00086 struct TAO_Notify_Constraint_Expr 00087 { 00088 /// Constraint Expression. 00089 CosNotifyFilter::ConstraintExp constr_expr; 00090 00091 /// Constraint Interpreter. 00092 TAO_Notify_Constraint_Interpreter interpreter; 00093 }; 00094 00095 /// Lock to serialize access to data members. 00096 TAO_SYNCH_MUTEX lock_; 00097 00098 /// Id generator for ConstraintInfo's. 00099 CORBA::Long constraint_expr_ids_; 00100 00101 /// A list of the constraints stored in this filter. 00102 typedef ACE_Hash_Map_Manager <CosNotifyFilter::ConstraintID, 00103 TAO_Notify_ETCL_Filter::TAO_Notify_Constraint_Expr*, 00104 ACE_SYNCH_NULL_MUTEX> 00105 CONSTRAINT_EXPR_LIST; 00106 00107 CONSTRAINT_EXPR_LIST constraint_expr_list_; 00108 00109 PortableServer::POA_var poa_; 00110 }; 00111 00112 TAO_END_VERSIONED_NAMESPACE_DECL 00113 00114 #if defined(_MSC_VER) 00115 #pragma warning(pop) 00116 #endif /* _MSC_VER */ 00117 00118 #include /**/ "ace/post.h" 00119 #endif /* TAO_ETCL_FILTER_H */