00001 #include "BaseModule.h"
00002 #include "ModulesOptions.h"
00003 #include "ModulesNavigator.h"
00004 #include <iostream>
00005 #include "TObjString.h"
00006
00007 BaseModule::BaseModule(const char *name,modules::options* opts,bool with_directory):
00008 fSetup(TSetupData::Instance()),fDebug(false),fName(name),fDirectory(NULL){
00009
00010 if(opts){
00011 fDebug=(opts->HasOption("debug") && (opts->GetOption("debug").empty() || opts->GetBool("debug")));
00012 SetAlias(opts->GetAlias());
00013 }
00014
00015 if(with_directory){
00016
00017 fDirectory=gDirectory->GetDirectory(fName.c_str());
00018
00019 if(!fDirectory) fDirectory=gDirectory->mkdir(fName.c_str());
00020
00021 if(modules::navigator::Instance()->HowMany(fName)>1) {
00022
00023 fDirectory=fDirectory->mkdir(GetAlias().c_str());
00024 }
00025 fDirectory->SetTitle(opts->StringDescription().c_str());
00026 fDirectory->cd();
00027
00028 TObjString *title=new TObjString(opts->StringDescription().c_str());
00029 title->Write();
00030 } else {
00031
00032 fDirectory=gDirectory->GetDirectory("/");
00033 }
00037 dir=fDirectory;
00038 }
00039
00040 BaseModule::~BaseModule()
00041 {
00042 }
00043
00044 int BaseModule::ProcessGenericEntry(TGlobalData *gData, const TSetupData *gSetup){
00045
00046
00047
00048 if(fDirectory) fDirectory->cd();
00049 int ret = ProcessEntry(gData, gSetup);
00050 gDirectory->cd("/");
00051
00052 return ret;
00053 }
00054
00055 int BaseModule::Preprocess(TGlobalData *gData, const TSetupData *gSetup){
00056
00057
00058
00059 if(fDirectory) fDirectory->cd();
00060 int ret = BeforeFirstEntry(gData, gSetup);
00061 gDirectory->cd("/");
00062
00063 return ret;
00064 }
00065
00066 int BaseModule::Postprocess(TGlobalData *gData, const TSetupData *gSetup){
00067
00068
00069
00070 if(fDirectory) fDirectory->cd();
00071 int ret = AfterLastEntry(gData, gSetup);
00072 gDirectory->cd("/");
00073
00074 return ret;
00075 }
00076
00077 TDirectory* BaseModule::GetDirectory(const std::string& name){
00078 if(name.empty()) return fDirectory;
00079 TDirectory* dir=fDirectory->GetDirectory(name.c_str());
00080 if(dir) return dir;
00081 return fDirectory->mkdir(name.c_str());
00082 }