+GENDRIVER * DRIVERFACTORY::buildMedDriverFromFile(const string & fileName,
+ MED * const ptrMed,
+ MED_EN::med_mode_acces access)
+{
+ medFileVersion version;
+
+ try
+ {
+ version = getMedFileVersion(fileName);
+ }
+ catch (MEDEXCEPTION & ex)
+ {
+ version = DRIVERFACTORY::globalMedFileVersionForWriting;
+ }
+
+ MESSAGE("buildMedDriverFromFile version of the file " << version);
+
+ GENDRIVER * driver;
+
+ switch(access)
+ {
+ case MED_LECT : {
+ if (version == V21)
+ driver = new MED_MED_RDONLY_DRIVER21(fileName,ptrMed);
+ else if (version == V22)
+ driver = new MED_MED_RDONLY_DRIVER22(fileName,ptrMed);
+ return driver;
+ }
+ case MED_ECRI : {
+ if (version == V21)
+ driver = new MED_MED_WRONLY_DRIVER21(fileName,ptrMed);
+ else if (version == V22)
+ driver = new MED_MED_WRONLY_DRIVER22(fileName,ptrMed);
+ return driver;
+ }
+ case MED_REMP : {
+ if (version == V21)
+ driver = new MED_MED_RDWR_DRIVER21(fileName,ptrMed);
+ else if (version == V22)
+ driver = new MED_MED_RDWR_DRIVER22(fileName,ptrMed);
+ return driver;
+ }
+ default:
+ throw MED_EXCEPTION ("access type has not been properly specified to the method");
+ }
+}
+
+GENDRIVER * DRIVERFACTORY::buildMeshDriverFromFile(const string & fileName,
+ MESH * ptrMesh,
+ MED_EN::med_mode_acces access)
+{
+ medFileVersion version;
+
+ try
+ {
+ version = getMedFileVersion(fileName);
+ }
+ catch (MEDEXCEPTION & ex)
+ {
+ version = DRIVERFACTORY::globalMedFileVersionForWriting;
+ }
+
+ MESSAGE("buildMeshDriverFromFile version of the file " << version);
+
+ GENDRIVER * driver;
+
+ switch(access)
+ {
+ case MED_LECT : {
+ if (version == V21)
+ driver = new MED_MESH_RDONLY_DRIVER21(fileName,ptrMesh);
+ else if (version == V22)
+ driver = new MED_MESH_RDONLY_DRIVER22(fileName,ptrMesh);
+ return driver;
+ }
+ case MED_ECRI : {
+ if (version == V21)
+ driver = new MED_MESH_WRONLY_DRIVER21(fileName,ptrMesh);
+ else if (version == V22)
+ driver = new MED_MESH_WRONLY_DRIVER22(fileName,ptrMesh);
+ return driver;
+ }
+ case MED_REMP : {
+ if (version == V21)
+ driver = new MED_MESH_RDWR_DRIVER21(fileName,ptrMesh);
+ else if (version == V22)
+ driver = new MED_MESH_RDWR_DRIVER22(fileName,ptrMesh);
+ return driver;
+ }
+ default:
+ throw MED_EXCEPTION ("access type has not been properly specified to the method");
+ }
+}
+
+GENDRIVER * DRIVERFACTORY::buildConcreteMedDriverForMesh(const std::string & fileName,
+ MESH *ptrMesh,const string & driverName,
+ MED_EN::med_mode_acces access,
+ MED_EN::medFileVersion version)
+{
+ GENDRIVER * driver;
+
+ MESSAGE("buildConcreteMedDriverForMesh version of the file " << version);
+
+ switch(access)
+ {
+ case MED_LECT : {
+ if (version == V21)
+ driver = new MED_MESH_RDONLY_DRIVER21(fileName,ptrMesh);
+ else if (version == V22)
+ driver = new MED_MESH_RDONLY_DRIVER22(fileName,ptrMesh);
+ driver->setMeshName(driverName);
+ return driver;
+ }
+ case MED_ECRI : {
+ if (version == V21)
+ driver = new MED_MESH_WRONLY_DRIVER21(fileName,ptrMesh);
+ else if (version == V22)
+ driver = new MED_MESH_WRONLY_DRIVER22(fileName,ptrMesh);
+ driver->setMeshName(driverName);
+ return driver;
+ }
+ case MED_REMP : {
+ if (version == V21)
+ driver = new MED_MESH_RDWR_DRIVER21(fileName,ptrMesh);
+ else if (version == V22)
+ driver = new MED_MESH_RDWR_DRIVER22(fileName,ptrMesh);
+ driver->setMeshName(driverName);
+ return driver;
+ }
+ default:
+ throw MED_EXCEPTION ("access type has not been properly specified to the method");
+ }
+}