source: XMLIO_V2/dev/dev_rv/src/XMLIO/data_treatment.hpp @ 131

Last change on this file since 131 was 131, checked in by hozdoba, 14 years ago

Début Interface c<->fortran

File size: 6.0 KB
Line 
1#ifndef __DATA_TREATMENT__
2#define __DATA_TREATMENT__
3
4namespace XMLIOSERVER
5{
6   class DataTreatment
7   {
8      public :
9
10         DataTreatment(Context* const _ctxt       =  Context::GetCurrentContext(),
11                      const AbstractCalendar& cal = *Context::GetCurrentContext()->getCalendar())
12            : enabledFiles(), currentContext(_ctxt)
13         { this->doTreatment(cal); }
14
15         const Context*             getCurrentContext(void) const { return (currentContext); }
16         const std::vector<CFile*>& getEnabledFiles  (void) const { return (enabledFiles); }
17
18         void getEnabledFilesId(std::vector<std::string>& _vect) const
19         {
20            for (unsigned int i = 0; i < enabledFiles.size(); i++)
21               _vect.push_back(enabledFiles[i]->getId());
22         }
23
24         void printEnabledFilesId(std::ostream& out = std::clog) const
25         {
26            out << "Liste des fichiers à sortir dans le contexte analysé nommé \""
27                << currentContext->getId() << "\"" << std::endl;
28
29            std::vector<std::string> __vect;
30            this->getEnabledFilesId(__vect);
31
32            for (unsigned int i = 0; i < __vect.size(); i++)
33               out << __vect[i] << "|";
34            out << "fin" << std::endl;
35         }
36
37         template <class T>
38            bool writeData(const std::string& id, const T& arr)
39         {
40            const CField* const field_entry = CField::GetObject(id);
41            const vector<CField*>& vectRef = field_entry->getVectRefObject();
42            const Date& curDate = currentContext->getCalendar()->getCurrentDate();
43
44            std::vector<CField*>::const_iterator it;
45
46            for (it = vectRef.begin(); it != vectRef.end(); it++ )
47            {
48               if ((*it)->isStorable(curDate))
49               { // Stockage des données dans l'instance CField si nécessaire.
50                  Array<double, 1> data_uni;
51                  (*it)->getGrid()->storeField(arr, data_uni);
52                  (*it)->storeData(data_uni, currentContext->getCalendar()->getCurrentDate());
53               }
54
55               if (true)
56               { // Ecriture des données si nécessaire.
57
58               }
59            }
60
61            return (false);
62         }
63
64         template <class T>
65            void createDataOutput(void)
66         {
67            for (unsigned int i = 0; i < enabledFiles.size(); i++)
68            {
69               // Initialisation des instances de sortie de données.
70               enabledFiles[i]->initializeDataOutput(new T(enabledFiles[i]));
71               // Ouverture des fichiers et création des entêtes.
72               enabledFiles[i]->getDataOutput()->createFileAndHeader();
73            }
74         }
75
76         ~DataTreatment(void)
77         { /* Ne rien faire de plus */ }
78
79      protected :
80
81         void doTreatment(const AbstractCalendar& cal)
82         {
83            // Résolution des héritages pour le context actuel (Context::SolveInheritance() résoud les héritages pour tous les contextes).
84            //std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl;
85            this->solveAllInheritance();
86
87            //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir.
88            //std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl;
89            this->findEnabledFiles();
90
91            //Recherche des champs à sortir (enable à true + niveau de sortie correct) pour chaque fichier précédemment listé.
92            //std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl;
93            this->findAllEnabledFields(cal.getInitDate());
94
95            // Résolution des références de grilles pour chacun des champs.
96            //std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl;
97            this->solveAllGridRef();
98
99            // Traitement des opérations.
100            this->solveAllOperation();
101
102            //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
103         }
104
105         std::vector<CFile*> enabledFiles; // Liste des fichiers à créer dans un context donné.
106
107      private :
108
109         void findAllEnabledFields(const Date& iniDate)// <- ajouter attribut par défault ici.
110         {
111            for (unsigned int i = 0; i < enabledFiles.size(); i++)
112               enabledFiles[i]->findEnabledFields(iniDate);
113         }
114
115         void solveAllGridRef(void)
116         {
117            for (unsigned int i = 0; i < enabledFiles.size(); i++)
118               enabledFiles[i]->solveEFGridRef();
119         }
120
121         void solveAllOperation(void)
122         {
123            for (unsigned int i = 0; i < enabledFiles.size(); i++)
124               enabledFiles[i]->solveEFOperation();
125         }
126
127         void solveAllInheritance(void) const
128         {
129            // Résolution des héritages descendants (càd des héritages de groupes) pour chacun des contextes.
130            currentContext->solveDescInheritance();
131
132            // Résolution des héritages par référence au niveau des fichiers.
133            const std::vector<CFile*>& allFiles = CFile::GetCurrentListObject().getVector();
134            for (unsigned int i = 0; i < allFiles.size(); i++) allFiles[i]->solveFieldRefInheritance();
135         }
136
137         void findEnabledFiles(void)
138         {
139            const std::vector<CFile*>& allFiles = CFile::GetCurrentListObject().getVector();
140
141            for (unsigned int i = 0; i < allFiles.size(); i++)
142               if (allFiles[i]->enabled.hasValue()) // Si l'attribut 'enabled' est défini.
143                  if ((bool)allFiles[i]->enabled) // Si l'attribut 'enabled' est fixé à vrai.
144                     enabledFiles.push_back ( allFiles[i] );
145
146            if (enabledFiles.size() == 0)
147               WARNING("Aucun fichier ne va être sorti dans le contexte nommé \"" + currentContext->getId() + "\" !");
148         }
149
150         Context* const currentContext;
151
152   }; //class DataTreatment
153
154}// namespace XMLIOSERVER
155
156#endif //__DATA_TREATMENT__
Note: See TracBrowser for help on using the repository browser.