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) {
00075 messageManager::instance()->message(" not a option named "+Oname);
00076 return;
00077 }
00078 if (!op->search(par)) {
00079 messageManager::instance()->message(" not a string option named "+par);
00080 return;
00081 }
00082 op->setOption(par,con);
00083 messageManager::instance()->message(" option applied "+Oname+"->"+par+" = "+con);
00084 }
00085
00086 void optionServer::setOption(std::string Oname, std::string par, double con)
00087
00088 {
00089 optionVI* op = getOption(Oname);
00090 if (!op) {
00091 messageManager::instance()->message(" not a option named "+Oname);
00092 return;
00093 }
00094 if (!op->search(par)) {
00095 messageManager::instance()->message(" not a double option named "+par);
00096 return;
00097 }
00098 op->setOption(par,con);
00099 messageManager::instance()->message(" option applied "+Oname+" -> "+par+" = ",con);
00100 }
00101
00102 void optionServer::setOption(std::string Oname, std::string par, int con)
00103
00104 {
00105 optionVI* op = getOption(Oname);
00106 if (!op) {
00107 messageManager::instance()->message(" not a option named "+Oname);
00108 return;
00109 }
00110 if (!op->search(par)) {
00111 messageManager::instance()->message(" not an integer option named ",par);
00112 return;
00113 }
00114 op->setOption(par,con);
00115 messageManager::instance()->message(" option applied "+Oname+" -> "+par+" = ",con);
00116 }
00117
00118 optionVI* optionServer::getOption(std::string Oname) const
00119
00120 {
00121 if (m_server->search(Oname)) return m_server->get(Oname);
00122 else return 0;
00123 }
00124
00125 void optionServer::addToServer(std::string name, optionVI* op)
00126
00127 {
00128 if (!m_server->search(name)) m_server->add(name,op);
00129 else messageManager::instance()->
00130 message(" class already in option server "+name);
00131
00132 }
00133
00134 void optionServer::writeOutOptionsServer() const
00135
00136 {
00137 std::ostream& out = messageManager::instance()->out();
00138 out << " ** information about options ** " <<"\n";
00139 for (int i=0; i < m_server->size(); i++) m_server->get(i)->writeOutOptions();
00140 }
00141
00142 void optionServer::writeOut() const
00143
00144 {
00145 std::ostream& out = messageManager::instance()->out();
00146 if (m_server->size() == 0) return;
00147 out << " -- info of option server -- " << "\n";
00148 out << " option File name = " << m_optionFileName;
00149 out << " >> objecs in optionSever << " << "\n";
00150 out << m_server->nameList();
00151 if (!messageManager::instance()->acceptLevel("DEBUG")) return;
00152 for (int i = 0 ; i < m_server->size(); i++)
00153 m_server->get(i)->writeOutOptions();
00154 }