]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
This commit was generated by cvs2git to create tag 'Tag_09032006'. Tag_09032006
authoradmin <salome-admin@opencascade.com>
Tue, 7 Mar 2006 15:31:35 +0000 (15:31 +0000)
committeradmin <salome-admin@opencascade.com>
Tue, 7 Mar 2006 15:31:35 +0000 (15:31 +0000)
Sprout from OCC_development_for_3_2_0a2 2006-03-02 11:06:28 UTC srn <srn@opencascade.com> 'Removed unnecessary dlopen flag'
Cherrypick from OCC_development_for_3_2_0a2 2006-03-07 15:31:34 UTC asv <asv@opencascade.com> 'Merged with OCC_visual_parameters_2006 branch.  It consists development of persistent visual parameters (GUI states) and Dump Python functionality.  Developers: srn, asv.':
    src/CASCatch/CASCatch.hxx
    src/SALOMEDS/SALOMEDS_AttributeParameter.cxx
    src/SALOMEDS/SALOMEDS_AttributeParameter.hxx
    src/SALOMEDS/SALOMEDS_AttributeParameter_i.cxx
    src/SALOMEDS/SALOMEDS_AttributeParameter_i.hxx
    src/SALOMEDS/SALOMEDS_IParameters.cxx
    src/SALOMEDS/SALOMEDS_IParameters.hxx
    src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx
    src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx
    src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.hxx
    src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx
    src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx

12 files changed:
src/CASCatch/CASCatch.hxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_AttributeParameter.cxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_AttributeParameter.hxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_AttributeParameter_i.cxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_AttributeParameter_i.hxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_IParameters.cxx [new file with mode: 0644]
src/SALOMEDS/SALOMEDS_IParameters.hxx [new file with mode: 0644]
src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx [new file with mode: 0644]
src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx [new file with mode: 0644]
src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.hxx [new file with mode: 0644]
src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx [new file with mode: 0644]
src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx [new file with mode: 0644]

