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

Last change on this file since 442 was 442, checked in by lemeur, 11 years ago

ajout traitement utilisateur

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