Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
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
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 "orbsvcs/Notify/Topology_Object.h"
00026 #include "ace/Null_Mutex.h"
00027
00028 #if defined(_MSC_VER)
00029 #pragma warning(push)
00030 #pragma warning(disable:4250)
00031 #endif
00032
00033 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00034
00035 class TAO_Notify_ETCL_Filter;
00036
00037 class TAO_Notify_Constraint_Expr : public TAO_Notify::Topology_Object
00038 {
00039 public:
00040
00041 friend class TAO_Notify_ETCL_Filter;
00042
00043 TAO_Notify_Constraint_Expr (void);
00044 virtual ~TAO_Notify_Constraint_Expr ();
00045
00046 void save_persistent (
00047 TAO_Notify::Topology_Saver& saver);
00048
00049
00050 void load_attrs(
00051 const TAO_Notify::NVPList& attrs);
00052
00053 TAO_Notify::Topology_Object* load_child (
00054 const ACE_CString &type,
00055 CORBA::Long id,
00056 const TAO_Notify::NVPList& attrs);
00057
00058
00059 private:
00060
00061 virtual void release (void);
00062
00063
00064
00065
00066 CosNotifyFilter::ConstraintExp constr_expr;
00067
00068
00069 TAO_Notify_Constraint_Interpreter interpreter;
00070
00071 };
00072
00073
00074
00075
00076
00077
00078
00079 class TAO_Notify_Serv_Export TAO_Notify_ETCL_Filter
00080 : public POA_CosNotifyFilter::Filter,
00081 public TAO_Notify::Topology_Object
00082 {
00083 public:
00084
00085 TAO_Notify_ETCL_Filter (PortableServer::POA_ptr poa,
00086 const char *constraint_grammar,
00087 const TAO_Notify_Object::ID& id);
00088
00089
00090 virtual ~TAO_Notify_ETCL_Filter (void);
00091
00092 virtual void save_persistent (TAO_Notify::Topology_Saver& saver);
00093 void load_attrs(const TAO_Notify::NVPList& attrs);
00094 TAO_Notify::Topology_Object* load_child (const ACE_CString &type,
00095 CORBA::Long id, const TAO_Notify::NVPList& attrs);
00096
00097 protected:
00098 virtual char * constraint_grammar (void);
00099
00100 virtual CosNotifyFilter::ConstraintInfoSeq * add_constraints (const CosNotifyFilter::ConstraintExpSeq & constraint_list);
00101
00102 virtual void modify_constraints (const CosNotifyFilter::ConstraintIDSeq & del_list,
00103 const CosNotifyFilter::ConstraintInfoSeq & modify_list);
00104
00105 virtual CosNotifyFilter::ConstraintInfoSeq * get_constraints (const CosNotifyFilter::ConstraintIDSeq & id_list);
00106
00107 virtual CosNotifyFilter::ConstraintInfoSeq * get_all_constraints (void);
00108
00109 virtual void remove_all_constraints (void);
00110
00111 virtual void destroy (void);
00112
00113 virtual CORBA::Boolean match (const CORBA::Any & filterable_data);
00114
00115 virtual CORBA::Boolean match_structured (const CosNotification::StructuredEvent & filterable_data);
00116
00117 virtual CORBA::Boolean match_typed (const CosNotification::PropertySeq & filterable_data);
00118
00119 virtual CosNotifyFilter::CallbackID attach_callback (CosNotifyComm::NotifySubscribe_ptr callback);
00120
00121 virtual void detach_callback (CosNotifyFilter::CallbackID callback);
00122
00123 virtual CosNotifyFilter::CallbackIDSeq * get_callbacks (void);
00124
00125 private:
00126
00127
00128 virtual void release (void);
00129
00130 void add_constraints_i (const CosNotifyFilter::ConstraintInfoSeq& constraint_info_seq);
00131 void add_constraint_i (const CosNotifyFilter::ConstraintInfo& constraint,
00132 CosNotifyFilter::ConstraintID cnstr_id = 0);
00133
00134 TAO_Notify_Constraint_Expr*
00135 add_constraint_i (CosNotifyFilter::ConstraintID cnstr_id);
00136
00137 void remove_all_constraints_i (void);
00138
00139
00140 TAO_SYNCH_MUTEX lock_;
00141
00142
00143 CORBA::Long constraint_expr_ids_;
00144
00145
00146 typedef ACE_Hash_Map_Manager <CosNotifyFilter::ConstraintID,
00147 TAO_Notify_Constraint_Expr*,
00148 ACE_SYNCH_NULL_MUTEX>
00149 CONSTRAINT_EXPR_LIST;
00150
00151 CONSTRAINT_EXPR_LIST constraint_expr_list_;
00152
00153 PortableServer::POA_var poa_;
00154
00155 TAO_Notify_Object::ID id_;
00156
00157 ACE_CString grammar_;
00158 };
00159
00160 TAO_END_VERSIONED_NAMESPACE_DECL
00161
00162 #if defined(_MSC_VER)
00163 #pragma warning(pop)
00164 #endif
00165
00166 #include "ace/post.h"
00167 #endif