]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
BugID: PAL10141, added a possibility to lock the study by several processes.
authorsrn <srn@opencascade.com>
Wed, 23 Aug 2006 14:13:37 +0000 (14:13 +0000)
committersrn <srn@opencascade.com>
Wed, 23 Aug 2006 14:13:37 +0000 (14:13 +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_Study.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx
src/SALOMEDSImpl/testDS.cxx

index 58339d9bf7ab0fc4f4153a72ba4820955f43f97e..5c270eff90ed8d9c8f3913445ca6b36198b1ca4f 100644 (file)
@@ -404,10 +404,10 @@ during each working session.
 
 
 /*!
-    Marks this Study as being locked. The lock status can be checked by method IsStudyLocked
-    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locked the study.
+    Marks this Study as being locked by the given locker. The lock status can be checked by method IsStudyLocked
+    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
 */
-    void SetStudyLock(in string theLockerIDe);
+    void SetStudyLock(in string theLockerID);
 
 /*!
     Returns True if the Study was marked locked. 
@@ -415,14 +415,15 @@ during each working session.
     boolean IsStudyLocked();
 
 /*!
-    Marks this Study as being unlocked. The lock status can be checked by method IsStudyLocked
+    Marks this Study as being unlocked by the given locker. The lock status can be checked by method IsStudyLocked
+    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
 */
-    void UnLockStudy();
+    void UnLockStudy(in string theLockerID);
 
 /*!
-    Returns the ID of the Study's locker
+    Returns the list iof IDs of the Study's lockers
 */
-    string GetLockerID();
+    ListOfStrings GetLockerID();
 
 
   };
index 9cef77820b08f3f07a9742d3e8bace91654ae5cc..ff20268947cbe7702bd7e33b0e7c173bccb0c51b 100644 (file)
@@ -663,21 +663,29 @@ bool SALOMEDS_Study::IsStudyLocked()
   return isLocked;
 }
  
-void SALOMEDS_Study::UnLockStudy()
+void SALOMEDS_Study::UnLockStudy(const string& theLockerID)
 {
-  if(_isLocal) _local_impl->UnLockStudy();
-  else _corba_impl->UnLockStudy();
+  if(_isLocal) _local_impl->UnLockStudy((char*)theLockerID.c_str());
+  else _corba_impl->UnLockStudy((char*)theLockerID.c_str());
 }
 
-string SALOMEDS_Study::GetLockerID()
+vector<string> SALOMEDS_Study::GetLockerID()
 {
-  std::string aLockerID;
+  std::vector<std::string> aVector;
+  int aLength, i;
   if (_isLocal) {
     SALOMEDS::Locker lock;
-    aLockerID = _local_impl->GetLockerID();
+
+    Handle(TColStd_HSequenceOfAsciiString) aSeq = _local_impl->GetLockerID();
+    aLength = aSeq->Length();
+    for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
   }
-  else aLockerID = _corba_impl->GetLockerID();
-  return aLockerID;
+  else {
+    SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetLockerID();
+    aLength = aSeq->length();
+    for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
+  }
+  return aVector;
 }
 
 std::string SALOMEDS_Study::ConvertObjectToIOR(CORBA::Object_ptr theObject) 
index d07a84dc690d68d4f9222f98fc7a40c3d90e8750..8babf0b6e7d76192cdadaa1332b9e8677c5022f3 100644 (file)
@@ -92,8 +92,8 @@ public:
                                                       const std::string& theModuleName, int theSavePoint);
   virtual void SetStudyLock(const std::string& theLockerID);
   virtual bool IsStudyLocked();
-  virtual void UnLockStudy();
-  virtual std::string GetLockerID();
+  virtual void UnLockStudy(const std::string& theLockerID);
+  virtual std::vector<std::string> GetLockerID();
 
   std::string ConvertObjectToIOR(CORBA::Object_ptr theObject);
   CORBA::Object_ptr ConvertIORToObject(const std::string& theIOR);     
index 4dc6304f053e7ac10cd922ecff744e5cf5652952..dcf58e808cb24ef6be687739b31091d850f4c626 100644 (file)
@@ -840,10 +840,10 @@ bool SALOMEDS_Study_i::IsStudyLocked()
  *  Purpose  : 
  */
 //============================================================================
-void SALOMEDS_Study_i::UnLockStudy()
+void SALOMEDS_Study_i::UnLockStudy(const char* theLockerID)
 {
   SALOMEDS::Locker lock; 
-  _impl->UnLockStudy();
+  _impl->UnLockStudy(theLockerID);
 }
 
 //============================================================================
@@ -851,10 +851,20 @@ void SALOMEDS_Study_i::UnLockStudy()
  *  Purpose  : 
  */
 //============================================================================
-char* SALOMEDS_Study_i::GetLockerID()
+SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetLockerID()
 {
   SALOMEDS::Locker lock; 
-  return CORBA::string_dup(_impl->GetLockerID());
+
+  SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
+
+  Handle(TColStd_HSequenceOfAsciiString) aSeq = _impl->GetLockerID();
+
+  int aLength = aSeq->Length();
+  aResult->length(aLength);
+  for(int anIndex = 1; anIndex <= aLength; anIndex++) {
+    aResult[anIndex-1] = CORBA::string_dup(TCollection_AsciiString(aSeq->Value(anIndex)).ToCString());
+  }
+  return aResult._retn();
 }
 
 //============================================================================
index 0f5fb2ec6538f26d92566cefb47d18ab51427886..e1fdc8656699121befcf66da1b1c29dd1a76f248 100644 (file)
@@ -288,9 +288,9 @@ public:
 
   virtual bool IsStudyLocked();
 
-  virtual void UnLockStudy();
+  virtual void UnLockStudy(const char* theLockerID);
 
