1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // Authors : Guillaume Boulant (EDF) - 01/06/2011
25 #ifndef _MED_DATAMANAGER_I_HXX_
26 #define _MED_DATAMANAGER_I_HXX_
28 #include <SALOMEconfig.h>
29 #include CORBA_SERVER_HEADER(MEDDataManager)
30 #include "SALOME_GenericObj_i.hh"
32 #include "MEDCouplingUMesh.hxx"
33 #include "MEDCouplingFieldDouble.hxx"
34 using namespace ParaMEDMEM;
36 /*! This map is used for lifecycle management of fields used in this operator */
41 typedef map<long,MEDOP::DatasourceHandler*> DatasourceHandlerMap;
42 typedef map<long,MEDOP::DatasourceHandler*>::iterator DatasourceHandlerMapIterator;
44 typedef map<long,MEDOP::MeshHandler*> MeshHandlerMap;
45 typedef map<long,MEDOP::MeshHandler*>::iterator MeshHandlerMapIterator;
47 typedef map<long,MEDOP::FieldseriesHandler*> FieldseriesHandlerMap;
48 typedef map<long,MEDOP::FieldseriesHandler*>::iterator FieldseriesHandlerMapIterator;
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;
55 typedef map<long,MEDCouplingFieldDouble*> FieldDoubleMap;
56 typedef map<long,MEDCouplingFieldDouble*>::iterator FieldDoubleMapIterator;
58 typedef map<long,MEDCouplingUMesh*> MeshMap;
59 typedef map<long,MEDCouplingUMesh*>::iterator MeshMapIterator;
62 class MEDOP_EXPORT MEDDataManager_i: public POA_MEDOP::MEDDataManager,
63 public SALOME::GenericObj_i
68 // ===========================================================
69 // Functions specified in the IDL interface
70 // ===========================================================
72 // -----------------------------------------------------------
73 // Datasource management
74 MEDOP::DatasourceHandler * addDatasource(const char *filepath);
76 // -----------------------------------------------------------
78 MEDOP::MeshHandlerList * getMeshList(CORBA::Long datasourceId);
79 MEDOP::MeshHandler * getMesh(CORBA::Long meshId);
81 // -----------------------------------------------------------
83 MEDOP::FieldseriesHandlerList * getFieldseriesListOnMesh(CORBA::Long meshId);
84 MEDOP::FieldHandlerList * getFieldListInFieldseries(CORBA::Long fieldseriesId);
86 MEDOP::FieldHandler * getFieldHandler(CORBA::Long fieldHandlerId);
87 char * getFieldRepresentation(CORBA::Long fieldHandlerId);
88 MEDOP::FieldHandlerList * getFieldHandlerList();
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);
96 void updateFieldMetadata(CORBA::Long fieldHandlerId,
97 const char * fieldname,
98 CORBA::Long iteration,
100 const char * source);
102 void changeUnderlyingMesh(CORBA::Long fieldHandlerId, CORBA::Long meshHandlerId);
104 void setEventListenerIOR(const char * ior);
105 char * getEventListenerIOR();
110 // ===========================================================
111 // Other public functions (non available via CORBA)
112 // ===========================================================
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);
124 // The MEDDataManager is a singleton, whose instance can be obtained
125 // using the getInstance static method.
126 static MEDDataManager_i * _instance;
130 long _fieldseriesLastId;
132 DatasourceHandlerMap _datasourceHandlerMap;
133 MeshHandlerMap _meshHandlerMap;
134 FieldseriesHandlerMap _fieldseriesHandlerMap;
135 FieldHandlerMap _fieldHandlerMap;
136 FieldDoubleMap _fieldDoubleMap;
138 FieldPersistencyMap _fieldPersistencyMap;
140 char * _medEventListenerIOR;
142 MEDOP::FieldHandler * newFieldHandler(const char * fieldname,
143 const char * meshname,
147 const char * source);
149 MEDOP::FieldHandler * updateFieldHandler(CORBA::Long fieldHandlerId,
150 const char * fieldname,
153 const char * source);
155 const char * file_to_source(const char * filepath);
156 const char * source_to_file(const char * source);
157 long getDatasourceId(const char *filepath);
159 MEDCouplingUMesh * getUMesh(long meshHandlerId);
160 long getUMeshId(const MEDCouplingMesh * mesh);
163 #endif // _MED_DATAMANAGER_I_HXX_