source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/computingBlock.cc @ 495

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

refection generale des secteurs et applications de softwares (suite)

File size: 4.2 KB
Line 
1#include "computingBlock.h"
2#include "mixedTools.h"
3 #include "softwareUnknown.h"
4#include "expandedMachine.h"
5
6
7computingBlock::computingBlock(unsigned premier, unsigned nombre, abstractSoftware* s,expandedMachine* mch)  {
8  // dataManager_ = dtmg;
9  machine_ = mch;
10  if ( premier >= machine_->numberOfElements() ) {
11    rankOfFirstElement_ = 0;
12    numberOfelements_ = 0;
13  } else {
14    rankOfFirstElement_ = premier;
15    if ( nombre < machine_->numberOfElements() - rankOfFirstElement_ +1 ) {
16      numberOfelements_ = nombre;
17    } else numberOfelements_ = machine_->numberOfElements() - rankOfFirstElement_ +1;
18  }
19  if (s == NULL) {
20    software_ = new softwareUnknown();
21  } else {
22    software_ = s;
23  }
24}
25
26
27void computingBlock::FileAMLOutput(UAPNode* root)
28{
29  UAPNode* node = root->addChild("computingBlock");
30  node->addChild("software")->addAttribute("name",software_->getName());
31  unsigned noElem = rankOfFirstElement_;
32  UAPNode* blocNode = node->addChild("blocExtension");
33  blocNode->addAttribute("rankOfFirstElement",mixedTools::intToString(int(rankOfFirstElement_)));
34  blocNode->addAttribute("numberOfelements",mixedTools::intToString(int(numberOfelements_)));
35}
36
37
38void computingBlock::FileAMLInput( UAPNode* entree) {
39      string soft;
40      AMLtools::readAMLParameterAttribut(entree, "software", "name", soft);
41      software_ = machine_->getSoftwarePointer(soft, this);
42      int premier, nombre;
43      AMLtools::readAMLParameterAttribut(entree, "blocExtension", "rankOfFirstElement", premier);
44      AMLtools::readAMLParameterAttribut(entree, "blocExtension", "numberOfelements", nombre);
45      rankOfFirstElement_  = premier;
46      numberOfelements_ = nombre;
47      if ( !checkCompatibilityWithMachine() ) {
48        rankOfFirstElement_  = 0;
49        numberOfelements_ = 0;
50        cout << " computingBlock::FileAMLInput ERREUR lecture " << endl;
51      }
52}
53bool computingBlock::checkCompatibilityWithMachine() {
54  if ( !machine_ ) return false;
55  if ( rankOfFirstElement_ > machine_->numberOfElements() ) return false;
56  if ( numberOfelements_ > machine_->numberOfElements() - rankOfFirstElement_ + 1 ) return false;
57  return true;
58}
59bool computingBlock::checkCoherence(string& diagnosticErrors, string& diagnosticWarnings) {
60
61  cout << " computingBlock::checkCoherence() " << endl;
62  bool caMarche = true;
63
64  const nomDeLogiciel* prog = software_->getNomDeLogiciel();
65
66  for(unsigned k =0 ; k < numberOfelements_; k++)
67    {
68      abstractElement* elem = machine_->getElementPointer(rankOfFirstElement_ + k);
69      trivaluedBool tb = prog->doAcceptElement(elem->getNomdElement().getElementType());
70      cout << " GWt_softwarePanel::areDataCoherent() el " << elem->getLabel() << " tb= " << tb << endl;
71      if (tb  != TBoolOk ) {
72        if (tb == TBoolIgnore) {
73          if(prog->getString() != "unknownSoftware") diagnosticWarnings += elem->getLabel() + " will be ignored by  "+ prog->getString() + "<br /> ";
74          cout << " element " <<  elem->getLabel() << " ignore " << endl;
75        } else {
76          diagnosticErrors += elem->getNomdElement().getExpandedName() + " is not allowed with " + prog->getString() + "<br /> ";
77          cout << " element " <<  elem->getLabel() << " REFUSE " << endl;
78          caMarche = false;
79        }
80      }
81    } //k
82  return caMarche;
83}
84
85
86//   vector< abstractElement* > computingBlock::getElements()  {
87//     vector< abstractElement* > elems;
88//     for (unsigned k=0; k < numberOfelements_; k++ ) {
89//       elems.push_back( machine_->getElementPointer( rankOfFirstElement_ + k));
90//     }
91//     return elems;
92//   }
93
94abstractElement* computingBlock::getFirstElement() {
95  return machine_->getElementPointer( rankOfFirstElement_);
96}
97
98
99
100abstractElement*  computingBlock::getLastElement() {
101  cout << " computingBlock::getLastElement() premier " << machine_->getElementPointer( rankOfFirstElement_)->getLabel() << endl;
102  cout << "  nb elements : " << numberOfelements_ << endl;
103  cout << " computingBlock::getLastElement() dernier " << machine_->getElementPointer( rankOfFirstElement_ + numberOfelements_ - 1)->getLabel() << endl;
104  return machine_->getElementPointer( rankOfFirstElement_ + numberOfelements_ - 1);
105}
106
107
108 abstractElement* computingBlock::getElement(unsigned ind) { return machine_->getElementPointer( rankOfFirstElement_ + ind); }
109
110
111
Note: See TracBrowser for help on using the repository browser.