source: XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp @ 125

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