Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

Auditor.cpp

Go to the documentation of this file.
00001 // $Id: Auditor.cpp,v 1.20 2008/10/27 19:22:21 marcocle Exp $
00002 
00003 #include "GaudiKernel/Kernel.h"
00004 #include "GaudiKernel/ISvcLocator.h"
00005 #include "GaudiKernel/IMessageSvc.h"
00006 #include "GaudiKernel/IJobOptionsSvc.h"
00007 
00008 #include "GaudiKernel/Auditor.h"
00009 
00010 #include "GaudiKernel/MsgStream.h"
00011 #include "GaudiKernel/GaudiException.h"
00012 
00013 // Constructor
00014 Auditor::Auditor( const std::string& name, ISvcLocator *pSvcLocator )
00015 : m_name(name),
00016   m_pSvcLocator(pSvcLocator),
00017   m_isEnabled(true),
00018   m_isInitialized(false),
00019   m_isFinalized(false)
00020 {
00021   m_PropertyMgr = new PropertyMgr();
00022 
00023   // Declare common Auditor properties with their defaults
00024   declareProperty( "OutputLevel", m_outputLevel = MSG::NIL);
00025   declareProperty( "Enable", m_isEnabled = true);
00026 }
00027 
00028 // Default Destructor
00029 Auditor::~Auditor() {
00030   delete m_PropertyMgr;
00031 }
00032 
00033 // IAuditor implementation
00034 StatusCode Auditor::sysInitialize() {
00035   StatusCode sc;
00036 
00037   // Bypass the initialization if the auditor is disabled or
00038   // has already been initialized.
00039   if ( isEnabled( ) && ! m_isInitialized ) {
00040 
00041     // Setup the default service ... this should be upgraded so as to be configurable.
00042     if( m_pSvcLocator == 0 )
00043       return StatusCode::FAILURE;
00044 
00045     // Set up message service
00046     m_MS = serviceLocator(); // get default message service
00047     if( !m_MS.isValid() )  return StatusCode::FAILURE;
00048 
00049     // Set the Auditor's properties
00050     sc = setProperties();
00051     if( !sc.isSuccess() )  return StatusCode::FAILURE;
00052 
00053     // Check current outputLevel to eventually inform the MessagsSvc
00054     if( m_outputLevel != MSG::NIL ) {
00055       setOutputLevel( m_outputLevel );
00056     }
00057 
00058     {
00059       try{
00060         // Invoke the initialize() method of the derived class
00061         sc = initialize();
00062         if( !sc.isSuccess() )  return StatusCode::FAILURE;
00063         m_isInitialized = true;
00064 
00065         return sc;                                               
00066       }
00067       catch ( const GaudiException& Exception )                  
00068         {
00070           MsgStream log ( msgSvc() , name() + ".sysInitialize()" );
00071           log << MSG::FATAL << " Exception with tag=" << Exception.tag() << " is catched " << endmsg;
00073           MsgStream logEx ( msgSvc() , Exception.tag() );
00074           logEx << MSG::ERROR << Exception  << endmsg;
00075         }
00076       catch( const std::exception& Exception )                   
00077         {
00079           MsgStream log ( msgSvc() , name() + ".sysInitialize()" );
00080           log << MSG::FATAL << " Standard std::exception is catched " << endmsg;
00082           MsgStream logEx ( msgSvc() , name() + "*std::exception*" );
00083           logEx << MSG::ERROR << Exception.what()  << endmsg;
00084         }
00085       catch(...)
00086         {
00088           MsgStream log ( msgSvc() , name() + ".sysInitialize()" );
00089           log << MSG::FATAL << " UNKNOWN Exception is  catched " << endmsg;
00090         }
00091     }
00092   }
00094   return StatusCode::FAILURE;
00095 }
00096 
00097 StatusCode Auditor::initialize() {
00098   return StatusCode::SUCCESS;
00099 }
00100 
00101 // Implemented for backward compatibility
00102 void Auditor::before(StandardEventType evt, INamedInterface* obj){
00103   switch (evt) {
00104   case Initialize:   beforeInitialize(obj);   break;
00105   case ReInitialize: beforeReinitialize(obj); break;
00106   case Execute:      beforeExecute(obj);      break;
00107   case BeginRun:     beforeBeginRun(obj);     break;
00108   case EndRun:       beforeEndRun(obj);       break;
00109   case Finalize:     beforeFinalize(obj);     break;
00110   case Start:        break;
00111   case Stop:         break;
00112   case ReStart:      break;
00113   default: ;// do nothing
00114   }
00115 }
00116 void Auditor::before(StandardEventType, const std::string&) {}
00117 
00118 void Auditor::before(CustomEventTypeRef, INamedInterface*){}
00119 void Auditor::before(CustomEventTypeRef, const std::string&){}
00120 
00121 // Implemented for backward compatibility
00122 void Auditor::after(StandardEventType evt, INamedInterface* obj, const StatusCode& sc){
00123   switch (evt) {
00124   case Initialize:   afterInitialize(obj);   break;
00125   case ReInitialize: afterReinitialize(obj); break;
00126   case Execute:      afterExecute(obj, sc);  break;
00127   case BeginRun:     afterBeginRun(obj);     break;
00128   case EndRun:       afterEndRun(obj);       break;
00129   case Finalize:     afterFinalize(obj);     break;
00130   case Start:        break;
00131   case Stop:         break;
00132   case ReStart:      break;
00133   default: ;// do nothing
00134   }
00135 }
00136 void Auditor::after(StandardEventType, const std::string&, const StatusCode&) {}
00137 
00138 void Auditor::after(CustomEventTypeRef, INamedInterface*, const StatusCode&){}
00139 void Auditor::after(CustomEventTypeRef, const std::string&, const StatusCode&){}
00140 
00141 void Auditor::beforeInitialize(INamedInterface* ) {}
00142 
00143 void Auditor::afterInitialize(INamedInterface* ) {}
00144 
00145 void Auditor::beforeReinitialize(INamedInterface* ) {}
00146 
00147 void Auditor::afterReinitialize(INamedInterface* ) {}
00148 
00149 void Auditor::beforeExecute(INamedInterface* ) {}
00150 
00151 void Auditor::afterExecute(INamedInterface*, const StatusCode& ) {}
00152 
00153 void Auditor::beforeBeginRun(INamedInterface* ) {}
00154 
00155 void Auditor::afterBeginRun(INamedInterface* ) {}
00156 
00157 void Auditor::beforeEndRun(INamedInterface* ) {}
00158 
00159 void Auditor::afterEndRun(INamedInterface* ) {}
00160 
00161 void Auditor::beforeFinalize(INamedInterface* ) {}
00162 
00163 void Auditor::afterFinalize(INamedInterface* ) {}
00164 
00165 StatusCode Auditor::sysFinalize() {
00166   StatusCode sc = StatusCode::SUCCESS;
00167   try{
00168     //
00169     // Invoke the finalize() method of the derived class if
00170     // it has been initialized.
00171     if ( m_isInitialized && ! m_isFinalized ) {
00172       m_isFinalized = true;
00173       sc = finalize();
00174       if( !sc.isSuccess() )  return StatusCode::FAILURE;
00175     }
00176     return sc;                                               
00177     //
00178   }
00179   catch( const GaudiException& Exception )                   
00180     {
00182       MsgStream log ( msgSvc() , name() + ".sysFinalize()" );
00183       log << MSG::FATAL
00184           << " Exception with tag=" << Exception.tag() << " is catched " << endmsg;
00187       MsgStream logEx ( msgSvc() , Exception.tag() );
00188       logEx << MSG::ERROR
00189             << Exception  << endmsg;
00190     }
00191   catch( const std::exception& Exception )                   
00192     {
00194       MsgStream log ( msgSvc() , name() + ".sysFinalize()" );
00195       log << MSG::FATAL
00196           << " Standard std::exception is caught " << endmsg;
00198       MsgStream logEx ( msgSvc() , name() + "*std::exception*" );
00199       logEx << MSG::ERROR
00200             << Exception.what()  << endmsg;
00201     }
00202   catch( ... )                                                
00203     {
00205       MsgStream log ( msgSvc() , name() + ".sysFinalize()" );
00206       log << MSG::FATAL
00207           << " UNKNOWN Exception is caught " << endmsg;
00208     }
00210   return StatusCode::FAILURE ;
00211 }
00212 
00213 StatusCode Auditor::finalize() {
00214   m_MS = 0; // release message service
00215   return StatusCode::SUCCESS;
00216 }
00217 
00218 const std::string& Auditor::name() const {
00219   return m_name;
00220 }
00221 
00222 bool Auditor::isEnabled( ) const {
00223   return m_isEnabled;
00224 }
00225 
00226 SmartIF<IMessageSvc>& Auditor::msgSvc() const {
00227   return m_MS;
00228 }
00229 
00230 void Auditor::setOutputLevel( int level ) {
00231   if( m_MS != 0) {
00232     m_MS->setOutputLevel( name(), level );
00233   }
00234 }
00235 
00236 SmartIF<ISvcLocator>& Auditor::serviceLocator() const {
00237   return m_pSvcLocator;
00238 }
00239 
00240 // Use the job options service to set declared properties
00241 StatusCode Auditor::setProperties() {
00242   if( m_pSvcLocator != 0 )    {
00243     IJobOptionsSvc* jos;
00244     StatusCode sc = service("JobOptionsSvc", jos);
00245     if( sc.isSuccess() )    {
00246       jos->setMyProperties( name(), this ).ignore();
00247       jos->release();
00248       return StatusCode::SUCCESS;
00249     }
00250   }
00251   return StatusCode::FAILURE;
00252 }
00253 
00254 // IProperty implementation
00255 // Delegate to the Property manager
00256 StatusCode Auditor::setProperty(const Property& p) {
00257   return m_PropertyMgr->setProperty(p);
00258 }
00259 StatusCode Auditor::setProperty(const std::string& s) {
00260   return m_PropertyMgr->setProperty(s);
00261 }
00262 StatusCode Auditor::setProperty(const std::string& n, const std::string& v) {
00263   return m_PropertyMgr->setProperty(n,v);
00264 }
00265 StatusCode Auditor::getProperty(Property* p) const {
00266   return m_PropertyMgr->getProperty(p);
00267 }
00268 const Property& Auditor::getProperty( const std::string& name) const{
00269   return m_PropertyMgr->getProperty(name);
00270 }
00271 StatusCode Auditor::getProperty(const std::string& n, std::string& v ) const {
00272   return m_PropertyMgr->getProperty(n,v);
00273 }
00274 const std::vector<Property*>& Auditor::getProperties( ) const {
00275   return m_PropertyMgr->getProperties();
00276 }

Generated at Mon May 3 12:14:32 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004