]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Dump Python extension
authorouv <ouv@opencascade.com>
Wed, 12 Nov 2008 16:20:28 +0000 (16:20 +0000)
committerouv <ouv@opencascade.com>
Wed, 12 Nov 2008 16:20:28 +0000 (16:20 +0000)
idl/SALOMEDS.idl
src/SALOMEDS/SALOMEDS_Study.cxx
src/SALOMEDS/SALOMEDS_Study.hxx
src/SALOMEDS/SALOMEDS_Study_i.cxx
src/SALOMEDS/SALOMEDS_Study_i.hxx
src/SALOMEDSClient/SALOMEDSClient_Study.hxx
src/SALOMEDSImpl/SALOMEDSImpl_GenericVariable.cxx
src/SALOMEDSImpl/SALOMEDSImpl_GenericVariable.hxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx

index 80c75954bbb1b4d47b7430e13dbdd6b953685116..32eb2463e80f40632d7faabb3c18766f6eccde07 100644 (file)
@@ -476,6 +476,34 @@ during each working session.
     boolean IsVariable( in string theVarName );
 
     ListOfStrings GetVariableNames();
+
+/*! \brief Removing variable
+
+   Remove variable with the specified name from the study with substitution of its value.
+
+   \param theVarName Name of the variable.
+   \return Status of operation.
+*/
+    boolean RemoveVariable( in string theVarName );
+
+/*! \brief Renaming variable
+
+   Rename variable with the specified name within the study.
+
+   \param theVarName Name of the variable.
+   \param theNewVarName New name for the variable.
+   \return Status of operation.
+*/
+    boolean RenameVariable( in string theVarName, in string theNewVarName );
+
+/*! \brief Checking variable usage
+
+   Check that variable is used in the study.
+
+   \param theVarName Name of the variable.
+   \return Variable usage.
+*/
+    boolean IsVariableUsed( in string theVarName );
   };
 
   //==========================================================================
index ade49db95984d304bdeee3f2d2f663f7b4102998..fce5d225ada754a701f04e707ff06e2604704c3e 100644 (file)
@@ -820,6 +820,42 @@ vector<string> SALOMEDS_Study::GetVariableNames()
   return aVector;
 }
 
+bool SALOMEDS_Study::RemoveVariable(const string& theVarName)
+{
+  bool aResult;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    aResult = _local_impl->RemoveVariable(theVarName);
+  }
+  else
+    aResult = _corba_impl->RemoveVariable((char*)theVarName.c_str());
+  return aResult;
+}
+
+bool SALOMEDS_Study::RenameVariable(const string& theVarName, const string& theNewVarName)
+{
+  bool aResult;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    aResult = _local_impl->RenameVariable(theVarName, theNewVarName);
+  }
+  else
+    aResult = _corba_impl->RenameVariable((char*)theVarName.c_str(), (char*)theNewVarName.c_str());
+  return aResult;
+}
+
+bool SALOMEDS_Study::IsVariableUsed(const string& theVarName)
+{
+  bool aResult;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+    aResult = _local_impl->IsVariableUsed(theVarName);
+  }
+  else
+    aResult = _corba_impl->IsVariableUsed((char*)theVarName.c_str());
+  return aResult;
+}
+
 std::string SALOMEDS_Study::ConvertObjectToIOR(CORBA::Object_ptr theObject) 
 {
   return _orb->object_to_string(theObject); 
index 2a0775ee4579c78a218677114d74442857165049..3c885b64ba3dcc8690eca2c68c1c365fd203b297 100644 (file)
@@ -111,6 +111,10 @@ public:
   virtual bool IsVariable(const std::string& theVarName);
   virtual std::vector<std::string> GetVariableNames();
 
+  virtual bool RemoveVariable(const std::string& theVarName);
+  virtual bool RenameVariable(const std::string& theVarName, const std::string& theNewVarName);
+  virtual bool IsVariableUsed(const std::string& theVarName);
+
   std::string ConvertObjectToIOR(CORBA::Object_ptr theObject);
   CORBA::Object_ptr ConvertIORToObject(const std::string& theIOR);     
 
index 6d8ef34e53ed0aaf33925536b86dc738da0c3ff1..22abc8a03ca5d7689f52070c3220d4dcaa33059f 100644 (file)
@@ -971,6 +971,36 @@ SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetVariableNames()
   return aResult._retn();
 }
 
