using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HEAL.Attic; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; using HeuristicLab.Parameters; namespace HeuristicLab.Problems.DataAnalysis.Symbolic { [StorableType("819EF151-C9A4-48A9-A664-AF6E906DD553")] public class ExtendedConstraint : ParameterizedNamedItem, IExtendedConstraint { #region Constants private const string ExpressionParameterName = "Expression"; private const string ShapeConstraintsParameterName = "Shape Constraints"; #endregion #region Parameters public IFixedValueParameter ExpressionParameter => (IFixedValueParameter)Parameters[ExpressionParameterName]; public IFixedValueParameter ShapeConstraintsParameter => (IFixedValueParameter)Parameters[ShapeConstraintsParameterName]; #endregion #region Properties public string Expression => ExpressionParameter.Value.Value; public ISymbolicExpressionTree Tree => string.IsNullOrEmpty(Expression) ? null : Parser.Parse(Expression); public ShapeConstraints ShapeConstraints => ShapeConstraintsParameter.Value; private InfixExpressionParser Parser => new InfixExpressionParser(); #endregion #region Constructors & Cloning public ExtendedConstraint() { Parameters.Add(new FixedValueParameter(ExpressionParameterName, new StringValue(""))); Parameters.Add(new FixedValueParameter(ShapeConstraintsParameterName, new ShapeConstraints())); } protected ExtendedConstraint(ExtendedConstraint original, Cloner cloner) : base(original, cloner) { } [StorableConstructor] protected ExtendedConstraint(StorableConstructorFlag _) : base(_) { } public override IDeepCloneable Clone(Cloner cloner) => new ExtendedConstraint(this, cloner); [StorableHook(HookType.AfterDeserialization)] private void AfterDeserialization() { } #endregion public override string ToString() => string.IsNullOrEmpty(Expression) ? ItemName : Expression; } }