![]() |
|
|
Bdb packages | Design docs | Source docs | Guidelines | Recent releases |
|
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