Salome HOME
updated copyright message
[modules/gui.git] / src / DDS / DDS_DicGroup.cxx
index 56197a523ef7287e5b20ad17b4a6786854a892fe..a80dde6729e13d3c5406906eb02ca09aadf4489c 100644 (file)
@@ -1,11 +1,14 @@
-// Copyright (C) 2005  CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+// Copyright (C) 2007-2023  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
-// This library is distributed in the hope that it will be useful
+// This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // Lesser General Public License for more details.
@@ -16,6 +19,7 @@
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 #include "DDS_DicGroup.h"
 
 #include "DDS_Dictionary.h"
 
 #include <UnitsAPI.hxx>
 
-#include <TColStd_SequenceOfAsciiString.hxx>
-
 #include <Standard_Failure.hxx>
 #include <Standard_ErrorHandler.hxx>
 
-IMPLEMENT_STANDARD_HANDLE(DDS_DicGroup, MMgt_TShared)
-IMPLEMENT_STANDARD_RTTIEXT(DDS_DicGroup, MMgt_TShared)
+IMPLEMENT_STANDARD_RTTIEXT(DDS_DicGroup, Standard_Transient)
 
 /*!
   \class DDS_DicGroup
-  
-  This class to provide set of DDS_DicItem objects from one component.
+  \brief This class provides a set of DDS_DicItem objects from one component.
 */
 
 /*!
-  Constructor. Create the group with name \aname.
+  \brief Constructor.
+
+  Create the group with name \a name.
+
+  \param name group name
 */
 DDS_DicGroup::DDS_DicGroup( const TCollection_AsciiString& name )
-: MMgt_TShared(),
-myName( name ),
-myActiveSystem( UNIT_SYSTEM_SI )
+: Standard_Transient(),
+  myName( name ),
+  myActiveSystem( UNIT_SYSTEM_SI )
 {
 }
 
 /*!
-  Copy constructor.
+  \brief Copy constructor (put in private section to prevent object copying).
 */
 DDS_DicGroup::DDS_DicGroup( const DDS_DicGroup& )
+: Standard_Transient()
 {
 }
 
 /*!
-  Get the name of group (component).
+  \brief Get the name of group (component).
+  \return group name
 */
 TCollection_AsciiString DDS_DicGroup::GetName() const
 {
@@ -65,8 +71,8 @@ TCollection_AsciiString DDS_DicGroup::GetName() const
 }
 
 /*!
-  Returns the names list of defined unit systems.
-  Parameter \atheSystems will contains the sequence of string names.
+  \brief Get the names of all defined units systems.
+  \param theSystemsSeq returning sequence of names
 */
 void DDS_DicGroup::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystemSeq ) const
 {
@@ -81,7 +87,12 @@ void DDS_DicGroup::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystemSeq )
 }
 
 /*!
-  Returns the label of unit system \aname. If unit system not found then empty string returned.
+  \brief Get the label of units system \a name.
+  
+  If units system is not found, empty string is returned.
+
+  \param make units system name
+  \return units system label
 */
 TCollection_ExtendedString DDS_DicGroup::GetUnitSystemLabel( const TCollection_AsciiString& name ) const
 {
@@ -92,7 +103,8 @@ TCollection_ExtendedString DDS_DicGroup::GetUnitSystemLabel( const TCollection_A
 }
 
 /*!
-  Gets the name of active unit system.
+  \brief Get the name of active units system.
+  \return active units system name
 */
 TCollection_AsciiString DDS_DicGroup::GetActiveUnitSystem() const
 {
@@ -100,7 +112,8 @@ TCollection_AsciiString DDS_DicGroup::GetActiveUnitSystem() const
 }
 
 /*!
-  Sets the name of active unit system.
+  \brief Set the active unit system.
+  \param theSystem name of the units system to be made active
 */
 void DDS_DicGroup::SetActiveUnitSystem( const TCollection_AsciiString& theSystem )
 {
@@ -109,14 +122,16 @@ void DDS_DicGroup::SetActiveUnitSystem( const TCollection_AsciiString& theSystem
 }
 
 /*!
-  Assignment operator.
+  \brief Assignment operator (put in private section to prevent object copying).
 */
 void DDS_DicGroup::operator=( const DDS_DicGroup& )
 {
 }
 
 /*!
-  Fill the internal data structures from XML parsed structures. Internal.
+  \brief Fill the internal data structures from XML parsed structures.
+  \param theComponentData component data DOM node
+  \param theDocElement document element DOM node
 */
 void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM_Element& theDocElement )
 {
@@ -140,6 +155,8 @@ void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM
 
       if ( !myUnitSystem.IsBound( aName ) )
         myUnitSystem.Bind( aName, aLabel );
+
+
     }
   }
 
