]> SALOME platform Git repositories - modules/homard.git/commitdiff
Salome HOME
Destruction des schémas
authornicolas <nicolas>
Tue, 24 Sep 2013 15:21:09 +0000 (15:21 +0000)
committernicolas <nicolas>
Tue, 24 Sep 2013 15:21:09 +0000 (15:21 +0000)
12 files changed:
doc/en/tui_create_yacs.rst
doc/fr/tui_create_yacs.rst
idl/HOMARD_YACS.idl
src/HOMARD/HOMARD_YACS.cxx
src/HOMARD/HOMARD_YACS.hxx
src/HOMARD/YACSDriver.cxx
src/HOMARD/YACSDriver.hxx
src/HOMARDGUI/HOMARDGUI.cxx
src/HOMARD_I/HOMARD_Gen_i.cxx
src/HOMARD_I/HOMARD_Gen_i.hxx
src/HOMARD_I/HOMARD_YACS_i.cxx
src/HOMARD_I/HOMARD_YACS_i.hxx

index dd58174594e1e399ee7c76482c06628e310e87b9..5790fb86212dd529d8d5e29238b5790cfe5f82ec 100644 (file)
@@ -62,6 +62,10 @@ General methods
 | **Write()**                                                   |
 |     Writes the schema into the file ``schema.xml``, in the    |
 |     directory of the case                                     |
+|     Writes the schema into the file of the schema             |
+|     By default, it is the file ``schema.xml``, in the         |
+|     directory of the case. If ``WriteOnFile`` was used before |
+|     the writings are into this new file.                      |
 |                                                               |
 |     Returns an integer:                                       |
 |         * 0: the writing is done                              |
@@ -162,6 +166,18 @@ Informations about the schema
 |     Returns the name of the MED file of the very first mesh   |
 |     for the computation                                       |
 +---------------------------------------------------------------+
+| .. module:: SetXMLFile                                        |
+|                                                               |
+| **SetXMLFile(xml_file)**                                      |
+|     Defines the xml file                                      |
+|                                                               |
+|     - ``mesh_file`` : the name of the xml file                |
++---------------------------------------------------------------+
+| .. module:: GetXMLFile                                        |
+|                                                               |
+| **GetXMLFile()**                                              |
+|     Returns the name of the xml file                          |
++---------------------------------------------------------------+
 
 
 Example
index 81b2c425ef8468826af7b9340033913e677c6798..ec627f7777c0aac2eb3d1e9892df379dd5be3b20 100644 (file)
@@ -60,8 +60,10 @@ G
 | .. module:: Write                                             |
 |                                                               |
 | **Write()**                                                   |
-|     Ecrit le schéma dans le fichier ``schema.xml``, dans le   |
-|     répertoire du cas                                         |
+|     Ecrit le schéma dans le fichier lié au schéma             |
+|     Par défaut, c'est le fichier ``schema.xml``, dans le      |
+|     répertoire du cas. Si ``WriteOnFile`` a été utilisé       |
+|     auparavant, l'écriture a lieu dans le nouveau fichier.    |
 |                                                               |
 |     Retourne un entier :                                      |
 |         * 0 : écriture réussie                                |
@@ -160,6 +162,18 @@ Informations sur le sch
 |     Retourne le nom du fichier MED du tout premier maillage   |
 |     de calcul                                                 |
 +---------------------------------------------------------------+
+| .. module:: SetXMLFile                                        |
+|                                                               |
+| **SetXMLFile(xml_file)**                                      |
+|     Définit le fichier xml pour l'écriture                    |
+|                                                               |
+|     - ``xml_file`` : le nom du fichier xml                    |
++---------------------------------------------------------------+
+| .. module:: GetXMLFile                                        |
+|                                                               |
+| **GetXMLFile()**                                              |
+|     Retourne le nom du fichier xml                            |
++---------------------------------------------------------------+
 
 
 Exemple
