void OutputObjectSummary( cFCODatabaseFileIter& genreIter, const iFCONameTranslator* pNT, TOSTREAM* pOut, int margin ) { const cDbDataSourceIter dbIter( &genreIter.GetDb() ); ASSERT(dbIter.AtRoot()); (*pOut) << setw( margin ) << _T(""); TSTRING strBuf; (*pOut) << genreIter.GetGenreHeader().GetPropDisplayer()->GetDetailsHeader( strBuf, margin ).c_str() << endl; OutputIterPeers( dbIter, genreIter.GetGenreHeader().GetPropDisplayer(), pNT, pOut, false ); (*pOut) << endl; }
void OutputObjectDetail( cFCODatabaseFileIter& genreIter, const iFCONameTranslator* pNT, TOSTREAM* pOut ) { const cDbDataSourceIter dbIterDetails(&genreIter.GetDb()); OutputIterPeers( dbIterDetails, genreIter.GetGenreHeader().GetPropDisplayer(), pNT, pOut, true); (*pOut) << endl; }
/////////////////////////////////////////////////////////////////////////////// // Execute /////////////////////////////////////////////////////////////////////////////// void cDbExplore::Execute( cFCODatabaseFileIter& dbIter ) { ASSERT( ! dbIter.Done() ); cDbDataSourceIter* pIter = new cDbDataSourceIter( &dbIter.GetDb(), dbIter.GetGenre() ); const iFCOPropDisplayer* pDisplayer = dbIter.GetGenreHeader().GetPropDisplayer(); //////////////////////////// // the main event loop... //////////////////////////// while( true ) { TSTRING verb, noun; TCOUT << _T(">>"); TCIN >> verb; // // ok, now we switch on the command... // //----------------------------------------------------------------- // quit //----------------------------------------------------------------- if( verb.compare( _T("quit") ) == 0 ) { // the quit command... break; } //----------------------------------------------------------------- // print //----------------------------------------------------------------- if( verb.compare( _T("print") ) == 0 ) { GetNoun(noun); if( SeekTo( pIter, noun ) ) { if( pIter->HasFCOData() ) { iFCO* pFCO = pIter->CreateFCO(); PrintFCO( pFCO, pDisplayer ); pFCO->Release(); } else { TCOUT << _T("Object has no data associated with it.") << std::endl; } } else { TCOUT << _T("Unable to find object ") << noun << std::endl; } } //----------------------------------------------------------------- // pwd //----------------------------------------------------------------- else if( verb.compare( _T("pwd") ) == 0 ) { TCOUT << iTWFactory::GetInstance()->GetNameTranslator()->ToStringDisplay( pIter->GetParentName() ) << std::endl; } //----------------------------------------------------------------- // ls //----------------------------------------------------------------- else if( verb.compare( _T("ls") ) == 0 ) { int cnt = 0; for( pIter->SeekBegin(); ! pIter->Done(); pIter->Next(), cnt++ ) { TCOUT << _T("[") << cnt ; if( pIter->CanDescend() ) { TCOUT << _T("]*\t") ; } else { TCOUT << _T("]\t") ; } TCOUT << pIter->GetShortName() << std::endl; } } //----------------------------------------------------------------- // cd //----------------------------------------------------------------- else if( verb.compare( _T("cd") ) == 0 ) { GetNoun(noun); std::vector<TSTRING> vDirs; SplitString( noun, pIter->GetParentName().GetDelimiter(), vDirs ); for( std::vector<TSTRING>::iterator i = vDirs.begin(); i != vDirs.end(); i++ ) { if( i->compare( _T("..") ) == 0 ) { if( pIter->AtRoot() ) { TCOUT << _T("Can't ascend above root.") << std::endl; break; } else { TCOUT << _T("Ascending...") << std::endl; pIter->Ascend(); } } else { if( SeekTo( pIter, *i ) ) { if( pIter->CanDescend() ) { TCOUT << _T("Descending into ") << *i << std::endl; pIter->Descend(); } else { TCOUT << *i << _T(" has no children; can't descend.") << std::endl; break; } } else { TCOUT << _T("Unable to find object ") << *i << std::endl; break; } } } } //----------------------------------------------------------------- // cg //----------------------------------------------------------------- else if( verb.compare( _T("cg") ) == 0 ) { GetNoun(noun); cGenre::Genre newGenre = cGenreSwitcher::GetInstance()->StringToGenre( noun.c_str() ); if (newGenre != cGenre::GENRE_INVALID) { dbIter.SeekToGenre( newGenre ); if( !dbIter.Done() ) { TCOUT << _T("Changing to Genre ") << noun << std::endl; // // create a new db iter for the new genre (db iters can only be // assocaited with a single genre :-( ) // delete pIter; pIter = new cDbDataSourceIter( &dbIter.GetDb(), newGenre ); } else { TCOUT << _T("Unable to find Genre ") << noun << std::endl; } } else { TCOUT << _T("Invalid Genre ") << noun << std::endl; } } //----------------------------------------------------------------- // pwg //----------------------------------------------------------------- else if( verb.compare( _T("pwg") ) == 0 ) { TCOUT << _T("Current Genre: ") << cGenreSwitcher::GetInstance()->GenreToString( (cGenre::Genre)dbIter.GetGenre(), true ) << std::endl; } //----------------------------------------------------------------- // help //----------------------------------------------------------------- if( verb.compare( _T("help") ) == 0 ) { TCOUT << _T("Commands: ") << std::endl << _T(" cd <dir_name>") << std::endl << _T(" pwd ") << std::endl << _T(" ls ") << std::endl << _T(" print <object_name>") << std::endl << _T(" cg (FS | NTFS | NTREG)")<< std::endl << _T(" pwg") << std::endl << _T(" quit") << std::endl; } // make sure the file is still valid... // /* #ifdef _BLOCKFILE_DEBUG db.AssertAllBlocksValid() ; #endif */ } delete pIter; TCOUT << _T("Exiting...") << std::endl; }