@@ -165,17 +182,31 @@ void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM
 
     // 1. Attributes (id,label,units?,format?,required?)
     TCollection_AsciiString anID = aQuantity.getAttribute( DDS_Dictionary::KeyWord( "DATUM_ID" ) );
-    Handle(DDS_DicItem) aDicItem = new DDS_DicItem();
+    Handle(DDS_DicItem) aDicItem = CreateItem();
 
     aDicItem->myComponent = this;
     aDicItem->FillDataMap( anID, aQuantity, theComponentData, theDocElement, unitSystems );
     myDataMap.Add( anID, aDicItem );
+    
+    bool exist = false;
+    for( int i=1, n=myKeys.Length(); i<=n && !exist; i++ )
+      if( myKeys.Value( i )==anID )
+      {
+        std::cout << "Doubled key:" << anID << std::endl;
+        exist = true;
+      }
+    if( !exist )
+      myKeys.Append( anID );
   }
 }
 
 /*!
-  Gets dictionary item with specified identifier \atheID.
-  If dictionary item not found then null handle returned.
+  \brief Get the dictionary item with specified identifier \a theID.
+
+  If dictionary item is not found, null handle is returned.
+
+  \param theID item identifier
+  \return dictionary item
 */
 Handle(DDS_DicItem) DDS_DicGroup::GetDicItem( const TCollection_AsciiString& theID ) const
 {
@@ -186,3 +217,76 @@ Handle(DDS_DicItem) DDS_DicGroup::GetDicItem( const TCollection_AsciiString& the
 
   return aDicItem;
 }
+
+/*!
+  \brief Return all keys of the group
+  \param seq - string container to be filled with keys
+*/
+void DDS_DicGroup::GetKeys( TColStd_SequenceOfAsciiString& seq ) const
+{
+  seq = myKeys;
+}
+
+/*!
+  \brief Instantiate new dictionary item, used for customization of
+         data dictionary items.
+  \return New dictionary item instance.
+*/
+Handle(DDS_DicItem) DDS_DicGroup::CreateItem() const
+{
+  return new DDS_DicItem();
+}
+
+/*!
+  \brief Bind dictionary item to ID
+  \return Standard_True if the item has been succesfully bound.
+          Standard_False if there is an item with same id.
+*/
+Standard_Boolean DDS_DicGroup::AddDicItem( const TCollection_AsciiString& theID,
+                                           const Handle(DDS_DicItem)& theDicItem )
+{
+  if ( myDataMap.Contains( theID ) )
+    return Standard_False;
+
+  myDataMap.Add( theID, theDicItem );
+  myKeys.Append( theID );
+
+  return Standard_True;
+}
+
+/*!
+  \brief Check if there is item bounded by id.
+  \return Standard_True if there is an item bound in map with given id.
+*/
+Standard_Boolean DDS_DicGroup::HasDicItem( const TCollection_AsciiString& theID ) const 
+{
+  return myDataMap.Contains( theID );
+}
+
+/*!
+  \brief Clear dictionary items map
+*/
+void DDS_DicGroup::RemoveAllDicItems() 
+{
+  myDataMap.Clear();
+  myKeys.Clear();
+}
+
+/*!
+  \brief Returns a reference to a map. Can be used to iterate through
+         dictionary items.
+*/
+const DDS_IndexedDataMapOfDicItems& DDS_DicGroup::GetItemMap() const
+{
+  return myDataMap;
+}
+
+/*!
+  \brief Add new unit system and bind its label name.
+  \return Standard_False if there is other system bound by this key.
+*/
+Standard_Boolean DDS_DicGroup::AddUnitSystem( const TCollection_AsciiString& theSystemKey,
+                                              const TCollection_ExtendedString& theSystemLabel )
+{
+  return myUnitSystem.Bind( theSystemKey, theSystemLabel );
+}