+//============================================================================
+/*! Function : RemoveVariable
+ *  Purpose  : 
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::RemoveVariable(const char* theVarName)
+{
+  return _impl->RemoveVariable(string(theVarName));
+}
+
+//============================================================================
+/*! Function : RenameVariable
+ *  Purpose  : 
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::RenameVariable(const char* theVarName, const char* theNewVarName)
+{
+  return _impl->RenameVariable(string(theVarName), string(theNewVarName));
+}
+
+//============================================================================
+/*! Function : IsVariableUsed
+ *  Purpose  : 
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::IsVariableUsed(const char* theVarName)
+{
+  return _impl->IsVariableUsed(string(theVarName));
+}
+
 //============================================================================
 /*! Function : GetDefaultScript
  *  Purpose  : 
index fa59532c6f0cff9739730d6061c70ada887ff702..8466582eeb1053ab997a8dd0045d79f9817946e2 100644 (file)
@@ -316,6 +316,12 @@ public:
 
   virtual SALOMEDS::ListOfStrings* GetVariableNames();
 
+  virtual CORBA::Boolean RemoveVariable(const char* theVarName);
+
+  virtual CORBA::Boolean RenameVariable(const char* theVarName, const char* theNewVarName);
+
+  virtual CORBA::Boolean IsVariableUsed(const char* theVarName);
+
   virtual char* GetDefaultScript(const char* theModuleName, const char* theShift);
 
   virtual CORBA::Boolean DumpStudy(const char* thePath, const char* theBaseName, CORBA::Boolean isPublished);
index d2f48e16ebf2892f8138d7272fdad516b25acd0c..2cb48ed4b9ee05fa3a09385e9234853417a88934 100644 (file)
@@ -107,6 +107,11 @@ public:
   virtual bool IsVariable(const std::string& theVarName) = 0;
   virtual std::vector<std::string> GetVariableNames() = 0;
 
+  virtual bool RemoveVariable(const std::string& theVarName) = 0;
+  virtual bool RenameVariable(const std::string& theVarName,
+                             const std::string& theNewVarName) = 0;
+  virtual bool IsVariableUsed(const std::string& theVarName) = 0;
+  
 };
 
 
index 529620ef02b449001551f9ffc116e5f584db3f65..e266329c4a9b221f8871a2f64f9b5ae3337bb54d 100644 (file)
@@ -80,6 +80,16 @@ void SALOMEDSImpl_GenericVariable::setType(const SALOMEDSImpl_GenericVariable::V
   _type = theType;
 }
 
+//============================================================================
+/*! Function : setName
+ *  Purpose  : 
+ */
+//============================================================================
+void SALOMEDSImpl_GenericVariable::setName(const std::string& theName)
+{
+  _name = theName;
+}
+
 //============================================================================
 /*! Function : CheckLocked
  *  Purpose  : 
index 5e4d6c66901b680ff35010c226fe0075cd232f08..c5166f2174b07e3b6e85f26388a3f1d8a72535a6 100644 (file)
@@ -48,6 +48,8 @@ class SALOMEDSIMPL_EXPORT SALOMEDSImpl_GenericVariable
   
   void setType(const VariableTypes theType);
 
+  void setName(const std::string& theName);
+
   virtual void CheckLocked();
   
   virtual void SetModifyFlag();
index c74298441499918e3c837f4cddc84d34f54b7b20..4af8f7ded071ad385e1a3095f0e6038ffc2e372a 100644 (file)
@@ -1584,6 +1584,8 @@ double SALOMEDSImpl_Study::GetVariableValue(const string& theVarName)
   if(aGVar != NULL )
     if(SALOMEDSImpl_ScalarVariable* aSVar = dynamic_cast<SALOMEDSImpl_ScalarVariable*>(aGVar))
       return aSVar->getValue();
+
+  return 0;
 }
 
 //============================================================================
@@ -1656,6 +1658,157 @@ SALOMEDSImpl_GenericVariable* SALOMEDSImpl_Study::GetVariable(const std::string&
   return aResult;
 }
 
+//============================================================================
+/*! Function : RemoveVariable
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::RemoveVariable(const string& theVarName)
+{
+  SALOMEDSImpl_GenericVariable* aVariable = GetVariable( theVarName );
+  if( !aVariable )
+    return false;
+
+  string aValue = aVariable->SaveToScript();
+  ReplaceVariableAttribute( theVarName, aValue );
+
+  std::vector<SALOMEDSImpl_GenericVariable*>::iterator it = myNoteBookVars.begin(), itEnd = myNoteBookVars.end();
+  for( ; it != itEnd; it++ )
+  {
+    SALOMEDSImpl_GenericVariable* aVariableRef = *it;
+    if( aVariableRef && theVarName.compare( aVariableRef->Name() ) == 0 )
+    {
+      myNoteBookVars.erase( it );
+      break;
+    }
+  }
+
+  return true;
+}
+
+//============================================================================
+/*! Function : RenameVariable
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::RenameVariable(const string& theVarName, const string& theNewVarName)
+{
+  SALOMEDSImpl_GenericVariable* aVariable = GetVariable( theVarName );
+  if( !aVariable )
+    return false;
+
+  ReplaceVariableAttribute( theVarName, theNewVarName );
+
+  std::vector<SALOMEDSImpl_GenericVariable*>::iterator it = myNoteBookVars.begin(), itEnd = myNoteBookVars.end();
+  for( ; it != itEnd; it++ )
+  {
+    SALOMEDSImpl_GenericVariable* aVariableRef = *it;
+    if( aVariableRef && theVarName.compare( aVariableRef->Name() ) == 0 )
+    {
+      aVariableRef->setName( theNewVarName );
+      break;
+    }
+  }
+
+  return true;
+}
+
+//============================================================================
+/*! Function : IsVariableUsed
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::IsVariableUsed(const string& theVarName)
+{
+  return FindVariableAttribute( theVarName );
+}
+
+//============================================================================
+/*! Function : FindVariableAttribute
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::FindVariableAttribute(const std::string& theName)
+{
+  DF_Attribute* anAttr;
+  SALOMEDSImpl_StudyBuilder* aStudyBuilder = NewBuilder();
+  SALOMEDSImpl_SComponentIterator aCompIter = NewComponentIterator();
+  for( ; aCompIter.More(); aCompIter.Next() )
+  {
+    SALOMEDSImpl_SObject aComp = aCompIter.Value();
+
+    SALOMEDSImpl_ChildIterator anIter = NewChildIterator( aComp );
+    for( ; anIter.More(); anIter.Next() )
+    {
+      SALOMEDSImpl_SObject aSObject = anIter.Value();
+      if( aStudyBuilder->FindAttribute( aSObject, anAttr, "AttributeString" ) )
+      {
+       if( SALOMEDSImpl_AttributeString* aStringAttr = ( SALOMEDSImpl_AttributeString* )anAttr )
+       {
+         string aString = aStringAttr->Value();
+
+         vector<string> aVector = SALOMEDSImpl_Tool::splitString( aString, ':' );
+         for( int i = 0, len = aVector.size(); i < len; i++ )
+         {
+           string aStr = aVector[i];
+           if( aStr.compare( theName ) == 0 )
+             return true;
+         }
+       }
+      }
+    }
+  }
+  return false;
+}
+
+//============================================================================
+/*! Function : ReplaceVariableAttribute
+ *  Purpose  :
+ */
+//============================================================================
+void SALOMEDSImpl_Study::ReplaceVariableAttribute(const std::string& theSource, const std::string& theDest)
+{
+  DF_Attribute* anAttr;
+  SALOMEDSImpl_StudyBuilder* aStudyBuilder = NewBuilder();
+  SALOMEDSImpl_SComponentIterator aCompIter = NewComponentIterator();
+  for( ; aCompIter.More(); aCompIter.Next() )
+  {
+    SALOMEDSImpl_SObject aComp = aCompIter.Value();
+
+    SALOMEDSImpl_ChildIterator anIter = NewChildIterator( aComp );
+    for( ; anIter.More(); anIter.Next() )
+    {
+      SALOMEDSImpl_SObject aSObject = anIter.Value();
+      if( aStudyBuilder->FindAttribute( aSObject, anAttr, "AttributeString" ) )
+      {
+       if( SALOMEDSImpl_AttributeString* aStringAttr = ( SALOMEDSImpl_AttributeString* )anAttr )
+       {
+         bool isChanged = false;
+         string aNewString, aCurrentString = aStringAttr->Value();
+
+         vector<string> aVector = SALOMEDSImpl_Tool::splitString( aCurrentString, ':' );
+         for( int i = 0, len = aVector.size(); i < len; i++ )
+         {
+           string aStr = aVector[i];
+           if( aStr.compare( theSource ) == 0 )
+           {
+             isChanged = true;
+             aStr = theDest;
+           }
+
+           aNewString.append( aStr );
+           if( i != len )
+             aNewString.append( ":" );
+         }
+
+         if( isChanged )
+           aStringAttr->SetValue( aNewString );
+       }
+      }
+    }
+  }
+}
+
 //============================================================================
 /*! Function : EnableUseCaseAutoFilling
  *  Purpose  :
index 98bb6c52a906c04bce344e8b76f3dfa9038c0f86..3ba54b93655edf61e2cab9dcfc590fe83982145c 100644 (file)
@@ -276,6 +276,15 @@ public:
 
   SALOMEDSImpl_GenericVariable* GetVariable(const std::string& theName) const;
 
+  bool RemoveVariable(const std::string& theVarName);
+
+  bool RenameVariable(const std::string& theVarName, const std::string& theNewVarName);
+
+  bool IsVariableUsed(const std::string& theVarName);
+
+  bool FindVariableAttribute(const std::string& theName);
+  void ReplaceVariableAttribute(const std::string& theSource, const std::string& theDest);
+
   //Returns a callback 
   SALOMEDSImpl_Callback* GetCallback() { return _cb; }