X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FParametersPlugin%2FParametersPlugin_Validators.cpp;h=b511c61b93956b0c9e7fc97427863391a115904d;hb=refs%2Fheads%2FV9_11_BR;hp=788e163980f6308e9a1740ee45418c016db22b9c;hpb=2d5e6330e9901d4bb7c1abbf5e5a78f4e8b30004;p=modules%2Fshaper.git diff --git a/src/ParametersPlugin/ParametersPlugin_Validators.cpp b/src/ParametersPlugin/ParametersPlugin_Validators.cpp index 788e16398..b511c61b9 100644 --- a/src/ParametersPlugin/ParametersPlugin_Validators.cpp +++ b/src/ParametersPlugin/ParametersPlugin_Validators.cpp @@ -1,15 +1,35 @@ -/* - * Parameters_VariableValidator.cpp - * - * Created on: Apr 9, 2015 - * Author: sbh - */ +// Copyright (C) 2014-2023 CEA, EDF +// +// 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, or (at your option) any later version. +// +// 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/ or email : webmaster.salome@opencascade.com +// #include +#include + +#include + +#include + #include #include #include +#include +#include ParametersPlugin_VariableValidator::ParametersPlugin_VariableValidator() { @@ -20,23 +40,48 @@ ParametersPlugin_VariableValidator::~ParametersPlugin_VariableValidator() } bool ParametersPlugin_VariableValidator::isValid(const AttributePtr& theAttribute, - const std::list& theArguments) const + const std::list& /*theArguments*/, + Events_InfoMessage& theError) const { AttributeStringPtr aStrAttr = std::dynamic_pointer_cast(theAttribute); - bool result = isVariable(aStrAttr->value()); - return result; + if (!aStrAttr->isInitialized()) { + theError = "Attribute \"%1\" is not initialized."; + theError.arg(aStrAttr->id()); + return false; + } + bool isEmptyExpr = aStrAttr->value().empty(); + if (isEmptyExpr) { + theError = "Attribute \"%1\" value is empty."; + theError.arg(aStrAttr->id()); + return false; + } + if (!ModelAPI_Expression::isVariable(aStrAttr->value())) { + theError = "Incorrect variable name."; + return false; + } + if (!isUnique(theAttribute, aStrAttr->value())) { + theError = "Variable name is not unique."; + return false; + } + return true; } -bool ParametersPlugin_VariableValidator::isVariable(const std::string& theString) const +bool ParametersPlugin_VariableValidator::isUnique(const AttributePtr& theAttribute, + const std::string& theString) const { - std::string::const_iterator it = theString.begin(); - if (!(isalpha(*it) || (*it) == '_') || it == theString.end()) + DocumentPtr aDocument = theAttribute->owner()->document(); + for (int anIndex = 0, aSize = aDocument->size(ModelAPI_ResultParameter::group()); + anIndex < aSize; ++anIndex) { + ObjectPtr aParamObj = aDocument->object(ModelAPI_ResultParameter::group(), anIndex); + if (Locale::Convert::toString(aParamObj->data()->name()) != theString) + continue; + ResultParameterPtr aParam = std::dynamic_pointer_cast(aParamObj); + if (!aParam.get()) + continue; + FeaturePtr aFeature = ModelAPI_Feature::feature(aParam); + if (aFeature == theAttribute->owner()) + continue; return false; - it++; - for ( ; it != theString.end(); ++it ) { - if(!(isalnum(*it) || (*it) == '_')) { - return false; - } } return true; } @@ -52,20 +97,24 @@ ParametersPlugin_ExpressionValidator::~ParametersPlugin_ExpressionValidator() } bool ParametersPlugin_ExpressionValidator::isValid(const AttributePtr& theAttribute, - const std::list& theArguments) const + const std::list& /*theArguments*/, + Events_InfoMessage& theError) const { FeaturePtr aFeature = std::dynamic_pointer_cast(theAttribute->owner()); - ResultParameterPtr aParam = - std::dynamic_pointer_cast(aFeature->firstResult()); AttributeStringPtr aStrAttr = - std::dynamic_pointer_cast(theAttribute); - bool isEmptyExpr = aStrAttr->value().empty(); - if(isEmptyExpr) + std::dynamic_pointer_cast(theAttribute); + if (!aStrAttr->isInitialized()) { + theError = "Attribute \"%1\" is not initialized."; + theError.arg(aStrAttr->id()); return false; - - if(!aParam.get()) + } + bool isEmptyExpr = aStrAttr->value().empty(); + if (isEmptyExpr) { + theError = "Expression is empty."; return false; + } - return aFeature->error().empty(); + theError = aFeature->string(ParametersPlugin_Parameter::EXPRESSION_ERROR_ID())->value(); + return theError.empty(); }