From 941209dcda9408d4ddd4ee120405478d42f536fa Mon Sep 17 00:00:00 2001 From: asv Date: Tue, 7 Mar 2006 15:31:34 +0000 Subject: [PATCH] Merged with OCC_visual_parameters_2006 branch. It consists development of persistent visual parameters (GUI states) and Dump Python functionality. Developers: srn, asv. --- idl/SALOMEDS.idl | 24 + idl/SALOMEDS_Attributes.idl | 125 +++ src/SALOMEDS/Makefile.in | 8 +- src/SALOMEDS/SALOMEDS_AttributeParameter.cxx | 481 +++++++++++ src/SALOMEDS/SALOMEDS_AttributeParameter.hxx | 77 ++ .../SALOMEDS_AttributeParameter_i.cxx | 347 ++++++++ .../SALOMEDS_AttributeParameter_i.hxx | 89 ++ src/SALOMEDS/SALOMEDS_Attributes.hxx | 5 +- src/SALOMEDS/SALOMEDS_ClientAttributes.hxx | 8 +- src/SALOMEDS/SALOMEDS_IParameters.cxx | 279 +++++++ src/SALOMEDS/SALOMEDS_IParameters.hxx | 149 ++++ src/SALOMEDS/SALOMEDS_Study.cxx | 37 +- src/SALOMEDS/SALOMEDS_Study.hxx | 6 +- src/SALOMEDS/SALOMEDS_Study_i.cxx | 50 +- src/SALOMEDS/SALOMEDS_Study_i.hxx | 10 +- src/SALOMEDSClient/Makefile.in | 1 + src/SALOMEDSClient/SALOMEDSClient.hxx | 1 + .../SALOMEDSClient_AttributeParameter.hxx | 71 ++ src/SALOMEDSClient/SALOMEDSClient_Study.hxx | 8 +- src/SALOMEDSImpl/Makefile.in | 4 + .../SALOMEDSImpl_AttributeParameter.cxx | 765 ++++++++++++++++++ .../SALOMEDSImpl_AttributeParameter.hxx | 119 +++ src/SALOMEDSImpl/SALOMEDSImpl_Attributes.hxx | 5 +- src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx | 361 +++++++++ src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx | 153 ++++ src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx | 70 ++ src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx | 13 +- src/SALOMEDSImpl/testDS.cxx | 102 ++- 28 files changed, 3348 insertions(+), 20 deletions(-) create mode 100644 src/SALOMEDS/SALOMEDS_AttributeParameter.cxx create mode 100644 src/SALOMEDS/SALOMEDS_AttributeParameter.hxx create mode 100644 src/SALOMEDS/SALOMEDS_AttributeParameter_i.cxx create mode 100644 src/SALOMEDS/SALOMEDS_AttributeParameter_i.hxx create mode 100644 src/SALOMEDS/SALOMEDS_IParameters.cxx create mode 100644 src/SALOMEDS/SALOMEDS_IParameters.hxx create mode 100644 src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx create mode 100644 src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx create mode 100644 src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.hxx create mode 100644 src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx create mode 100644 src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx diff --git a/idl/SALOMEDS.idl b/idl/SALOMEDS.idl index de883d82e..41e42e58a 100644 --- a/idl/SALOMEDS.idl +++ b/idl/SALOMEDS.idl @@ -97,6 +97,7 @@ during each working session. interface ChildIterator; interface Driver; interface AttributeStudyProperties; + interface AttributeParameter; interface UseCaseIterator; interface UseCaseBuilder; @@ -370,6 +371,29 @@ during each working session. boolean DumpStudy(in string thePath, in string theBaseName, in boolean isPublished); +/*! + Returns an AttributeParameter used to store common parameters for given %theSavePoint. + \param theID identifies a common parameters set (Example: "Interface Applicative") + \param theSavePoint is number of a set of parameters as there can be several sets +*/ + AttributeParameter GetCommonParameters(in string theID, in long theSavePoint); + +/*! + Returns an AttributeParameter used to store parameters for given %theModuleName. + \param theID identifies a common parameters set (Example: "Interface Applicative") + \param theModuleName is a name of the module (Example: "Geometry") + \param theSavePoint is number of a set of parameters as there can be several sets +*/ + AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint); + + +/*! + Returns a default Python script to restore visual parameters for given %theModuleName. + \param theID identifies a common parameters set (Example: "Interface Applicative") + \param theModuleName is a name of the module (Example: "Geometry") +*/ + string GetDefaultScript(in string theID, in string theModuleName); + /*! Private method, returns an implementation of this Study. \param theHostname is a hostname of the caller diff --git a/idl/SALOMEDS_Attributes.idl b/idl/SALOMEDS_Attributes.idl index 80afd5603..9306818dc 100644 --- a/idl/SALOMEDS_Attributes.idl +++ b/idl/SALOMEDS_Attributes.idl @@ -1334,5 +1334,130 @@ Sets the item to be selectable */ boolean IsScript(); }; + //========================================================================== +/*! \brief %AttributeParameter interface + + Attribute is a universal container of basic types +*/ + //========================================================================== + interface AttributeParameter : GenericAttribute + { +/*! + Associates a integer value with the ID + \param theID An ID of a parameter. + \param theValue A value of the parameter +*/ + void SetInt(in string theID, in long theValue); +/*! + Returns a int value associated with the given ID + \param theID An ID of a parameter. +*/ + long GetInt(in string theID); + +/*! + Associates a real value with the ID + \param theID An ID of a parameter. + \param theValue A value of the parameter +*/ + void SetReal(in string theID, in double theValue); +/*! + Returns a real value associated with the given ID + \param theID An ID of a parameter. +*/ + double GetReal(in string theID); + +/*! + Associates a string value with the ID + \param theID An ID of a parameter. + \param theValue A value of the parameter +*/ + void SetString(in string theID, in string theValue); +/*! + Returns a string value associated with the given ID + \param theID An ID of a parameter. +*/ + string GetString(in string theID); + +/*! + Associates a boolean value with the ID + \param theID An ID of a parameter. + \param theValue A value of the parameter +*/ + void SetBool(in string theID, in boolean theValue); +/*! + Returns a boolean value associated with the given ID + \param theID An ID of a parameter. +*/ + boolean GetBool(in string theID); + +/*! + Associates an array of real values with the ID + \param theID An ID of a parameter. + \param theArray The array of real values +*/ + void SetRealArray(in string theID, in DoubleSeq theArray); +/*! + Returns an array of real values associated with the ID + \param theID An ID of a parameter. +*/ + DoubleSeq GetRealArray(in string theID); + +/*! + Associates an array of integer values with the ID + \param theID An ID of a parameter. + \param theArray The array of integer values +*/ + void SetIntArray(in string theID, in LongSeq theArray); +/*! + Returns an array of integer values associated with the ID + \param theID An ID of a parameter. +*/ + LongSeq GetIntArray(in string theID); + +/*! + Associates an array of string values with the ID + \param theID An ID of a parameter. + \param theArray The array of string values +*/ + void SetStrArray(in string theID, in StringSeq theArray); +/*! + Returns an array of string values associated with the ID + \param theID An ID of a parameter. +*/ + StringSeq GetStrArray(in string theID); +/*! + Returns True if for the ID of given type was assigned a value in the attribute + \param theID An ID of a parameter. + \param theType A type of parameter [0(Int), 1(Real), 2(Boolean), 3(String), 4(RealArray), 5(IntArray), 6(StrArray)]. +*/ + boolean IsSet(in string theID, in long theType); +/*! + Removes a parameter with given ID and Type, returns True if succeded + \param theID An ID of a parameter. + \param theType A type of parameter [0(Int), 1(Real), 2(Boolean), 3(String), 4(RealArray), 5(IntArray), 6(StrArray)]. +*/ + boolean RemoveID(in string theID, in long theType); +/*! + Returns a father attribute of this attribute +*/ + AttributeParameter GetFather(); +/*! + Returns True if this attribute has a father attribute +*/ + boolean HasFather(); +/*! + Returns True if this attribute is a root attribute +*/ + boolean IsRoot(); +/*! + Clears the content of the attribute +*/ + void Clear(); +/*! + Returns a sequence of ID's of the give type + \param theType A type of parameter [0(Int), 1(Real), 2(Boolean), 3(String), 4(RealArray), 5(IntArray), 6(StrArray)]. + */ + StringSeq GetIDs(in long theType); + }; }; #endif diff --git a/src/SALOMEDS/Makefile.in b/src/SALOMEDS/Makefile.in index 57c960664..8379d991f 100644 --- a/src/SALOMEDS/Makefile.in +++ b/src/SALOMEDS/Makefile.in @@ -24,7 +24,8 @@ EXPORT_HEADERS= \ SALOMEDS_SComponent_i.hxx \ SALOMEDS_SComponent.hxx \ SALOMEDS_GenericAttribute_i.hxx \ - SALOMEDS_GenericAttribute.hxx + SALOMEDS_GenericAttribute.hxx \ + SALOMEDS_IParameters.hxx # Libraries targets @@ -70,6 +71,7 @@ LIB_SRC = \ SALOMEDS_AttributeTableOfString_i.cxx \ SALOMEDS_AttributeStudyProperties_i.cxx \ SALOMEDS_AttributePythonObject_i.cxx \ + SALOMEDS_AttributeParameter_i.cxx \ SALOMEDS_SObject.cxx \ SALOMEDS_SComponent.cxx \ SALOMEDS_GenericAttribute.cxx \ @@ -108,7 +110,9 @@ LIB_SRC = \ SALOMEDS_AttributeTextHighlightColor.cxx \ SALOMEDS_AttributeTreeNode.cxx \ SALOMEDS_AttributeUserID.cxx \ - SALOMEDS_TMPFile_i.cxx + SALOMEDS_TMPFile_i.cxx \ + SALOMEDS_AttributeParameter.cxx \ + SALOMEDS_IParameters.cxx # Executables targets BIN = SALOMEDS_Server SALOMEDS_Client diff --git a/src/SALOMEDS/SALOMEDS_AttributeParameter.cxx b/src/SALOMEDS/SALOMEDS_AttributeParameter.cxx new file mode 100644 index 000000000..897ca7833 --- /dev/null +++ b/src/SALOMEDS/SALOMEDS_AttributeParameter.cxx @@ -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 +#include + +//======================================================================= +/*! + * 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& 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; iSetRealArray(theID.c_str(), aSeq); + } +} + +//======================================================================= +/*! + * Function : GetRealArray + * Purpose : Returns an array of double values associated with the ID + */ +//======================================================================= +vector SALOMEDS_AttributeParameter::GetRealArray(const string& theID) +{ + vector 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& 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; iSetIntArray(theID.c_str(), aSeq); + } +} + +//======================================================================= +/*! + * Function : GetIntArray + * Purpose : Returns an array of int values associated with the ID + */ +//======================================================================= +vector SALOMEDS_AttributeParameter::GetIntArray(const string& theID) +{ + vector 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& 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; iSetStrArray(theID.c_str(), aSeq); + } +} + +//======================================================================= +/*! + * Function : GetStrArray + * Purpose : Returns an array of string values associated with the ID + */ +//======================================================================= +vector SALOMEDS_AttributeParameter::GetStrArray(const string& theID) +{ + vector 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 SALOMEDS_AttributeParameter::GetIDs(const int theType) +{ + vector 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 +#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& theArray); + virtual std::vector GetRealArray(const std::string& theID); + + virtual void SetIntArray(const std::string& theID, const std::vector& theArray); + virtual std::vector GetIntArray(const std::string& theID); + + virtual void SetStrArray(const std::string& theID, const std::vector& theArray); + virtual std::vector 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 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 index 000000000..ff5023dbf --- /dev/null +++ b/src/SALOMEDS/SALOMEDS_AttributeParameter_i.cxx @@ -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 + +#include + +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 v; + int length = theArray.length(); + if(length) { + v.resize(length); + for(int i = 0; iSetRealArray(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 v = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetRealArray(theID); + int length = v.size(); + if(length) { + aSeq->length(length); + for(int i = 0; i v; + int length = theArray.length(); + if(length) { + v.resize(length); + for(int i = 0; iSetIntArray(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 v = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetIntArray(theID); + int length = v.size(); + if(length) { + aSeq->length(length); + for(int i = 0; i v; + int length = theArray.length(); + if(length) { + v.resize(length); + for(int i = 0; iSetStrArray(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 v = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(_impl)->GetStrArray(theID); + int length = v.size(); + if(length) { + aSeq->length(length); + for(int i = 0; iIsSet(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 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 index 000000000..c393a208a --- /dev/null +++ b/src/SALOMEDS/SALOMEDS_AttributeParameter_i.hxx @@ -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 +#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_Attributes.hxx b/src/SALOMEDS/SALOMEDS_Attributes.hxx index a0c5586eb..e21925101 100644 --- a/src/SALOMEDS/SALOMEDS_Attributes.hxx +++ b/src/SALOMEDS/SALOMEDS_Attributes.hxx @@ -54,6 +54,7 @@ #include "SALOMEDSImpl_AttributeFileType.hxx" #include "SALOMEDSImpl_AttributeFlags.hxx" #include "SALOMEDSImpl_AttributeGraphic.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" #include "SALOMEDS_GenericAttribute_i.hxx" #include "SALOMEDS_AttributeName_i.hxx" @@ -84,6 +85,7 @@ #include "SALOMEDS_AttributeFileType_i.hxx" #include "SALOMEDS_AttributeFlags_i.hxx" #include "SALOMEDS_AttributeGraphic_i.hxx" +#include "SALOMEDS_AttributeParameter_i.hxx" #define __CreateCORBAAttribute(CORBA_Name) if (strcmp(aTypeOfAttribute, #CORBA_Name) == 0) { \ Handle(SALOMEDSImpl_##CORBA_Name) A = Handle(SALOMEDSImpl_##CORBA_Name)::DownCast(theAttr); \ @@ -121,6 +123,7 @@ __CreateCORBAAttribute(AttributeFileType) \ __CreateCORBAAttribute(AttributeFlags) \ __CreateCORBAAttribute(AttributeGraphic) \ __CreateCORBAAttribute(AttributeTreeNode) \ -__CreateCORBAAttribute(AttributeUserID) +__CreateCORBAAttribute(AttributeUserID) \ +__CreateCORBAAttribute(AttributeParameter) #endif diff --git a/src/SALOMEDS/SALOMEDS_ClientAttributes.hxx b/src/SALOMEDS/SALOMEDS_ClientAttributes.hxx index 47105d5f3..c0bd6ecac 100644 --- a/src/SALOMEDS/SALOMEDS_ClientAttributes.hxx +++ b/src/SALOMEDS/SALOMEDS_ClientAttributes.hxx @@ -55,6 +55,7 @@ #include "SALOMEDSImpl_AttributeFileType.hxx" #include "SALOMEDSImpl_AttributeFlags.hxx" #include "SALOMEDSImpl_AttributeGraphic.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" #include "SALOMEDS_GenericAttribute.hxx" #include "SALOMEDS_AttributeName.hxx" @@ -85,6 +86,7 @@ #include "SALOMEDS_AttributeFileType.hxx" #include "SALOMEDS_AttributeFlags.hxx" #include "SALOMEDS_AttributeGraphic.hxx" +#include "SALOMEDS_AttributeParameter.hxx" #define __CreateClientAttributeLocal(CORBA_Name) if (strcmp(aTypeOfAttribute.c_str(), #CORBA_Name) == 0) { \ Handle(SALOMEDSImpl_##CORBA_Name) A = Handle(SALOMEDSImpl_##CORBA_Name)::DownCast(theGA); \ @@ -124,7 +126,8 @@ __CreateClientAttributeLocal(AttributeFileType) \ __CreateClientAttributeLocal(AttributeFlags) \ __CreateClientAttributeLocal(AttributeGraphic) \ __CreateClientAttributeLocal(AttributeTreeNode) \ -__CreateClientAttributeLocal(AttributeUserID) +__CreateClientAttributeLocal(AttributeUserID) \ +__CreateClientAttributeLocal(AttributeParameter) #define __CreateGenericClientAttributeCORBA \ __CreateClientAttributeCORBA(AttributeReal) \ @@ -154,6 +157,7 @@ __CreateClientAttributeCORBA(AttributeFileType) \ __CreateClientAttributeCORBA(AttributeFlags) \ __CreateClientAttributeCORBA(AttributeGraphic) \ __CreateClientAttributeCORBA(AttributeTreeNode) \ -__CreateClientAttributeCORBA(AttributeUserID) +__CreateClientAttributeCORBA(AttributeUserID) \ +__CreateClientAttributeCORBA(AttributeParameter) #endif diff --git a/src/SALOMEDS/SALOMEDS_IParameters.cxx b/src/SALOMEDS/SALOMEDS_IParameters.cxx new file mode 100644 index 000000000..6540d9fee --- /dev/null +++ b/src/SALOMEDS/SALOMEDS_IParameters.cxx @@ -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 + +#include + +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 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 v = _ap->GetStrArray(listName); + return v.size(); +} + +vector SALOMEDS_IParameters::getValues(const string& listName) +{ + vector 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 v = _ap->GetStrArray(listName); + if(index >= v.size()) return ""; + return v[index]; +} + +vector SALOMEDS_IParameters::getLists() +{ + vector 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 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 v = _ap->GetStrArray(entry); + int length = v.size(); + for(int i = 0; i SALOMEDS_IParameters::getAllParameterNames(const string& entry) +{ + vector 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 SALOMEDS_IParameters::getAllParameterValues(const string& entry) +{ + vector 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; iIsSet(entry, PT_STRARRAY)) return -1; + return _ap->GetStrArray(entry).size()/2; +} + +vector SALOMEDS_IParameters::getEntries() +{ + vector 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 SALOMEDS_IParameters::getProperties() +{ + vector v; + if(!_ap) return v; + if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v; + return _ap->GetStrArray(_AP_PROPERTIES_LIST_); +} + + +vector SALOMEDS_IParameters::parseValue(const string& value, const char separator, bool fromEnd) +{ + TCollection_AsciiString val((char*)value.c_str()); + vector 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 index 000000000..4111e83f9 --- /dev/null +++ b/src/SALOMEDS/SALOMEDS_IParameters.hxx @@ -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 +#include +#include + +#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 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 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 getAllParameterNames(const std::string& entry); + + /*! + Returns all parameter values of the given entry + */ + virtual std::vector 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 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 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 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 _compNames; +}; + + +#endif diff --git a/src/SALOMEDS/SALOMEDS_Study.cxx b/src/SALOMEDS/SALOMEDS_Study.cxx index 17e3fcba0..67220592e 100644 --- a/src/SALOMEDS/SALOMEDS_Study.cxx +++ b/src/SALOMEDS/SALOMEDS_Study.cxx @@ -34,6 +34,7 @@ #include "SALOMEDS_ChildIterator.hxx" #include "SALOMEDS_SComponentIterator.hxx" #include "SALOMEDS_AttributeStudyProperties.hxx" +#include "SALOMEDS_AttributeParameter.hxx" #include "SALOMEDS_UseCaseBuilder.hxx" #include "SALOMEDSImpl_SComponent.hxx" @@ -42,6 +43,7 @@ #include "SALOMEDSImpl_ChildIterator.hxx" #include "SALOMEDSImpl_SComponentIterator.hxx" #include "SALOMEDSImpl_AttributeStudyProperties.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" #include "SALOMEDSImpl_UseCaseBuilder.hxx" #include "SALOMEDS_Driver_i.hxx" @@ -634,10 +636,10 @@ void SALOMEDS_Study::EnableUseCaseAutoFilling(bool isEnabled) else _corba_impl->EnableUseCaseAutoFilling(isEnabled); } -bool SALOMEDS_Study::DumpStudy(const std::string& thePath, const std::string& theBaseName, bool isPublished) +bool SALOMEDS_Study::DumpStudy(const string& thePath, const string& theBaseName, bool isPublished) { //SRN: Pure CORBA DumpStudy as it does more cleaning than the local one - bool ret = _corba_impl->DumpStudy((char*)thePath.c_str(), (char*)theBaseName.c_str(), isPublished); + bool ret = _corba_impl->DumpStudy(thePath.c_str(), theBaseName.c_str(), isPublished); return ret; } @@ -682,3 +684,34 @@ SALOMEDS::Study_ptr SALOMEDS_Study::GetStudy() return SALOMEDS::Study::_nil(); } + +_PTR(AttributeParameter) SALOMEDS_Study::GetCommonParameters(const string& theID, int theSavePoint) +{ + SALOMEDSClient_AttributeParameter* AP = NULL; + if(theSavePoint >= 0) { + if (_isLocal) { + SALOMEDS::Locker lock; + AP = new SALOMEDS_AttributeParameter(_local_impl->GetCommonParameters(theID.c_str(), theSavePoint)); + } + else { + AP = new SALOMEDS_AttributeParameter(_corba_impl->GetCommonParameters(theID.c_str(), theSavePoint)); + } + } + return _PTR(AttributeParameter)(AP); +} + +_PTR(AttributeParameter) SALOMEDS_Study::GetModuleParameters(const string& theID, + const string& theModuleName, int theSavePoint) +{ + SALOMEDSClient_AttributeParameter* AP = NULL; + if(theSavePoint > 0) { + if (_isLocal) { + SALOMEDS::Locker lock; + AP = new SALOMEDS_AttributeParameter(_local_impl->GetModuleParameters(theID.c_str(), theModuleName.c_str(), theSavePoint)); + } + else { + AP = new SALOMEDS_AttributeParameter(_corba_impl->GetModuleParameters(theID.c_str(), theModuleName.c_str(), theSavePoint)); + } + } + return _PTR(AttributeParameter)(AP); +} diff --git a/src/SALOMEDS/SALOMEDS_Study.hxx b/src/SALOMEDS/SALOMEDS_Study.hxx index db2ce6999..8ac27aa70 100644 --- a/src/SALOMEDS/SALOMEDS_Study.hxx +++ b/src/SALOMEDS/SALOMEDS_Study.hxx @@ -86,8 +86,10 @@ public: virtual _PTR(UseCaseBuilder) GetUseCaseBuilder(); virtual void Close(); virtual void EnableUseCaseAutoFilling(bool isEnabled); - virtual bool DumpStudy(const std::string& thePath, const std::string& theBaseName, bool isPublished); - + virtual bool DumpStudy(const std::string& thePath,const std::string& theBaseName,bool isPublished); + virtual _PTR(AttributeParameter) GetCommonParameters(const std::string& theID, int theSavePoint); + virtual _PTR(AttributeParameter) GetModuleParameters(const std::string& theID, + const std::string& theModuleName, int theSavePoint); std::string ConvertObjectToIOR(CORBA::Object_ptr theObject); CORBA::Object_ptr ConvertIORToObject(const std::string& theIOR); diff --git a/src/SALOMEDS/SALOMEDS_Study_i.cxx b/src/SALOMEDS/SALOMEDS_Study_i.cxx index 6db403acb..558bb904f 100644 --- a/src/SALOMEDS/SALOMEDS_Study_i.cxx +++ b/src/SALOMEDS/SALOMEDS_Study_i.cxx @@ -27,6 +27,7 @@ #include "SALOMEDS_UseCaseIterator_i.hxx" #include "SALOMEDS_GenericAttribute_i.hxx" #include "SALOMEDS_AttributeStudyProperties_i.hxx" +#include "SALOMEDS_AttributeParameter_i.hxx" #include "SALOMEDS_ChildIterator_i.hxx" #include "SALOMEDS_Driver_i.hxx" #include "SALOMEDS.hxx" @@ -35,7 +36,9 @@ #include "SALOMEDSImpl_SComponent.hxx" #include "SALOMEDSImpl_UseCaseBuilder.hxx" #include "SALOMEDSImpl_AttributeStudyProperties.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" #include "SALOMEDSImpl_ChildIterator.hxx" +#include "SALOMEDSImpl_IParameters.hxx" #include #include @@ -737,7 +740,9 @@ void SALOMEDS_Study_i::UndoPostponed(CORBA::Long theWay) * Purpose : */ //============================================================================ -CORBA::Boolean SALOMEDS_Study_i::DumpStudy(const char* thePath, const char* theBaseName, CORBA::Boolean isPublished) +CORBA::Boolean SALOMEDS_Study_i::DumpStudy(const char* thePath, + const char* theBaseName, + CORBA::Boolean isPublished) { SALOMEDS::Locker lock; @@ -748,6 +753,49 @@ CORBA::Boolean SALOMEDS_Study_i::DumpStudy(const char* thePath, const char* theB return ret; } +//============================================================================ +/*! Function : GetCommonParameters + * Purpose : + */ +//============================================================================ +SALOMEDS::AttributeParameter_ptr SALOMEDS_Study_i::GetCommonParameters(const char* theID, CORBA::Long theSavePoint) +{ + SALOMEDS::Locker lock; + + Handle(SALOMEDSImpl_AttributeParameter) anAttr = _impl->GetCommonParameters(theID, theSavePoint); + SALOMEDS_AttributeParameter_i* SP = new SALOMEDS_AttributeParameter_i(anAttr, _orb); + return SP->AttributeParameter::_this(); +} + +//============================================================================ +/*! Function : GetCommonModuleParameters + * Purpose : + */ +//============================================================================ +SALOMEDS::AttributeParameter_ptr SALOMEDS_Study_i::GetModuleParameters(const char* theID, + const char* theModuleName, + CORBA::Long theSavePoint) +{ + SALOMEDS::Locker lock; + + Handle(SALOMEDSImpl_AttributeParameter) anAttr = _impl->GetModuleParameters(theID, theModuleName, theSavePoint); + SALOMEDS_AttributeParameter_i* SP = new SALOMEDS_AttributeParameter_i(anAttr, _orb); + return SP->AttributeParameter::_this(); +} + +//============================================================================ +/*! Function : GetDefaultScript + * Purpose : + */ +//============================================================================ +char* SALOMEDS_Study_i::GetDefaultScript(const char* theModuleName, const char* theShift) +{ + SALOMEDS::Locker lock; + + string script = SALOMEDSImpl_IParameters::getDefaultScript(_impl, theModuleName, theShift); + return CORBA::string_dup(script.c_str()); +} + //=========================================================================== // PRIVATE FUNCTIONS //=========================================================================== diff --git a/src/SALOMEDS/SALOMEDS_Study_i.hxx b/src/SALOMEDS/SALOMEDS_Study_i.hxx index b10719216..609d566ea 100644 --- a/src/SALOMEDS/SALOMEDS_Study_i.hxx +++ b/src/SALOMEDS/SALOMEDS_Study_i.hxx @@ -279,10 +279,18 @@ public: // theWay = -1: get back to the list of postponed #endif - virtual CORBA::Boolean DumpStudy(const char* thePath, const char* theBaseName, CORBA::Boolean isPublished); + virtual SALOMEDS::AttributeParameter_ptr GetCommonParameters(const char* theID, CORBA::Long theSavePoint); + virtual SALOMEDS::AttributeParameter_ptr GetModuleParameters(const char* theID, + const char* theModuleName, + CORBA::Long theSavePoint); + + virtual char* GetDefaultScript(const char* theModuleName, const char* theShift); + + virtual CORBA::Boolean DumpStudy(const char* thePath, const char* theBaseName, CORBA::Boolean isPublished); virtual Handle(SALOMEDSImpl_Study) GetImpl() { return _impl; } virtual long GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal); + }; #endif diff --git a/src/SALOMEDSClient/Makefile.in b/src/SALOMEDSClient/Makefile.in index b8db05ae1..c7cbfedae 100644 --- a/src/SALOMEDSClient/Makefile.in +++ b/src/SALOMEDSClient/Makefile.in @@ -39,6 +39,7 @@ EXPORT_HEADERS= SALOMEDSClient_definitions.hxx \ SALOMEDSClient_AttributeTextHighlightColor.hxx \ SALOMEDSClient_AttributeTreeNode.hxx \ SALOMEDSClient_AttributeUserID.hxx \ + SALOMEDSClient_AttributeParameter.hxx \ SALOMEDSClient_ChildIterator.hxx \ SALOMEDSClient_GenericAttribute.hxx \ SALOMEDSClient_SComponent.hxx \ diff --git a/src/SALOMEDSClient/SALOMEDSClient.hxx b/src/SALOMEDSClient/SALOMEDSClient.hxx index e604320e0..5adb67120 100644 --- a/src/SALOMEDSClient/SALOMEDSClient.hxx +++ b/src/SALOMEDSClient/SALOMEDSClient.hxx @@ -49,6 +49,7 @@ #include "SALOMEDSClient_AttributeTextHighlightColor.hxx" #include "SALOMEDSClient_AttributeTreeNode.hxx" #include "SALOMEDSClient_AttributeUserID.hxx" +#include "SALOMEDSClient_AttributeParameter.hxx" #include "SALOMEDSClient_ChildIterator.hxx" #include "SALOMEDSClient_GenericAttribute.hxx" #include "SALOMEDSClient_SComponent.hxx" diff --git a/src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx b/src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx new file mode 100644 index 000000000..e8c3f1752 --- /dev/null +++ b/src/SALOMEDSClient/SALOMEDSClient_AttributeParameter.hxx @@ -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 +#include + +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& theArray) = 0; + virtual std::vector GetRealArray(const std::string& theID) = 0; + + virtual void SetIntArray(const std::string& theID, const std::vector& theArray) = 0; + virtual std::vector GetIntArray(const std::string& theID) = 0; + + virtual void SetStrArray(const std::string& theID, const std::vector& theArray) = 0; + virtual std::vector 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 GetIDs(const int theType) = 0; +}; + +#endif diff --git a/src/SALOMEDSClient/SALOMEDSClient_Study.hxx b/src/SALOMEDSClient/SALOMEDSClient_Study.hxx index 4a33f2b9d..d9873090c 100644 --- a/src/SALOMEDSClient/SALOMEDSClient_Study.hxx +++ b/src/SALOMEDSClient/SALOMEDSClient_Study.hxx @@ -30,6 +30,7 @@ #include "SALOMEDSClient_definitions.hxx" #include "SALOMEDSClient_SComponentIterator.hxx" #include "SALOMEDSClient_StudyBuilder.hxx" +#include "SALOMEDSClient_AttributeParameter.hxx" #include "SALOMEDSClient_SObject.hxx" #include "SALOMEDSClient_SComponent.hxx" #include "SALOMEDSClient_UseCaseBuilder.hxx" @@ -79,7 +80,12 @@ public: virtual _PTR(UseCaseBuilder) GetUseCaseBuilder() = 0; virtual void Close() = 0; virtual void EnableUseCaseAutoFilling(bool isEnabled) = 0; - virtual bool DumpStudy(const std::string& thePath, const std::string& theBaseName, bool isPublished) = 0; + virtual bool DumpStudy(const std::string& thePath, + const std::string& theBaseName, + bool isPublished) = 0; + virtual _PTR(AttributeParameter) GetCommonParameters(const std::string& theID, int theSavePoint) = 0; + virtual _PTR(AttributeParameter) GetModuleParameters(const std::string& theID, + const std::string& theModuleName, int theSavePoint) = 0; }; diff --git a/src/SALOMEDSImpl/Makefile.in b/src/SALOMEDSImpl/Makefile.in index 3e87ff32d..6a2703f22 100644 --- a/src/SALOMEDSImpl/Makefile.in +++ b/src/SALOMEDSImpl/Makefile.in @@ -47,6 +47,7 @@ EXPORT_HEADERS= \ SALOMEDSImpl_AttributeName.hxx \ SALOMEDSImpl_AttributeComment.hxx \ SALOMEDSImpl_AttributeReference.hxx \ + SALOMEDSImpl_AttributeParameter.hxx \ SALOMEDSImpl_UseCaseBuilder.hxx \ SALOMEDSImpl_UseCaseIterator.hxx \ SALOMEDSImpl_SComponentIterator.hxx \ @@ -55,6 +56,7 @@ EXPORT_HEADERS= \ SALOMEDSImpl_StudyManager.hxx \ SALOMEDSImpl_OCAFApplication.hxx \ SALOMEDSImpl_ChildNodeIterator.hxx \ + SALOMEDSImpl_IParameters.hxx \ SALOMEDSImpl_TMPFile.hxx LIB_CLIENT_IDL = @@ -106,6 +108,7 @@ LIB_SRC = SALOMEDSImpl_Tool.cxx \ SALOMEDSImpl_AttributeName.cxx \ SALOMEDSImpl_AttributeComment.cxx \ SALOMEDSImpl_AttributeReference.cxx \ + SALOMEDSImpl_AttributeParameter.cxx \ SALOMEDSImpl_ChildNodeIterator.cxx \ SALOMEDSImpl_UseCaseBuilder.cxx \ SALOMEDSImpl_UseCaseIterator.cxx \ @@ -113,6 +116,7 @@ LIB_SRC = SALOMEDSImpl_Tool.cxx \ SALOMEDSImpl_StudyBuilder.cxx \ SALOMEDSImpl_Study.cxx \ SALOMEDSImpl_StudyManager.cxx \ + SALOMEDSImpl_IParameters.cxx \ SALOMEDSImpl_TMPFile.cxx diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx new file mode 100644 index 000000000..929dec934 --- /dev/null +++ b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.cxx @@ -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 + +#include +#include +#include + +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& theArray) +{ + CheckLocked(); + + Backup(); + + _realarrays[theID] = theArray; + + SetModifyFlag(); +} + +//======================================================================= +/*! + * Function : GetRealArray + * Purpose : Returns double values associated with the ID + */ +//======================================================================= +vector 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& theArray) +{ + CheckLocked(); + + Backup(); + + _intarrays[theID] = theArray; + + SetModifyFlag(); +} + +//======================================================================= +/*! + * Function : GetIntArray + * Purpose : Returns int values associated with the ID + */ +//======================================================================= +vector 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& theArray) +{ + CheckLocked(); + + Backup(); + + _strarrays[theID] = theArray; + + SetModifyFlag(); +} + +//======================================================================= +/*! + * Function : GetStrArray + * Purpose : Returns string values associated with the ID + */ +//======================================================================= +vector 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 SALOMEDSImpl_AttributeParameter::GetIDs(const Parameter_Types theType) +{ + + vector anArray; + int i = 0; + + switch(theType) { + case PT_INTEGER: { + if(_ints.size()) { + anArray.resize(_ints.size()); + for(map::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::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::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::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 >::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 >::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 >::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::const_iterator p = A->_ints.begin(); p!= A->_ints.end(); p++) _ints[p->first] = p->second; + for(map::const_iterator p = A->_reals.begin(); p!= A->_reals.end(); p++) _reals[p->first] = p->second; + for(map::const_iterator p = A->_bools.begin(); p!= A->_bools.end(); p++) _bools[p->first] = p->second; + for(map::const_iterator p = A->_strings.begin(); p!= A->_strings.end(); p++) + _strings[p->first] = p->second; + for(map< string,vector >::const_iterator p = A->_realarrays.begin(); p!= A->_realarrays.end(); p++) + _realarrays[p->first] = p->second; + for(map< string,vector >::const_iterator p = A->_intarrays.begin(); p!= A->_intarrays.end(); p++) + _intarrays[p->first] = p->second; + for(map< string,vector >::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::const_iterator p = _ints.begin(); p != _ints.end(); p++) { + buffer << convertString(p->first) << " " << p->second << " "; + } + + buffer << _reals.size() << " "; + for(map::const_iterator p =_reals.begin(); p != _reals.end(); p++) { + sprintf(tmpBuffer, "%.64e", p->second); + buffer << convertString(p->first) << " " << tmpBuffer << " "; + } + + buffer << _bools.size() << " "; + for(map::const_iterator p = _bools.begin(); p != _bools.end(); p++) { + buffer << convertString(p->first) << " " << p->second << " "; + } + + buffer << _strings.size() << " "; + for(map::const_iterator p = _strings.begin(); p != _strings.end(); p++) { + buffer << convertString(p->first) << " " << convertString(p->second) << " "; + } + + buffer << _realarrays.size() << " "; + for(map< string,vector >::const_iterator p = _realarrays.begin(); p != _realarrays.end(); p++) { + vector v(p->second); + sprintf(tmpBuffer, " %s %d ", convertString(p->first).c_str(), v.size()); + buffer << tmpBuffer; + for(int i = 0; i >::const_iterator p = _intarrays.begin(); p != _intarrays.end(); p++) { + vector v(p->second); + sprintf(tmpBuffer, " %s %d ", convertString(p->first).c_str(), v.size()); + buffer << tmpBuffer; + for(int i = 0; i >::const_iterator p = _strarrays.begin(); p != _strarrays.end(); p++) { + vector v(p->second); + sprintf(tmpBuffer, " %s %d ", convertString(p->first).c_str(), v.size()); + buffer << tmpBuffer; + for(int i = 0; istr()); + + 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 v; + v.resize(val); + for(int j = 0; j> val2; + v[j] = val2; + } + _realarrays[restoreString(id)] = v; + } + + buffer >> size; + for(int i = 1; i<=size; i++) { + buffer >> id >> val; + vector v; + v.resize(val); + for(int j = 0; j> ival; + v[j] = ival; + } + _intarrays[restoreString(id)] = v; + } + + buffer >> size; + for(int i = 1; i<=size; i++) { + buffer >> id >> val; + vector v; + v.resize(val); + for(int j = 0; j> 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 index 000000000..ab273ae50 --- /dev/null +++ b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeParameter.hxx @@ -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 +#include +#include +#include +#include +#include "SALOMEDSImpl_GenericAttribute.hxx" + +#include +#include +#include + +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 _ints; + std::map _reals; + std::map _strings; + std::map _bools; + std::map< std::string, vector > _realarrays; + std::map< std::string, vector > _intarrays; + std::map< std::string, vector > _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& theArray); + Standard_EXPORT std::vector GetRealArray(const std::string& theID); + + Standard_EXPORT void SetIntArray(const std::string& theID, const std::vector& theArray); + Standard_EXPORT std::vector GetIntArray(const std::string& theID); + + Standard_EXPORT void SetStrArray(const std::string& theID, const std::vector& theArray); + Standard_EXPORT std::vector 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 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_Attributes.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_Attributes.hxx index e593350f0..4be4e027e 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_Attributes.hxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_Attributes.hxx @@ -63,6 +63,7 @@ public : #include "SALOMEDSImpl_AttributeFileType.hxx" #include "SALOMEDSImpl_AttributeFlags.hxx" #include "SALOMEDSImpl_AttributeGraphic.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" #define __AttributeTypeToGUIDForSObject \ @@ -93,7 +94,8 @@ public : if(theType == "AttributeFileType") return SALOMEDSImpl_AttributeFileType::GetID(); \ if(theType == "AttributeFlags") return SALOMEDSImpl_AttributeFlags::GetID(); \ if(theType == "AttributeGraphic") return SALOMEDSImpl_AttributeGraphic::GetID(); \ - if(theType == "AttributeReference") return SALOMEDSImpl_AttributeReference::GetID(); + if(theType == "AttributeReference") return SALOMEDSImpl_AttributeReference::GetID(); \ + if(theType == "AttributeParameter") return SALOMEDSImpl_AttributeParameter::GetID(); #define __FindOrCreateAttributeLocked(ClassName) if (strcmp(aTypeOfAttribute.ToCString(), #ClassName) == 0) { \ @@ -129,6 +131,7 @@ __FindOrCreateAttributeLocked(AttributeTableOfInteger) \ __FindOrCreateAttributeLocked(AttributeTableOfReal) \ __FindOrCreateAttributeLocked(AttributeTableOfString) \ __FindOrCreateAttributeLocked(AttributePythonObject) \ +__FindOrCreateAttributeLocked(AttributeParameter) \ __FindOrCreateAttribute(AttributePersistentRef) \ __FindOrCreateAttribute(AttributeDrawable) \ __FindOrCreateAttribute(AttributeSelectable) \ diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx new file mode 100644 index 000000000..02115abab --- /dev/null +++ b/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx @@ -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 + +#include + +#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 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 v = _ap->GetStrArray(listName); + return v.size(); +} + +vector SALOMEDSImpl_IParameters::getValues(const string& listName) +{ + vector 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 v = _ap->GetStrArray(listName); + if(index >= v.size()) return ""; + return v[index]; +} + +vector SALOMEDSImpl_IParameters::getLists() +{ + vector 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 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 v = _ap->GetStrArray(entry); + int length = v.size(); + for(int i = 0; i SALOMEDSImpl_IParameters::getAllParameterNames(const string& entry) +{ + vector 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 SALOMEDSImpl_IParameters::getAllParameterValues(const string& entry) +{ + vector 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; iIsSet(entry, PT_STRARRAY)) return -1; + return _ap->GetStrArray(entry).size()/2; +} + +vector SALOMEDSImpl_IParameters::getEntries() +{ + vector 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 SALOMEDSImpl_IParameters::getProperties() +{ + vector 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 v = ip.getProperties(); + if(v.size() > 0) { + dump += "#Set up visual properties:\n"; + for(int i = 0; i 0) { + dump += "#Set up lists:\n"; + for(int i = 0; i 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 v = ip.getProperties(); + if(v.size() > 0) { + dump += shift +"#Set up visual properties:\n"; + for(int i = 0; i 0) { + dump += shift +"#Set up lists:\n"; + for(int i = 0; i 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 names = ip.getAllParameterNames(v[i]); + vector 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 index 000000000..4e6d5050b --- /dev/null +++ b/src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx @@ -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 +#include +#include + +#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 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 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 SALOMEDSImpl_IParameters::getAllParameterNames(const std::string& entry); + + /*! + Returns all parameter values of the given entry + */ + virtual std::vector 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 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 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 _compNames; +}; + + +#endif diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx index 00dd0b978..ff3b3112e 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx @@ -46,6 +46,7 @@ using namespace std; #include "SALOMEDSImpl_AttributeReference.hxx" #include "SALOMEDSImpl_StudyHandle.hxx" #include "SALOMEDSImpl_Tool.hxx" +#include "SALOMEDSImpl_IParameters.hxx" IMPLEMENT_STANDARD_HANDLE( SALOMEDSImpl_Study, MMgt_TShared ) IMPLEMENT_STANDARD_RTTIEXT( SALOMEDSImpl_Study, MMgt_TShared ) @@ -1303,6 +1304,19 @@ bool SALOMEDSImpl_Study::DumpStudy(const TCollection_AsciiString& thePath, fp << "import " << aBatchModeScript << "\n" << endl; fp << "sys.path.insert( 0, \'" << thePath << "\')\n" << endl; + + //Check if it's necessary to dump visual parameters + bool isDumpVisuals = SALOMEDSImpl_IParameters::isDumpPython(this); + int lastSavePoint = -1; + if(isDumpVisuals) { + lastSavePoint = SALOMEDSImpl_IParameters::getLastSavePoint(this); + if(lastSavePoint > 0) { + fp << SALOMEDSImpl_IParameters::getStudyScript(this, lastSavePoint); + fp << "\n" << endl; + } + } + + Handle(TColStd_HSequenceOfAsciiString) aSeqOfFileNames = new TColStd_HSequenceOfAsciiString; //Iterate all components and create the componponents specific scripts. @@ -1387,6 +1401,10 @@ bool SALOMEDSImpl_Study::DumpStudy(const TCollection_AsciiString& thePath, fp << aScriptName << ".RebuildData(" << aBatchModeScript << ".myStudy)" << endl; } + if(isDumpVisuals) { //Output the call to Session's method restoreVisualState + fp << "iparameters.getSession().restoreVisualState(1)" << endl; + } + fp << "salome.sg.updateObjBrowser(1)" << endl; fp.close(); @@ -1498,3 +1516,55 @@ void SALOMEDSImpl_Study::Modify() _errorCode = ""; _doc->Modify(); } + +//============================================================================ +/*! Function : + * Purpose : + */ +//============================================================================ +Handle(SALOMEDSImpl_AttributeParameter) SALOMEDSImpl_Study::GetCommonParameters(const char* theID, int theSavePoint) +{ + if(theSavePoint < 0) return NULL; + Handle(SALOMEDSImpl_StudyBuilder) builder = NewBuilder(); + Handle(SALOMEDSImpl_SObject) so = FindComponent((char*)theID); + if(so.IsNull()) so = builder->NewComponent((char*)theID); + Handle(SALOMEDSImpl_SObject) newSO; + if(theSavePoint == 0) //Get an attribute that is placed on the component itself. + newSO = so; + else + newSO = builder->NewObjectToTag(so, theSavePoint); + return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(builder->FindOrCreateAttribute(newSO, "AttributeParameter")); +} + +//============================================================================ +/*! Function : + * Purpose : + */ +//============================================================================ +Handle(SALOMEDSImpl_AttributeParameter) SALOMEDSImpl_Study::GetModuleParameters(const char* theID, + const char* theModuleName, + int theSavePoint) +{ + if(theSavePoint <= 0) return NULL; + Handle(SALOMEDSImpl_AttributeParameter) main_ap = GetCommonParameters(theID, theSavePoint); + Handle(SALOMEDSImpl_SObject) main_so = main_ap->GetSObject(); + Handle(SALOMEDSImpl_AttributeParameter) par; + + Handle(SALOMEDSImpl_ChildIterator) it = NewChildIterator(main_so); + string moduleName(theModuleName); + for(; it->More(); it->Next()) { + Handle(SALOMEDSImpl_SObject) so(it->Value()); + Handle(SALOMEDSImpl_GenericAttribute) ga; + if(so->FindAttribute(ga, "AttributeParameter")) { + par = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(ga); + if(!par->IsSet("AP_MODULE_NAME", (Parameter_Types)3)) continue; //3 -> PT_STRING + if(par->GetString("AP_MODULE_NAME") == moduleName) return par; + } + } + + Handle(SALOMEDSImpl_StudyBuilder) builder = NewBuilder(); + Handle(SALOMEDSImpl_SObject) so = builder->NewObject(main_so); + par = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(builder->FindOrCreateAttribute(so, "AttributeParameter")); + par->SetString("AP_MODULE_NAME", moduleName); + return par; +} diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx index d87b4ec8d..c22b2cd77 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx @@ -56,6 +56,7 @@ DEFINE_STANDARD_HANDLE( SALOMEDSImpl_Study, MMgt_TShared ) #include "SALOMEDSImpl_UseCaseBuilder.hxx" #include "SALOMEDSImpl_AttributeStudyProperties.hxx" #include "SALOMEDSImpl_AttributeIOR.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" #include "SALOMEDSImpl_Callback.hxx" #include "SALOMEDSImpl_Driver.hxx" #include "SALOMEDSImpl_ChildIterator.hxx" @@ -254,9 +255,9 @@ public: Standard_EXPORT virtual bool HasCurrentContext() { return !_current.IsNull(); } Standard_EXPORT virtual bool DumpStudy(const TCollection_AsciiString& thePath, - const TCollection_AsciiString& theBaseName, - bool isPublished, - SALOMEDSImpl_DriverFactory* theFactory); + const TCollection_AsciiString& theBaseName, + bool isPublished, + SALOMEDSImpl_DriverFactory* theFactory); Standard_EXPORT static TCollection_AsciiString GetDumpStudyComment(const char* theComponentName = 0); @@ -268,6 +269,12 @@ public: //This method marks the study as being modified Standard_EXPORT void Modify(); + Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetCommonParameters(const char* theID, int theSavePoint); + + Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetModuleParameters(const char* theID, + const char* theModuleName, + int theSavePoint); + public: DEFINE_STANDARD_RTTI( SALOMEDSImpl_Study ) diff --git a/src/SALOMEDSImpl/testDS.cxx b/src/SALOMEDSImpl/testDS.cxx index 8adcc07b5..0f8f2f61b 100644 --- a/src/SALOMEDSImpl/testDS.cxx +++ b/src/SALOMEDSImpl/testDS.cxx @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -37,6 +38,8 @@ #include "SALOMEDSImpl_StudyBuilder.hxx" #include "SALOMEDSImpl_SObject.hxx" #include "SALOMEDSImpl_SComponent.hxx" +#include "SALOMEDSImpl_AttributeParameter.hxx" + //#include "SALOMEDSImpl_.hxx" int main (int argc, char * argv[]) @@ -81,15 +84,106 @@ int main (int argc, char * argv[]) aBuilder->RemoveObject(aSubSO); cout << "Remove: done" << endl; + cout << "Check AttributeTreeNode " << endl; + aTDFAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeTreeNode"); + cout << Handle(SALOMEDSImpl_GenericAttribute)::DownCast(aTDFAttr)->Type() << endl; + cout << "Check AttributeTreeNode : done " << endl; + + aTDFAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeParameter"); + cout << Handle(SALOMEDSImpl_GenericAttribute)::DownCast(aTDFAttr)->Type() << endl; + cout << "Check the attributes on SObject" << endl; Handle(TColStd_HSequenceOfTransient) aSeq = aSO->GetAllAttributes(); for(int i = 1; i <= aSeq->Length(); i++) cout << "Found: " << Handle(SALOMEDSImpl_GenericAttribute)::DownCast(aSeq->Value(i))->Type() << endl; - cout << "Check AttributeTreeNode " << endl; - aTDFAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeTreeNode"); - cout << Handle(SALOMEDSImpl_GenericAttribute)::DownCast(aTDFAttr)->Type() << endl; - cout << "Check AttributeTreeNode : done " << endl; + + + cout << "Check AttributeParameter " << endl; + + Handle(SALOMEDSImpl_AttributeParameter) AP = Handle(SALOMEDSImpl_AttributeParameter)::DownCast(aTDFAttr); + + cout << "AttributeParameter with type : " << AP->Type() << endl; + + AP->SetInt("1", 123); + cout << "IsSet for int: " << AP->IsSet("1", PT_INTEGER) << " value : " << AP->GetInt("1") << endl; + //for(int i = 2; i < 5; i++) AP->SetInt(i, i*i); + + AP->SetReal("1", 123.123); + cout << "IsSet for real: " << AP->IsSet("1", PT_REAL) << " value : " << AP->GetReal("1") << endl; + //for(int i = 2; i < 5; i++) AP->SetReal(i, 0.1); + + AP->SetString("1", "value is 123.123!"); + cout << "IsSet for string: " << AP->IsSet("1", PT_STRING) << " value : " << AP->GetString("1") << endl; + /* + for(int i = 2; i < 5; i++) { + TCollection_AsciiString s((double)(1.0/i)); + cout << "Setting for " << i << " value : " << s << endl; + AP->SetString(i, s); + } + */ + + AP->SetBool("1", true); + cout << "IsSet for bool: " << AP->IsSet("1", PT_BOOLEAN) << " value : " << AP->GetBool("1") << endl; + //for(int i = 2; i < 5; i++) AP->SetBool(i, 0); + + vector v; + v.push_back(111.111); + v.push_back(222.22222); + v.push_back(333.3333333); + AP->SetRealArray("1", v); + cout << "IsSet for array: " << AP->IsSet("1", PT_REALARRAY); + vector v2 = AP->GetRealArray("1"); + cout.precision(10); + cout << " values : "; + for(int i = 0; iSetRealArray("2", v); + + vector vi; + vi.push_back(1); + vi.push_back(2); + AP->SetIntArray("2", vi); + + vector vs; + vs.push_back("hello, "); + vs.push_back("world!"); + AP->SetStrArray("3", vs); + + TCollection_AsciiString as = AP->Save(); + cout << "AS = " << as << endl; + AP->Load(as); + + cout << "Restored string with id = 1 is: " << AP->GetString("1") << endl; + cout << "Restored int with id = 2 is: " << AP->GetInt("1") << endl; + cout << "Restored real with id = 3 is: " << AP->GetReal("1") << endl; + cout << "Restored bool with id = 1 is: " << AP->GetBool("1") << endl; + + v2 = AP->GetRealArray("2"); + cout << "Restored real array with id = 2 is: "; + for(int i = 0; iGetIntArray("2"); + cout << "Restored int array with id = 2 is: "; + for(int i = 0; iGetStrArray("3"); + cout << "Restored string array with id = 2 is: "; + for(int i = 0; iRemoveID("1", PT_INTEGER); + cout << "IsSet with id = 1, type = PT_INTEGER : " << AP->IsSet("1", PT_INTEGER) << endl; + cout << "Check RemoveID is done" << endl; + + cout << "Check AttributeParameter : done" << endl; cout << "Test finished " << endl; return 0; -- 2.39.2