0027932: Improvement of standard attributes usability.
[occt.git] / src / TDataStd / TDataStd_Name.cxx
index 46afe8b..636b157 100644 (file)
@@ -50,7 +50,8 @@ Handle(TDataStd_Name) TDataStd_Name::Set
 {
   Handle(TDataStd_Name) N;
   if (!label.FindAttribute(TDataStd_Name::GetID(), N)) { 
-    N = new TDataStd_Name ();   
+    N = new TDataStd_Name ();
+    N->SetID(GetID());
     label.AddAttribute(N);
   }
   N->Set(theString);    
@@ -58,68 +59,22 @@ Handle(TDataStd_Name) TDataStd_Name::Set
 }
 
 //=======================================================================
-//function : Find
-//purpose  : 
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const TDF_Label& label, Handle(TDataStd_Name)& name) 
-// {  
-//   Handle(TDataStd_Name) N;
-//   if (label.FindAttribute(TDataStd_Name::GetID(), N)) {
-//     name = N;
-//     return Standard_True;
-//   }
-//   TDF_Label L = label;
-//   while (!L.IsRoot()) {  
-//     L = L.Father();
-//     if (L.FindAttribute (TDataStd_Name::GetID(), N)) {
-//       name = N;
-//       return Standard_True;
-//     }      
-//   }
-//   return Standard_False;
-// }
-
-//=======================================================================
-//function : IsNamed
-//purpose  : 
-//=======================================================================
-// Standard_Boolean TDataStd_Name::IsNamed(const TDF_Label& label) 
-// {
-//   Handle(TDataStd_Name) N;
-  
-//   return label.FindAttribute(TDataStd_Name::GetID(), N);
-// }
-
-//=======================================================================
-//function : IsEmpty
-//purpose  : 
-//=======================================================================
-// Standard_Boolean TDataStd_Name::IsEmpty(const TDF_Label& label) 
-// {
-//   Handle(TDataStd_Name) N;
-//   if(label.FindAttribute(TDataStd_Name::GetID(), N)) {
-//     return N->IsEmpty();
-//   }
-
-//   Standard_DomainError::Raise("There isn't the Name Attribute on the label");
-// }
-
-//=======================================================================
-//function : Erase
-//purpose  : 
+//function : Set
+//purpose  : Set user defined attribute
 //=======================================================================
-// void TDataStd_Name::Erase(const TDF_Label& label) 
-// {
-//   Handle(TDataStd_Name) N;
-  
-//   if(label.FindAttribute(TDataStd_Name::GetID(), N)) {
-//     N->SetEmpty();
-//     return;
-//   }
-
-//   Standard_DomainError::Raise("There isn't the Name Attribute on the label");
-// }
 
+Handle(TDataStd_Name) TDataStd_Name::Set (const TDF_Label&    L, const Standard_GUID& theGuid,
+                                          const TCollection_ExtendedString& theString) 
+{
+  Handle(TDataStd_Name) N;
+  if (!L.FindAttribute(theGuid, N)) {
+    N = new TDataStd_Name ();
+    N->SetID(theGuid);
+    L.AddAttribute(N);
+  }
+  N->Set (theString); 
+  return N;
+}
 //=======================================================================
 //function : TDataStd_Name
 //purpose  : Empty Constructor
@@ -150,15 +105,26 @@ const TCollection_ExtendedString& TDataStd_Name::Get () const
   return myString;
 }
 
-// TDF_Attribute methods
+//=======================================================================
+//function : SetID
+//purpose  :
+//=======================================================================
 
+void TDataStd_Name::SetID( const Standard_GUID&  theGuid)
+{  
+  if(myID == theGuid) return;
+
+  Backup();
+  myID = theGuid;
+}
+
+// TDF_Attribute methods
 //=======================================================================
 //function : ID
 //purpose  : 
 //=======================================================================
 
-const Standard_GUID& TDataStd_Name::ID () const { return GetID(); }
-
+const Standard_GUID& TDataStd_Name::ID () const { return myID; }
 
 //=======================================================================
 //function : NewEmpty
@@ -167,7 +133,9 @@ const Standard_GUID& TDataStd_Name::ID () const { return GetID(); }
 
 Handle(TDF_Attribute) TDataStd_Name::NewEmpty () const
 {  
-  return new TDataStd_Name(); 
+  Handle(TDataStd_Name) Att = new TDataStd_Name();
+  Att->SetID(myID);
+  return Att; 
 }
 
 //=======================================================================
@@ -177,7 +145,9 @@ Handle(TDF_Attribute) TDataStd_Name::NewEmpty () const
 
 void TDataStd_Name::Restore(const Handle(TDF_Attribute)& with) 
 {
-  myString = Handle(TDataStd_Name)::DownCast (with)->Get();
+   Handle(TDataStd_Name) anAtt = Handle(TDataStd_Name)::DownCast (with);
+   myString = anAtt->Get();
+   myID = anAtt->ID();
 }
 
 
