00001 00002 #include "FileReporting.hpp" 00003 #include "rtt/RTT.hpp" 00004 #include "rtt/Logger.hpp" 00005 #include "rtt/marsh/TableMarshaller.hpp" 00006 #include "NiceHeaderMarshaller.hpp" 00007 00008 00009 #include "ocl/ComponentLoader.hpp" 00010 ORO_LIST_COMPONENT_TYPE(OCL::FileReporting) 00011 00012 namespace OCL 00013 { 00014 using namespace RTT; 00015 using namespace std; 00016 00017 FileReporting::FileReporting(const std::string& fr_name) 00018 : ReportingComponent( fr_name ), 00019 repfile("ReportFile","Location on disc to store the reports.", "reports.dat") 00020 { 00021 this->properties()->addProperty( &repfile ); 00022 } 00023 00024 bool FileReporting::startHook() 00025 { 00026 mfile.open( repfile.get().c_str() ); 00027 if (mfile) { 00028 if ( this->writeHeader) 00029 fheader = new RTT::NiceHeaderMarshaller<std::ostream>( mfile ); 00030 else 00031 fheader = 0; 00032 fbody = new RTT::TableMarshaller<std::ostream>( mfile ); 00033 00034 this->addMarshaller( fheader, fbody ); 00035 } else { 00036 log(Error) << "Could not open file "+repfile.get()+" for reporting."<<endlog(); 00037 } 00038 00039 return ReportingComponent::startHook(); 00040 } 00041 00042 void FileReporting::stopHook() 00043 { 00044 ReportingComponent::stopHook(); 00045 00046 this->removeMarshallers(); 00047 if (mfile) 00048 mfile.close(); 00049 } 00050 00051 bool FileReporting::screenComponent( const std::string& comp) 00052 { 00053 Logger::In in("FileReporting::screenComponent"); 00054 ofstream file( (comp + ".screen").c_str() ); 00055 if (!file) 00056 return false; 00057 return this->screenImpl( comp, file ); 00058 } 00059 00060 }