00001 #include "Event/optionServer.h"
00002 #include "Event/messageManager.h"
00003
00004
00005 optionServer::optionServer()
00006
00007 {
00008 m_optionFileName = "";
00009 m_server = new serverVI<optionVI>();
00010 }
00011
00012 optionServer::~optionServer()
00013
00014 {
00015 delete m_server;
00016 }
00017
00018 void optionServer::setOption()
00019
00020 {
00021
00022 std::string name = m_optionFileName;
00023 if (name == "") return;
00024 messageManager::instance()->message(" Using option file "+name);
00025 std::ifstream file(name.c_str());
00026 if (!file) {
00027 messageManager::instance()->message(" Could not open init file "+ name);
00028 file.close();
00029 return;
00030 }
00031
00032 std::string comment = "";
00033 std::string className ="";
00034 std::string parName="";
00035 std::string parType="S";
00036 std::string parString="";
00037 double parDouble = 0.;
00038 int parInteger = 0;
00039
00040
00041 while(!file.eof()) {
00042 file >> className;
00043 if (className == "//") std::getline(file,comment);
00044 else {
00045 file >> parName;
00046 file >> parType;
00047 if (parType == "S") {
00048 file >> parString;
00049 setOption(className, parName, parString);
00050 } else if (parType == "D") {
00051 file >> parDouble;
00052 setOption(className, parName,parDouble);
00053 } else if (parType == "I") {
00054 file >> parInteger;
00055 setOption(className, parName,parInteger);
00056 }
00057 }
00058 className = "";
00059 parName = "";
00060 parType = "";
00061 parString = "";
00062 parDouble = 0.;
00063 parInteger = 0;
00064 }
00065
00066
00067 file.close();
00068 }
00069
00070 void optionServer::setOption(std::string Oname, std::string par, std::string con)
00071
00072 {
00073 optionVI* op = getOption(Oname);
00074 if (!op) return;
00075 if (!op->search(par)) {
00076 messageManager::instance()->message(" not a string option named ",par);
00077 return;
00078 }
00079 op->setOption(par,con);
00080 messageManager::instance()->message(" option applied "+Oname+"->"+par+" = "+con);
00081 }
00082
00083 void optionServer::setOption(std::string Oname, std::string par, double con)
00084
00085 {
00086 optionVI* op = getOption(Oname);
00087 if (!op) return;
00088 if (!op->search(par)) {
00089 messageManager::instance()->message(" not a double option named ",par);
00090 return;
00091 }
00092 op->setOption(par,con);
00093 messageManager::instance()->message(" option applied "+Oname+" -> "+par+" = ",con);
00094 }
00095
00096 void optionServer::setOption(std::string Oname, std::string par, int con)
00097
00098 {
00099 optionVI* op = getOption(Oname);
00100 if (!op) return;
00101 if (!op->search(par)) {
00102 messageManager::instance()->message(" not an integer option named ",par);
00103 return;
00104 }
00105 op->setOption(par,con);
00106 messageManager::instance()->message(" option applied "+Oname+" -> "+par+" = ",con);
00107 }
00108
00109 optionVI* optionServer::getOption(std::string Oname) const
00110
00111 {
00112 if (m_server->search(Oname)) return m_server->get(Oname);
00113 else return 0;
00114 }
00115
00116 void optionServer::addToServer(std::string name, optionVI* op)
00117
00118 {
00119 if (!m_server->search(name)) m_server->add(name,op);
00120 else messageManager::instance()->
00121 message(" class already in option server "+name);
00122
00123 }
00124
00125 void optionServer::writeOutOptionsServer() const
00126
00127 {
00128 std::ostream& out = messageManager::instance()->out();
00129 out << " ** information about options ** " <<"\n";
00130 for (int i=0; i < m_server->size(); i++) m_server->get(i)->writeOutOptions();
00131 }
00132
00133 void optionServer::writeOut() const
00134
00135 {
00136 std::ostream& out = messageManager::instance()->out();
00137 if (m_server->size() == 0) return;
00138 out << " -- info of option server -- " << "\n";
00139 out << " option File name = " << m_optionFileName;
00140 out << " >> objecs in optionSever << " << "\n";
00141 out << m_server->nameList();
00142 if (!messageManager::instance()->acceptLevel("DEBUG")) return;
00143 for (int i = 0 ; i < m_server->size(); i++)
00144 m_server->get(i)->writeOutOptions();
00145 }