source: XMLIO_V2/dev/common/src/xmlio/data_treatment.cpp @ 266

Last change on this file since 266 was 266, checked in by hozdoba, 13 years ago

Corrections après tests sur titane

File size: 6.3 KB
Line 
1#include "data_treatment.hpp"
2
3#include "attribute_template_impl.hpp"
4#include "object_template_impl.hpp"
5#include "group_template_impl.hpp"
6#include "object_factory_impl.hpp"
7
8
9namespace xmlioserver
10{
11   namespace data
12   {
13      /// ////////////////////// Définitions ////////////////////// ///
14      CDataTreatment::CDataTreatment (boost::shared_ptr<CContext> _ctxt)
15         : currentContext(_ctxt), enabledFiles()
16      { this->doTreatment(); }
17
18      CDataTreatment::~CDataTreatment(void)
19      { /* Ne rien faire de plus */ }
20
21      ///---------------------------------------------------------------
22
23      const boost::shared_ptr<CContext>
24         CDataTreatment::getCurrentContext(void) const
25      {
26         return (this->currentContext);
27      }
28
29      const std::vector<boost::shared_ptr<CFile> > &
30         CDataTreatment::getEnabledFiles (void) const
31      {
32         return (this->enabledFiles);
33      }
34      //----------------------------------------------------------------
35
36      void CDataTreatment::update_calendar(int step)
37      {
38         // Mise à jour cÃŽté client
39         this->currentContext->getCalendar()->update(step);
40//         std::cout <<  "current date : " << this->currentContext->getCalendar()->getCurrentDate() << std::endl;
41         if (CXIOSManager::GetStatus() == CXIOSManager::LOC_CLIENT)
42         { // Mise à jour cÃŽté serveur
43            boost::shared_ptr<comm::CClient> client = comm::CClient::GetClient();
44            client->updateCalendar(step);
45         }
46      }
47
48      void CDataTreatment::set_timestep(const date::CDuration & duration)
49      {
50         // Mise à jour cÃŽté client
51         this->currentContext->getCalendar()->setTimeStep(duration);
52         std::cout << "timestep :" << duration << std::endl;
53         if (CXIOSManager::GetStatus() == CXIOSManager::LOC_CLIENT)
54         { // Mise à jour cÃŽté serveur
55            boost::shared_ptr<comm::CClient> client = comm::CClient::GetClient();
56            client->setTimestep(duration);
57         }
58      }
59
60      //----------------------------------------------------------------
61     
62      void CDataTreatment::write_data
63                           (const StdString & fieldId,
64                            const StdString & fileId,
65                            const std::deque<ARRAY(double, 1)> & data)
66      {
67         const date::CDate & currDate =
68                this->currentContext->getCalendar()->getCurrentDate();
69         const std::vector<boost::shared_ptr<CField> > & refField=
70               CObjectFactory::GetObject<CField>(fieldId)->getAllReference();
71         std::vector<boost::shared_ptr<CField> >::const_iterator
72               it = refField.begin(), end = refField.end();
73
74         for (; it != end; it++)
75         {
76            boost::shared_ptr<CField> field = *it;
77            boost::shared_ptr<CFile>  file  = field->getRelFile();
78            if (file->getId().compare(fileId) == 0)
79            {
80               if (field->updateDataServer(currDate, data))
81                  file->getDataOutput()->writeFieldData(field);
82               return;
83            }
84         }
85
86      }
87
88      //----------------------------------------------------------------
89
90      void CDataTreatment::doTreatment(void)
91      {         
92         // Résolution du calendrier
93         this->currentContext->solveCalendar();         
94         
95         // Résolution des héritages pour le context actuel.
96         //std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl;
97         this->solveAllInheritance();
98
99         //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir.
100         //std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl;
101         this->findEnabledFiles();
102
103         //Recherche des champs à sortir (enable à true + niveau de sortie correct)
104         // pour chaque fichier précédemment listé.
105         //std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl;
106         this->findAllEnabledFields();
107
108         // Résolution des références de grilles pour chacun des champs.
109         //std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl;
110         this->solveAllGridRef();
111
112         // Traitement des opérations.
113         this->solveAllOperation();
114
115         // Nettoyage de l'arborescence
116         CContext::CleanTree();
117
118         //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
119      }
120
121      void CDataTreatment::findAllEnabledFields(void)
122      {
123         for (unsigned int i = 0; i < this->enabledFiles.size(); i++)
124            (void)this->enabledFiles[i]->getEnabledFields();
125      }
126
127      void CDataTreatment::solveAllGridRef(void)
128      {
129         for (unsigned int i = 0; i < this->enabledFiles.size(); i++)
130            this->enabledFiles[i]->solveEFGridRef();
131      }
132
133      void CDataTreatment::solveAllOperation(void)
134      {
135         for (unsigned int i = 0; i < this->enabledFiles.size(); i++)
136            this->enabledFiles[i]->solveEFOperation();
137      }
138
139      void CDataTreatment::solveAllInheritance(void) const
140      {
141         // Résolution des héritages descendants (càd des héritages de groupes)
142         // pour chacun des contextes.
143         this->currentContext->solveDescInheritance();
144
145         // Résolution des héritages par référence au niveau des fichiers.
146          const std::vector<boost::shared_ptr<CFile> > & allFiles
147            = CObjectFactory::GetObjectVector<CFile>();
148
149         for (unsigned int i = 0; i < allFiles.size(); i++)
150            allFiles[i]->solveFieldRefInheritance();
151      }
152
153      void CDataTreatment::findEnabledFiles(void)
154      {
155         const std::vector<boost::shared_ptr<CFile> > & allFiles
156            = CObjectFactory::GetObjectVector<CFile>();
157
158         for (unsigned int i = 0; i < allFiles.size(); i++)
159            if (!allFiles[i]->enabled.isEmpty()) // Si l'attribut 'enabled' est défini.
160               if (allFiles[i]->enabled.getValue()) // Si l'attribut 'enabled' est fixé à vrai.
161                  enabledFiles.push_back(allFiles[i]);
162
163         if (enabledFiles.size() == 0)
164            DEBUG(<<"Aucun fichier ne va être sorti dans le contexte nommé \""
165                  << this->currentContext->getId() << "\" !");
166      }
167
168      ///---------------------------------------------------------------
169
170   } // namespace data
171} // namespace xmlioserver
Note: See TracBrowser for help on using the repository browser.