index 60574ac477cce6475632639b7919bea66b9db486..fa8f528601da9f49855d45fb368109191dff7640 100644 (file)
@@ -58,6 +58,9 @@ module HOMARD
     void     SetScriptFile(in string ScriptFile)           raises (SALOME::SALOME_Exception);
     string   GetScriptFile()                               raises (SALOME::SALOME_Exception);
 
+    void     SetXMLFile(in string XMLFile)                 raises (SALOME::SALOME_Exception);
+    string   GetXMLFile()                                  raises (SALOME::SALOME_Exception);
+
     long     Write()                                       raises (SALOME::SALOME_Exception);
     long     WriteOnFile( in string YACSFile )             raises (SALOME::SALOME_Exception);
 
index b8eb074dbbf219da5166f55e7d1c6523ff61578d..67f04c2a312a2ec0621803ec7d715bbf978d9f6e 100644 (file)
@@ -135,6 +135,16 @@ std::string HOMARD_YACS::GetScriptFile() const
   return _ScriptFile;
 }
 //=============================================================================
+void HOMARD_YACS::SetXMLFile( const char* XMLFile )
+{
+  _XMLFile = std::string( XMLFile );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetXMLFile() const
+{
+  return _XMLFile;
+}
+//=============================================================================
 //=============================================================================
 // Liens avec les autres structures
 //=============================================================================
index af331722fdfc3de2ea86c4072b61c29efa6d7510..7b771a7c80c7dfe55261e8958903f83e6dafbeba 100644 (file)
@@ -62,6 +62,9 @@ public:
   void                          SetScriptFile( const char* ScriptFile );
   std::string                   GetScriptFile() const;
 
+  void                          SetXMLFile( const char* XMLFile );
+  std::string                   GetXMLFile() const;
+
 // Liens avec les autres structures
   void                          SetCaseName( const char* NomCas );
   std::string                   GetCaseName() const;
@@ -76,6 +79,7 @@ private:
   std::string                   _MeshFile;
   std::string                   _ScriptFile;
   int                           _Type;
+  std::string                   _XMLFile;
 };
 
 #endif
index 50a32dd91dad4a18b547885c2e03d2d30d4266db..01b1f453ae7d6ae3b86b371be54c893c633fad77 100644 (file)
 
 //=============================================================================
 //=============================================================================
-YACSDriver::YACSDriver(const std::string YACSFile, const std::string DirName):
-  _YACSFile( "" ), _DirName( "" ),
+YACSDriver::YACSDriver(const std::string XMLFile, const std::string DirName):
+  _XMLFile( "" ), _DirName( "" ),
   _Texte( "" ),
   _Texte_parametres( "" ),
   _noeud_1( "CreateHypothesis" ),
   _bLu( false )
 {
-  MESSAGE("YACSFile = "<<YACSFile<<", DirName ="<<DirName);
-  _YACSFile = YACSFile;
+  MESSAGE("XMLFile = "<<XMLFile<<", DirName ="<<DirName);
+  _XMLFile = XMLFile;
   _DirName = DirName;
 }
 //=============================================================================
