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

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

Corrections

File size: 6.4 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         this->currentContext->timestep.setValue(duration.toString());
53         std::cout << "timestep :" << duration << std::endl;
54         if (CXIOSManager::GetStatus() == CXIOSManager::LOC_CLIENT)
55         { // Mise à jour cÃŽté serveur
56            boost::shared_ptr<comm::CClient> client = comm::CClient::GetClient();
57            client->setTimestep(duration);
58         }
59      }
60
61      //----------------------------------------------------------------
62     
63      void CDataTreatment::write_data
64                           (const StdString & fieldId,
65                            const StdString & fileId,
66                            const std::deque<ARRAY(double, 1)> & data)
67      {
68         const date::CDate & currDate =
69                this->currentContext->getCalendar()->getCurrentDate();
70         const std::vector<boost::shared_ptr<CField> > & refField=
71               CObjectFactory::GetObject<CField>(fieldId)->getAllReference();
72         std::vector<boost::shared_ptr<CField> >::const_iterator
73               it = refField.begin(), end = refField.end();
74
75         for (; it != end; it++)
76         {
77            boost::shared_ptr<CField> field = *it;
78            boost::shared_ptr<CFile>  file  = field->getRelFile();
79            if (file->getId().compare(fileId) == 0)
80            {
81               if (field->updateDataServer(currDate, data))
82               {
83                  file->getDataOutput()->writeFieldData(field);
84               }
85               return;
86            }
87         }
88
89      }
90
91      //----------------------------------------------------------------
92
93      void CDataTreatment::doTreatment(void)
94      {         
95         // Résolution du calendrier
96         this->currentContext->solveCalendar();         
97         
98         // Résolution des héritages pour le context actuel.
99         //std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl;
100         this->solveAllInheritance();
101
102         //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir.
103         //std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl;
104         this->findEnabledFiles();
105
106         //Recherche des champs à sortir (enable à true + niveau de sortie correct)
107         // pour chaque fichier précédemment listé.
108         //std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl;
109         this->findAllEnabledFields();
110
111         // Résolution des références de grilles pour chacun des champs.
112         //std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl;
113         this->solveAllGridRef();
114
115         // Traitement des opérations.
116         this->solveAllOperation();
117
118         // Nettoyage de l'arborescence
119         CContext::CleanTree();
120
121         //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
122      }
123
124      void CDataTreatment::findAllEnabledFields(void)
125      {
126         for (unsigned int i = 0; i < this->enabledFiles.size(); i++)
127            (void)this->enabledFiles[i]->getEnabledFields();
128      }
129
130      void CDataTreatment::solveAllGridRef(void)
131      {
132         for (unsigned int i = 0; i < this->enabledFiles.size(); i++)
133            this->enabledFiles[i]->solveEFGridRef();
134      }
135
136      void CDataTreatment::solveAllOperation(void)
137      {
138         for (unsigned int i = 0; i < this->enabledFiles.size(); i++)
139            this->enabledFiles[i]->solveEFOperation();
140      }
141
142      void CDataTreatment::solveAllInheritance(void) const
143      {
144         // Résolution des héritages descendants (càd des héritages de groupes)
145         // pour chacun des contextes.
146         this->currentContext->solveDescInheritance();
147
148         // Résolution des héritages par référence au niveau des fichiers.
149          const std::vector<boost::shared_ptr<CFile> > & allFiles
150            = CObjectFactory::GetObjectVector<CFile>();
151
152         for (unsigned int i = 0; i < allFiles.size(); i++)
153            allFiles[i]->solveFieldRefInheritance();
154      }
155
156      void CDataTreatment::findEnabledFiles(void)
157      {
158         const std::vector<boost::shared_ptr<CFile> > & allFiles
159            = CObjectFactory::GetObjectVector<CFile>();
160
161         for (unsigned int i = 0; i < allFiles.size(); i++)
162            if (!allFiles[i]->enabled.isEmpty()) // Si l'attribut 'enabled' est défini.
163               if (allFiles[i]->enabled.getValue()) // Si l'attribut 'enabled' est fixé à vrai.
164                  enabledFiles.push_back(allFiles[i]);
165
166         if (enabledFiles.size() == 0)
167            DEBUG(<<"Aucun fichier ne va être sorti dans le contexte nommé \""
168                  << this->currentContext->getId() << "\" !");
169      }
170
171      ///---------------------------------------------------------------
172
173   } // namespace data
174} // namespace xmlioserver
Note: See TracBrowser for help on using the repository browser.