diff --git a/src/CASCatch/CASCatch.hxx b/src/CASCatch/CASCatch.hxx
new file mode 100644 (file)
index 0000000..a5af66a
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+
+#ifndef _CASCatch_HeaderFile
+#define _CASCatch_HeaderFile
+
+#include <Standard_Failure.hxx>
+#include <Standard_ErrorHandler.hxx>
+
+
+#ifdef try
+#  undef try
+#endif
+
+#ifdef catch
+#  undef catch
+#endif
+
+#ifdef NO_CXX_EXCEPTION
+#  if defined(DO_ABORT)
+#    define CASCatch_TRY \
+       Standard_ErrorHandler _Function; \
+       K_SETJMP = 1 ; \
+       if(DoesNotAbort(_Function))
+#   else  //If DO_ABORT is not defined
+#     define CASCatch_TRY \
+        Standard_ErrorHandler _Function; \
+        if(DoesNotAbort(_Function))
+#   endif //DO_ABORT
+#   define CASCatch_CATCH(Error)   \
+      else if(_Function.Catches(STANDARD_TYPE(Error)))
+#else
+#  define CASCatch_TRY try
+#  define CASCatch_CATCH catch
+#endif //NO_CXX_EXCEPTION
+
+
+#endif
diff --git a/src/SALOMEDS/SALOMEDS_AttributeParameter.cxx b/src/SALOMEDS/SALOMEDS_AttributeParameter.cxx
new file mode 100644 (file)
index 0000000..897ca78
--- /dev/null
@@ -0,0 +1,481 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDS_AttributeParameter.cxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+
+#include "SALOMEDS_AttributeParameter.hxx"
+#include "SALOMEDS.hxx"
+
+#include <string>
+#include <TCollection_AsciiString.hxx> 
+
+//=======================================================================
+/*!
+ * Function : Constructor
+ * Purpose  : Creates a new instance of SALOMEDS_AttributeParameter
+ */
+//=======================================================================
+SALOMEDS_AttributeParameter::SALOMEDS_AttributeParameter(const Handle(SALOMEDSImpl_AttributeParameter)& theAttr)
+:SALOMEDS_GenericAttribute(theAttr)
+{}
+
+//=======================================================================
+/*!
+ * Function : Constructor
+ * Purpose  : Creates a new instance of SALOMEDS_AttributeParameter
+ */
+//=======================================================================
+SALOMEDS_AttributeParameter::SALOMEDS_AttributeParameter(SALOMEDS::AttributeParameter_ptr theAttr)
+:SALOMEDS_GenericAttribute(theAttr)
+{}
+
+//=======================================================================
+/*!
+ * Function : Destructor
+ * Purpose  : Destroys the instance of SALOMEDS_AttributeParameter
+ */
+//=======================================================================
+SALOMEDS_AttributeParameter::~SALOMEDS_AttributeParameter()
+{}
+
+//=======================================================================
+/*!
+ * Function : SetInt
+ * Purpose  : Associates a integer value with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetInt(const string& theID, const int theValue) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetInt(theID, theValue);
+  }
+  else
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetInt(theID.c_str(), theValue);
+}
+
+//=======================================================================
+/*!
+ * Function : GetInt
+ * Purpose  : Returns a int value associated with the given ID
+ */
+//=======================================================================
+int SALOMEDS_AttributeParameter::GetInt(const string& theID) 
+{
+  int aValue;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    aValue = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetInt(theID);
+  }
+  else
+    aValue = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetInt(theID.c_str());
+  return aValue;
+}
+
+//=======================================================================
+/*!
+ * Function : SetReal
+ * Purpose  : Associates a double value with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetReal(const string& theID, const double& theValue) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetReal(theID, theValue);
+  }
+  else
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetReal(theID.c_str(), theValue);
+}
+//=======================================================================
+/*!
+ * Function : GetReal
+ * Purpose  : Returns a double value associated with the given ID
+ */
+//=======================================================================
+double SALOMEDS_AttributeParameter::GetReal(const string& theID) 
+{
+  double aValue;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    aValue = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetReal(theID);
+  }
+  else
+    aValue = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetReal(theID.c_str());
+  return aValue;
+}
+
+//=======================================================================
+/*!
+ * Function : SetString
+ * Purpose  : Associates a string with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetString(const string& theID, const string& theValue) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetString(theID, theValue);
+  }
+  else
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetString(theID.c_str(), theValue.c_str());
+}
+//=======================================================================
+/*!
+ * Function : GetString
+ * Purpose  : Returns a string associated with the given ID
+ */
+//=======================================================================
+string SALOMEDS_AttributeParameter::GetString(const string& theID) 
+{
+  string aValue;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    aValue = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetString(theID);
+  }
+  else
+    aValue = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetString(theID.c_str());
+  return aValue;
+}
+  
+//=======================================================================
+/*!
+ * Function : SetBool
+ * Purpose  : Associates a bool value with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetBool(const string& theID, const bool& theValue) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetBool(theID, theValue);
+  }
+  else
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetBool(theID.c_str(), theValue);
+}
+
+//=======================================================================
+/*!
+ * Function : GetBool
+ * Purpose  : Returns a bool value associated with the ID
+ */
+//=======================================================================
+bool SALOMEDS_AttributeParameter::GetBool(const string& theID) 
+{
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetBool(theID);
+  }
+  else
+    return SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetBool(theID.c_str());
+}
+  
+//=======================================================================
+/*!
+ * Function : SetRealArray
+ * Purpose  : Associates an array of double values with the given ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetRealArray(const string& theID, const vector<double>& theArray) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetRealArray(theID, theArray);
+  }
+  else {
+    SALOMEDS::DoubleSeq_var aSeq = new SALOMEDS::DoubleSeq;
+    int length = theArray.size();
+    if(length) {
+      aSeq->length(length);
+      for(int i = 0; i<length; i++) aSeq[i] = theArray[i];
+    }
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetRealArray(theID.c_str(), aSeq);
+  }
+}
+//=======================================================================
+/*!
+ * Function : GetRealArray
+ * Purpose  : Returns an array of double values associated with the ID
+ */
+//=======================================================================
+vector<double> SALOMEDS_AttributeParameter::GetRealArray(const string& theID) 
+{
+  vector<double> v;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetRealArray(theID);
+  }
+  else {
+    SALOMEDS::DoubleSeq_var aSeq = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetRealArray(theID.c_str());    
+    int length = aSeq->length();
+    if(length) {
+      v.resize(length);
+      for(int i = 0; i < length; i++) v[i] = aSeq[i];
+    }
+  }
+  return v;
+}
+
+//=======================================================================
+/*!
+ * Function : SetIntArray
+ * Purpose  : Associates an array of int values with the given ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetIntArray(const string& theID, const vector<int>& theArray) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetIntArray(theID, theArray);
+  }
+  else {
+    SALOMEDS::LongSeq_var aSeq = new SALOMEDS::LongSeq;
+    int length = theArray.size();
+    if(length) {
+      aSeq->length(length);
+      for(int i = 0; i<length; i++) aSeq[i] = theArray[i];
+    }
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetIntArray(theID.c_str(), aSeq);
+  }
+}
+//=======================================================================
+/*!
+ * Function : GetIntArray
+ * Purpose  : Returns an array of int values associated with the ID
+ */
+//=======================================================================
+vector<int> SALOMEDS_AttributeParameter::GetIntArray(const string& theID) 
+{
+  vector<int> v;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetIntArray(theID);
+  }
+  else {
+    SALOMEDS::LongSeq_var aSeq = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetIntArray(theID.c_str());    
+    int length = aSeq->length();
+    if(length) {
+      v.resize(length);
+      for(int i = 0; i < length; i++) v[i] = aSeq[i];
+    }
+  }
+  return v;
+}
+
+//=======================================================================
+/*!
+ * Function : SetStrArray
+ * Purpose  : Associates an array of string values with the given ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter::SetStrArray(const string& theID, const vector<string>& theArray) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->SetStrArray(theID, theArray);
+  }
+  else {
+    SALOMEDS::StringSeq_var aSeq = new SALOMEDS::StringSeq;
+    int length = theArray.size();
+    if(length) {
+      aSeq->length(length);
+      for(int i = 0; i<length; i++) aSeq[i] = CORBA::string_dup(theArray[i].c_str());
+    }
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->SetStrArray(theID.c_str(), aSeq);
+  }
+}
+//=======================================================================
+/*!
+ * Function : GetStrArray
+ * Purpose  : Returns an array of string values associated with the ID
+ */
+//=======================================================================
+vector<string> SALOMEDS_AttributeParameter::GetStrArray(const string& theID) 
+{
+  vector<string> v;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetStrArray(theID);
+  }
+  else {
+    SALOMEDS::StringSeq_var aSeq = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetStrArray(theID.c_str());    
+    int length = aSeq->length();
+    if(length) {
+      v.resize(length);
+      for(int i = 0; i < length; i++) v[i] = string(aSeq[i].in());
+    }
+  }
+  return v;
+}
+
+
+//=======================================================================
+/*!
+ * Function : IsSet
+ * Purpose  : Returns true if for the ID of given type was assigned \n
+ *            a value in the attribute
+ */
+//======================================================================= 
+bool SALOMEDS_AttributeParameter::IsSet(const string& theID, const int theType) 
+{
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->IsSet(theID, (Parameter_Types)theType);
+  }
+  else 
+    return SALOMEDS::AttributeParameter::_narrow(_corba_impl)->IsSet(theID.c_str(), theType);
+}
+
+//=======================================================================
+/*!
+ * Function : RemoveID
+ * Purpose  : Removes a parameter with given ID
+ */
+//======================================================================= 
+bool SALOMEDS_AttributeParameter::RemoveID(const string& theID, const int theType) 
+{
+  CheckLocked();
+
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->RemoveID(theID, (Parameter_Types)theType);
+  }
+  else
+    return SALOMEDS::AttributeParameter::_narrow(_corba_impl)->RemoveID(theID.c_str(), theType);
+}
+
+//=======================================================================
+/*!
+ * Function : GetFather
+ * Purpose  : Returns a father attribute for this attribute
+ */
+//=======================================================================
+_PTR(AttributeParameter) SALOMEDS_AttributeParameter::GetFather() 
+{
+  SALOMEDSClient_AttributeParameter* AP = NULL;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter) AP_impl = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->GetFather();
+    if(AP_impl.IsNull()) return _PTR(AttributeParameter)(AP);
+    AP = new SALOMEDS_AttributeParameter(AP_impl);
+  }
+  else {
+    SALOMEDS::AttributeParameter_var AP_impl = SALOMEDS::AttributeParameter::_narrow(_corba_impl)->GetFather();
+    if(CORBA::is_nil(AP_impl)) return _PTR(AttributeParameter)(AP);
+    AP = new SALOMEDS_AttributeParameter(AP_impl);
+  }
+  
+  return _PTR(AttributeParameter)(AP);
+}
+
+//=======================================================================
+/*!
+ * Function : HasFather
+ * Purpose  : Returns True if the attribute has a father attribute
+ */
+//======================================================================= 
+bool SALOMEDS_AttributeParameter::HasFather() 
+{
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->HasFather();
+  }
+  else 
+    return SALOMEDS::AttributeParameter::_narrow(_corba_impl)->HasFather();
+}
+
+//=======================================================================
+/*!
+ * Function : IsRoot
+ * Purpose  : Returns True is the attribute is highest in an hierachy
+ */
+//=======================================================================
+bool SALOMEDS_AttributeParameter::IsRoot()
+{
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->IsRoot();
+  }
+  else 
+    return SALOMEDS::AttributeParameter::_narrow(_corba_impl)->IsRoot();
+}
+
+//=======================================================================
+/*!
+ * Function : Clear
+ * Purpose  : Clears the content of the attribute
+ */
+//======================================================================= 
+void SALOMEDS_AttributeParameter::Clear() 
+{
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl)->Clear();
+  }
+  else 
+    SALOMEDS::AttributeParameter::_narrow(_corba_impl)->Clear();
+}
+
+//=======================================================================
+/*!
+ * Function : GetIDs
+ * Purpose  : Returns an array of all ID's of the given type
+ */
+//=======================================================================
+vector<string> SALOMEDS_AttributeParameter::GetIDs(const int theType)
+{
+  vector<string> v;
+  if(_isLocal) {
+    SALOMEDS::Locker lock; 
+    Handle(SALOMEDSImpl_AttributeParameter) AP_impl = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_local_impl);
+    return AP_impl->GetIDs((Parameter_Types)theType);
+  }
+  else {
+    SALOMEDS::AttributeParameter_var AP_impl = SALOMEDS::AttributeParameter::_narrow(_corba_impl);
+    SALOMEDS::StringSeq_var CorbaSeq = AP_impl->GetIDs(theType);
+    int length = CorbaSeq->length();
+    if(length) {
+      v.resize(length);
+      for(int i = 0; i <length; i++) v[i] = string(CorbaSeq[i].in());
+    }
+  }
+
+  return v;
+}
diff --git a/src/SALOMEDS/SALOMEDS_AttributeParameter.hxx b/src/SALOMEDS/SALOMEDS_AttributeParameter.hxx
new file mode 100644 (file)
index 0000000..9a7d0dd
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDS_AttributeParameter.hxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+
+#ifndef SALOMEDS_AttributeParameter_HeaderFile
+#define SALOMEDS_AttributeParameter_HeaderFile
+
+#include "SALOMEDSClient_AttributeParameter.hxx"
+#include "SALOMEDS_GenericAttribute.hxx"
+#include "SALOMEDSImpl_AttributeParameter.hxx"
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOMEDS)
+#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
+
+class SALOMEDS_AttributeParameter: public SALOMEDS_GenericAttribute, public SALOMEDSClient_AttributeParameter
+{
+public:  
+  SALOMEDS_AttributeParameter(const Handle(SALOMEDSImpl_AttributeParameter)& theAttr);
+  SALOMEDS_AttributeParameter(SALOMEDS::AttributeParameter_ptr theAttr);
+  ~SALOMEDS_AttributeParameter();
+
+  virtual void SetInt(const std::string& theID, const int theValue);
+  virtual int GetInt(const std::string& theID);
+
+  virtual void SetReal(const std::string& theID, const double& theValue);
+  virtual double GetReal(const std::string& theID);
+
+  virtual void SetString(const std::string& theID, const std::string& theValue);
+  virtual std::string GetString(const std::string& theID);
+  
+  virtual void SetBool(const std::string& theID, const bool& theValue);
+  virtual bool GetBool(const std::string& theID);
+  
+  virtual void SetRealArray(const std::string& theID, const std::vector<double>& theArray);
+  virtual std::vector<double> GetRealArray(const std::string& theID);
+  
+  virtual void SetIntArray(const std::string& theID, const std::vector<int>& theArray);
+  virtual std::vector<int> GetIntArray(const std::string& theID);
+
+  virtual void SetStrArray(const std::string& theID, const std::vector<std::string>& theArray);
+  virtual std::vector<std::string> GetStrArray(const std::string& theID);
+
+  virtual bool IsSet(const std::string& theID, const int theType);
+  
+  virtual bool RemoveID(const std::string& theID, const int theType);
+
+  virtual _PTR(AttributeParameter) GetFather();
+  virtual bool HasFather();
+  virtual bool IsRoot();
+  
+  virtual void Clear();
+
+  virtual std::vector<std::string> GetIDs(const int theType);
+};
+
+#endif
diff --git a/src/SALOMEDS/SALOMEDS_AttributeParameter_i.cxx b/src/SALOMEDS/SALOMEDS_AttributeParameter_i.cxx
new file mode 100644 (file)
index 0000000..ff5023d
--- /dev/null
@@ -0,0 +1,347 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDS_AttributeParameter_i.cxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+
+
+#include "SALOMEDS_AttributeParameter_i.hxx"
+#include "SALOMEDS.hxx"
+#include <TCollection_AsciiString.hxx>
+
+#include <vector>
+
+using namespace std;
+
+//=======================================================================
+/*!
+ * Function : SetInt
+ * Purpose  : Associates a integer value with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::SetInt(const char* theID, CORBA::Long theValue)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->SetInt(theID, theValue);
+}
+
+//=======================================================================
+/*!
+ * Function : GetInt
+ * Purpose  : Returns a int value associated with the given ID
+ */
+//=======================================================================
+CORBA::Long SALOMEDS_AttributeParameter_i::GetInt(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetInt(theID);
+}
+
+//=======================================================================
+/*!
+ * Function : SetReal
+ * Purpose  : Associates a double value with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::SetReal(const char* theID, const CORBA::Double theValue)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->SetReal(theID, theValue);
+}
+
+//=======================================================================
+/*!
+ * Function : GetReal
+ * Purpose  : Returns a double value associated with the given ID
+ */
+//=======================================================================
+CORBA::Double SALOMEDS_AttributeParameter_i::GetReal(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetReal(theID);
+}
+
+//=======================================================================
+/*!
+ * Function : SetString
+ * Purpose  : Associates a string with the ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::SetString(const char* theID, const char* theValue)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  Handle(SALOMEDSImpl_AttributeParameter) impl = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl);
+  impl->SetString(theID, theValue);
+}
+
+//=======================================================================
+/*!
+ * Function : GetString
+ * Purpose  : Returns a string associated with the given ID
+ */
+//=======================================================================
+char* SALOMEDS_AttributeParameter_i::GetString(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  Handle(SALOMEDSImpl_AttributeParameter) impl = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl);
+  CORBA::String_var c_s = CORBA::string_dup(impl->GetString(theID).c_str());
+  return c_s._retn();
+}
+
+//=======================================================================
+/*!
+ * Function : SetBool
+ * Purpose  : Associates a bool value with the ID
+ */
+//=======================================================================  
+void SALOMEDS_AttributeParameter_i::SetBool(const char* theID, CORBA::Boolean theValue)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->SetBool(theID, theValue);
+}
+
+//=======================================================================
+/*!
+ * Function : GetBool
+ * Purpose  : Returns a bool value associated with the ID
+ */
+//=======================================================================
+CORBA::Boolean SALOMEDS_AttributeParameter_i::GetBool(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetBool(theID);
+}
+  
+//=======================================================================
+/*!
+ * Function : SetRealArray
+ * Purpose  : Associates an array of double values with the given ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::SetRealArray(const char* theID, const SALOMEDS::DoubleSeq& theArray)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  vector<double> v;
+  int length = theArray.length();
+  if(length) {
+    v.resize(length);
+    for(int i = 0; i<length; i++) v[i] = theArray[i];
+  }
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->SetRealArray(theID, v);
+}
+
+//=======================================================================
+/*!
+ * Function : GetRealArray
+ * Purpose  : Returns an array of double values associated with the ID
+ */
+//=======================================================================
+SALOMEDS::DoubleSeq* SALOMEDS_AttributeParameter_i::GetRealArray(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  SALOMEDS::DoubleSeq_var aSeq = new SALOMEDS::DoubleSeq;
+  vector<double> v = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetRealArray(theID);
+  int length = v.size();
+  if(length) {
+    aSeq->length(length);
+    for(int i = 0; i<length; i++) aSeq[i] = v[i];
+  }
+  return aSeq._retn();
+}
+//=======================================================================
+/*!
+ * Function : SetIntArray
+ * Purpose  : Associates an array of int values with the given ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::SetIntArray(const char* theID, const SALOMEDS::LongSeq& theArray)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  vector<int> v;
+  int length = theArray.length();
+  if(length) {
+    v.resize(length);
+    for(int i = 0; i<length; i++) v[i] = theArray[i];
+  }
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->SetIntArray(theID, v);
+}
+
+//=======================================================================
+/*!
+ * Function : GetIntArray
+ * Purpose  : Returns an array of int values associated with the ID
+ */
+//=======================================================================
+SALOMEDS::LongSeq* SALOMEDS_AttributeParameter_i::GetIntArray(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  SALOMEDS::LongSeq_var aSeq = new SALOMEDS::LongSeq;
+  vector<int> v = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetIntArray(theID);
+  int length = v.size();
+  if(length) {
+    aSeq->length(length);
+    for(int i = 0; i<length; i++) aSeq[i] = v[i];
+  }
+  return aSeq._retn();
+}
+  
+//=======================================================================
+/*!
+ * Function : SetStrArray
+ * Purpose  : Associates an array of string values with the given ID
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::SetStrArray(const char* theID, const SALOMEDS::StringSeq& theArray)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  vector<string> v;
+  int length = theArray.length();
+  if(length) {
+    v.resize(length);
+    for(int i = 0; i<length; i++) v[i] = string(theArray[i].in());
+  }
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->SetStrArray(theID, v);
+}
+
+//=======================================================================
+/*!
+ * Function : GetStrArray
+ * Purpose  : Returns an array of string values associated with the ID
+ */
+//=======================================================================
+SALOMEDS::StringSeq* SALOMEDS_AttributeParameter_i::GetStrArray(const char* theID)
+{
+  SALOMEDS::Locker lock; 
+  SALOMEDS::StringSeq_var aSeq = new SALOMEDS::StringSeq;
+  vector<string> v = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetStrArray(theID);
+  int length = v.size();
+  if(length) {
+    aSeq->length(length);
+    for(int i = 0; i<length; i++) aSeq[i] = CORBA::string_dup(v[i].c_str());
+  }
+  return aSeq._retn();
+}
+  
+//=======================================================================
+/*!
+ * Function : IsSet
+ * Purpose  : Returns true if for the ID of given type was assigned \n
+ *            a value in the attribute
+ */
+//=======================================================================
+CORBA::Boolean SALOMEDS_AttributeParameter_i::IsSet(const char* theID, CORBA::Long theType)
+{
+  SALOMEDS::Locker lock; 
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->IsSet(theID, (Parameter_Types)theType);
+}
+
+//=======================================================================
+/*!
+ * Function : RemoveID
+ * Purpose  : Removes a parameter with given ID
+ */
+//=======================================================================  
+CORBA::Boolean SALOMEDS_AttributeParameter_i::RemoveID(const char* theID, CORBA::Long theType)
+{
+  SALOMEDS::Locker lock; 
+  CheckLocked();
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->RemoveID(theID, (Parameter_Types)theType);
+}
+
+//=======================================================================
+/*!
+ * Function : GetFather
+ * Purpose  : Returns a father attribute for this attribute
+ */
+//=======================================================================
+SALOMEDS::AttributeParameter_ptr SALOMEDS_AttributeParameter_i::GetFather()
+{
+  SALOMEDS::Locker lock; 
+  Handle(SALOMEDSImpl_AttributeParameter) impl = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl);
+  SALOMEDS_AttributeParameter_i* attr = new SALOMEDS_AttributeParameter_i(impl, _orb);
+  return attr->AttributeParameter::_this();
+}
+
+//=======================================================================
+/*!
+ * Function : HasFather
+ * Purpose  : Returns True if the attribute has a father attribute
+ */
+//=======================================================================
+CORBA::Boolean SALOMEDS_AttributeParameter_i::HasFather()
+{
+  SALOMEDS::Locker lock; 
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->HasFather();
+}
+
+//=======================================================================
+/*!
+ * Function : IsRoot
+ * Purpose  : Returns True is the attribute is highest in an hierachy
+ */
+//=======================================================================
+CORBA::Boolean SALOMEDS_AttributeParameter_i::IsRoot()
+{
+  SALOMEDS::Locker lock; 
+  return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->IsRoot();
+}
+
+//=======================================================================
+/*!
+ * Function : IsRoot
+ * Purpose  : Clears the content of the attribute
+ */
+//=======================================================================
+void SALOMEDS_AttributeParameter_i::Clear()
+{
+  SALOMEDS::Locker lock; 
+  Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->Clear();
+}
+
+
+//=======================================================================
+/*!
+ * Function : GetIDs
+ * Purpose  : Returns an array of all ID's of the given type
+ */
+//=======================================================================
+SALOMEDS::StringSeq* SALOMEDS_AttributeParameter_i::GetIDs(CORBA::Long theType)
+{
+  SALOMEDS::Locker lock; 
+  SALOMEDS::StringSeq_var CorbaSeq = new SALOMEDS::StringSeq;
+  vector<string> A = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetIDs((Parameter_Types)theType);
+
+  if(A.size()) {
+    int length = A.size();
+    CorbaSeq->length(length);
+    for (int i = 0; i < length; i++) CorbaSeq[i] = CORBA::string_dup(A[i].c_str());;
+  }
+
+  return CorbaSeq._retn();
+}
diff --git a/src/SALOMEDS/SALOMEDS_AttributeParameter_i.hxx b/src/SALOMEDS/SALOMEDS_AttributeParameter_i.hxx
new file mode 100644 (file)
index 0000000..c393a20
--- /dev/null
@@ -0,0 +1,89 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDS_AttributeParameter_i.hxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+//  $Header:
+
+#ifndef SALOMEDS_AttributeParameter_i_HeaderFile
+#define SALOMEDS_AttributeParameter_i_HeaderFile
+
+// IDL headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
+
+#include "SALOMEDS_GenericAttribute_i.hxx"
+#include "SALOMEDSImpl_AttributeParameter.hxx"
+
+/*!
+ Class: SALOMEDS_AttributeParameter
+ Description : AttributeParameter is a universal container of basic types 
+*/
+
+class SALOMEDS_AttributeParameter_i: public virtual POA_SALOMEDS::AttributeParameter,
+                                    public virtual SALOMEDS_GenericAttribute_i 
+{
+public:
+  
+  SALOMEDS_AttributeParameter_i(const Handle(SALOMEDSImpl_AttributeParameter)& theAttr, CORBA::ORB_ptr orb) 
+    :SALOMEDS_GenericAttribute_i(theAttr, orb) {}; 
+
+  ~SALOMEDS_AttributeParameter_i() {};
+
+
+  virtual void SetInt(const char* theID, CORBA::Long theValue);
+  virtual CORBA::Long GetInt(const char* theID);
+
+  virtual void SetReal(const char* theID, const CORBA::Double theValue);
+  virtual CORBA::Double GetReal(const char* theID);
+
+  virtual void SetString(const char* theID, const char* theValue);
+  virtual char* GetString(const char* theID);
+  
+  virtual void SetBool(const char* theID, CORBA::Boolean theValue);
+  virtual CORBA::Boolean GetBool(const char* theID);
+  
+  virtual void SetRealArray(const char* theID, const SALOMEDS::DoubleSeq& theArray);
+  virtual SALOMEDS::DoubleSeq* GetRealArray(const char* theID);
+
+  virtual void SetIntArray(const char* theID, const SALOMEDS::LongSeq& theArray);
+  virtual SALOMEDS::LongSeq* GetIntArray(const char* theID);
+
+  virtual void SetStrArray(const char* theID, const SALOMEDS::StringSeq& theArray);
+  virtual SALOMEDS::StringSeq* GetStrArray(const char* theID);
+  
+  virtual CORBA::Boolean IsSet(const char* theID, CORBA::Long theType);
+  
+  virtual CORBA::Boolean RemoveID(const char* theID, CORBA::Long theType);
+
+  virtual SALOMEDS::AttributeParameter_ptr GetFather();
+  virtual CORBA::Boolean HasFather();
+  virtual CORBA::Boolean IsRoot();
+
+  virtual void Clear();
+
+  virtual SALOMEDS::StringSeq* GetIDs(CORBA::Long theType);
+
+};
+
+
+
+
+#endif
diff --git a/src/SALOMEDS/SALOMEDS_IParameters.cxx b/src/SALOMEDS/SALOMEDS_IParameters.cxx
new file mode 100644 (file)
index 0000000..6540d9f
--- /dev/null
@@ -0,0 +1,279 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+// 
+// 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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+#include "SALOMEDS_IParameters.hxx"
+#include <utilities.h>
+
+#include <TCollection_AsciiString.hxx>
+
+using namespace std;
+
+#define PT_INTEGER   0
+#define PT_REAL      1
+#define PT_BOOLEAN   2
+#define PT_STRING    3
+#define PT_REALARRAY 4
+#define PT_INTARRAY  5
+#define PT_STRARRAY  6
+
+#define _AP_LISTS_LIST_ "AP_LISTS_LIST"
+#define _AP_ENTRIES_LIST_ "AP_ENTRIES_LIST"
+#define _AP_PROPERTIES_LIST_ "AP_PROPERTIES_LIST"
+#define _AP_DUMP_PYTHON_ "AP_DUMP_PYTHON"
+
+/*!
+  Constructor
+*/
+SALOMEDS_IParameters::SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap)
+{
+  if(!ap) return;
+  _ap = ap;
+  _PTR(SObject) so = _ap->GetSObject();
+  _study = so->GetStudy();
+}
+
+SALOMEDS_IParameters::~SALOMEDS_IParameters()
+{
+  _compNames.clear();
+}
+
+int SALOMEDS_IParameters::append(const string& listName, const string& value)
+{
+  if(!_ap) return -1;
+  vector<string> v;
+  if(!_ap->IsSet(listName, PT_STRARRAY)) {
+    if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) _ap->SetStrArray(_AP_LISTS_LIST_, v);
+    if(listName != _AP_ENTRIES_LIST_ && 
+       listName != _AP_PROPERTIES_LIST_) {
+      append(_AP_LISTS_LIST_, listName);
+    }
+    _ap->SetStrArray(listName, v);
+  }
+  v = _ap->GetStrArray(listName);
+  v.push_back(value);
+  _ap->SetStrArray(listName, v);
+  return (v.size()-1);
+}
+
+int SALOMEDS_IParameters::nbValues(const string& listName)
+{
+  if(!_ap) return -1;
+  if(!_ap->IsSet(listName, PT_STRARRAY)) return 0;
+  vector<string> v = _ap->GetStrArray(listName);
+  return v.size();
+}
+
+vector<string> SALOMEDS_IParameters::getValues(const string& listName)
+{
+  vector<string> v;
+  if(!_ap) return v;
+  if(!_ap->IsSet(listName, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(listName);
+}
+
+
+string SALOMEDS_IParameters::getValue(const string& listName, int index)
+{
+  if(!_ap) return "";
+  if(!_ap->IsSet(listName, PT_STRARRAY)) return "";
+  vector<string> v = _ap->GetStrArray(listName);
+  if(index >= v.size()) return ""; 
+  return v[index];
+}
+
+vector<string> SALOMEDS_IParameters::getLists()
+{
+  vector<string> v;
+  if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(_AP_LISTS_LIST_);
+}
+
+void SALOMEDS_IParameters::setParameter(const string& entry, const string& parameterName, const string& value)
+{
+  if(!_ap) return;
+  vector<string> v;
+  if(!_ap->IsSet(entry, PT_STRARRAY)) {
+    append(_AP_ENTRIES_LIST_, entry); //Add the entry to the internal list of entries
+    _ap->SetStrArray(entry, v);
+  }
+  v = _ap->GetStrArray(entry);
+  v.push_back(parameterName);
+  v.push_back(value);
+  _ap->SetStrArray(entry, v);
+}
+
+
+string SALOMEDS_IParameters::getParameter(const string& entry, const string& parameterName)
+{
+  if(!_ap) return "";
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return "";
+  vector<string> v = _ap->GetStrArray(entry);
+  int length = v.size();
+  for(int i = 0; i<length; i+=1) {
+    if(v[i] == parameterName) return v[i+1];
+  }
+  return "";
+}
+
+
+vector<string> SALOMEDS_IParameters::getAllParameterNames(const string& entry)
+{
+  vector<string> v, names;
+  if(!_ap) return v; 
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
+  v = _ap->GetStrArray(entry);
+  int length = v.size();
+  for(int i = 0; i<length; i+=2) {
+    names.push_back(v[i]);
+  }
+  return names;
+}
+
+vector<string> SALOMEDS_IParameters::getAllParameterValues(const string& entry)
+{
+  vector<string> v, values;
+  if(!_ap) return v; 
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
+  v = _ap->GetStrArray(entry);
+  int length = v.size();
+  for(int i = 1; i<length; i+=2) {
+    values.push_back(v[i]);
+  }
+  return values; 
+}
+
+int SALOMEDS_IParameters::getNbParameters(const string& entry)
+{
+  if(!_ap) return -1;
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return -1;
+  return  _ap->GetStrArray(entry).size()/2;
+}
+
+vector<string> SALOMEDS_IParameters::getEntries()
+{
+  vector<string> v;
+  if(!_ap) return v;
+  if(!_ap->IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(_AP_ENTRIES_LIST_);
+}
+
+void SALOMEDS_IParameters::setProperty(const string& name, const std::string& value)
+{
+  if(!_ap) return;
+  if(!_ap->IsSet(name, PT_STRING)) {
+    append(_AP_PROPERTIES_LIST_, name); //Add the property to the internal list of properties
+  }
+  _ap->SetString(name, value);
+}
+
+string SALOMEDS_IParameters::getProperty(const string& name)
+{
+  if(!_ap) return "";
+  if(!_ap->IsSet(name, PT_STRING)) return "";
+  return _ap->GetString(name);
+}
+
+vector<string> SALOMEDS_IParameters::getProperties()
+{
+  vector<string> v;
+  if(!_ap) return v;
+  if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(_AP_PROPERTIES_LIST_);
+}
+
+
+vector<string> SALOMEDS_IParameters::parseValue(const string& value, const char separator, bool fromEnd)
+{
+  TCollection_AsciiString val((char*)value.c_str());
+  vector<string> v;
+  int pos;
+  if(fromEnd) pos = val.SearchFromEnd(separator);
+  else pos = val.Search(separator);
+
+  if(pos < 0) {
+    v.push_back(value);
+    return v;
+  }
+
+  TCollection_AsciiString part1, part2;
+  part1 = val.SubString(1, pos-1);
+  part2 = val.SubString(pos+1, val.Length());
+  v.push_back(part1.ToCString());
+  v.push_back(part2.ToCString());
+  return v;
+}
+
+string SALOMEDS_IParameters::encodeEntry(const string& entry, const string& compName)
+{
+  string tail(entry, 6, entry.length()-1);
+  string newEntry(compName);
+  newEntry+=("_"+tail);
+  return newEntry;
+}
+
+string SALOMEDS_IParameters::decodeEntry(const string& entry)
+{
+  if(!_study) return entry;
+  int pos = entry.rfind("_");
+  if(pos < 0 || pos >= entry.length()) return entry;
+
+  string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
+  
+  if(_compNames.find(compName) == _compNames.end()) {
+    _PTR(SObject) so = _study->FindComponent(compName);
+    if(!so) return entry;
+    compID = so->GetID();
+    _compNames[compName] = compID;
+  }
+  else compID = _compNames[compName];
+  string newEntry(compID);
+  newEntry += (":"+tail);
+  
+  return newEntry;
+}
+
+void SALOMEDS_IParameters::setDumpPython(_PTR(Study) study, const string& theID)
+{
+  string anID;
+  if(theID == "") anID = getDefaultVisualComponent();
+  else anID = theID;
+
+  _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
+  ap->SetBool(_AP_DUMP_PYTHON_, true);
+}
+
+bool SALOMEDS_IParameters::isDumpPython(_PTR(Study) study, const string& theID)
+{
+  string anID;
+  if(theID == "") anID = getDefaultVisualComponent();
+  else anID = theID;
+
+  _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
+  if(!ap) return false;
+  if(!ap->IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN)) return false;
+  return (bool)ap->GetBool(_AP_DUMP_PYTHON_);
+}
+
+string SALOMEDS_IParameters::getDefaultVisualComponent()
+{
+  return "Interface Applicative";
+}
+
+
+
diff --git a/src/SALOMEDS/SALOMEDS_IParameters.hxx b/src/SALOMEDS/SALOMEDS_IParameters.hxx
new file mode 100644 (file)
index 0000000..4111e83
--- /dev/null
@@ -0,0 +1,149 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+// 
+// 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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+#ifndef SALOMEDS_IParameters_H
+#define SALOMEDS_IParameters_H
+
+#include <string>
+#include <vector>
+#include <map>
+
+#include "SALOMEDSClient.hxx"
+
+/*! 
+  Class which an interface to store the parameters of the objects
+*/
+class SALOMEDS_IParameters
+{
+public:
+  SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap); 
+
+  virtual ~SALOMEDS_IParameters();
+
+  /*!
+    Appends a string value to a named list. 
+    Returns a number of the added value.
+    Note: the name of the list MUST be unique
+   */
+  virtual int append(const std::string& listName, const std::string& value); 
+
+  /*!
+    Returns a number elements in the list
+   */
+  virtual int nbValues(const std::string& listName);
+
+  /*!
+    Returns a list of values in the list
+   */
+  virtual std::vector<std::string> getValues(const std::string& listName);
+
+  /*!
+    Returns a value with given %index, where %index is in range [0:nbValues-1]
+   */
+  virtual std::string getValue(const std::string& listName, int index);
+
+  /*!
+    Returns a list all entries lists
+   */
+  virtual std::vector<std::string> getLists();
+
+  /*!
+    Sets a new named parameter value for the given entry
+   */
+  virtual void setParameter(const std::string& entry, const std::string& parameterName, const std::string& value);
+
+  /*!
+    Gets a named parameter value for the given entry
+   */
+  virtual std::string getParameter(const std::string& entry, const std::string& parameterName);
+
+  /*!
+    Returns all parameter names of the given entry
+   */
+  virtual std::vector<std::string> getAllParameterNames(const std::string& entry);
+
+  /*!
+    Returns all parameter  values of the given entry
+   */
+  virtual std::vector<std::string> getAllParameterValues(const std::string& entry);
+
+  /*!
+    Returns a number of parameters of the given entry
+   */
+  virtual int getNbParameters(const std::string& entry);
+
+  /*!
+    Returns a list all entries 
+   */
+  virtual std::vector<std::string> getEntries();
+
+  /*!
+    Sets a global named property value
+   */
+  virtual void setProperty(const std::string& name, const std::string& value);
+
+  /*!
+    Gets a value of global named property
+   */
+  virtual std::string getProperty(const std::string& name);
+
+  /*!
+    Returns a list all properties 
+   */
+  virtual std::vector<std::string> getProperties();
+
+  /*!
+    Breaks a value string in two parts which is divided by %separator.
+    If fromEnd is True the search of separator starts from the end of the string
+   */
+  virtual std::vector<std::string> parseValue(const std::string& value, const char separator, bool fromEnd = true);
+
+
+  /*!
+    Returns encoded entry that is a relative entry for the component
+   */
+  virtual std::string encodeEntry(const std::string& entry, const std::string& compName);
+
+  /*!
+    Returns decoded entry that is an absolute entry
+   */
+  virtual std::string decodeEntry(const std::string& entry);
+
+  /*!
+    Enables/Disables the dumping visual parameters
+   */
+  static void setDumpPython(_PTR(Study) study, const std::string& theID = "");
+
+  /*!
+    Returns whether there is the dumping visual parameters
+   */
+  static bool isDumpPython(_PTR(Study) study, const std::string& theID = "");  
+
+  /*!
+    Returns a default name of the component where the visula parameters are stored.
+  */
+  static std::string getDefaultVisualComponent();
+
+private:
+  _PTR(AttributeParameter) _ap;
+  _PTR(Study) _study;
+  std::map<std::string, std::string> _compNames;
+};
+
+
+#endif
diff --git a/src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx b/src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx
new file mode 100644 (file)
index 0000000..e8c3f17
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDSImpl_AttributeIOR.hxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+
+#ifndef _SALOMEDSClient_AttributeParameter_HeaderFile
+#define _SALOMEDSClient_AttributeParameter_HeaderFile
+
+#include "SALOMEDSClient_definitions.hxx" 
+#include "SALOMEDSClient_GenericAttribute.hxx" 
+#include <string>
+#include <vector>
+
+class SALOMEDSClient_AttributeParameter : public virtual SALOMEDSClient_GenericAttribute 
+{
+
+public:
+
+  virtual void SetInt(const std::string& theID, const int theValue) = 0;
+  virtual int GetInt(const std::string& theID) = 0;
+
+  virtual void SetReal(const std::string& theID, const double& theValue) = 0;
+  virtual double GetReal(const std::string& theID) = 0;
+
+  virtual void SetString(const std::string& theID, const std::string& theValue) = 0;
+  virtual std::string GetString(const std::string& theID) = 0;
+  
+  virtual void SetBool(const std::string& theID, const bool& theValue) = 0;
+  virtual bool GetBool(const std::string& theID) = 0;
+  
+  virtual void SetRealArray(const std::string& theID, const std::vector<double>& theArray) = 0;
+  virtual std::vector<double> GetRealArray(const std::string& theID) = 0;
+  
+  virtual void SetIntArray(const std::string& theID, const std::vector<int>& theArray) = 0;
+  virtual std::vector<int> GetIntArray(const std::string& theID) = 0;
+
+  virtual void SetStrArray(const std::string& theID, const std::vector<std::string>& theArray) = 0;
+  virtual std::vector<std::string> GetStrArray(const std::string& theID) = 0;
+
+  virtual bool IsSet(const std::string& theID, const int theType) = 0;
+  
+  virtual bool RemoveID(const std::string& theID, const int theType) = 0;
+
+  virtual _PTR(AttributeParameter) GetFather() = 0;
+  virtual bool HasFather() = 0;
+  virtual bool IsRoot() = 0;
+  
+  virtual void Clear() = 0;
+
+  virtual std::vector<std::string> GetIDs(const int theType) = 0;
+};
+
+#endif
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx
new file mode 100644 (file)
index 0000000..929dec9
--- /dev/null
@@ -0,0 +1,765 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDSImpl_AttributeParameter.cxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+
+
+#include "SALOMEDSImpl_AttributeParameter.hxx"
+#include <Standard_Failure.hxx>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <strstream>
+
+using namespace std;
+
+
+
+IMPLEMENT_STANDARD_HANDLE( SALOMEDSImpl_AttributeParameter, SALOMEDSImpl_GenericAttribute )
+IMPLEMENT_STANDARD_RTTIEXT( SALOMEDSImpl_AttributeParameter, SALOMEDSImpl_GenericAttribute )
+
+
+// Purpose: Each character in the string is replaced by 3 characters: '%' and hex number 
+//          of the character (2 characters)
+string convertString(const string& S)
+{
+  int length = S.size();
+  const char *s = S.c_str();
+  char *c = new char[3], *buffer = new char[length*3+1];
+  buffer[length*3] = (char)0;
+  for(int i = 0, pos = 0; i<length; i++, pos+=3) {
+    int val = (int)s[i];
+    buffer[pos] = '%';
+    sprintf(c, "%x", val);
+    buffer[pos+1] = c[0]; 
+    buffer[pos+2] = c[1];
+  }
+
+  string RS(buffer); 
+  delete c;
+  delete buffer;
+  return RS;
+}
+
+//Restors a string converted by the function convertString
+string restoreString(const string& S)
+{
+  int length = S.size();
+  char *c = new char[3], *buffer = new char[length/3+1];
+  buffer[length/3] = (char)0;
+  const char *s = S.c_str();
+  for(int i = 0, pos = 0; i<length; i+=3, pos++) {
+    c[0] = s[i+1];
+    c[1] = s[i+2];
+    c[2] = (char)0;
+    int val = strtol(c, NULL, 16);
+    buffer[pos] = (char)val;
+  }
+
+  string RS(buffer); 
+  delete c;
+  delete buffer;
+  return RS;
+}
+
+//=======================================================================
+/*!
+ * Function : GetID
+ * Purpose  : Returns GUID of the attribute
+ */
+//=======================================================================
+const Standard_GUID& SALOMEDSImpl_AttributeParameter::GetID ()
+{
+  static Standard_GUID ParemeterID ("BA75F3A1-E40B-46b8-8D24-B1D3C3BB1A8C");
+  return ParemeterID;
+}   
+
+//=======================================================================
+/*!
+ * Function : Set
+ * Purpose  : Adds an attribute to the label
+ */
+//=======================================================================
+Handle(SALOMEDSImpl_AttributeParameter) SALOMEDSImpl_AttributeParameter::Set (const TDF_Label& L) 
+{
+  Handle(SALOMEDSImpl_AttributeParameter) A;
+  if (!L.FindAttribute(SALOMEDSImpl_AttributeParameter::GetID(), A)) {
+    A = new  SALOMEDSImpl_AttributeParameter(); 
+    L.AddAttribute(A);
+  }
+
+  return A;
+}
+
+//=======================================================================
+/*!
+ * Function : SetInt
+ * Purpose  : Associates a integer value with the ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetInt(const string& theID, const int& theValue)
+{
+  CheckLocked();
+
+  Backup();
+
+  _ints[theID] = theValue;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetInt
+ * Purpose  : Returns a int value associated with the given ID
+ */
+//=======================================================================
+int SALOMEDSImpl_AttributeParameter::GetInt(const string& theID)
+{
+  if(!IsSet(theID, PT_INTEGER)) Standard_Failure::Raise("Invalid ID");
+  return _ints[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : SetReal
+ * Purpose  : Associates a double value with the ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetReal(const string& theID, const double& theValue)
+{
+  CheckLocked();
+
+  Backup();
+
+  _reals[theID] = theValue;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetReal
+ * Purpose  : Returns a double value associated with the given ID
+ */
+//=======================================================================
+double SALOMEDSImpl_AttributeParameter::GetReal(const string& theID)
+{
+  if(!IsSet(theID, PT_REAL)) Standard_Failure::Raise("Invalid ID");
+  return _reals[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : SetString
+ * Purpose  : Associates a string with the ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetString(const string& theID, const string& theValue)
+{
+  CheckLocked();
+
+  Backup();
+
+  _strings[theID] = theValue;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetString
+ * Purpose  : Returns a string associated with the given ID
+ */
+//=======================================================================
+string SALOMEDSImpl_AttributeParameter::GetString(const string& theID)
+{
+  if(!IsSet(theID, PT_STRING)) Standard_Failure::Raise("Invalid ID");
+  return _strings[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : SetBool
+ * Purpose  : Associates a bool value with the ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetBool(const string& theID, const bool& theValue)
+{
+  CheckLocked();
+
+  Backup();
+
+  _bools[theID] = theValue;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetBool
+ * Purpose  : Returns a bool value associated with the ID
+ */
+//=======================================================================
+bool SALOMEDSImpl_AttributeParameter::GetBool(const string& theID)
+{
+  if(!IsSet(theID, PT_BOOLEAN)) Standard_Failure::Raise("Invalid ID");
+  return _bools[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : SetRealArray
+ * Purpose  : Associates an array of double values with the given ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetRealArray(const string& theID, const vector<double>& theArray)
+{
+  CheckLocked();
+
+  Backup();
+
+  _realarrays[theID] = theArray;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetRealArray
+ * Purpose  : Returns double values associated with the ID
+ */
+//=======================================================================
+vector<double> SALOMEDSImpl_AttributeParameter::GetRealArray(const string& theID)
+{
+  if(!IsSet(theID, PT_REALARRAY)) Standard_Failure::Raise("Invalid ID");
+  return _realarrays[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : SetIntArray
+ * Purpose  : Associates an array of int values with the given ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetIntArray(const string& theID, const vector<int>& theArray)
+{
+  CheckLocked();
+
+  Backup();
+
+  _intarrays[theID] = theArray;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetIntArray
+ * Purpose  : Returns int values associated with the ID
+ */
+//=======================================================================
+vector<int> SALOMEDSImpl_AttributeParameter::GetIntArray(const string& theID)
+{
+  if(!IsSet(theID, PT_INTARRAY)) Standard_Failure::Raise("Invalid ID");
+  return _intarrays[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : SetStrArray
+ * Purpose  : Associates an array of string values with the given ID
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::SetStrArray(const string& theID, const vector<string>& theArray)
+{
+  CheckLocked();
+
+  Backup();
+
+  _strarrays[theID] = theArray;
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetStrArray
+ * Purpose  : Returns string values associated with the ID
+ */
+//=======================================================================
+vector<string> SALOMEDSImpl_AttributeParameter::GetStrArray(const string& theID)
+{
+  if(!IsSet(theID, PT_STRARRAY)) Standard_Failure::Raise("Invalid ID");
+  return _strarrays[theID];
+}
+
+//=======================================================================
+/*!
+ * Function : IsSet
+ * Purpose  : Returns true if for the ID of given type was assigned \n
+ *            a value in the attribute
+ */
+//=======================================================================
+bool SALOMEDSImpl_AttributeParameter::IsSet(const string& theID, const Parameter_Types theType)
+{
+  switch(theType) {
+  case PT_INTEGER: {
+    if(_ints.find(theID) != _ints.end()) return true;
+    break;
+  }
+  case PT_REAL: {
+    if(_reals.find(theID) != _reals.end()) return true;
+    break;
+  }
+  case PT_BOOLEAN: {
+    if(_bools.find(theID) != _bools.end()) return true;
+    break;
+  }
+  case PT_STRING: {
+    if(_strings.find(theID) != _strings.end()) return true;
+    break;
+  }
+  case PT_REALARRAY: {
+    if(_realarrays.find(theID) != _realarrays.end()) return true;
+    break;
+  }
+  case PT_INTARRAY: {
+    if(_intarrays.find(theID) != _intarrays.end()) return true;
+    break;
+  }
+  case PT_STRARRAY: {
+    if(_strarrays.find(theID) != _strarrays.end()) return true;
+    break;
+  }
+  default: return false;
+  }
+
+  return false;
+}
+
+//=======================================================================
+/*!
+ * Function : RemoveID
+ * Purpose  : Removes a parameter with given ID
+ */
+//=======================================================================
+bool SALOMEDSImpl_AttributeParameter::RemoveID(const string& theID, const Parameter_Types theType)
+{
+  Backup();
+  SetModifyFlag(); 
+
+  switch(theType) {
+  case PT_INTEGER: {
+    if(_ints.erase(theID)) return true;
+    break;
+  }
+  case PT_REAL: {
+    if(_reals.erase(theID)) return true;
+    break;
+  }
+  case PT_BOOLEAN: {
+    if(_bools.erase(theID)) return true;
+    break;
+  }
+  case PT_STRING: {
+    if(_strings.erase(theID)) return true;
+    break;
+  }
+  case PT_REALARRAY: {
+    if(_realarrays.erase(theID)) return true;
+    break;
+  }
+  case PT_INTARRAY: {
+    if(_intarrays.erase(theID)) return true;
+    break;
+  }
+  case PT_STRARRAY: {
+    if(_strarrays.erase(theID)) return true;
+    break;
+  }
+  default: return false;
+  }
+
+
+  return false;
+}
+
+
+//=======================================================================
+/*!
+ * Function : GetFather
+ * Purpose  : Returns a father attribute for this attribute
+ */
+//=======================================================================
+Handle(SALOMEDSImpl_AttributeParameter) SALOMEDSImpl_AttributeParameter::GetFather()
+{
+  Handle(SALOMEDSImpl_AttributeParameter) aFather;
+  TDF_Label L = Label();
+  if(L.IsRoot()) return aFather;
+
+  while(!L.IsRoot()) {
+    L = L.Father();
+    if(L.FindAttribute(SALOMEDSImpl_AttributeParameter::GetID(), aFather)) break; 
+  }
+
+  return aFather;
+}
+
+//=======================================================================
+/*!
+ * Function : HasFather
+ * Purpose  : Returns True if the attribute has a father attribute
+ */
+//=======================================================================
+bool SALOMEDSImpl_AttributeParameter::HasFather()
+{
+  TDF_Label L = Label();
+  if(L.IsRoot()) return false;
+  while(!L.IsRoot()) {
+    L = L.Father();
+    if(L.IsAttribute(SALOMEDSImpl_AttributeParameter::GetID())) return true; 
+  }
+
+  return false;
+}
+
+//=======================================================================
+/*!
+ * Function : IsRoot
+ * Purpose  : Returns True is the attribute is highest in an hierachy
+ */
+//=======================================================================
+bool SALOMEDSImpl_AttributeParameter::IsRoot()
+{
+  return ((HasFather())?false:true);
+}           
+
+//=======================================================================
+/*!
+ * Function : Clear
+ * Purpose  : Clears the content of the attribute
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::Clear()
+{
+  Backup();
+
+  _ints.clear();
+  _reals.clear();
+  _bools.clear();
+  _strings.clear();
+  _realarrays.clear();
+  _intarrays.clear();
+  _strarrays.clear();
+
+  SetModifyFlag(); 
+}
+
+//=======================================================================
+/*!
+ * Function : GetIDs
+ * Purpose  : Returns an array of all ID's of the given type
+ */
+//=======================================================================
+vector<string> SALOMEDSImpl_AttributeParameter::GetIDs(const Parameter_Types theType)
+{
+  
+  vector<string> anArray;
+  int i = 0;
+
+  switch(theType) {
+  case PT_INTEGER: {
+    if(_ints.size()) {
+      anArray.resize(_ints.size());
+      for(map<string,int>::const_iterator p = _ints.begin(); p != _ints.end(); p++, i++) 
+       anArray[i] =  p->first;
+    }
+    break;
+  }
+  case PT_REAL: {
+    if(_reals.size()) {
+      anArray.resize(_reals.size());
+      for(map<string,double>::const_iterator p = _reals.begin(); p != _reals.end(); p++, i++) 
+       anArray[i] = p->first;
+    }
+    break;
+  }
+  case PT_BOOLEAN: {
+    if(_bools.size()) {
+      anArray.resize(_bools.size());
+      for(map<string,bool>::const_iterator p = _bools.begin(); p != _bools.end(); p++, i++) 
+       anArray[i] = p->first;
+    }
+    break;
+  }
+  case PT_STRING: {
+    if(_strings.size()) {
+      anArray.resize(_strings.size());
+      for(map<string,string>::const_iterator p = _strings.begin(); p!= _strings.end(); p++) 
+       anArray[i] = p->first;
+    }
+    break;
+  }
+  case PT_REALARRAY: {
+    if(_realarrays.size()) {
+      anArray.resize(_realarrays.size());
+      for(map< string, vector<double> >::const_iterator p = _realarrays.begin(); p!= _realarrays.end(); p++) 
+       anArray[i] = p->first;
+    }
+    break;
+  }
+  case PT_INTARRAY: {
+    if(_intarrays.size()) {
+      anArray.resize(_intarrays.size());
+      for(map< string, vector<int> >::const_iterator p = _intarrays.begin(); p!= _intarrays.end(); p++) 
+       anArray[i] = p->first;
+    }
+    break;
+  }
+  case PT_STRARRAY: {
+    if(_strarrays.size()) {
+      anArray.resize(_strarrays.size());
+      for(map< string, vector<string> >::const_iterator p = _strarrays.begin(); p!= _strarrays.end(); p++) 
+       anArray[i] = p->first;
+    }
+    break;
+  }
+  default: return anArray;
+  }
+
+  return anArray;
+}
+
+//=======================================================================
+/*!
+ * Function : ID
+ * Purpose  : Rteurns an GUID of the attribute
+ */
+//=======================================================================
+const Standard_GUID& SALOMEDSImpl_AttributeParameter::ID () const { return GetID(); } 
+
+
+Handle(TDF_Attribute) SALOMEDSImpl_AttributeParameter::NewEmpty () const
+{  
+  return new SALOMEDSImpl_AttributeParameter(); 
+}
+
+//=======================================================================
+/*!
+ * Function : Restore
+ * Purpose  : Restors the content of the attribute from another
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::Restore(const Handle(TDF_Attribute)& with) 
+{
+  Handle(SALOMEDSImpl_AttributeParameter) A = Handle(SALOMEDSImpl_AttributeParameter)::DownCast (with);
+  _ints.clear();
+  _reals.clear();
+  _bools.clear();
+  _strings.clear();
+  _realarrays.clear();
+  _intarrays.clear();
+  _strarrays.clear();
+  
+  for(map<string,int>::const_iterator p = A->_ints.begin(); p!= A->_ints.end(); p++) _ints[p->first] = p->second;
+  for(map<string,double>::const_iterator p = A->_reals.begin(); p!= A->_reals.end(); p++) _reals[p->first] = p->second;
+  for(map<string,bool>::const_iterator p = A->_bools.begin(); p!= A->_bools.end(); p++) _bools[p->first] = p->second;
+  for(map<string,string>::const_iterator p = A->_strings.begin(); p!= A->_strings.end(); p++) 
+    _strings[p->first] = p->second;
+  for(map< string,vector<double> >::const_iterator p = A->_realarrays.begin(); p!= A->_realarrays.end(); p++) 
+    _realarrays[p->first] = p->second;  
+  for(map< string,vector<int> >::const_iterator p = A->_intarrays.begin(); p!= A->_intarrays.end(); p++) 
+    _intarrays[p->first] = p->second;  
+  for(map< string,vector<string> >::const_iterator p = A->_strarrays.begin(); p!= A->_strarrays.end(); p++) 
+    _strarrays[p->first] = p->second; 
+}
+
+//=======================================================================
+/*!
+ * Function : Paste
+ * Purpose  : Pastes the content of attribute to another
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::Paste (const Handle(TDF_Attribute)& into,
+                                            const Handle(TDF_RelocationTable)& RT) const
+{
+  into->Restore(this);
+}
+
+//=======================================================================
+/*!
+ * Function : Save
+ * Purpose  : Saves a content of the attribute as a string
+ */
+//=======================================================================
+TCollection_AsciiString SALOMEDSImpl_AttributeParameter::Save() 
+{ 
+  ostrstream buffer;
+  char *tmpBuffer = new char[255];
+
+  buffer << _ints.size() << " ";
+
+  for(map<string,int>::const_iterator p = _ints.begin(); p != _ints.end(); p++) {
+    buffer << convertString(p->first) << " " << p->second << " ";
+  }
+
+  buffer << _reals.size() << " ";
+  for(map<string,double>::const_iterator p =_reals.begin(); p != _reals.end(); p++) {
+    sprintf(tmpBuffer, "%.64e", p->second);
+    buffer << convertString(p->first) << " " << tmpBuffer << " ";
+  }
+
+  buffer << _bools.size() << " ";
+  for(map<string,bool>::const_iterator p = _bools.begin(); p != _bools.end(); p++) {
+     buffer << convertString(p->first) << " " << p->second << " ";
+  }
+
+  buffer << _strings.size() << " ";
+  for(map<string,string>::const_iterator p = _strings.begin(); p != _strings.end(); p++) {
+    buffer << convertString(p->first) << " " <<  convertString(p->second) << " ";
+  }
+
+  buffer << _realarrays.size() << " ";
+  for(map< string,vector<double> >::const_iterator p = _realarrays.begin(); p != _realarrays.end(); p++) {
+    vector<double> v(p->second);
+    sprintf(tmpBuffer, " %s %d ", convertString(p->first).c_str(), v.size());
+    buffer << tmpBuffer;
+    for(int i = 0; i<v.size(); i++) {
+      sprintf(tmpBuffer, " %.64e ", v[i]);
+      buffer << tmpBuffer;
+    }
+  }
+
+  buffer << _intarrays.size() << " ";
+  for(map< string,vector<int> >::const_iterator p = _intarrays.begin(); p != _intarrays.end(); p++) {
+    vector<int> v(p->second);
+    sprintf(tmpBuffer, " %s %d ", convertString(p->first).c_str(), v.size());
+    buffer << tmpBuffer;
+    for(int i = 0; i<v.size(); i++) {
+      sprintf(tmpBuffer, " %d ", v[i]);
+      buffer << tmpBuffer;
+    }
+  }
+
+  buffer << _strarrays.size() << " ";
+  for(map< string,vector<string> >::const_iterator p = _strarrays.begin(); p != _strarrays.end(); p++) {
+    vector<string> v(p->second);
+    sprintf(tmpBuffer, " %s %d ", convertString(p->first).c_str(), v.size());
+    buffer << tmpBuffer;
+    for(int i = 0; i<v.size(); i++) {
+      buffer << " " << convertString(v[i]) << " ";
+    }
+  }
+
+  delete tmpBuffer;
+
+  TCollection_AsciiString AS((char*)buffer.rdbuf()->str());
+
+  return AS; 
+}
+
+//=======================================================================
+/*!
+ * Function : Load
+ * Purpose  : Restores the attribute from the string
+ */
+//=======================================================================
+void SALOMEDSImpl_AttributeParameter::Load(const TCollection_AsciiString& theValue) 
+{ 
+  Backup();
+
+  _ints.clear();
+  _reals.clear();
+  _bools.clear();
+  _strings.clear();
+  _realarrays.clear();
+  _intarrays.clear();
+
+  istrstream buffer(theValue.ToCString(), strlen(theValue.ToCString()));
+
+  int size, val, ival;
+  double val2;
+  string s, id;
+
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> val;
+    _ints[restoreString(id)] = val;
+  }
+
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> val2;
+    _reals[restoreString(id)] = val2;
+  }
+
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> val;
+    _bools[restoreString(id)] = val;
+  }
+
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> s;
+    _strings[restoreString(id)] = restoreString(s);
+  }
+  
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> val;
+    vector<double> v;
+    v.resize(val);
+    for(int j = 0; j<val; j++) {
+      buffer >> val2;
+      v[j] = val2;
+    }
+    _realarrays[restoreString(id)] = v;
+  }
+
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> val;
+    vector<int> v;
+    v.resize(val);
+    for(int j = 0; j<val; j++) {
+      buffer >> ival;
+      v[j] = ival;
+    }
+    _intarrays[restoreString(id)] = v;
+  }
+  
+  buffer >> size;
+  for(int i = 1; i<=size; i++) {
+    buffer >> id >> val;
+    vector<string> v;
+    v.resize(val);
+    for(int j = 0; j<val; j++) {
+      buffer >> s;
+      v[j] = restoreString(s);
+    }
+    _strarrays[restoreString(id)] = v;
+  }
+} 
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.hxx
new file mode 100644 (file)
index 0000000..ab273ae
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright (C) 2005  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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+//  File   : SALOMEDSImpl_AttributeIOR.hxx
+//  Author : Sergey RUIN
+//  Module : SALOME
+
+#ifndef _SALOMEDSImpl_AttributeParameter_HeaderFile
+#define _SALOMEDSImpl_AttributeParameter_HeaderFile
+
+#include <Standard_DefineHandle.hxx>
+#include <TDF_Attribute.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <TCollection_ExtendedString.hxx>
+#include <TDF_Label.hxx> 
+#include "SALOMEDSImpl_GenericAttribute.hxx"
+
+#include <vector>
+#include <string>
+#include <map>
+
+class Standard_GUID;
+class Handle(TDF_Attribute);
+class Handle(TDF_RelocationTable);
+
+
+DEFINE_STANDARD_HANDLE( SALOMEDSImpl_AttributeParameter, SALOMEDSImpl_GenericAttribute )
+
+enum Parameter_Types {PT_INTEGER, PT_REAL, PT_BOOLEAN, PT_STRING, PT_REALARRAY, PT_INTARRAY, PT_STRARRAY};
+
+/*!
+ Class: SALOMEDSImpl_AttributeParameter
+ Description : AttributeParameter is a universal container of basic types 
+*/
+
+class SALOMEDSImpl_AttributeParameter : public SALOMEDSImpl_GenericAttribute 
+{
+
+private:
+  
+  std::map<std::string, int>                     _ints;
+  std::map<std::string, double>                  _reals;
+  std::map<std::string, std::string>             _strings;
+  std::map<std::string, bool>                    _bools;
+  std::map< std::string, vector<double> >        _realarrays;
+  std::map< std::string, vector<int> >           _intarrays;
+  std::map< std::string, vector<std::string> >   _strarrays;
+
+public:
+  Standard_EXPORT static const Standard_GUID& GetID() ;
+
+  Standard_EXPORT  SALOMEDSImpl_AttributeParameter():SALOMEDSImpl_GenericAttribute("AttributeParameter") {}
+  Standard_EXPORT  static Handle(SALOMEDSImpl_AttributeParameter) Set (const TDF_Label& L);
+
+
+  Standard_EXPORT void SetInt(const std::string& theID, const int& theValue);
+  Standard_EXPORT int GetInt(const std::string& theID);
+
+  Standard_EXPORT void SetReal(const std::string& theID, const double& theValue);
+  Standard_EXPORT double GetReal(const std::string& theID);
+
+  Standard_EXPORT void SetString(const std::string& theID, const std::string& theValue);
+  Standard_EXPORT std::string GetString(const std::string& theID);
+  
+  Standard_EXPORT void SetBool(const std::string& theID, const bool& theValue);
+  Standard_EXPORT bool GetBool(const std::string& theID);
+  
+  Standard_EXPORT void SetRealArray(const std::string& theID, const std::vector<double>& theArray);
+  Standard_EXPORT std::vector<double> GetRealArray(const std::string& theID);
+  
+  Standard_EXPORT void SetIntArray(const std::string& theID, const std::vector<int>& theArray);
+  Standard_EXPORT std::vector<int> GetIntArray(const std::string& theID);
+
+  Standard_EXPORT void SetStrArray(const std::string& theID, const std::vector<std::string>& theArray);
+  Standard_EXPORT std::vector<std::string> GetStrArray(const std::string& theID);
+
+  Standard_EXPORT bool IsSet(const std::string& theID, const Parameter_Types theType);
+  
+  Standard_EXPORT bool RemoveID(const std::string& theID, const Parameter_Types theType);
+
+  Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetFather();
+  Standard_EXPORT bool HasFather();
+  Standard_EXPORT bool IsRoot();
+
+  Standard_EXPORT std::vector<std::string> GetIDs(const Parameter_Types theType);
+
+  Standard_EXPORT void Clear();
+
+  Standard_EXPORT  virtual TCollection_AsciiString Save();
+  Standard_EXPORT  virtual void Load(const TCollection_AsciiString& theValue); 
+
+  Standard_EXPORT  const Standard_GUID& ID() const;
+  Standard_EXPORT  void Restore(const Handle(TDF_Attribute)& with) ;
+  Standard_EXPORT  Handle_TDF_Attribute NewEmpty() const;
+  Standard_EXPORT  void Paste(const Handle(TDF_Attribute)& into,const Handle(TDF_RelocationTable)& RT) const;
+  
+  Standard_EXPORT ~SALOMEDSImpl_AttributeParameter() {}
+
+public:
+  DEFINE_STANDARD_RTTI( SALOMEDSImpl_AttributeParameter )
+};
+
+#endif
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx
new file mode 100644 (file)
index 0000000..02115ab
--- /dev/null
@@ -0,0 +1,361 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+// 
+// 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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+#include "SALOMEDSImpl_IParameters.hxx"
+#include <utilities.h>
+
+#include <TCollection_AsciiString.hxx>
+
+#include "SALOMEDSImpl_SObject.hxx"
+#include "SALOMEDSImpl_ChildIterator.hxx"
+
+using namespace std;
+
+#define _AP_LISTS_LIST_ "AP_LISTS_LIST"
+#define _AP_ENTRIES_LIST_ "AP_ENTRIES_LIST"
+#define _AP_PROPERTIES_LIST_ "AP_PROPERTIES_LIST"
+#define _AP_DUMP_PYTHON_ "AP_DUMP_PYTHON"
+
+/*!
+  Constructor
+*/
+SALOMEDSImpl_IParameters::SALOMEDSImpl_IParameters(const Handle(SALOMEDSImpl_AttributeParameter)& ap)
+{
+  if(ap.IsNull()) return;
+  _ap = ap;
+  Handle(SALOMEDSImpl_SObject) so = _ap->GetSObject();
+  _study = so->GetStudy();
+}
+
+SALOMEDSImpl_IParameters::~SALOMEDSImpl_IParameters()
+{
+  _compNames.clear();
+}
+
+int SALOMEDSImpl_IParameters::append(const string& listName, const string& value)
+{
+  if(_ap.IsNull()) return -1;
+  vector<string> v;
+  if(!_ap->IsSet(listName, PT_STRARRAY)) {
+    if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) _ap->SetStrArray(_AP_LISTS_LIST_, v);
+    if(listName != _AP_ENTRIES_LIST_ && 
+       listName != _AP_PROPERTIES_LIST_) {
+      append(_AP_LISTS_LIST_, listName);
+    }
+    _ap->SetStrArray(listName, v);
+  }
+  v = _ap->GetStrArray(listName);
+  v.push_back(value);
+  _ap->SetStrArray(listName, v);
+  return (v.size()-1);
+}
+
+int SALOMEDSImpl_IParameters::nbValues(const string& listName)
+{
+  if(_ap.IsNull()) return -1;
+  if(!_ap->IsSet(listName, PT_STRARRAY)) return 0;
+  vector<string> v = _ap->GetStrArray(listName);
+  return v.size();
+}
+
+vector<string> SALOMEDSImpl_IParameters::getValues(const string& listName)
+{
+  vector<string> v;
+  if(_ap.IsNull()) return v;
+  if(!_ap->IsSet(listName, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(listName);
+}
+
+
+string SALOMEDSImpl_IParameters::getValue(const string& listName, int index)
+{
+  if(_ap.IsNull()) return "";
+  if(!_ap->IsSet(listName, PT_STRARRAY)) return "";
+  vector<string> v = _ap->GetStrArray(listName);
+  if(index >= v.size()) return ""; 
+  return v[index];
+}
+
+vector<string> SALOMEDSImpl_IParameters::getLists()
+{
+  vector<string> v;
+  if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(_AP_LISTS_LIST_);
+}
+
+void SALOMEDSImpl_IParameters::setParameter(const string& entry, const string& parameterName, const string& value)
+{
+  if(_ap.IsNull()) return;
+  vector<string> v;
+  if(!_ap->IsSet(entry, PT_STRARRAY)) {
+    append(_AP_ENTRIES_LIST_, entry); //Add the entry to the internal list of entries
+    _ap->SetStrArray(entry, v);
+  }
+  v = _ap->GetStrArray(entry);
+  v.push_back(parameterName);
+  v.push_back(value);
+  _ap->SetStrArray(entry, v);
+}
+
+
+string SALOMEDSImpl_IParameters::getParameter(const string& entry, const string& parameterName)
+{
+  if(_ap.IsNull()) return "";
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return "";
+  vector<string> v = _ap->GetStrArray(entry);
+  int length = v.size();
+  for(int i = 0; i<length; i+=1) {
+    if(v[i] == parameterName) return v[i+1];
+  }
+  return "";
+}
+
+
+vector<string> SALOMEDSImpl_IParameters::getAllParameterNames(const string& entry)
+{
+  vector<string> v, names;
+  if(_ap.IsNull()) return v; 
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
+  v = _ap->GetStrArray(entry);
+  int length = v.size();
+  for(int i = 0; i<length; i+=2) {
+    names.push_back(v[i]);
+  }
+  return names;
+}
+
+vector<string> SALOMEDSImpl_IParameters::getAllParameterValues(const string& entry)
+{
+  vector<string> v, values;
+  if(_ap.IsNull()) return v; 
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
+  v = _ap->GetStrArray(entry);
+  int length = v.size();
+  for(int i = 1; i<length; i+=2) {
+    values.push_back(v[i]);
+  }
+  return values; 
+}
+
+int SALOMEDSImpl_IParameters::getNbParameters(const string& entry)
+{
+  if(_ap.IsNull()) return -1;
+  if(!_ap->IsSet(entry, PT_STRARRAY)) return -1;
+  return  _ap->GetStrArray(entry).size()/2;
+}
+
+vector<string> SALOMEDSImpl_IParameters::getEntries()
+{
+  vector<string> v;
+  if(_ap.IsNull()) return v;
+  if(!_ap->IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(_AP_ENTRIES_LIST_);
+}
+
+void SALOMEDSImpl_IParameters::setProperty(const string& name, const std::string& value)
+{
+  if(_ap.IsNull()) return;
+  if(!_ap->IsSet(name, PT_STRING)) {
+    append(_AP_PROPERTIES_LIST_, name); //Add the property to the internal list of properties
+  }
+  _ap->SetString(name, value);
+}
+
+string SALOMEDSImpl_IParameters::getProperty(const string& name)
+{
+  if(_ap.IsNull()) return "";
+  if(!_ap->IsSet(name, PT_STRING)) return "";
+  return _ap->GetString(name);
+}
+
+vector<string> SALOMEDSImpl_IParameters::getProperties()
+{
+  vector<string> v;
+  if(_ap.IsNull()) return v;
+  if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v;
+  return _ap->GetStrArray(_AP_PROPERTIES_LIST_);
+}
+
+string SALOMEDSImpl_IParameters::decodeEntry(const string& entry)
+{
+  if(!_study) return entry;
+  int pos = entry.rfind("_");
+  if(pos < 0 || pos >= entry.length()) return entry;
+
+  string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
+  
+  if(_compNames.find(compName) == _compNames.end()) {
+    Handle(SALOMEDSImpl_SObject) so = _study->FindComponent((char*)compName.c_str());
+    if(!so) return entry;
+    compID = so->GetID().ToCString();
+    _compNames[compName] = compID;
+  }
+  else compID = _compNames[compName];
+  string newEntry(compID);
+  newEntry += (":"+tail);
+  
+  return newEntry;
+}
+
+
+bool SALOMEDSImpl_IParameters::isDumpPython(const Handle(SALOMEDSImpl_Study)& study, const string& theID)
+{
+  string anID;
+  if(theID == "") anID = getDefaultVisualComponent();
+  else anID = theID;
+
+  Handle(SALOMEDSImpl_AttributeParameter) ap = study->GetCommonParameters((char*)anID.c_str(), 0);
+  if(ap.IsNull()) return false;
+  if(!ap->IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN)) return false;
+  return (bool)ap->GetBool(_AP_DUMP_PYTHON_);
+}
+
+
+int SALOMEDSImpl_IParameters::getLastSavePoint(const Handle(SALOMEDSImpl_Study)& study, const string& theID)
+{
+  string anID;
+  if(theID == "") anID = getDefaultVisualComponent();
+  else anID = theID;
+
+
+  Handle(SALOMEDSImpl_SObject) so = study->FindComponent((char*)anID.c_str());
+  if(so.IsNull()) return -1;
+
+  Handle(SALOMEDSImpl_StudyBuilder) builder = study->NewBuilder();
+  Handle(SALOMEDSImpl_ChildIterator) anIter ( study->NewChildIterator( so ) );
+  int tag = -1;
+  for(; anIter->More(); anIter->Next())
+  {
+    Handle(SALOMEDSImpl_SObject) val( anIter->Value() );
+    Handle(SALOMEDSImpl_GenericAttribute) genAttr;
+    if(builder->FindAttribute(val, genAttr, "AttributeParameter")) tag = val->Tag();
+  }
+
+  return tag;
+}
+
+
+
+string SALOMEDSImpl_IParameters::getStudyScript(const Handle(SALOMEDSImpl_Study)& study, int savePoint, const std::string& theID)
+{
+  string anID;
+  if(theID == "") anID = getDefaultVisualComponent();
+  else anID = theID;
+
+  Handle(SALOMEDSImpl_AttributeParameter) ap = study->GetCommonParameters((char*)anID.c_str(), savePoint);
+  SALOMEDSImpl_IParameters ip(ap);
+
+  string dump("");
+
+  dump += "import iparameters\n";
+  dump += "ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters(\""+anID+"\", 1))\n\n";
+  
+  
+  vector<string> v = ip.getProperties();
+  if(v.size() > 0) {
+    dump += "#Set up visual properties:\n";
+    for(int i = 0; i<v.size(); i++) {
+      string prp = ip.getProperty(v[i]);
+      dump += "ipar.setProperty(\""+v[i]+"\", \""+prp+"\")\n";
+    }
+  }
+
+  v = ip.getLists();
+  if(v.size() > 0) {
+    dump += "#Set up lists:\n";
+    for(int i = 0; i<v.size(); i++) {
+      vector<string> lst = ip.getValues(v[i]);
+      dump += "# fill list "+v[i]+"\n";
+      for(int j = 0; j < lst.size(); j++)
+       dump += "ipar.append(\""+v[i]+"\", \""+lst[j]+"\")\n";
+    }
+  }
+
+  return dump;
+}
+
+string SALOMEDSImpl_IParameters::getDefaultScript(const Handle(SALOMEDSImpl_Study)& study, 
+                                             const string& moduleName, 
+                                             const string& shift, 
+                                             const string& theID)
+{
+  string anID;
+  if(theID == "") anID = getDefaultVisualComponent();
+  else anID = theID;
+
+  string dump("");
+
+  int savePoint = SALOMEDSImpl_IParameters::getLastSavePoint(study, anID);
+  if(savePoint < 0) return dump;
+  SALOMEDSImpl_IParameters ip = SALOMEDSImpl_IParameters(study->GetCommonParameters(anID.c_str(), savePoint));
+  if(!isDumpPython(study)) return dump;
+
+  Handle(SALOMEDSImpl_AttributeParameter) ap = study->GetModuleParameters(anID.c_str(), moduleName.c_str(), savePoint);
+  ip = SALOMEDSImpl_IParameters(ap);
+
+
+  dump += shift +"import iparameters\n";
+  dump += shift + "ipar = iparameters.IParameters(theStudy.GetModuleParameters(\""+anID+"\", \""+moduleName+"\", 1))\n\n";
+  
+  vector<string> v = ip.getProperties();
+  if(v.size() > 0) {
+    dump += shift +"#Set up visual properties:\n";
+    for(int i = 0; i<v.size(); i++) {
+      string prp = ip.getProperty(v[i]);
+      dump += shift +"ipar.setProperty(\""+v[i]+"\", \""+prp+"\")\n";
+    }
+  }
+
+  v = ip.getLists();
+  if(v.size() > 0) {
+    dump +=  shift +"#Set up lists:\n";
+    for(int i = 0; i<v.size(); i++) {
+      vector<string> lst = ip.getValues(v[i]);
+      dump += shift +"# fill list "+v[i]+"\n";
+      for(int j = 0; j < lst.size(); j++)
+       dump += shift +"ipar.append(\""+v[i]+"\", \""+lst[j]+"\")\n";
+    }
+  }
+
+  v = ip.getEntries();
+  if(v.size() > 0) {
+    dump += shift + "#Set up entries:\n";
+    for(int i = 0; i<v.size(); i++) {
+      vector<string> names = ip.getAllParameterNames(v[i]);
+      vector<string> values = ip.getAllParameterValues(v[i]);
+      string decodedEntry = ip.decodeEntry(v[i]);
+      Handle(SALOMEDSImpl_SObject) so = study->FindObjectID((char*)decodedEntry.c_str());
+      string so_name("");
+      if(!so.IsNull()) so_name = so->GetName().ToCString();
+      dump += shift + "# set up entry " + v[i] +" ("+so_name+")" + " parameters" + "\n";
+      for(int j = 0; j < names.size() && j < values.size(); j++)
+       dump += shift + "ipar.setParameter(\"" + v[i] + "\", \"" + names[j] + "\", \"" + values[j] + "\")\n";
+    }
+  }
+  
+  return dump;  
+}
+
+
+string SALOMEDSImpl_IParameters::getDefaultVisualComponent()
+{
+  return "Interface Applicative";
+}
+
+
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx
new file mode 100644 (file)
index 0000000..4e6d505
--- /dev/null
@@ -0,0 +1,153 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+// 
+// 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.
+// 
+// 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.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+#ifndef SALOMEDSImpl_IParameters_H
+#define SALOMEDSImpl_IParameters_H
+
+#include <string>
+#include <vector>
+#include <map>
+
+#include "SALOMEDSImpl_AttributeParameter.hxx"
+#include "SALOMEDSImpl_Study.hxx"
+
+/*! 
+  Class which an interface to store the parameters of the objects
+*/
+class SALOMEDSImpl_IParameters
+{
+public:
+  SALOMEDSImpl_IParameters(const Handle(SALOMEDSImpl_AttributeParameter)& ap); 
+
+  virtual ~SALOMEDSImpl_IParameters();
+
+  /*!
+    Appends a string value to a named list. 
+    Returns a number of the added value.
+    Note: the name of the list MUST be unique
+   */
+  virtual int append(const std::string& listName, const std::string& value); 
+
+  /*!
+    Returns a number elements in the list
+   */
+  virtual int nbValues(const std::string& listName);
+
+  /*!
+    Returns a list of values in the list
+   */
+  virtual std::vector<std::string> getValues(const std::string& listName);
+
+  /*!
+    Returns a value with given %index, where %index is in range [0:nbValues-1]
+   */
+  virtual std::string getValue(const std::string& listName, int index);
+
+  /*!
+    Returns a list all entries lists
+   */
+  virtual std::vector<std::string> getLists();
+
+  /*!
+    Sets a new named parameter value for the given entry
+   */
+  virtual void setParameter(const std::string& entry, const std::string& parameterName, const std::string& value);
+
+  /*!
+    Gets a named parameter value for the given entry
+   */
+  virtual std::string getParameter(const std::string& entry, const std::string& parameterName);
+
+  /*!
+    Returns all parameter names of the given entry
+   */
+  virtual std::vector<std::string> SALOMEDSImpl_IParameters::getAllParameterNames(const std::string& entry);
+
+  /*!
+    Returns all parameter  values of the given entry
+   */
+  virtual std::vector<std::string> SALOMEDSImpl_IParameters::getAllParameterValues(const std::string& entry);
+
+  /*!
+    Returns a number of parameters of the given entry
+   */
+  virtual int getNbParameters(const std::string& entry);
+
+  /*!
+    Returns a list all entries 
+   */
+  virtual std::vector<std::string> getEntries();
+
+  /*!
+    Sets a global named property value
+   */
+  virtual void setProperty(const std::string& name, const std::string& value);
+
+  /*!
+    Gets a value of global named property
+   */
+  virtual std::string getProperty(const std::string& name);
+
+  /*!
+    Returns a list all properties 
+   */
+  virtual std::vector<std::string> getProperties();
+
+  /*!
+    Returns decoded entry that is an absolute entry
+   */
+  virtual std::string decodeEntry(const std::string& entry);
+
+
+  /*!
+    Returns whether there is the dumping visual parameters
+   */
+  static bool isDumpPython(const Handle(SALOMEDSImpl_Study)& study, const string& theID = "");  
+
+  /*!
+    Returns an ID of the last save point
+  */
+  static int getLastSavePoint(const Handle(SALOMEDSImpl_Study)& study, const std::string& theID = "");
+
+  /*!
+    Returns a Python script for the study, which sets up visual parameters
+  */
+  static std::string getStudyScript(const Handle(SALOMEDSImpl_Study)& study, int savePoint, const std::string& theID = "");
+
+  /*!
+    Returns a default Python script that set ups visual parameters for the given module
+    shift is a string that contain spaces to make valid Python script indentaion
+  */
+  static std::string getDefaultScript(const Handle(SALOMEDSImpl_Study)& study, 
+                                     const std::string& moduleName, 
+                                     const std::string& shift,
+                                     const std::string& theID = "");
+
+  /*!
+    Returns a default name of the component where the visula parameters are stored.
+  */
+  static std::string getDefaultVisualComponent();
+
+private:
+  Handle(SALOMEDSImpl_AttributeParameter) _ap;
+  Handle(SALOMEDSImpl_Study) _study;
+  std::map<std::string, std::string> _compNames;
+};
+
+
+#endif