source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/softwareUsersprogram.cc @ 485

Last change on this file since 485 was 485, checked in by lemeur, 10 years ago

liste des logiciels compatibles dans les tooltip des elements

File size: 3.8 KB
Line 
1#include "softwareUsersprogram.h"
2#include "abstractElement.h"
3#include "dataManager.h"
4
5#include <algorithm>
6
7softwareUsersprogram::softwareUsersprogram() : abstractSoftware()
8{
9  nameOfSoftware_ = new nomDeLogiciel("usersprogram");
10}
11
12softwareUsersprogram::softwareUsersprogram(string inputFileName, sectionToExecute* sect, dataManager* data) : abstractSoftware(inputFileName, sect,data)
13{
14  cout << " softwareUsersprogram::softwareUsersprogram ENREGISTREMENT " << endl;
15  nameOfSoftware_ = new nomDeLogiciel("usersprogram");
16  //  registerElement(nomdElements::snapshot,TBoolOk);
17}
18
19bool softwareUsersprogram::createInputFile(particleBeam* beamBefore, string workingDir)
20{ 
21
22  abstractElement* element = getSectionToExecute()->getElements().front();
23
24  // Dans le cas où l'element n'est pas snapshot
25  if ( element->getNomdElement().getElementType() != nomdElements::snapshot ) {
26    cout << " ERROR softwareUsersprogram::execute : element non snapshot " << endl;
27    return false;
28  }
29
30  vector< pair<string, vector<string> > > donnees = element->parametersToSoftware();
31  nomProgram_ = "";
32  outputFileName_ = "";
33  for (int k=0; k < donnees.size(); k++) {
34    if ( donnees.at(k).first == "nameOfFiles" ) {
35      if ( donnees.at(k).second.size() < 3 ) {
36        cout << " ERROR softwareUsersprogram::createInputFile " << endl;
37        return false;
38      }
39      nomProgram_ = donnees.at(k).second.at(0).c_str();
40      inputFileName_ = donnees.at(k).second.at(1).c_str();
41      outputFileName_ = donnees.at(k).second.at(2).c_str();
42      break;
43    }
44  }
45
46  string aml_file = workingDir  + inputFileName_ + ".aml";
47    beamBefore->writeToAMLFile(aml_file);
48
49  return true;
50}
51
52bool softwareUsersprogram::execute(string workingDir)
53{
54  bool ExecuteStatus = true;
55
56
57  ostringstream sortie;
58  sortie << " EXECUTION DE " << nomProgram_ << endl;
59 
60  string usersprogramJob = workingDir + nomProgram_;
61  usersprogramJob += " " + workingDir + inputFileName_;
62  usersprogramJob += " " + workingDir + outputFileName_;
63  cout << " job utilisateur= " << usersprogramJob << endl;
64 
65  string resultOfRun;
66  bool success = launchJob(usersprogramJob,resultOfRun);
67  sortie << resultOfRun << endl;
68  if ( !success ) {
69    sortie << " launching of transport failed " << endl;
70    ExecuteStatus = false;
71  } else {
72    string nameOut = workingDir + outputFileName_;
73    ofstream outfile;
74    outfile.open(nameOut.c_str(), ios::out);
75    if (!outfile) {
76      sortie << " error first opening user's program output stream " << nameOut << endl;
77      ExecuteStatus = false;
78    } else {
79      outfile.close();
80    }
81  }
82
83  dataManager_->consoleMessage(sortie.str());
84  return ExecuteStatus;
85}
86
87bool softwareUsersprogram::buildBeamAfterElements(string workingDir) 
88{
89
90  bool result = true;
91
92
93
94
95
96
97
98 
99  //  for (unsigned k = numeroDeb_; k <= numeroFin_; k++)
100 
101  abstractElement* ptr = getSectionToExecute()->getElements().front();
102      if ( ptr == NULL ) {
103        dataManager_->consoleMessage("ERROR  softwareUsersprogram::buildBeamAfterElements : null pointer on element " );
104        cout << " ERROR softwareUsersprogram::buildBeamAfterElements : null pointer on element " << endl;
105        return false;         
106      }
107
108
109      if ( nameOfSoftware_->doAcceptElement(ptr->getNomdElement().getElementType())  != TBoolOk ) {
110        dataManager_->consoleMessage("ERROR  softwareUsersprogram::buildBeamAfterElements : element rejected by user's program " );
111        cout << "ERROR  softwareUsersprogram::buildBeamAfterElements : element rejected by user's program " << endl;
112
113      } else {
114        // si le numero est reconnu
115        string elemLabel = ptr->getLabel();
116        // on initialise une nouvelle sortie diagnostic
117          particleBeam* newDiag = dataManager_->updateCurrentDiagnostic(true);
118        // et on la complete
119          string aml_file = workingDir  + outputFileName_ + ".aml";
120
121          newDiag->readFromAMLFile(aml_file);
122       
123      }
124  return result;
125}
Note: See TracBrowser for help on using the repository browser.