Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs @ 18077

Last change on this file since 18077 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.0 KB
Line 
1using System;
2using System.Linq;
3using HeuristicLab.Core;
4
5namespace HeuristicLab.JsonInterface {
6  public class MultiCheckedOperatorConverter : ParameterizedItemConverter {
7    public override int Priority => 3;
8
9    public override bool CanConvertType(Type t) =>
10      t.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(ICheckedMultiOperator<>));
11
12    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
13      base.Inject(item, data, root);
14
15      dynamic val = item as dynamic;
16      foreach (var op in val.Operators) {
17        IJsonItem childItem = GetChildItem(op.Name, data);
18        if(childItem != null) {
19          if(childItem is BoolJsonItem boolJsonItem && childItem.Active) {
20            val.Operators.SetItemCheckedState(op, boolJsonItem.Value);
21          }
22          root.Inject((IItem)op, childItem, root);
23        }
24      }
25    }
26
27    public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
28      IJsonItem item = base.Extract(value, root);
29      dynamic val = value as dynamic;
30      foreach (var op in val.Operators) {
31        IJsonItem operatorItem = new BoolJsonItem() {
32          Name = op.Name,
33          Description = op.Description,
34          Value = val.Operators.ItemChecked(op)
35        };
36        IJsonItem c = root.Extract((IItem)op, root);
37        if(c != null && c.Children != null)
38          operatorItem.AddChildren(c.Children);
39        item.AddChildren(operatorItem);
40      }
41      return item;
42    }
43
44    #region Helper
45    private bool GetOperatorState(string name, IJsonItem data) {
46      foreach(var op in data.Children) {
47        if (op.Name == name && op is BoolJsonItem b) return b.Value;
48      }
49      return false;
50    }
51
52    private IJsonItem GetChildItem(string name, IJsonItem parent) {
53      if (parent.Children == null) return null;
54      foreach(var c in parent.Children) {
55        if (c.Name == name) return c;
56      }
57      return null;
58    }
59    #endregion
60  }
61}
Note: See TracBrowser for help on using the repository browser.