Bdb packages | Design docs | Source docs | Guidelines | Recent releases

Search | Site Map .

Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/CdbTools/CdbToolslsCondCmd.cc

Go to the documentation of this file.
00001 //
00002 //
00003 //
00004 #include "BaBar/BaBar.hh"
00005 
00006 #include "CdbTools/CdbToolslsCondCmd.hh"
00007 //
00008 //
00009 #include "CdbBase/CdbConditionLocator.hh"
00010 #include "CdbBase/CdbDatabase.hh"
00011 #include "CdbBase/CdbDatabaseItr.hh"
00012 #include "CdbBase/CdbView.hh"
00013 #include "CdbBase/CdbViewItr.hh"
00014 #include "CdbBase/CdbFolder.hh"
00015 #include "CdbBase/CdbFolderItr.hh"
00016 #include "CdbBase/CdbCondition.hh"
00017 #include "CdbBase/CdbConditionItr.hh"
00018 #include "CdbBase/CdbPathName.hh"
00019 #include "CdbBase/CdbItr.hh"
00020 #include "CdbBase/Cdb.hh"
00021 #include "CdbBase/CdbStatus.hh"
00022 
00023 #include "CdbTools/CdbToolsContext.hh"
00024 
00025 CdbToolslsCondCmd::CdbToolslsCondCmd(CdbToolsContext* context)
00026   :CdbToolsCmd(context)
00027   ,_dbName(""), _viewName(""), _folderName("")
00028   ,_conditionName(""), _revisionName("")
00029   , _flag(false)
00030   , _folderPath( "" )
00031   , _pathName(0)
00032   , _dbPtr(0), _viewPtr(0) 
00033   ,_folderPtr(0), _condPtr(0)
00034 {
00035   std::string tech ( context->currentTech() );
00036   std::string impl ( context->currentImpl() );  
00037   _cdbPtr = Cdb::instance(tech.c_str(), impl.c_str());
00038   assert( !_cdbPtr.isNull( ));
00039   assert( 0 != _cdbPtr->technologyName( ));
00040   //  _dbName = context()->currentDB();
00041 
00042 }
00043 CdbToolslsCondCmd::~CdbToolslsCondCmd()
00044 {
00045 }
00046 
00047 CdbToolsStatus::CdbCmdStatus
00048 CdbToolslsCondCmd::listDB( std::string dbName)
00049 {
00050   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00051 
00052   CdbDatabaseItr dItr;
00053   
00054   if(CdbStatus::Success == _cdbPtr->databaseIterator( dItr ))
00055     status = CdbToolsStatus::Success;
00056   while( dItr.next( )) {
00057     status = CdbToolsStatus::Error;
00058     //   if(_dbName != "") MsgOut << "Database: " << dItr.value( )  << endl;
00059     MsgOut << "Database: " << dItr.value( )  << endl;
00060       CdbDatabasePtr dPtr;
00061       if(CdbStatus::Success == _cdbPtr->findDatabase( dPtr, dItr.value( ) ))
00062         status = CdbToolsStatus::Success;
00063       _dbPtr = dPtr;    //cache this pointer
00064       if(_viewName != ""){
00065         //       if( flag() || argc() <=1){
00066         status = listView(dPtr);
00067       }
00068   }
00069   return status;
00070 }
00071 CdbToolsStatus::CdbCmdStatus
00072 CdbToolslsCondCmd::listView(CdbDatabasePtr dptr)
00073 {
00074   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00075   
00076   CdbViewItr vItr;
00077   if(CdbStatus::Success == dptr->viewIterator( vItr )) status = CdbToolsStatus::Success;
00078   
00079   while( vItr.next( )) {
00080    if(_viewName != "") MsgOut << "View: " << vItr.value( ) << endl;
00081 
00082    if(CdbStatus::Success == dptr->findView( _viewPtr, vItr.value( ) ))
00083      status = CdbToolsStatus::Success;
00084    if(_folderName != "" || argc() <= 1){
00085      status = listFolder(_viewPtr);
00086    }
00087   }
00088   return status;
00089 }
00090 CdbToolsStatus::CdbCmdStatus
00091 CdbToolslsCondCmd::listFolder(CdbViewPtr vptr)
00092 {
00093   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00094 
00095 
00096   CdbFolderLocator* fLocator = vptr.get();
00097   assert ( 0 != fLocator);
00098   
00099   CdbFolderItr fItr;
00100   if(CdbStatus::Success == fLocator->folderIterator( fItr ))
00101     status = CdbToolsStatus::Success;;
00102   assert( CdbToolsStatus::Success == status );
00103   
00104   while( fItr.next( )) {
00105     status = CdbToolsStatus::Error;
00106     CdbFolderPtr fPtr;
00107     
00108     if(CdbStatus::Success == fLocator->findFolder( _folderPtr, fItr.value() ))
00109        status = CdbToolsStatus::Success;
00110     assert( CdbToolsStatus::Success == status );
00111     assert( !_folderPtr.isNull( ));
00112     indent();
00113     MsgOut << "Folder: " << fItr.value() << endl;
00114     
00115     //navigate the sub-folders
00116     status = navigateFolder(_folderPtr.get());
00117   }
00118   return status;
00119 }
00120 CdbToolsStatus::CdbCmdStatus
00121 CdbToolslsCondCmd::navigateFolder(CdbFolderLocator* fLocator)
00122 {
00123   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00124   if(fLocator == 0) return status;
00125   CdbFolderItr fItr;
00126   if(CdbStatus::Success == fLocator->folderIterator( fItr ))
00127     status = CdbToolsStatus::Success;
00128   assert( CdbToolsStatus::Success == status );
00129   
00130   increIndent();
00131   while( fItr.next( )) {
00132     status = CdbToolsStatus::Error;
00133     CdbFolderPtr fPtr;
00134     
00135     if(CdbStatus::Success == fLocator->findFolder( fPtr, fItr.value() ))
00136       status = CdbToolsStatus::Success;
00137     assert( CdbToolsStatus::Success == status );
00138     assert( !fPtr.isNull( ));
00139     //   MsgOut << "Folder: " << fItr.value() << endl;
00140     if("" != _folderName ){
00141       //      if( strcmp(_folderName, fItr.value()) ==0){
00142       if( _folderName == fItr.value() ){
00143         indent();
00144         MsgOut << "Folder: " << fItr.value() << endl;
00145         listCondition(fPtr);
00146       }
00147     }else{
00148       indent();
00149       cout << "Folder: " << fItr.value() << endl;
00150     }
00151     status = navigateFolder(fPtr.get());
00152   }
00153   decreIndent();
00154 
00155   return status;
00156 }
00157 CdbToolsStatus::CdbCmdStatus
00158 CdbToolslsCondCmd::listCondition( CdbFolderPtr fptr)
00159 {
00160   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00161     //list conditions in this folder
00162     CdbConditionLocator* cLocator = fptr.get();
00163     if(0 != cLocator){
00164       CdbConditionItr cItr;
00165       
00166       if(CdbStatus::Success ==  cLocator->conditionIterator( cItr ))
00167         status = CdbToolsStatus::Success;
00168       assert( CdbToolsStatus::Success == status );
00169       increIndent(); 
00170       while( cItr.next( )) {
00171         status = CdbToolsStatus::Error;
00172         CdbConditionPtr cPtr;
00173         const char*     cName = cItr.value( );
00174         
00175         if(CdbStatus::Success == cLocator->findCondition( cPtr, cItr.value( )))
00176           status = CdbToolsStatus::Success;
00177         assert( CdbToolsStatus::Success == status );
00178         assert( !cPtr.isNull( ));
00179         
00180         indent();
00181         MsgOut << "Condition: " << cItr.value() 
00182                << endl;
00183         status = listRevision(cPtr);
00184       }
00185       decreIndent();
00186     }
00187         
00188   return status;
00189 
00190 }
00191 CdbToolsStatus::CdbCmdStatus
00192 CdbToolslsCondCmd::listRevision( CdbConditionPtr cptr)
00193 {
00194   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00195   CdbItr<BdbTime> rItr;
00196 
00197   if(CdbStatus::Success == cptr->revisionIdIterator( rItr ))
00198      status = CdbToolsStatus::Success;
00199   assert( CdbToolsStatus::Success == status );
00200   
00201   increIndent(); 
00202   while( rItr.next( )) {
00203     
00204     const BdbTime rId = rItr.value( );
00205 
00206     indent();
00207     MsgOut << "Revision " << rId.getGmtSec( ) << "." << rId.getGmtNsec( ) << endl;
00208   }
00209   decreIndent();
00210 
00211   return status;
00212 }
00213 CdbToolsStatus::CdbCmdStatus
00214 CdbToolslsCondCmd::doExecute()
00215 {
00216 
00217   //need to see what the actual command is (ls, lsd, lis_view ??)
00218   CdbToolsStatus::CdbCmdStatus status = CdbToolsStatus::Error;
00219   bool flag;   //local flag to check arguments
00220   //check for flags and set names
00221   for(int i=1; i< argc(); i++){
00222     flag = false;
00223     if( argv(i) == "-view"){
00224       _viewName = argv(i+1);
00225       i++;
00226       if(_dbPtr == 0) listDB();
00227       listView(_dbPtr);
00228       flag = true;
00229     }
00230     if(argv(i) == "-folder"){
00231       _folderPath = argv(i+1);
00232       _pathName = new CdbPathName(_folderPath.c_str());
00233       if(_pathName->isAbsolute()){
00234       _folderName = (_pathName->last()).getName();
00235       }else{
00236         if(context()->currentPath().isValid())
00237           _folderName = _folderPath;
00238         else{
00239           MsgOut<<"\nInvalid folder or path name.\n"<<endl;
00240           resetNames();
00241           return CdbToolsStatus::Invalid;
00242         }
00243       }
00244       i++;
00245       if(_dbPtr == 0)listDB();
00246       if(_viewPtr == 0)listView(_dbPtr);
00247       listFolder(_viewPtr);
00248       flag = true;
00249     }
00250     if(argv(i) == "-database"
00251        ||  argv(i) == "-db") {
00252       _dbName = argv(i+1);
00253       i++;
00254       flag = true;
00255     }
00256     if(!flag){
00257       _folderPath = argv(i);
00258       //check for valid path name
00259       _pathName = new CdbPathName(_folderPath.c_str());
00260       if(_pathName->isAbsolute()){
00261       _folderName = (_pathName->last()).getName();
00262       }else{   //it must be relative path
00263         _folderName = _folderPath;
00264       }
00265     }
00266 
00267   }
00268 
00269   //    status = listDB();
00270   resetNames();
00271 
00272   return status;
00273 }
00274 void
00275 CdbToolslsCondCmd::resetNames()
00276 {
00277   _dbName = "";
00278   _viewName = "";
00279   _folderName = "";
00280   _revisionName = "";
00281   _conditionName = "";
00282   _flag = false;
00283   //  _currentPath = 0;
00284     _pathName = 0;
00285 
00286   _folderPath = "";
00287 }
00288 void
00289 CdbToolslsCondCmd::help()
00290 {
00291   MsgOut<<"list_cond command:\n"
00292         <<"list condition in specified folder.\n"
00293         <<endl;
00294 }
00295 
00296 
00297 
00298 
00299 

 


BaBar Public Site | SLAC | News | Links | Who's Who | Contact Us

Page Owner: Jacek Becla
Last Update: October 04, 2002