-  virtual char* GetLockerID();
+  virtual SALOMEDS::ListOfStrings* GetLockerID();
 
   virtual char* GetDefaultScript(const char* theModuleName, const char* theShift);
 
index 178a7ec9a335642dc0108dc3091866c8a223e74a..136bafd352efc7d36a16a76c4deb93d18b01ba1b 100644 (file)
@@ -88,8 +88,8 @@ public:
                                                       const std::string& theModuleName, int theSavePoint) = 0;
   virtual void SetStudyLock(const std::string& theLockerID) = 0;
   virtual bool IsStudyLocked() = 0;
-  virtual void UnLockStudy() = 0;
-  virtual std::string GetLockerID() = 0;
+  virtual void UnLockStudy(const std::string& theLockerID) = 0;
+  virtual std::vector<std::string> GetLockerID() = 0;
 };
 
 
index 78fc9a9fcd7d615a8ac62ec40e0c299101f315f7..63b5c2c3a67e292ebcfdc845d16c487382f4a69c 100644 (file)
@@ -79,7 +79,7 @@ SALOMEDSImpl_Study::SALOMEDSImpl_Study(const Handle(TDocStd_Document)& doc,
   //Put on the root label a StudyHandle attribute to store the address of this object
   //It will be used to retrieve the study object by TDF_Label that belongs to the study
   SALOMEDSImpl_StudyHandle::Set(_doc->Main().Root(), this);
-  _locker = "";
+  _lockers = new TColStd_HSequenceOfAsciiString();
 }
 
 
@@ -1595,7 +1595,7 @@ Handle(SALOMEDSImpl_AttributeParameter) SALOMEDSImpl_Study::GetModuleParameters(
 //============================================================================
 void SALOMEDSImpl_Study::SetStudyLock(const char* theLockerID)
 {
-  _locker = TCollection_AsciiString((char*)theLockerID);
+  _lockers->Append(TCollection_AsciiString((char*)theLockerID));
 }
 
 //============================================================================
@@ -1605,7 +1605,7 @@ void SALOMEDSImpl_Study::SetStudyLock(const char* theLockerID)
 //============================================================================
 bool SALOMEDSImpl_Study::IsStudyLocked()
 {
-  return !(_locker=="");
+  return (_lockers->Length() > 0);
 }
 
 //============================================================================
@@ -1613,9 +1613,17 @@ bool SALOMEDSImpl_Study::IsStudyLocked()
  *  Purpose  :
  */
 //============================================================================
-void SALOMEDSImpl_Study::UnLockStudy()
+void SALOMEDSImpl_Study::UnLockStudy(const char* theLockerID)
 {
-  _locker = "";
+  int length = _lockers->Length(), pos = -1;
+  TCollection_AsciiString id((char*)theLockerID);
+  for(int i = 1; i<=length; i++) {
+    if(id == _lockers->Value(i)) {
+      pos = i;
+      break;
+    }
+  }
+  if(pos > 0) _lockers->Remove(pos);
 }
   
 //============================================================================
@@ -1623,7 +1631,7 @@ void SALOMEDSImpl_Study::UnLockStudy()
  *  Purpose  :
  */
 //============================================================================
-char* SALOMEDSImpl_Study::GetLockerID()
+Handle(TColStd_HSequenceOfAsciiString) SALOMEDSImpl_Study::GetLockerID()
 {
-  return _locker.ToCString();
+  return _lockers;
 }
index e971099544a067944d4c0ceee2dd74aebfb2c077..3aac4acb472773282b1da2c1745092f5e6a62292 100644 (file)
@@ -83,10 +83,10 @@ private:
   TDF_Label                _current;
   bool                     _autoFill; 
   TCollection_AsciiString  _errorCode;
-  TCollection_AsciiString  _locker;
-  Handle(SALOMEDSImpl_Callback)       _cb;
-  Handle(SALOMEDSImpl_StudyBuilder)   _builder;
-  Handle(SALOMEDSImpl_UseCaseBuilder) _useCaseBuilder;
+  Handle(TColStd_HSequenceOfAsciiString) _lockers;
+  Handle(SALOMEDSImpl_Callback)          _cb;
+  Handle(SALOMEDSImpl_StudyBuilder)      _builder;
+  Handle(SALOMEDSImpl_UseCaseBuilder)    _useCaseBuilder;
 
   DataMapOfAsciiStringTransient _mapOfSO;
   DataMapOfAsciiStringTransient _mapOfSCO;
@@ -283,10 +283,10 @@ public:
   Standard_EXPORT bool IsStudyLocked();
 
   //Unlocks the study
-  Standard_EXPORT void UnLockStudy();
+  Standard_EXPORT void UnLockStudy(const char* theLockerID);
   
   //Returns an ID of the study locker
-  Standard_EXPORT char* GetLockerID();
+  Standard_EXPORT Handle(TColStd_HSequenceOfAsciiString) GetLockerID();
 
 public:
   DEFINE_STANDARD_RTTI( SALOMEDSImpl_Study )
index 538f0ca40c74d423b91c2d2ad4a4923b26c3c24e..c256306e70695efa072200deab9efa13b215b91d 100644 (file)
@@ -55,7 +55,7 @@ int main (int argc, char * argv[])
   aStudy->SetStudyLock("SRN");
   cout << "Is study locked = " << aStudy->IsStudyLocked() << endl;
   cout << "Get study locker : " << aStudy->GetLockerID() << endl;
-  aStudy->UnLockStudy();
+  aStudy->UnLockStudy("SRN");
   cout << "Is study locked = " << aStudy->IsStudyLocked()  << endl;
 
   Handle(SALOMEDSImpl_StudyBuilder) aBuilder = aStudy->NewBuilder();