Generic hardware access library
|
00001 #include "hal/PersistentCommandSequencer.hh" 00002 #include <vector> 00003 #include <fstream> 00004 00005 HAL::PersistentCommandSequencer::PersistentCommandSequencer( std::string configurationFile, 00006 const AddressTableInterface& addressTable ) 00007 throw(IllegalOperationException) 00008 : configurationFile( configurationFile ), 00009 addressTable( addressTable ) { 00010 loadSequences(); 00011 } 00012 00013 HAL::PersistentCommandSequencer::~PersistentCommandSequencer() { 00014 saveSequences(); 00015 } 00016 00017 void HAL::PersistentCommandSequencer::loadSequences() { 00018 00019 std::string word; 00020 std::fstream configurationStream; 00021 configurationStream.open( configurationFile.c_str(), std::ios::in ); 00022 00023 if ( configurationStream.fail() ) { 00024 std::cout << "Cannot open configuration-file " << configurationFile 00025 << "\n (HAL::PersistentCommandSequencer::loadSequences)" << std::endl; 00026 } else { 00027 while ( ! configurationStream.eof() ) { 00028 word = ""; 00029 configurationStream >> word; 00030 00031 if (word != "") { 00032 try { 00033 std::cout << "loading sequence : " << word << std::endl; 00034 CommandSequenceASCIIReader* rd_ptr = new CommandSequenceASCIIReader( word ); 00035 CommandSequence* seq_ptr = 00036 new CommandSequence(word, 00037 *rd_ptr, 00038 addressTable); 00039 readerMap[ word ] = rd_ptr; 00040 CommandSequencer::registerSequence( *seq_ptr ); 00041 } catch ( HardwareAccessException& e ) { 00042 std::cout << e.what() << std::endl; 00043 } 00044 } 00045 } 00046 // rewrite the configuration file to get rid of all 00047 // errorneous sequences. 00048 saveSequences(); 00049 } 00050 } 00051 00052 void HAL::PersistentCommandSequencer::saveSequences() { 00053 00054 std::vector<std::string> names = getNameVector(); 00055 uint32_t ic; 00056 std::fstream configurationStream; 00057 configurationStream.open( configurationFile.c_str(), std::ios::out ); 00058 if ( configurationStream.fail() ) { 00059 std::cout << "Cannot open configuration-file " << configurationFile 00060 << "\n (HAL::PersistentCommandSequencer::saveSequences)" << std::endl; 00061 } else { 00062 for( ic=0; ic < names.size(); ic++ ) { 00063 std::cout << "saving : " << names[ic] << std::endl; 00064 configurationStream << names[ic] << std::endl; 00065 } 00066 } 00067 } 00068 00069 void HAL::PersistentCommandSequencer::registerSequence( std::string sequenceName ) { 00070 try { 00071 CommandSequenceASCIIReader* seqrd_ptr = 00072 new CommandSequenceASCIIReader( sequenceName ); 00073 CommandSequence* seq_ptr = new CommandSequence(sequenceName, 00074 *seqrd_ptr, 00075 addressTable); 00076 readerMap[sequenceName] = seqrd_ptr; 00077 CommandSequencer::registerSequence( *seq_ptr ); 00078 saveSequences(); 00079 } catch ( HardwareAccessException& e ) { 00080 std::cout << e.what() << std::endl; 00081 } 00082 } 00083 00084 void HAL::PersistentCommandSequencer::deleteSequence( std::string sequenceName ) 00085 throw( IllegalValueException ) { 00086 CommandSequencer::deleteSequence( sequenceName ); 00087 saveSequences(); 00088 delete(readerMap[ sequenceName ]); 00089 readerMap.erase( readerMap.find( sequenceName )); 00090 } 00091 00092 void HAL::PersistentCommandSequencer::deleteSequences( ) { 00093 CommandSequencer::deleteSequences(); 00094 saveSequences(); 00095 readerMap.clear(); 00096 } 00097