Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/CommandLineUI/CommandLineDialog.cpp

    rbcf653 r8df74d  
    2020#include "Helpers/MemDebug.hpp"
    2121
    22 #include <iostream>
    23 #include <vector>
    24 
    25 #include <Descriptors/AtomDescriptor.hpp>
    26 #include <Descriptors/AtomIdDescriptor.hpp>
    27 #include <Descriptors/MoleculeDescriptor.hpp>
    28 #include <Descriptors/MoleculeIdDescriptor.hpp>
    2922#include "CommandLineUI/CommandLineDialog.hpp"
    3023
    31 #include "Actions/Values.hpp"
    32 
    33 #include "element.hpp"
    34 #include "periodentafel.hpp"
    35 #include "CommandLineParser.hpp"
    36 #include "defs.hpp"
    37 #include "Helpers/Log.hpp"
    38 #include "LinearAlgebra/Matrix.hpp"
    39 #include "periodentafel.hpp"
    40 #include "Helpers/Verbose.hpp"
    41 #include "World.hpp"
    42 #include "Box.hpp"
    43 
    44 #include "atom.hpp"
    45 #include "element.hpp"
    46 #include "molecule.hpp"
    47 #include "LinearAlgebra/Vector.hpp"
    4824
    4925using namespace std;
     
    127103}
    128104
    129 /************************** Query Infrastructure ************************/
    130 
    131 CommandLineDialog::EmptyCommandLineQuery::EmptyCommandLineQuery(string title, string _description) :
    132     Dialog::EmptyQuery(title, _description)
    133 {}
    134 
    135 CommandLineDialog::EmptyCommandLineQuery::~EmptyCommandLineQuery() {}
    136 
    137 bool CommandLineDialog::EmptyCommandLineQuery::handle() {
    138   cout << "Message of " << getTitle() << ":\n" << getDescription() << "\n";
    139   return true;
     105void CommandLineDialog::queryFile(const char* title, string _description){
     106  registerQuery(new FileCommandLineQuery(title, _description));
    140107}
    141108
    142 CommandLineDialog::IntCommandLineQuery::IntCommandLineQuery(string title, string _description) :
    143     Dialog::IntQuery(title, _description)
    144 {}
    145 
    146 CommandLineDialog::IntCommandLineQuery::~IntCommandLineQuery() {}
    147 
    148 bool CommandLineDialog::IntCommandLineQuery::handle() {
    149   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    150     tmp = CommandLineParser::getInstance().vm[getTitle()].as<int>();
    151     return true;
    152   } else {
    153     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing integer for " << getTitle() << "." << endl);
    154     return false;
    155   }
    156 }
    157 
    158 CommandLineDialog::IntsCommandLineQuery::IntsCommandLineQuery(string title, string _description) :
    159     Dialog::IntsQuery(title, _description)
    160 {}
    161 
    162 CommandLineDialog::IntsCommandLineQuery::~IntsCommandLineQuery() {}
    163 
    164 bool CommandLineDialog::IntsCommandLineQuery::handle() {
    165   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    166     tmp = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<int> >();
    167     return true;
    168   } else {
    169     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing integers for " << getTitle() << "." << endl);
    170     return false;
    171   }
    172 }
    173 
    174 CommandLineDialog::BooleanCommandLineQuery::BooleanCommandLineQuery(string title, string _description) :
    175     Dialog::BooleanQuery(title, _description)
    176 {}
    177 
    178 CommandLineDialog::BooleanCommandLineQuery::~BooleanCommandLineQuery() {}
    179 
    180 bool CommandLineDialog::BooleanCommandLineQuery::handle() {
    181   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    182     tmp = CommandLineParser::getInstance().vm[getTitle()].as<bool>();
    183     return true;
    184   } else {
    185     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing boolean for " << getTitle() << "." << endl);
    186     return false;
    187   }
    188 }
    189 
    190 CommandLineDialog::StringCommandLineQuery::StringCommandLineQuery(string title, string _description) :
    191     Dialog::StringQuery(title, _description)
    192 {}
    193 
    194 CommandLineDialog::StringCommandLineQuery::~StringCommandLineQuery() {}
    195 
    196 bool CommandLineDialog::StringCommandLineQuery::handle() {
    197   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    198     tmp = CommandLineParser::getInstance().vm[getTitle()].as<string>();
    199     return true;
    200   } else {
    201     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing string for " << getTitle() << "." << endl);
    202     return false;
    203   }
    204 }
    205 
    206 CommandLineDialog::StringsCommandLineQuery::StringsCommandLineQuery(string title, string _description) :
    207     Dialog::StringsQuery(title, _description)
    208 {}
    209 
    210 CommandLineDialog::StringsCommandLineQuery::~StringsCommandLineQuery() {}
    211 
    212 bool CommandLineDialog::StringsCommandLineQuery::handle() {
    213   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    214     tmp = CommandLineParser::getInstance().vm[getTitle()].as< vector<string> >();
    215     return true;
    216   } else {
    217     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing strings for " << getTitle() << "." << endl);
    218     return false;
    219   }
    220 }
    221 
    222 CommandLineDialog::DoubleCommandLineQuery::DoubleCommandLineQuery(string title, string _description) :
    223     Dialog::DoubleQuery(title, _description)
    224 {}
    225 
    226 CommandLineDialog::DoubleCommandLineQuery::~DoubleCommandLineQuery() {}
    227 
    228 bool CommandLineDialog::DoubleCommandLineQuery::handle() {
    229   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    230     tmp = CommandLineParser::getInstance().vm[getTitle()].as<double>();
    231     return true;
    232   } else {
    233     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing double for " << getTitle() << "." << endl);
    234     return false;
    235   }
    236 }
    237 
    238 CommandLineDialog::DoublesCommandLineQuery::DoublesCommandLineQuery(string title, string _description) :
    239     Dialog::DoublesQuery(title, _description)
    240 {}
    241 
    242 CommandLineDialog::DoublesCommandLineQuery::~DoublesCommandLineQuery() {}
    243 
    244 bool CommandLineDialog::DoublesCommandLineQuery::handle() {
    245   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    246     tmp = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<double> >();
    247     return true;
    248   } else {
    249     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing doubles for " << getTitle() << "." << endl);
    250     return false;
    251   }
    252 }
    253 
    254 CommandLineDialog::AtomCommandLineQuery::AtomCommandLineQuery(string title, string _description) :
    255     Dialog::AtomQuery(title, _description)
    256 {}
    257 
    258 CommandLineDialog::AtomCommandLineQuery::~AtomCommandLineQuery() {}
    259 
    260 bool CommandLineDialog::AtomCommandLineQuery::handle() {
    261   int IdxOfAtom = -1;
    262   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    263     IdxOfAtom = CommandLineParser::getInstance().vm[getTitle()].as<int>();
    264     tmp = World::getInstance().getAtom(AtomById(IdxOfAtom));
    265     return true;
    266   } else {
    267     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing atom for " << getTitle() << "." << endl);
    268     return false;
    269   }
    270 }
    271 
    272 CommandLineDialog::AtomsCommandLineQuery::AtomsCommandLineQuery(string title, string _description) :
    273     Dialog::AtomsQuery(title, _description)
    274 {}
    275 
    276 CommandLineDialog::AtomsCommandLineQuery::~AtomsCommandLineQuery() {}
    277 
    278 bool CommandLineDialog::AtomsCommandLineQuery::handle() {
    279   std::vector<int> IdxOfAtom;
    280   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    281     IdxOfAtom = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<int> >();
    282     for (std::vector<int>::iterator iter = IdxOfAtom.begin(); iter != IdxOfAtom.end(); ++iter) {
    283       temp = World::getInstance().getAtom(AtomById(*iter));
    284       if (temp)
    285         tmp.push_back(temp);
    286     }
    287     return true;
    288   } else {
    289     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing atoms for " << getTitle() << "." << endl);
    290     return false;
    291   }
    292 }
    293 
    294 CommandLineDialog::MoleculeCommandLineQuery::MoleculeCommandLineQuery(string title, string _description) :
    295     Dialog::MoleculeQuery(title, _description)
    296 {}
    297 
    298 CommandLineDialog::MoleculeCommandLineQuery::~MoleculeCommandLineQuery() {}
    299 
    300 bool CommandLineDialog::MoleculeCommandLineQuery::handle() {
    301   int IdxOfMol = -1;
    302   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    303     IdxOfMol = CommandLineParser::getInstance().vm[getTitle()].as<int>();
    304     tmp = World::getInstance().getMolecule(MoleculeById(IdxOfMol));
    305     return true;
    306   } else {
    307     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing molecule for " << getTitle() << "." << endl);
    308     return false;
    309   }
    310 }
    311 
    312 CommandLineDialog::MoleculesCommandLineQuery::MoleculesCommandLineQuery(string title, string _description) :
    313     Dialog::MoleculesQuery(title, _description)
    314 {}
    315 
    316 CommandLineDialog::MoleculesCommandLineQuery::~MoleculesCommandLineQuery() {}
    317 
    318 bool CommandLineDialog::MoleculesCommandLineQuery::handle() {
    319   std::vector<int> IdxOfMol;
    320   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    321     IdxOfMol = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<int> >();
    322     for (std::vector<int>::iterator iter = IdxOfMol.begin(); iter != IdxOfMol.end(); ++iter) {
    323       temp = World::getInstance().getMolecule(MoleculeById(*iter));
    324       if (temp)
    325         tmp.push_back(temp);
    326     }
    327     return true;
    328   } else {
    329     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing molecules for " << getTitle() << "." << endl);
    330     return false;
    331   }
    332 }
    333 
    334 CommandLineDialog::VectorCommandLineQuery::VectorCommandLineQuery(string title, bool _check, string _description) :
    335     Dialog::VectorQuery(title,_check, _description)
    336 {}
    337 
    338 CommandLineDialog::VectorCommandLineQuery::~VectorCommandLineQuery()
    339 {}
    340 
    341 bool CommandLineDialog::VectorCommandLineQuery::handle() {
    342   VectorValue temp;
    343   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    344     temp = CommandLineParser::getInstance().vm[getTitle()].as< VectorValue >();
    345     tmp[0] = temp.x;
    346     tmp[1] = temp.y;
    347     tmp[2] = temp.z;
    348     if ((check) && (!World::getInstance().getDomain().isInside(tmp))) {
    349       DoeLog(1) && (eLog() << Verbose(1) << "Vector " << tmp << " would be outside of box domain." << endl);
    350       return false;
    351     }
    352     return true;
    353   } else {
    354     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing vector for " << getTitle() << "." << endl);
    355     return false;
    356   }
    357 }
    358 
    359 CommandLineDialog::VectorsCommandLineQuery::VectorsCommandLineQuery(string title, bool _check, string _description) :
    360     Dialog::VectorsQuery(title,_check, _description)
    361 {}
    362 
    363 CommandLineDialog::VectorsCommandLineQuery::~VectorsCommandLineQuery()
    364 {}
    365 
    366 bool CommandLineDialog::VectorsCommandLineQuery::handle() {
    367   std::vector<VectorValue> temporary;
    368   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    369     temporary = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<VectorValue> >();
    370     for(std::vector<VectorValue>::iterator iter = temporary.begin(); iter != temporary.end(); ++iter) {
    371       temp[0] = (*iter).x;
    372       temp[1] = (*iter).y;
    373       temp[2] = (*iter).z;
    374       if ((!check) || (World::getInstance().getDomain().isInside(temp)))
    375         tmp.push_back(temp);
    376       else
    377         DoeLog(1) && (eLog() << Verbose(1) << "Vector " << temp << " would be outside of box domain." << endl);
    378     }
    379     return true;
    380   } else {
    381     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing vectors for " << getTitle() << "." << endl);
    382     return false;
    383   }
    384 }
    385 
    386 CommandLineDialog::BoxCommandLineQuery::BoxCommandLineQuery(string title, string _description) :
    387     Dialog::BoxQuery(title, _description)
    388 {}
    389 
    390 CommandLineDialog::BoxCommandLineQuery::~BoxCommandLineQuery()
    391 {}
    392 
    393 bool CommandLineDialog::BoxCommandLineQuery::handle() {
    394   BoxValue temp;
    395   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    396     temp = CommandLineParser::getInstance().vm[getTitle()].as< BoxValue >();
    397     Matrix M;
    398     M.set(0,0, temp.xx);
    399     M.set(0,1, temp.yx);
    400     M.set(0,2, temp.zx);
    401     M.set(1,0, temp.yx);
    402     M.set(1,1, temp.yy);
    403     M.set(1,2, temp.zy);
    404     M.set(2,0, temp.zx);
    405     M.set(2,1, temp.zy);
    406     M.set(2,2, temp.zz);
    407     tmp.setM(M);
    408     return true;
    409   } else {
    410     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing symmetric box matrix for " << getTitle() << "." << endl);
    411     return false;
    412   }
    413 }
    414 
    415 CommandLineDialog::ElementCommandLineQuery::ElementCommandLineQuery(string title, string _description) :
    416     Dialog::ElementQuery(title, _description)
    417 {}
    418 
    419 CommandLineDialog::ElementCommandLineQuery::~ElementCommandLineQuery()
    420 {}
    421 
    422 bool CommandLineDialog::ElementCommandLineQuery::handle() {
    423   // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector?
    424   periodentafel *periode = World::getInstance().getPeriode();
    425   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    426     int Z = CommandLineParser::getInstance().vm[getTitle()].as< int >();
    427     tmp = periode->FindElement(Z);
    428     ASSERT(tmp != NULL, "Invalid element specified in ElementCommandLineQuery");
    429     return true;
    430   } else {
    431     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing element for " << getTitle() << "." << endl);
    432     return false;
    433   }
    434 }
    435 
    436 CommandLineDialog::ElementsCommandLineQuery::ElementsCommandLineQuery(string title, string _description) :
    437     Dialog::ElementsQuery(title, _description)
    438 {}
    439 
    440 CommandLineDialog::ElementsCommandLineQuery::~ElementsCommandLineQuery()
    441 {}
    442 
    443 bool CommandLineDialog::ElementsCommandLineQuery::handle() {
    444   // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector?
    445   periodentafel *periode = World::getInstance().getPeriode();
    446   if (CommandLineParser::getInstance().vm.count(getTitle())) {
    447     vector<int> AllElements = CommandLineParser::getInstance().vm[getTitle()].as< vector<int> >();
    448     for (vector<int>::iterator ZRunner = AllElements.begin(); ZRunner != AllElements.end(); ++ZRunner) {
    449       temp = periode->FindElement(*ZRunner);
    450       ASSERT(temp != NULL, "Invalid element specified in ElementCommandLineQuery");
    451       tmp.push_back(temp);
    452     }
    453     return true;
    454   } else {
    455     DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing elements for " << getTitle() << "." << endl);
    456     return false;
    457   }
    458 }
     109/************************** Query Infrastructure ************************/
     110/*       ---> shifted to folder Query                                   */
     111/************************************************************************/
Note: See TracChangeset for help on using the changeset viewer.