0029195: OCAF - ensure thread safety for different documents.
[occt.git] / src / CDM / CDM_Document.cxx
index 0ec0acc..1892032 100644 (file)
@@ -23,7 +23,6 @@
 #include <CDM_ListOfDocument.hxx>
 #include <CDM_MetaData.hxx>
 #include <CDM_NamesDirectory.hxx>
-#include <CDM_PresentationDirectory.hxx>
 #include <CDM_Reference.hxx>
 #include <CDM_ReferenceIterator.hxx>
 #include <Resource_Manager.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(CDM_Document,Standard_Transient)
 
-static CDM_PresentationDirectory& getPresentations() {
-  static CDM_PresentationDirectory thePresentations;
-  return thePresentations;
-}
-
 //=======================================================================
 //function : CDM_Document
 //purpose  : 
@@ -52,7 +46,6 @@ static CDM_PresentationDirectory& getPresentations() {
 
 CDM_Document::CDM_Document():
   myResourcesAreLoaded          (Standard_False),
-  myValidPresentation           (Standard_False),
   myVersion                     (1),
   myActualReferenceIdentifier   (0),
   myStorageVersion              (0),
@@ -229,11 +222,6 @@ Handle(CDM_Reference) CDM_Document::Reference
   return theReference;
 }
 
-static CDM_ListOfDocument& getListOfDocumentToUpdate() {
-  static CDM_ListOfDocument theListOfDocumentToUpdate;
-  return theListOfDocumentToUpdate;
-}
-
 //=======================================================================
 //function : IsInSession
 //purpose  : 
@@ -286,25 +274,23 @@ TCollection_ExtendedString CDM_Document::Name
 //function : UpdateFromDocuments
 //purpose  : 
 //=======================================================================
-
 void CDM_Document::UpdateFromDocuments(const Standard_Address aModifContext) const
 {
-  Standard_Boolean StartUpdateCycle=getListOfDocumentToUpdate().IsEmpty();
-  
+  CDM_ListOfDocument aListOfDocumentsToUpdate;
+  Standard_Boolean StartUpdateCycle = aListOfDocumentsToUpdate.IsEmpty();
   CDM_ListIteratorOfListOfReferences it(myFromReferences);
   for(; it.More() ; it.Next()) {
     Handle(CDM_Document) theFromDocument=it.Value()->FromDocument();
     CDM_ListIteratorOfListOfDocument itUpdate;
-
     for(; itUpdate.More(); itUpdate.Next()) {
       if(itUpdate.Value() == theFromDocument) break;
-      
+
       if(itUpdate.Value()->ShallowReferences(theFromDocument)) {
-       getListOfDocumentToUpdate().InsertBefore(theFromDocument,itUpdate);
+        aListOfDocumentsToUpdate.InsertBefore(theFromDocument,itUpdate);
        break;
       }
     }
-    if(!itUpdate.More()) getListOfDocumentToUpdate().Append(theFromDocument);
+    if(!itUpdate.More()) aListOfDocumentsToUpdate.Append(theFromDocument);
     theFromDocument->Update(this,it.Value()->ReferenceIdentifier(),aModifContext);
   }
   
@@ -314,15 +300,15 @@ void CDM_Document::UpdateFromDocuments(const Standard_Address aModifContext) con
     Handle(CDM_Application) theApplication;
     TCollection_ExtendedString ErrorString;
 
-    while(!getListOfDocumentToUpdate().IsEmpty()) {
-      theDocumentToUpdate=getListOfDocumentToUpdate().First();
+    while(!aListOfDocumentsToUpdate.IsEmpty()) {
+      theDocumentToUpdate = aListOfDocumentsToUpdate.First();
       theApplication=theDocumentToUpdate->Application();
       ErrorString.Clear();
       theApplication->BeginOfUpdate(theDocumentToUpdate);
       theApplication->EndOfUpdate (theDocumentToUpdate,
                                    theDocumentToUpdate->Update(ErrorString),
                                    ErrorString);
-      getListOfDocumentToUpdate().RemoveFirst();
+      aListOfDocumentsToUpdate.RemoveFirst();
     }
   }
 }
@@ -520,104 +506,6 @@ Standard_ExtString CDM_Document::Comment() const
 }
 
 //=======================================================================
