26 #include <boost/algorithm/string/predicate.hpp> 
   27 #include <boost/filesystem.hpp> 
   32 #define ON_DEBUG if ( UNLIKELY( outputLevel() <= MSG::DEBUG ) ) 
   33 #define ON_VERBOSE if ( UNLIKELY( outputLevel() <= MSG::VERBOSE ) ) 
   35 #define DEBMSG ON_DEBUG debug() 
   36 #define VERMSG ON_VERBOSE verbose() 
   67     error() << 
"Unable to initialize Service base class" << 
endmsg;
 
   73   if ( service( 
"IncidentSvc", p_incSvc, 
true ).isFailure() ) {
 
   74     error() << 
"unable to get the IncidentSvc" << 
endmsg;
 
   77     p_incSvc->
addListener( 
this, IncidentType::BeginOutputFile, 100, 
true );
 
   78     p_incSvc->
addListener( 
this, IncidentType::BeginInputFile, 100, 
true );
 
   89   for ( 
auto& io : m_iostack ) { io->release(); }
 
  100   if ( 0 == iocomponent ) { 
return false; }
 
  102   IoRegistry_t::const_iterator io     = m_ioregistry.
find( ioname );
 
  103   return io != m_ioregistry.end();
 
  113   if ( 0 == iocomponent ) { 
return false; }
 
  116   DEBMSG << 
"io_contains:  c: " << ioname << 
" f: " << fname << 
endmsg;
 
  119   if ( fit.first == fit.second ) {
 
  123     for ( it = fit.first; it != fit.second; ++it ) {
 
  127         error() << 
"IIoComponent " << ioname << 
"  has empty old filename" << 
endmsg;
 
  147   if ( !iocomponent ) {
 
  148     error() << 
"io_register (component) received a NULL pointer !" << 
endmsg;
 
  152   DEBMSG << 
"--> io_register(" << ioname << 
")" << 
endmsg;
 
  153   auto itr = m_ioregistry.find( ioname );
 
  154   if ( itr == m_ioregistry.end() ) {
 
  155     DEBMSG << 
"    registering IoComponent \"" << ioname << 
"\"" << 
endmsg;
 
  157     m_ioregistry[ioname] = iocomponent;
 
  158     m_iostack.push_back( iocomponent );
 
  160     info() << 
"IoComponent[" << iocomponent->
name() << 
"] already registered @" << (
void*)itr->second << 
endmsg;
 
  179          << fname << 
")" << 
endmsg;
 
  181   if ( !io_hasitem( iocomponent ) ) {
 
  182     if ( !io_register( iocomponent ).isSuccess() ) {
 
  183       error() << 
"could not register component [" << iocomponent->
name() << 
"] " 
  184               << 
"with the I/O component manager !" << 
endmsg;
 
  190   if ( fit.first != fit.second ) {
 
  191     for ( 
iodITR it = fit.first; it != fit.second; ++it ) {
 
  195           info() << 
"IoComponent " << ioname << 
" has already had file " << fname << 
" registered with i/o mode " 
  199           warning() << 
"IoComponent " << ioname << 
" has already had file " << fname
 
  200                     << 
" registered with a different i/o mode " << ioe.
m_iomode << 
" - now trying " << iomode << 
endmsg;
 
  210                    [&]( 
const std::string& pf ) { return boost::algorithm::contains( tmp_name, pf ); } );
 
  211   IoComponentEntry ioc( fname, ( special_case ? tmp_name : boost::filesystem::absolute( tmp_name ).
string() ), iomode );
 
  224   if ( iocomponent != 
nullptr && findComp( iocomponent, pit ) ) {
 
  226                     []( 
const auto& itr ) { return itr.second.m_oldfname; } );
 
  242   DEBMSG << 
"--> io_retrieve(" << ioname << 
"," << fname << 
")" << 
endmsg;
 
  245   if ( !findComp( iocomponent, ofname, it ) ) {
 
  246     DEBMSG << 
"could not find c: " << ioname << 
"  old_f: " << ofname << 
endmsg;
 
  250     IoDict_t::iterator it;
 
  251     for ( it = m_cdict.equal_range( iocomponent ).first; it != m_cdict.equal_range( iocomponent ).second; ++it ) {
 
  253       if ( it->second.m_oldfname == ofname ) {
 
  254         DEBMSG << 
"retrieving new name for the component " << iocomponent->
name() << 
" old name: " << ofname
 
  255                << 
", new name: " << it->second.m_newfname << 
endmsg;
 
  256         fname = it->second.m_newfname;
 
  262   DEBMSG << 
"Unexpected error! Unable to find entry in the dictionary corresponding to old filename: " << ofname
 
  275     debug() << 
"--> io_reinitialize()" << 
endmsg;
 
  276     debug() << 
"reinitializing I/O subsystem..." << 
endmsg;
 
  277     debug() << 
"Listing all monitored entries: " << 
std::endl;
 
  282   for ( 
auto& io : m_iostack ) {
 
  283     DEBMSG << 
" [" << io->name() << 
"]->io_reinit()..." << 
endmsg;
 
  284     if ( !io->io_reinit().isSuccess() ) {
 
  286       error() << 
"problem in [" << io->name() << 
"]->io_reinit() !" << 
endmsg;
 
  297   DEBMSG << 
"--> io_update(" << ioc->
name() << 
"," << old_fname << 
"," << new_fname << 
")" << 
endmsg;
 
  299   IoDict_t::iterator it;
 
  300   for ( it = m_cdict.equal_range( ioc ).first; it != m_cdict.equal_range( ioc ).second; ++it ) {
 
  302     if ( it->second.m_oldfname == old_fname ) {
 
  303       DEBMSG << 
"updating " << ioc->
name() << 
" f: " << old_fname << 
" -> " << new_fname << 
endmsg;
 
  304       it->second.m_newfname = new_fname;
 
  316   DEBMSG << 
"--> io_update(" << ioc->
name() << 
"," << work_dir << 
")" << 
endmsg;
 
  318   IoDict_t::iterator it;
 
  319   for ( it = m_cdict.equal_range( ioc ).first; it != m_cdict.equal_range( ioc ).second; ++it ) {
 
  321     switch ( it->second.m_iomode ) {
 
  323       it->second.m_newfname = it->second.m_oldabspath;
 
  328       if ( oldPath.is_relative() && oldPath.filename() == oldPath.relative_path() ) {
 
  339         it->second.m_newfname = newfname.string();
 
  342         it->second.m_newfname = it->second.m_oldabspath;
 
  349       error() << 
"Unable to update IoComponent for the mode " << it->second.m_iomode << 
endmsg;
 
  362   DEBMSG << 
"-->io_update_all for the directory " << work_dir << 
endmsg;
 
  364   for ( IoStack_t::iterator io = m_iostack.begin(), ioEnd = m_iostack.end(); io != ioEnd; ++io ) {
 
  365     if ( !io_update( *io, work_dir ).isSuccess() ) {
 
  367       error() << 
"problem in [" << ( *io )->name() << 
"]->io_update() !" << 
endmsg;
 
  381     debug() << 
"--> io_finalize()" << 
endmsg;
 
  382     debug() << 
"finalizing I/O subsystem..." << 
endmsg;
 
  383     debug() << 
"Listing all monitored entries: " << 
std::endl;
 
  389   for ( IoStack_t::reverse_iterator io = m_iostack.rbegin(), ioEnd = m_iostack.rend(); io != ioEnd; ++io ) {
 
  390     DEBMSG << 
" [" << ( *io )->name() << 
"]->io_finalize()..." << 
endmsg;
 
  391     if ( !( *io )->io_finalize().isSuccess() ) {
 
  393       error() << 
"problem in [" << ( *io )->name() << 
"]->io_finalize() !" << 
endmsg;
 
  405   if ( !findComp( 
c, pit ) ) {
 
  409   return std::any_of( pit.first, pit.second, [&]( IoDict_t::const_reference i ) { return i.second.m_oldfname == f; } );
 
  416   pit = m_cdict.equal_range( 
c );
 
  417   return pit.first != pit.second;
 
  424   pit.first  = m_cdict.end();
 
  425   pit.second = m_cdict.end();
 
  427   auto itr = m_ioregistry.find( 
c );
 
  428   return ( itr != m_ioregistry.end() ) && findComp( itr->second, pit );
 
  437   ost << 
"Listing all IoComponents (" << m_cdict.size() << 
"): " << 
endl;
 
  438   for ( 
const auto& i : m_cdict ) { ost << 
"  " << i.first->name() << 
"  " << i.second << 
endl; }
 
  449   if ( i.
type() == IncidentType::BeginInputFile ) {
 
  455     if ( findComp( fi->
source(), pit ) ) {
 
  457       while ( pit.first != pit.second ) {
 
  468   } 
else if ( i.
type() == IncidentType::BeginOutputFile ) {
 
  474     if ( findComp( fi->
source(), pit ) ) {
 
  476       while ( pit.first != pit.second ) {