00001
00002 #ifndef GAUDIKERNEL_AUDITOR_H
00003 #define GAUDIKERNEL_AUDITOR_H
00004
00005
00006 #include "GaudiKernel/IProperty.h"
00007 #include "GaudiKernel/IAuditor.h"
00008 #include "GaudiKernel/IService.h"
00009 #include "GaudiKernel/ISvcLocator.h"
00010 #include "GaudiKernel/PropertyMgr.h"
00011 #include <string>
00012 #include <vector>
00013
00014
00015 class IService;
00016 class IMessageSvc;
00017 class Property;
00018 class Algorithm;
00019
00034 class Auditor : virtual public IAuditor,
00035 virtual public IProperty {
00036 public:
00037
00041 Auditor( const std::string& name, ISvcLocator *svcloc );
00043 virtual ~Auditor();
00044
00048 StatusCode sysInitialize();
00052 StatusCode sysFinalize();
00053
00055
00056 virtual void before(StandardEventType, INamedInterface*);
00057 virtual void before(StandardEventType, const std::string&);
00058
00059 virtual void before(CustomEventTypeRef, INamedInterface*);
00060 virtual void before(CustomEventTypeRef, const std::string&);
00061
00062 virtual void after(StandardEventType, INamedInterface*, const StatusCode&);
00063 virtual void after(StandardEventType, const std::string&, const StatusCode&);
00064
00065 virtual void after(CustomEventTypeRef, INamedInterface*, const StatusCode&);
00066 virtual void after(CustomEventTypeRef, const std::string&, const StatusCode&);
00067
00068
00069
00070 virtual void beforeInitialize(INamedInterface* ) ;
00071 virtual void afterInitialize(INamedInterface* ) ;
00072
00073 virtual void beforeReinitialize(INamedInterface* ) ;
00074 virtual void afterReinitialize(INamedInterface* ) ;
00075
00076 virtual void beforeExecute(INamedInterface* );
00077 virtual void afterExecute(INamedInterface*, const StatusCode& );
00078
00079 virtual void beforeFinalize(INamedInterface* ) ;
00080 virtual void afterFinalize(INamedInterface* ) ;
00081
00082 virtual void beforeBeginRun(INamedInterface* );
00083 virtual void afterBeginRun(INamedInterface* );
00084
00085 virtual void beforeEndRun(INamedInterface* );
00086 virtual void afterEndRun(INamedInterface* );
00087
00088 virtual StatusCode initialize();
00089 virtual StatusCode finalize();
00090
00091 virtual const std::string& name() const ;
00092
00093 virtual bool isEnabled() const ;
00094
00098 IMessageSvc* msgSvc() const;
00099
00101 int outputLevel() const { return m_outputLevel; }
00102
00104 void setOutputLevel( int level );
00105
00110 ISvcLocator* serviceLocator() const;
00111
00114 template <class T>
00115 StatusCode service( const std::string& name, T*& svc, bool createIf = false ) const {
00116 IService* theSvc;
00117 StatusCode sc = serviceLocator()->getService( name, theSvc, createIf );
00118 if ( sc.isSuccess() ) {
00119 return theSvc->queryInterface(T::interfaceID(), (void**)&svc);
00120 }
00121 svc = 0;
00122 return sc;
00123 }
00124
00126 virtual StatusCode setProperty(const Property& p);
00127
00129 virtual StatusCode setProperty( const std::string& s );
00130
00132 virtual StatusCode setProperty( const std::string& n, const std::string& v);
00133
00135 virtual StatusCode getProperty(Property* p) const;
00136
00138 virtual const Property& getProperty( const std::string& name) const;
00139
00141 virtual StatusCode getProperty( const std::string& n, std::string& v ) const;
00142
00144 const std::vector<Property*>& getProperties( ) const;
00145
00146
00187 template <class TYPE>
00188 StatusCode setProperty
00189 ( const std::string& name ,
00190 const TYPE& value )
00191 { return Gaudi::Utils::setProperty ( m_PropertyMgr , name , value ) ; }
00192
00198 StatusCode setProperties();
00199
00200
00228 template <class T>
00229 Property* declareProperty( const std::string& name, T& property,
00230 const std::string& doc = "none") const {
00231 return m_PropertyMgr->declareProperty(name, property, doc);
00232 }
00233
00235 unsigned long addRef();
00236 unsigned long release();
00237 StatusCode queryInterface(const InterfaceID& riid, void**);
00238
00239 private:
00240
00241 long m_refCount;
00242 std::string m_name;
00243
00244 IMessageSvc* m_MS;
00245 ISvcLocator* m_pSvcLocator;
00246 PropertyMgr* m_PropertyMgr;
00247 int m_outputLevel;
00248 bool m_isEnabled;
00249 bool m_isInitialized;
00250 bool m_isFinalized;
00251
00252
00253 Auditor(const Auditor& a);
00254
00255
00256 Auditor& operator=(const Auditor& rhs);
00257 };
00258
00259 #endif //GAUDIKERNEL_AUDITOR_H
00260