Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs

Last change on this file was 18077, checked in by dpiringe, 2 years ago

#3026

  • added the dockerhub readme file
  • fixed a bug which caused changed values (changed by events) to be overwritten with wrong values
File size: 2.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using HeuristicLab.Core;
5
6namespace HeuristicLab.JsonInterface {
7  public class ConstrainedValueParameterConverter : BaseConverter {
8    public override int Priority => 3;
9
10    public override bool CanConvertType(Type t) =>
11      t.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IConstrainedValueParameter<>));
12
13    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
14      StringJsonItem cdata = data as StringJsonItem;
15      IParameter parameter = item as IParameter;
16      foreach (var x in GetValidValues(parameter))
17        if(x.ToString() == cdata.Value && cdata.Active)
18          parameter.ActualValue = x;
19
20      if (parameter.ActualValue != null && parameter.ActualValue is IParameterizedItem && cdata.Children != null) {
21        foreach(var child in cdata.Children) {
22          if(child.Name == cdata.Value || child.Path.EndsWith(cdata.Value) || child.Name == parameter.ActualValue.ItemName)
23            root.Inject(parameter.ActualValue, child, root);
24        }
25      }
26    }
27   
28    public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
29      IParameter parameter = value as IParameter;
30
31      IJsonItem item = new StringJsonItem() {
32        Name = parameter.Name,
33        Description = value.ItemDescription,
34        Value = parameter.ActualValue?.ToString(),
35        ConcreteRestrictedItems = GetValidValues(parameter).Select(x => x.ToString())
36      };
37      item.AddChildren(GetParameterizedChilds(parameter, root));
38
39      return item;
40    }
41
42    #region Helper
43    private IItem[] GetValidValues(IParameter value) {
44      List<IItem> list = new List<IItem>();
45      var values = ((dynamic)value).ValidValues;
46      foreach (var x in values) list.Add((IItem)x);
47      return list.ToArray();
48    }
49
50    private IList<IJsonItem> GetParameterizedChilds(IParameter value, IJsonItemConverter root) {
51      List<IJsonItem> list = new List<IJsonItem>();
52      var values = ((dynamic)value).ValidValues;
53      foreach(var x in values) {
54        if (x is IParameterizedItem) { // only makes sense for IParameterizedItems to go deeper
55          IJsonItem tmp = root.Extract(x, root);
56          if(!(tmp is UnsupportedJsonItem))
57            list.Add(tmp);
58        }
59      }
60      return list.Count == 0 ? null : list;
61    }
62    #endregion
63  }
64}
Note: See TracBrowser for help on using the repository browser.