From cf44d8adfaaa20c38e750635c16fba8e2e3794d0 Mon Sep 17 00:00:00 2001 From: Francois Henrotte <francois.henrotte@ulg.ac.be> Date: Mon, 19 Nov 2012 22:23:01 +0000 Subject: [PATCH] --- contrib/onelab/OnelabClients.cpp | 10 ++-- contrib/onelab/OnelabParser.cpp | 57 ++++++++++----------- contrib/onelab/loader.cpp | 87 +++++++++++++++++++------------- contrib/onelab/metamodel.cpp | 4 +- 4 files changed, 85 insertions(+), 73 deletions(-) diff --git a/contrib/onelab/OnelabClients.cpp b/contrib/onelab/OnelabClients.cpp index b3ed0352b2..41aa9bb550 100644 --- a/contrib/onelab/OnelabClients.cpp +++ b/contrib/onelab/OnelabClients.cpp @@ -354,7 +354,6 @@ const bool localSolverClient::getList(const std::string type, std::vector<std::s return false; } - void localSolverClient::FixExecPath(const std::string &in) { //only use with local clients @@ -368,7 +367,7 @@ void localSolverClient::FixExecPath(const std::string &in) #if not defined(WIN32) //if(split[0].find("elmerfem") != std::string::npos){ - if(!split[1].compare("ElmerSolver") && split[2].empty()){ + if(!split[1].compare("ElmerSolver") && split[2].empty() && split[0].size()){ std::string fileName = getWorkingDir() + getName() + ".sh"; std::string elmerHome=split[0].substr(0,split[0].size()-4); std::ofstream outfile(fileName.c_str()); @@ -486,9 +485,8 @@ void localSolverClient::addNumberChoice(std::string name, double val) ps.resize(1); ps[0].setName(name); } - ps[0].setAttribute("Highlight","Coral"); - ps[0].setReadOnly(false); - ps[0].setVisible(true); + //ps[0].setAttribute("Highlight","Coral"); + //ps[0].setReadOnly(false); ps[0].setValue(val); choices.push_back(val); ps[0].setChoices(choices); @@ -659,7 +657,7 @@ void MetaModel::construct() parse_onefile( genericNameFromArgs + onelabExtension); closeOnelabBlock(); saveCommandLines(); - onelab::server::instance()->setChanged(true, getName()); + //onelab::server::instance()->setChanged(true, getName()); } void MetaModel::analyze() { diff --git a/contrib/onelab/OnelabParser.cpp b/contrib/onelab/OnelabParser.cpp index 89647adf39..aedcfde264 100644 --- a/contrib/onelab/OnelabParser.cpp +++ b/contrib/onelab/OnelabParser.cpp @@ -536,9 +536,6 @@ void localSolverClient::parse_sentence(std::string line) { val=atof(resolveGetVal(arguments[0]).c_str()); numbers[0].setValue(val); } - // parameters defined with no value are ReadOnly - // if(arguments[0].empty()) numbers[0].setReadOnly(1); - if(arguments.size()>2) numbers[0].setLabel(unquote(arguments[2])); if(arguments.size()>3){ @@ -564,10 +561,6 @@ void localSolverClient::parse_sentence(std::string line) { std::string val=resolveGetVal(arguments[0]); strings[0].setValue(val); } - - // parameters defined with no value are ReadOnly - // if(arguments[0].empty()) strings[0].setReadOnly(1); - // choices list is reset std::vector<std::string> choices; strings[0].setChoices(choices); @@ -646,6 +639,32 @@ void localSolverClient::parse_sentence(std::string line) { set(numbers[0]); } } + else if(!action.compare("setValue")){ + // a set request together with a setReadOnly(1) forces + // the value on server to be changed. + name.assign(longName(name)); + get(numbers,name); + if(numbers.size()){ + if(arguments[0].size()) + numbers[0].setValue(atof(resolveGetVal(arguments[0]).c_str())); + numbers[0].setReadOnly(1); + set(numbers[0]); + } + else{ + get(strings,name); + if(strings.size()){ + if(arguments[0].empty()) // resets an empty string + strings[0].setValue(""); + else + strings[0].setValue(arguments[0]); + strings[0].setReadOnly(1); + set(strings[0]); + } + else{ + OLMsg::Error("The parameter <%s> does not exist",name.c_str()); + } + } + } else if(!action.compare("resetChoices")){ name.assign(longName(name)); get(numbers,name); @@ -718,30 +737,6 @@ void localSolverClient::parse_sentence(std::string line) { else OLMsg::Error("The number <%s> does not exist",name.c_str()); } - else if(!action.compare("setValue")){ // force change on server - name.assign(longName(name)); - get(numbers,name); - if(numbers.size()){ - if(arguments[0].size()) - numbers[0].setValue(atof(resolveGetVal(arguments[0]).c_str())); - numbers[0].setReadOnly(1); - set(numbers[0]); - } - else{ - get(strings,name); - if(strings.size()){ - if(arguments[0].empty()) // resets an empty string - strings[0].setValue(""); - else - strings[0].setValue(arguments[0]); - strings[0].setReadOnly(1); - set(strings[0]); - } - else{ - OLMsg::Error("The parameter <%s> does not exist",name.c_str()); - } - } - } else if(!action.compare("setVisible")){ if(arguments[0].empty()) OLMsg::Error("Missing argument SetVisible <%s>",name.c_str()); diff --git a/contrib/onelab/loader.cpp b/contrib/onelab/loader.cpp index 20112776f7..be29f428f2 100644 --- a/contrib/onelab/loader.cpp +++ b/contrib/onelab/loader.cpp @@ -7,40 +7,6 @@ onelab::server *onelab::server::_server = 0; std::string clientName; -std::string stateToChar(){ - std::vector<onelab::number> numbers; - std::ostringstream sstream; - onelab::server::instance()->get(numbers); - for(std::vector<onelab::number>::iterator it = numbers.begin(); - it != numbers.end(); it++) - sstream << (*it).getValue() << '\t'; - return sstream.str(); -} - -std::string showParamSpace(){ - std::vector<std::string> parameters=onelab::server::instance()->toChar(); - std::string db = "ONELAB parameter space: size=" - + itoa(onelab::server::instance()->getNumParameters()) + "\n"; - for(unsigned int i = 0; i < parameters.size(); i++) - db.append(parameters[i] + '\n'); - for(unsigned int i = 0; i < db.size(); i++) - if(db[i] == onelab::parameter::charSep()) db[i] = ' '; - return db.c_str(); -} - -std::string showClientStatus(){ - std::ostringstream sstream; - std::string name; - std::cout << "\nONELAB: Present state of the onelab clients" << std::endl; - for(onelab::server::citer it = onelab::server::instance()->firstClient(); - it != onelab::server::instance()->lastClient(); it++){ - name.assign(it->first); - sstream << "<" << onelab::server::instance()->getChanged(name) << "> " - << name << std::endl; - } - return sstream.str(); -} - void initializeLoop(const std::string &level) { bool changed = false; @@ -143,6 +109,59 @@ bool incrementLoops() return ret; } +std::string stateToChar(){ + std::vector<onelab::number> numbers; + std::ostringstream sstream; + onelab::server::instance()->get(numbers); + for(std::vector<onelab::number>::iterator it = numbers.begin(); + it != numbers.end(); it++) + sstream << (*it).getValue() << '\t'; + return sstream.str(); +} + +std::string showParamSpace(){ + std::vector<std::string> parameters=onelab::server::instance()->toChar(); + std::string db = "ONELAB parameter space: size=" + + itoa(onelab::server::instance()->getNumParameters()) + "\n"; + for(unsigned int i = 0; i < parameters.size(); i++) + db.append(parameters[i] + '\n'); + for(unsigned int i = 0; i < db.size(); i++) + if(db[i] == onelab::parameter::charSep()) db[i] = ' '; + return db.c_str(); +} + +std::string showClientStatus(){ + std::ostringstream sstream; + std::string name; + std::cout << "\nONELAB: Present state of the onelab clients" << std::endl; + for(onelab::server::citer it = onelab::server::instance()->firstClient(); + it != onelab::server::instance()->lastClient(); it++){ + name.assign(it->first); + sstream << "<" << onelab::server::instance()->getChanged(name) << "> " + << name << std::endl; + } + return sstream.str(); +} + +bool setParameter(const std::string &name, const std::string &value){ + std::vector<onelab::number> numbers; + std::vector<onelab::string> strings; + onelab::server::instance()->get(numbers,name); + if (numbers.size()) { + numbers[0].setValue(atof(value.c_str())); + return onelab::server::instance()->set(numbers[0]); + } + else{ + onelab::server::instance()->get(strings,name); + if (strings.size()) { + strings[0].setValue(value); + return onelab::server::instance()->set(strings[0]); + } + else + OLMsg::Error("The parameter <%s> does not exist", name.c_str()); + } +} + bool menu() { int choice, counter1=0, counter2=0; std::vector<onelab::number> numbers; diff --git a/contrib/onelab/metamodel.cpp b/contrib/onelab/metamodel.cpp index c2281ce8cd..7869dc7569 100644 --- a/contrib/onelab/metamodel.cpp +++ b/contrib/onelab/metamodel.cpp @@ -62,7 +62,7 @@ int metamodel(const std::string &action){ if((errors=OLMsg::GetErrorCount())){ OLMsg::Error("Leave metamodel - %d errors",errors); - OLMsg::Info("=============================================="); + OLMsg::Info("===== O N E L A B ====="); return 0; } @@ -70,6 +70,6 @@ int metamodel(const std::string &action){ OLMsg::SetOnelabNumber("Gmsh/NeedReloadGeom",0,false); OLMsg::Info("Leave metamodel - need reload=%d", reload); - OLMsg::Info("=============================================="); + OLMsg::Info("===== O N E L A B ====="); return reload; } -- GitLab