-//function : Presentation
-//purpose  : 
-//=======================================================================
-
-Standard_ExtString CDM_Document::Presentation()
-{
-  if(!myValidPresentation) ComputePresentation();
-  return myPresentation.ToExtString();
-}
-
-//=======================================================================
-//function : UnvalidPresentation
-//purpose  : 
-//=======================================================================
-
-void CDM_Document::UnvalidPresentation()
-{
-  if(myValidPresentation) {
-    getPresentations().UnBind(myPresentation);
-    myValidPresentation=Standard_False;
-  }
-}
-
-//=======================================================================
-//function : ComputePresentation
-//purpose  : 
-//=======================================================================
-
-void CDM_Document::ComputePresentation()
-{
-  TCollection_ExtendedString presentation("");
-  static Standard_Integer theUnnamedDocuments(0);
-  static CDM_NamesDirectory theNames;
-
-  if(!myMetaData.IsNull()) {
-    presentation += myMetaData->Name();
-    if(!theNames.IsBound(presentation)) theNames.Bind(presentation,0);
-    Standard_Integer range = theNames(presentation);
-    range += 1;
-    theNames(presentation) = range;
-    if(range != 1) {
-      presentation += "<";
-      presentation += range;
-      presentation += ">";
-    }
-  }
-  else {
-    presentation = "Document_";
-    presentation += ++theUnnamedDocuments;
-  }
-  
-  if(getPresentations().IsBound(presentation)) {
-    TCollection_ExtendedString Test = presentation;
-    Test += "!";
-    Standard_Integer Count=0;
-    while (getPresentations().IsBound(Test)) {
-      Count++;
-      Test = presentation; Test+= "!"; Test+= Count;
-    }
-    presentation = Test;
-  }
-  
-  
-  myPresentation = TCollection_ExtendedString(presentation);
-  myValidPresentation = Standard_True;
-  getPresentations().Bind(presentation,this);
-}
-
-//=======================================================================
-//function : FindFromPresentation
-//purpose  : 
-//=======================================================================
-
-Handle(CDM_Document) CDM_Document::FindFromPresentation
-                                (const TCollection_ExtendedString& aPresentation)
-{
-  TCollection_ExtendedString x(aPresentation);
-  if(!getPresentations().IsBound(x)) {
-    Standard_SStream aMsg;
-    aMsg <<"No document having this presentation: " << x << " does exist."
-         << std::endl << (char)0;
-    throw Standard_NoSuchObject(aMsg.str().c_str());
-  }
-  return getPresentations()(x);
-}
-
-//=======================================================================
-//function : FindPresentation
-//purpose  : 
-//=======================================================================
-
-Standard_Boolean CDM_Document::FindPresentation
-                                (const TCollection_ExtendedString& aPresentation)
-{
-  return getPresentations().IsBound(aPresentation);
-}
-
-//=======================================================================
 //function : IsStored
 //purpose  : 
 //=======================================================================
@@ -649,7 +537,7 @@ void CDM_Document::SetMetaData(const Handle(CDM_MetaData)& aMetaData)
     aMetaData->SetDocument(this);
 
 // Update the document refencing this MetaData:
-    CDM_DataMapIteratorOfMetaDataLookUpTable it(CDM_MetaData::LookUpTable());
+    CDM_DataMapIteratorOfMetaDataLookUpTable it(*CDM_MetaData::LookUpTable());
     for(;it.More();it.Next()) {
       const Handle(CDM_MetaData)& theMetaData=it.Value();
       if(theMetaData != aMetaData && theMetaData->IsRetrieved()) {
@@ -660,11 +548,8 @@ void CDM_Document::SetMetaData(const Handle(CDM_MetaData)& aMetaData)
       }
     }
     if(!myMetaData.IsNull()) {
-      if(myMetaData->Name() != aMetaData->Name()) UnvalidPresentation();
       myMetaData->UnsetDocument();
     }
-    else
-      UnvalidPresentation();
   }
 
   myStorageVersion = Modifications();
@@ -684,7 +569,6 @@ void CDM_Document::UnsetIsStored()
 {
   if(!myMetaData.IsNull()) { 
     myMetaData->UnsetDocument();
-//    myMetaData.Nullify();
   }
 }
 
@@ -791,7 +675,7 @@ TCollection_ExtendedString CDM_Document::RequestedName()
     if(!myMetaData.IsNull())
       myRequestedName=myMetaData->Name();
     else
-      myRequestedName=Presentation();
+      myRequestedName="Document_";
   }
   myRequestedNameIsDefined=Standard_True;
   return myRequestedName;
@@ -912,7 +796,6 @@ void CDM_Document::Close()
   RemoveAllReferences();
   UnsetIsStored();
   myApplication.Nullify();
-  UnvalidPresentation();
 
 }
 
@@ -1299,8 +1182,6 @@ void CDM_Document::DumpJson (Standard_OStream& theOStream, Standard_Integer theD
     const TCollection_ExtendedString& aComment = aCommentIt.Value();
     OCCT_DUMP_FIELD_VALUE_STRING (theOStream, aComment)
   }
-  OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myPresentation)
-  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myValidPresentation)
 
   for (CDM_ListOfReferences::Iterator aFromReferenceIt (myFromReferences); aFromReferenceIt.More(); aFromReferenceIt.Next())
   {