@@ -189,7 +159,9 @@ void TDataStd_Name::Restore(const Handle(TDF_Attribute)& with)
 void TDataStd_Name::Paste (const Handle(TDF_Attribute)& into,
                            const Handle(TDF_RelocationTable)&/* RT*/) const
 {
-  Handle(TDataStd_Name)::DownCast (into)->Set (myString);
+    Handle(TDataStd_Name) anAtt = Handle(TDataStd_Name)::DownCast (into);
+       anAtt->Set (myString);
+       anAtt->SetID(myID);
 }
 
 //=======================================================================
@@ -200,258 +172,9 @@ void TDataStd_Name::Paste (const Handle(TDF_Attribute)& into,
 Standard_OStream& TDataStd_Name::Dump (Standard_OStream& anOS) const
 {
   TDF_Attribute::Dump(anOS);
-  anOS << " Name=|"<<myString<<"|"<<endl;
+  anOS << " Name=|"<<myString<<"|";
+  Standard_Character sguid[Standard_GUID_SIZE_ALLOC];
+  myID.ToCString(sguid);
+  anOS << sguid << endl;
   return anOS;
 }
-
-
-//=======================================================================
-//function : Find (by the full path)
-//purpose  : Name
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const Handle(TDF_Data)& framework,
-//                                    const TDataStd_ListOfExtendedString& fullPath,
-//                                    Handle(TDataStd_Name)& name) 
-// {
-//   Handle(TDataStd_Name) Ncurrent;
-//   TDF_Label L, root = framework->Root();
-//   TDF_ChildIterator ChItr (root, Standard_True);
-//   TCollection_ExtendedString string, first = fullPath.First();
-//   TDataStd_ListOfExtendedString tmpPath;
-//   Standard_Boolean IsRootVisited = Standard_False;
-
-//   tmpPath.Assign(fullPath);
-//   if(tmpPath.Extent() > 0 ) tmpPath.RemoveFirst();  
-
-//   while( ChItr.More() ) {
-//     if( !IsRootVisited ) L = root;          //For the fisrt time visit the root label
-//     else L = ChItr.Value();
-
-//     if( L.FindAttribute(TDataStd_Name::GetID(), Ncurrent) ) { 
-//       string = Ncurrent->Get();
-//       if( (string == first ) && ((string.Length()) == (first.Length())) ) {   
-//      if( fullPath.Extent() == 1 ) {  
-//           name = Ncurrent;
-//           return Standard_True;  
-//      }
-//      if (Ncurrent->Find(tmpPath, name) ) return Standard_True;  
-//       }
-//       else {
-//      if( !Ncurrent->IsEmpty() ) { 
-//        //The root contains String different from first name in the path 
-//        if( !IsRootVisited ) return Standard_False; 
-//        ChItr.NextBrother(); continue; 
-//      }
-//       }
-//     }
-
-//     if( !IsRootVisited ) {
-//       IsRootVisited = Standard_True; 
-//       continue; 
-//     }
-
-//     ChItr.Next();
-//   }
-//   return Standard_False;  
-// }
-
-//=======================================================================
-//function : Find (by the relative path)
-//purpose  : Name
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const TDF_Label& currentLabel,
-//                                    const TDataStd_ListOfExtendedString& relativePath,
-//                                    Handle(TDataStd_Name)& name) 
-// { 
-//   Handle(TDataStd_Name) Ncurrent;
-//   TDF_ChildIterator ChItr (currentLabel, Standard_True);
-//   TCollection_ExtendedString string, first = relativePath.First();
-//   TDataStd_ListOfExtendedString tmpPath;
-//   tmpPath.Assign(relativePath);
-
-//   if( !currentLabel.FindAttribute(TDataStd_Name::GetID(), Ncurrent) )
-//     Standard_DomainError::Raise("There isn't the Name attribute on the label");
-
-   
-//   while( ChItr.More() ) {    
-//     if( ChItr.Value().FindAttribute(TDataStd_Name::GetID(), Ncurrent) ) {
-//       string = Ncurrent->Get();
-//       if( (string == first ) && ((string.Length()) == (first.Length())) ) {
-//      if( relativePath.Extent() == 1  ) {  //it has reached the end of the relative path
-//        name = Ncurrent;
-//           return Standard_True;
-//      }
-//      else {
-//           if (tmpPath.Extent() > 0) tmpPath.RemoveFirst();
-//           if (Find(ChItr.Value(), tmpPath, Ncurrent)) return Standard_True; 
-//      }
-//       }
-//       else {
-//      if( !Ncurrent->IsEmpty() ) {  
-//        ChItr.NextBrother(); continue;  
-//      }
-//       }
-//     }
-//     ChItr.Next();
-//   }  
-  
-//   return Standard_False;
-// }
-
-
-//=======================================================================
-//function : Find (by the relative path)
-//purpose  : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find(const TDF_Label& currentLabel,
-//                                   const TCollection_ExtendedString& string,
-//                                   Handle(TDataStd_Name)& name) 
-// {
-//   TDataStd_ListOfExtendedString tmpPath; 
-//   TDataStd_Name::MakePath(string, tmpPath,':');
-//   Handle(TDataStd_Name) Ncurrent;
-//   if (TDataStd_Name::Find(currentLabel,Ncurrent)) {
-//     return Ncurrent->Find(tmpPath, name);
-//   }
-//   return Standard_False;
-// }
-
-//=======================================================================
-//function : Find (by the full path)
-//purpose  : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find(const Handle(TDF_Data)& framework,
-//                                   const TCollection_ExtendedString& string,
-//                                   Handle(TDataStd_Name)& name) 
-// {
-//   TDataStd_ListOfExtendedString tmpPath; 
-//   TDataStd_Name::MakePath(string, tmpPath,':');
-//   return Find(framework, tmpPath, name);
-// }
-
-//=======================================================================
-//function : FullPath
-//purpose  : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::FullPath (TDF_AttributeList& path) const
-// {
-//   path.Clear();
-//   if( !IsEmpty() ) path.Append(this);
-//   TDF_Label L = Label();
-//   if(L.IsRoot() ) return Standard_True;
-//   Handle(TDataStd_Name) Ncur;
-//   while ( !L.IsRoot()) {  
-//     L = L.Father();
-//     if(L.FindAttribute (TDataStd_Name::GetID(), Ncur)) { 
-//       if( !Ncur->IsEmpty() )path.Prepend(Ncur); 
-//     }
-//   }    
-//   return Standard_True;
-// }
-
-//=======================================================================
-//function : MakePath
-//purpose  : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::MakePath(const TCollection_ExtendedString& path,
-//                                          TDataStd_ListOfExtendedString& pathlist,
-//                                          const Standard_ExtCharacter Separator) 
-// {
-//   TCollection_ExtendedString tmpPath = path, str;
-
-//   str+=Separator; str+=Separator;
-//   if( tmpPath.Search(str) != -1 ) return Standard_False;     //Not valid path (contains two adjacent separators)
-  
-//   if( tmpPath.Search(Separator) == -1 ) {  //The path contains only one name.
-//     pathlist.Append(path); 
-//     return Standard_True;
-//   }
-//   Standard_Integer i;
-//   while( (i = tmpPath.SearchFromEnd(Separator) ) != -1 ) {
-//    str = tmpPath.Split(i-1);
-//    str.Remove(1);
-//    pathlist.Prepend(str);
-//   } 
-//   if( tmpPath.Length() > 0 ) pathlist.Prepend(tmpPath);
-//   return Standard_True;
-// }
-
-
-//=======================================================================
-//function : MakePath
-//purpose  : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::MakePath(const TDF_AttributeList& pathlist,
-//                                          TCollection_ExtendedString& path,
-//                                          const Standard_ExtCharacter Separator) 
-// {
-//   TDF_ListIteratorOfAttributeList Itr(pathlist);
-//   Handle(TDataStd_Name) N;
-
-//   if( pathlist.Extent() == 0 ) return Standard_False;
-//   path.Clear();
-//   for(; Itr.More(); Itr.Next() ) {
-//     N = Handle(TDataStd_Name)::DownCast(Itr.Value());
-//     path = path + N->Get();
-//     path = path + Separator;
-//   }
-//   path.Remove(path.Length(), 1);
-//   return Standard_True;
-// }
-
-//=======================================================================
-//function : Find (by the relative path)
-//purpose  : Name
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const TDataStd_ListOfExtendedString& relativePath,
-//                                       Handle(TDataStd_Name)& name) const
-// { 
-//   Handle(TDataStd_Name) Ncurrent;
-//   TDF_ChildIterator ChItr (Label(), Standard_True);
-//   TCollection_ExtendedString string, first = relativePath.First();
-//   TDataStd_ListOfExtendedString tmpPath;
-//   tmpPath.Assign(relativePath);
-//   //
-//   while( ChItr.More() ) {    
-//     if( ChItr.Value().FindAttribute(TDataStd_Name::GetID(), Ncurrent) ) {
-//       string = Ncurrent->Get();
-//       if( (string == first ) && ((string.Length()) == (first.Length())) ) {
-//      if( relativePath.Extent() == 1  ) {  //it has reached the end of the relative path
-//        name = Ncurrent;
-//           return Standard_True;
-//      }
-//      else {
-//           if (tmpPath.Extent() > 0) tmpPath.RemoveFirst();
-//           if (Ncurrent->Find(tmpPath, name)) return Standard_True; 
-//      }
-//       }
-//       else {
-//      if (!Ncurrent->IsEmpty()) {  
-//        ChItr.NextBrother(); continue;  
-//      }
-//       }
-//     }
-//     ChItr.Next();
-//   }  
-//   return Standard_False;
-// }
-
-//=======================================================================
-//function : ChildNames
-//purpose  : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::ChildNames (TDF_AttributeList& list) const
-// {
-//   Standard_Boolean found = Standard_False;
-//   TDF_ChildIterator ChItr (Label(), Standard_True);
-//   Handle(TDataStd_Name) N;
-//   list.Clear();
-//   for(; ChItr.More(); ChItr.Next()) {
-//     if( ChItr.Value().FindAttribute(TDataStd_Name::GetID(), N) ) {
-//       list.Append(N);
-//       found = Standard_True;
-//       cout << N->Get() << endl;
-//     }
-//   }
-//   return found;
-// }