@@ -547,8 +547,8 @@ void YACSDriver::TexteAddParametres( )
 void YACSDriver::CreeFichier( )
 {
 //
-  MESSAGE("CreeFichier sur le fichier "<<_YACSFile);
-  std::ofstream Fic(_YACSFile.c_str(), std::ios::out ) ;
+  MESSAGE("CreeFichier sur le fichier "<<_XMLFile);
+  std::ofstream Fic(_XMLFile.c_str(), std::ios::out ) ;
   if (Fic.is_open() == true) { Fic << _Texte << std::endl ; }
   Fic.close() ;
 //
index 26315c34cf9d03b554c8d979d4435ac33b61f208..57dfa53e9111adaa877433c026f90c9197c7fe55 100644 (file)
@@ -28,7 +28,7 @@
 class YACSDriver
 {
 public:
-  YACSDriver(const std::string YACSFile, const std::string DirName) ;
+  YACSDriver(const std::string XMLFile, const std::string DirName) ;
   ~YACSDriver() ;
   //
   void        TexteAdd( const std::string ligne ) ;
@@ -49,7 +49,7 @@ public:
   //
 
 public:
-  std::string _YACSFile ;
+  std::string _XMLFile ;
   std::string _DirName ;
   std::string _Texte ;
   std::string _Texte_parametres ;
index e5e3086d24da9b0f20734ac1de6d2bfce11d6525..c2951a1ea35116aba65b59ecf7f892126f4b2f61 100644 (file)
@@ -394,11 +394,11 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID)
       _PTR(SObject) obj = chercheMonObjet();
       if (obj)
       {
-        // Suppression d'un cas
-        if (HOMARD_UTILS::isCase(obj))
+        // Suppression d'une frontiere
+        if ( HOMARD_UTILS::isBoundaryDi(obj) or HOMARD_UTILS::isBoundaryAn(obj) )
         {
           try
-          { homardGen->DeleteCase(_ObjectName.toStdString().c_str(), 1); }
+          { homardGen->DeleteBoundary(_ObjectName.toStdString().c_str()); }
           catch( SALOME::SALOME_Exception& S_ex )
           {
             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
@@ -407,11 +407,11 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID)
             return false;
           }
         }
-        // Suppression d'une iteration
-        else if (HOMARD_UTILS::isIter(obj))
+        // Suppression d'un cas
+        else if (HOMARD_UTILS::isCase(obj))
         {
           try
-          { homardGen->DeleteIteration(_ObjectName.toStdString().c_str(), 1); }
+          { homardGen->DeleteCase(_ObjectName.toStdString().c_str(), 1); }
           catch( SALOME::SALOME_Exception& S_ex )
           {
             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
@@ -433,11 +433,11 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID)
             return false;
           }
         }
-        // Suppression d'une zone
-        else if (HOMARD_UTILS::isZone(obj))
+        // Suppression d'une iteration
+        else if (HOMARD_UTILS::isIter(obj))
         {
           try
-          { homardGen->DeleteZone(_ObjectName.toStdString().c_str()); }
+          { homardGen->DeleteIteration(_ObjectName.toStdString().c_str(), 1); }
           catch( SALOME::SALOME_Exception& S_ex )
           {
             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
@@ -446,11 +446,24 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID)
             return false;
           }
         }
-        // Suppression d'une frontiere
-        else if ( HOMARD_UTILS::isBoundaryDi(obj) or HOMARD_UTILS::isBoundaryAn(obj) )
+        // Suppression d'un schema YACS
+        else if (HOMARD_UTILS::isYACS(obj))
         {
           try
-          { homardGen->DeleteBoundary(_ObjectName.toStdString().c_str()); }
+          { homardGen->DeleteYACS(_ObjectName.toStdString().c_str(), 1); }
+          catch( SALOME::SALOME_Exception& S_ex )
+          {
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
+          }
+        }
+        // Suppression d'une zone
+        else if (HOMARD_UTILS::isZone(obj))
+        {
+          try
+          { homardGen->DeleteZone(_ObjectName.toStdString().c_str()); }
           catch( SALOME::SALOME_Exception& S_ex )
           {
             QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
index 82d78b0c8915adc65d0b7a07090967fc6f9208cd..f075f85bd585ed85f12f9886ff7a62c1cf775717 100755 (executable)
@@ -455,7 +455,6 @@ CORBA::Long HOMARD_Gen_i::DeleteYACS(const char* nomYACS, CORBA::Long Option)
 {
   //  Option = 0 : On ne supprime pas le fichier du schema associe
   //  Option = 1 : On supprime le fichier du schema associe
-  // Pour detruire une iteration courante
   MESSAGE ( "DeleteYACS : nomYACS = " << nomYACS << ", avec option = " << Option );
   HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
   if (CORBA::is_nil(myYACS))
@@ -466,7 +465,21 @@ CORBA::Long HOMARD_Gen_i::DeleteYACS(const char* nomYACS, CORBA::Long Option)
     throw SALOME::SALOME_Exception(es);
     return 1 ;
   };
-  ASSERT("Programmer le menage du fichier"!=0);
+  // Suppression eventuelle du fichier XML
+  if ( Option == 1 )
+  {
+    std::string nomFichier = myYACS->GetXMLFile();
+    std::string commande = "rm -rf " + nomFichier ;
+    MESSAGE ( "commande = " << commande );
+    if ((system(commande.c_str())) != 0)
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "The xml file for the schema YACS cannot be removed." ;
+      throw SALOME::SALOME_Exception(es);
+      return 2 ;
+    }
+  }
   // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
   myContextMap[GetCurrentStudyID()]._mesYACSs.erase(nomYACS);
   SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(nomYACS, ComponentDataType());
@@ -629,7 +642,7 @@ void HOMARD_Gen_i::InvalideIterOption(const char* nomIter, CORBA::Long Option)
     };
     std::string nomDir     = myIteration->GetDirName();
     std::string nomFichier = myIteration->GetMeshFile();
