Salome HOME
Merge from V6_main (04/10/2012)
[modules/med.git] / src / MEDOP / cmp / MEDDataManager_i.hxx
1 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 // Authors : Guillaume Boulant (EDF) - 01/06/2011
24
25 #ifndef _MED_DATAMANAGER_I_HXX_
26 #define _MED_DATAMANAGER_I_HXX_
27
28 #include <SALOMEconfig.h>
29 #include CORBA_SERVER_HEADER(MEDDataManager)
30 #include "SALOME_GenericObj_i.hh"
31
32 #include "MEDCouplingUMesh.hxx"
33 #include "MEDCouplingFieldDouble.hxx"
34 using namespace ParaMEDMEM;
35
36 /*! This map is used for lifecycle management of fields used in this operator */
37 #include <map>
38 #include <string>
39 using namespace std;
40
41 typedef map<long,MEDOP::DatasourceHandler*> DatasourceHandlerMap;
42 typedef map<long,MEDOP::DatasourceHandler*>::iterator DatasourceHandlerMapIterator;
43
44 typedef map<long,MEDOP::MeshHandler*> MeshHandlerMap;
45 typedef map<long,MEDOP::MeshHandler*>::iterator MeshHandlerMapIterator;
46
47 typedef map<long,MEDOP::FieldseriesHandler*> FieldseriesHandlerMap;
48 typedef map<long,MEDOP::FieldseriesHandler*>::iterator FieldseriesHandlerMapIterator;
49
50 typedef map<long,MEDOP::FieldHandler*> FieldHandlerMap;
51 typedef map<long,MEDOP::FieldHandler*>::iterator FieldHandlerMapIterator;
52 typedef map<long,bool> FieldPersistencyMap;
53 typedef map<long,bool>::iterator FieldPersistencyMapIterator;
54
55 typedef map<long,MEDCouplingFieldDouble*> FieldDoubleMap;
56 typedef map<long,MEDCouplingFieldDouble*>::iterator FieldDoubleMapIterator;
57
58 typedef map<long,MEDCouplingUMesh*> MeshMap;
59 typedef map<long,MEDCouplingUMesh*>::iterator MeshMapIterator;
60
61 #include "MEDOP.hxx"
62 class MEDOP_EXPORT MEDDataManager_i: public POA_MEDOP::MEDDataManager,
63                                      public SALOME::GenericObj_i
64 {
65 public:
66
67   // 
68   // ===========================================================
69   // Functions specified in the IDL interface
70   // ===========================================================
71   //
72   // -----------------------------------------------------------
73   // Datasource management
74   MEDOP::DatasourceHandler * addDatasource(const char *filepath);
75
76   // -----------------------------------------------------------
77   // Mesh management
78   MEDOP::MeshHandlerList * getMeshList(CORBA::Long datasourceId);
79   MEDOP::MeshHandler * getMesh(CORBA::Long meshId); 
80
81   // -----------------------------------------------------------
82   // Field management
83   MEDOP::FieldseriesHandlerList * getFieldseriesListOnMesh(CORBA::Long meshId);
84   MEDOP::FieldHandlerList * getFieldListInFieldseries(CORBA::Long fieldseriesId);
85
86   MEDOP::FieldHandler *     getFieldHandler(CORBA::Long fieldHandlerId);
87   char *                    getFieldRepresentation(CORBA::Long fieldHandlerId);
88   MEDOP::FieldHandlerList * getFieldHandlerList();
89
90   void                      saveFields(const char * filepath,
91                                        const MEDOP::FieldIdList & fieldIdList);
92   void                      markAsPersistent(CORBA::Long fieldHandlerId, bool persistent);
93   void                      savePersistentFields(const char * filepath);
94
95
96   void updateFieldMetadata(CORBA::Long  fieldHandlerId,
97                            const char * fieldname,
98                            CORBA::Long  iteration,
99                            CORBA::Long  order,
100                            const char * source);
101
102   void changeUnderlyingMesh(CORBA::Long fieldHandlerId, CORBA::Long meshHandlerId);
103
104   void   setEventListenerIOR(const char * ior);
105   char * getEventListenerIOR();
106
107   void serverlog();
108
109   // 
110   // ===========================================================
111   // Other public functions (non available via CORBA)
112   // ===========================================================
113   //
114   static long LONG_UNDEFINED;
115   static MEDDataManager_i * getInstance();
116   MEDCouplingFieldDouble *  getFieldDouble(const MEDOP::FieldHandler * fieldHandler);
117   MEDOP::FieldHandler *     addField(MEDCouplingFieldDouble * fieldDouble,
118                                      long meshHandlerId=LONG_UNDEFINED);
119
120 private:
121   MEDDataManager_i();
122   ~MEDDataManager_i();
123
124   // The MEDDataManager is a singleton, whose instance can be obtained
125   // using the getInstance static method.
126   static MEDDataManager_i * _instance;
127
128   long _sourceLastId;
129   long _meshLastId;
130   long _fieldseriesLastId;
131   long _fieldLastId;
132   DatasourceHandlerMap _datasourceHandlerMap;
133   MeshHandlerMap _meshHandlerMap;
134   FieldseriesHandlerMap _fieldseriesHandlerMap;
135   FieldHandlerMap _fieldHandlerMap;
136   FieldDoubleMap _fieldDoubleMap;
137   MeshMap _meshMap;
138   FieldPersistencyMap _fieldPersistencyMap;
139
140   char * _medEventListenerIOR;
141
142   MEDOP::FieldHandler * newFieldHandler(const char * fieldname,
143                                         const char * meshname,
144                                         TypeOfField  type,
145                                         long         iteration,
146                                         long         order,
147                                         const char * source);
148
149   MEDOP::FieldHandler * updateFieldHandler(CORBA::Long fieldHandlerId,
150                                            const char * fieldname,
151                                            long         iteration,
152                                            long         order,
153                                            const char * source);
154
155   const char * file_to_source(const char * filepath);
156   const char * source_to_file(const char * source);
157   long getDatasourceId(const char *filepath);
158
159   MEDCouplingUMesh * getUMesh(long meshHandlerId);
160   long getUMeshId(const MEDCouplingMesh * mesh);
161 };
162
163 #endif // _MED_DATAMANAGER_I_HXX_