bool TeachRegManager::createDB(const QString &dbFilePath, const QString &aboutString) { this->dbFilePath = dbFilePath; if(db) { if(!saveDb()) return false; delete db; db = 0; } db = new DataBaseTeachReg(this); db->setDescription(aboutString); return true; }
void archiveOutputFiles(const std::string &fileName) { std::string stamp; std::vector<onelab::string> ps; onelab::server::instance()->get(ps,"0Metamodel/9Tag"); if(ps.size() && ps[0].getValue().size()) stamp.assign(timeStamp() + "_" + ps[0].getValue()); else stamp.assign(timeStamp()); // add time stamp in all output files in the db, and rename them on disk std::vector<onelab::string> strings; onelab::server::instance()->get(strings); for(unsigned int i = 0; i < strings.size(); i++){ if(strings[i].getName().find("9Output files") != std::string::npos){ std::vector<std::string> names = strings[i].getChoices(); names.push_back(strings[i].getValue()); for(unsigned int j = 0; j < names.size(); j++){ std::vector<std::string> split = SplitFileName(names[j]); int n = split[1].size(); // if name is not already stamped if(n < 18 || split[1][n-3] != '-' || split[1][n-6] != '-' || split[1][n-9] != '_'){ std::string old = names[j]; CreateSingleDir(split[0] + "archive/"); names[j] = split[0] + "archive/" + split[1] + stamp + split[2]; Msg::Info("Renaming '%s' into '%s'", old.c_str(), names[j].c_str()); rename(old.c_str(), names[j].c_str()); } } strings[i].setValue(names.back()); names.pop_back(); strings[i].setChoices(names); onelab::server::instance()->set(strings[i]); } } // save stamped db { std::vector<std::string> split = SplitFileName(fileName); CreateSingleDir(split[0] + "archive/"); saveDb(split[0] + "archive/" + split[1] + stamp + split[2]); } #if defined(HAVE_FLTK) FlGui::instance()->rebuildTree(true); #endif }
bool TeachRegManager::loadDB(const QString &filePath) { quint32 magic; quint16 streamVersion; if(db) { if(!saveDb()) return false; delete db; db = 0; } dbFilePath = filePath; QFile dbFile(dbFilePath); if(!dbFile.exists()) { qDebug() << "DataBase file " << dbFilePath << " no exist."; return false; } if(!dbFile.open(QIODevice::ReadOnly)) { qDebug() << "Can not open file " << dbFilePath << " for reading. Error: " << dbFile.errorString(); return false; } QDataStream in(&dbFile); in >> magic >> streamVersion; if(magic != magicNumber) { qDebug() << "ERROR: File is not recognized by this application"; return false; } else if(streamVersion > in.version()) { qDebug() << "ERROR: File is from a more recent version of the application"; return false; } db = new DataBaseTeachReg(this); in >> *db; return true; }
void solver_batch_cb(void *data) { int num = (intptr_t)data; std::string name, exe, host; if(num == -1){ // no solver to run return; } else if(num == -2){ // just run local Gmsh client } else if(num >= 0){ // run local Gmsh client + solver num name = opt_solver_name(num, GMSH_GET, ""); exe = opt_solver_executable(num, GMSH_GET, ""); host = opt_solver_remote_login(num, GMSH_GET, ""); if(exe.empty()){ Msg::Error("Solver executable name not provided"); return; } } else{ Msg::Error("Unknown client to run in batch mode (%d)", num); return; } onelab::number n("0Metamodel/Batch", CTX::instance()->batch); n.setVisible(false); onelab::server::instance()->set(n); // create client onelab::localNetworkClient *c = 0; onelab::string o; if(name.size()){ c = new gmshLocalNetworkClient(name, exe, host); c->setIndex(num); o = c->getName() + "/Action"; } // initialize onelabUtils::runGmshClient("initialize", CTX::instance()->solver.autoMesh); if(c){ o.setValue("initialize"); onelab::server::instance()->set(o); c->run(); } // load db if(CTX::instance()->solver.autoSaveDatabase){ std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db"; if(!StatFile(db)) loadDb(db); } // check onelabUtils::runGmshClient("check", CTX::instance()->solver.autoMesh); if(c){ onelabUtils::guessModelName(c); o.setValue("check"); onelab::server::instance()->set(o); c->run(); } // compute initializeLoops(); do{ onelabUtils::runGmshClient("compute", CTX::instance()->solver.autoMesh); if(c){ onelabUtils::guessModelName(c); o.setValue("compute"); onelab::server::instance()->set(o); c->run(); onelab::server::instance()->setChanged(false, c->getName()); } } while(incrementLoops()); if(CTX::instance()->solver.autoSaveDatabase || CTX::instance()->solver.autoArchiveOutputFiles){ std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db"; if(CTX::instance()->solver.autoArchiveOutputFiles) archiveOutputFiles(db); if(CTX::instance()->solver.autoSaveDatabase) saveDb(db); } }