-    std::string commande= "rm -rf " + std::string(nomDir);
+    std::string commande = "rm -rf " + std::string(nomDir);
     if ( Option == 1 ) { commande = commande + ";rm -rf " + std::string(nomFichier) ; }
     MESSAGE ( "commande = " << commande );
     if ((system(commande.c_str())) != 0)
@@ -2690,7 +2703,7 @@ char* HOMARD_Gen_i::ComputeDirManagement(HOMARD::HOMARD_Cas_var myCase, HOMARD::
     if (etatMenage == 1)
     {
       MESSAGE (". Menage du repertoire DirCompute = " << DirCompute.str());
-      std::string commande= "rm -rf " + DirCompute.str()+"/*" ;
+      std::string commande = "rm -rf " + DirCompute.str()+"/*" ;
       int codret = system(commande.c_str());
       if (codret != 0)
       {
@@ -3029,10 +3042,10 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
     aResultSO = PublishCaseInStudy(theStudy, aStudyBuilder, aCase, theName);
   else if(!aHypo->_is_nil())
     aResultSO = PublishHypotheseInStudy(theStudy, aStudyBuilder, aHypo, theName);
-  else if(!aZone->_is_nil())
-    aResultSO = PublishZoneInStudy(theStudy, aStudyBuilder, aZone, theName);
   else if(!aYACS->_is_nil())
     aResultSO = PublishYACSInStudy(theStudy, aStudyBuilder, aYACS, theName);
+  else if(!aZone->_is_nil())
+    aResultSO = PublishZoneInStudy(theStudy, aStudyBuilder, aZone, theName);
 
   aStudyBuilder->CommitCommand();
 
@@ -3647,11 +3660,20 @@ HOMARD::HOMARD_YACS_ptr HOMARD_Gen_i::CreateYACSSchema (const char* nomYACS, con
   PublishCaseUnderYACS(nomYACS, nomCas);
 
   // D. Caracterisation
+  // D.1. Options
   myYACS->SetDirName( DirName ) ;
   myYACS->SetMeshFile( MeshFile ) ;
   myYACS->SetScriptFile( ScriptFile ) ;
   myYACS->SetCaseName( nomCas ) ;
+  // D.2. Defaut
+  // D.2.1. Type constant
   myYACS->SetType( 1 ) ;
+  // D.2.2. Fichier de sauvegarde dans le repertoire du cas
+  HOMARD::HOMARD_Cas_ptr caseyacs = GetCase(nomCas) ;
+  std::string dirnamecase = caseyacs->GetDirName() ;
+  std::string XMLFile ;
+  XMLFile = dirnamecase + "/schema.xml" ;
+  myYACS->SetXMLFile( XMLFile.c_str() ) ;
 
   return HOMARD::HOMARD_YACS::_duplicate(myYACS);
 }
@@ -3664,23 +3686,20 @@ CORBA::Long HOMARD_Gen_i::YACSWrite(const char* nomYACS)
 // Le repertoire du cas
   HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
   ASSERT(!CORBA::is_nil(myYACS));
-  std::string casename = myYACS->GetCaseName() ;
-  HOMARD::HOMARD_Cas_ptr caseyacs = GetCase(casename.c_str()) ;
-  std::string dirnamecase = caseyacs->GetDirName() ;
-// Le nom par defaut du fichier du schema
-  std::string YACSFile ;
-  YACSFile = dirnamecase + "/schema.xml" ;
+// Le nom du fichier du schema
+  std::string XMLFile ;
+  XMLFile = myYACS->GetXMLFile() ;
 
-  int codret = YACSWriteOnFile(nomYACS, YACSFile.c_str()) ;
+  int codret = YACSWriteOnFile(nomYACS, XMLFile.c_str()) ;
 
   return codret ;
 }
 //=============================================================================
-// Ecriture d'un schema YACS
+// Ecriture d'un schema YACS sur un fichier donne
 //=============================================================================
-CORBA::Long HOMARD_Gen_i::YACSWriteOnFile(const char* nomYACS, const char* YACSFile)
+CORBA::Long HOMARD_Gen_i::YACSWriteOnFile(const char* nomYACS, const char* XMLFile)
 {
-  INFOS ( "YACSWriteOnFile : Ecriture de " << nomYACS << " sur " << YACSFile );
+  INFOS ( "YACSWriteOnFile : Ecriture de " << nomYACS << " sur " << XMLFile );
 
   // A. Prealable
   int codret = 0;
@@ -3747,8 +3766,8 @@ CORBA::Long HOMARD_Gen_i::YACSWriteOnFile(const char* nomYACS, const char* YACSF
 
   // F. Le fichier du schema de reference
   // HOMARD_ROOT_DIR : repertoire ou se trouve le module HOMARD
-  std::string YACSFile_base ;
-  if ( getenv("HOMARD_ROOT_DIR") != NULL ) { YACSFile_base = getenv("HOMARD_ROOT_DIR") ; }
+  std::string XMLFile_base ;
+  if ( getenv("HOMARD_ROOT_DIR") != NULL ) { XMLFile_base = getenv("HOMARD_ROOT_DIR") ; }
   else
   {
     SALOME::ExceptionStruct es ;
@@ -3758,13 +3777,13 @@ CORBA::Long HOMARD_Gen_i::YACSWriteOnFile(const char* nomYACS, const char* YACSF
     throw SALOME::SALOME_Exception(es);
     return 0;
   }
-  YACSFile_base += "/share/salome/resources/homard/yacs_01." + _LangueShort + ".xml" ;
+  XMLFile_base += "/share/salome/resources/homard/yacs_01." + _LangueShort + ".xml" ;
 //   if ( _Langue ==
-  MESSAGE("YACSFile_base ="<<YACSFile_base);
+  MESSAGE("XMLFile_base ="<<XMLFile_base);
 
   // G. Lecture du schema de reference et insertion des donnees propres au fil de la rencontre des mots-cles
-  YACSDriver* myDriver = new YACSDriver(YACSFile, DirName);
-  std::ifstream fichier( YACSFile_base.c_str() );
+  YACSDriver* myDriver = new YACSDriver(XMLFile, DirName);
+  std::ifstream fichier( XMLFile_base.c_str() );
   if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
   {
     // G.1. Lecture du schema de reference et insertion des donnees propres au fil de la rencontre des mots-cles
@@ -3829,7 +3848,7 @@ CORBA::Long HOMARD_Gen_i::YACSWriteOnFile(const char* nomYACS, const char* YACSF
   // H. Publication du fichier dans l'arbre
 
     std::string Commentaire = "xml" ;
-    PublishFileUnderYACS(nomYACS, YACSFile, Commentaire.c_str());
+    PublishFileUnderYACS(nomYACS, XMLFile, Commentaire.c_str());
 
   return codret ;
 }
index d45c2d91d27c7ef9d061ecd1cfc2988a7033d6ef..53ee8a0d12b8569fc68ec61a05a589f19b0533d4 100644 (file)
@@ -190,7 +190,7 @@ public:
 // YACS
   HOMARD::HOMARD_YACS_ptr         CreateYACSSchema (const char* YACSName, const char* nomCas, const char* ScriptFile, const char* DirName, const char* MeshFile);
   CORBA::Long                     YACSWrite(const char* nomYACS);
-  CORBA::Long                     YACSWriteOnFile(const char* nomYACS, const char* YACSFile);
+  CORBA::Long                     YACSWriteOnFile(const char* nomYACS, const char* XMLFile);
   std::string                     YACSDriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, YACSDriver* myDriver);
   std::string                     YACSDriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, YACSDriver* myDriver);
 
index 70de2c9a5340e33c1c1b5843ee59f069634c3056..b00cbf97b891b2dc439009d087d90fbc61df17a6 100644 (file)
@@ -160,6 +160,19 @@ char* HOMARD_YACS_i::GetScriptFile()
   return CORBA::string_dup( myHomardYACS->GetScriptFile().c_str() );
 }
 //=============================================================================
+void HOMARD_YACS_i::SetXMLFile( const char* XMLFile )
+{
+  ASSERT( myHomardYACS );
+  MESSAGE ( "SetXMLFile : SetXMLFile = " << XMLFile );
+  myHomardYACS->SetXMLFile( XMLFile );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetXMLFile()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetXMLFile().c_str() );
+}
+//=============================================================================
 //=============================================================================
 // Liens avec les autres structures
 //=============================================================================
@@ -178,21 +191,22 @@ char* HOMARD_YACS_i::GetCaseName()
 //=============================================================================
 CORBA::Long HOMARD_YACS_i::Write()
 {
-  MESSAGE ( "Write : ecriture du schema");
 //
   char* nomYACS = GetName() ;
   return _gen_i->YACSWrite(nomYACS) ;
 }
 //=============================================================================
-CORBA::Long HOMARD_YACS_i::WriteOnFile( const char* YACSFile )
+CORBA::Long HOMARD_YACS_i::WriteOnFile( const char* XMLFile )
 {
-  MESSAGE ( "WriteOnFile : ecriture du schema sur " << YACSFile );
+  MESSAGE ( "WriteOnFile : ecriture du schema sur " << XMLFile );
   ASSERT( myHomardYACS );
 //
+// Memorisation du fichier associe
+  SetXMLFile( XMLFile ) ;
+//
 // Nom du schema
   char* nomYACS = GetName() ;
-  MESSAGE ( "WriteOnFile : ecriture du schema " << nomYACS);
-  return _gen_i->YACSWriteOnFile(nomYACS, YACSFile) ;
+  return _gen_i->YACSWriteOnFile(nomYACS, XMLFile) ;
 }
 //=============================================================================
 //=============================================================================
index 4a26544a6521a40d028de48687b16ea63743ec67..f3c2fc4a747d428fa4f37239c8c43ed492de7218 100644 (file)
@@ -77,9 +77,11 @@ public:
   void                   SetScriptFile( const char* ScriptFile );
   char*                  GetScriptFile();
 
+  void                   SetXMLFile( const char* XMLFile );
+  char*                  GetXMLFile();
 
   CORBA::Long            Write() ;
-  CORBA::Long            WriteOnFile( const char* YACSFile ) ;
+  CORBA::Long            WriteOnFile( const char* XMLFile ) ;
 
   // Liens avec les autres structures
   void                   SetCaseName( const char* NomCas );