Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/19/19 16:59:18 (4 years ago)
Author:
dpiringe
Message:

#3026:

  • relocated BuildJsonItem from JCInstantiator into JsonItem
  • in JsonItem: removed JContainer usage in setter for Value (now in BuildJsonItem)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs

    r17353 r17354  
    11using System;
    22using System.Collections.Generic;
     3using System.IO;
    34using System.Linq;
    45using System.Text;
     
    1920    private IEnumerable<object> range;
    2021    #endregion
    21    
    22     public string Name { 
    23       get => name; 
     22
     23    public string Name {
     24      get => name;
    2425      set {
    2526        name = value;
    2627        Path = Name;
    2728        UpdatePath();
    28       } 
     29      }
    2930    }
    3031    public string Type { get; set; }
     
    3334    public IList<JsonItem> Operators { get; set; }
    3435    public object Value {
    35       get => value; 
     36      get => value;
    3637      set {
    37         if (value is JContainer)
    38           this.value = ((JContainer)value).ToObject<object[]>();
    39         else
    40           this.value = value;
     38        this.value = value;
    4139        CheckConstraints();
    42       } 
     40      }
    4341    }
    44     public IEnumerable<object> Range { 
    45       get => range; 
     42    public IEnumerable<object> Range {
     43      get => range;
    4644      set {
    4745        range = value;
    4846        CheckConstraints();
    49       } 
     47      }
    5048    }
    5149    public string ActualName { get; set; }
     
    8482        UpdatePathHelper(Operators);
    8583
    86       if(Reference != null)
     84      if (Reference != null)
    8785        UpdatePathHelper(Reference);
    8886    }
     
    9088
    9189    #region Helper
    92     private void UpdatePathHelper(params JsonItem[] items) => 
     90    private void UpdatePathHelper(params JsonItem[] items) =>
    9391      UpdatePathHelper((IEnumerable<JsonItem>)items);
    9492
     
    105103    }
    106104
    107     private bool IsInRange() => IsInRangeList() || 
     105    private bool IsInRange() => IsInRangeList() ||
    108106      (Value.GetType().IsArray && ((object[])Value).All(x => IsInNumericRange(x))) ||
    109107      (!Value.GetType().IsArray && IsInNumericRange(Value));
     
    129127            (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0);
    130128    }
    131      
     129
     130    #endregion
     131
     132    #region BuildJsonItemMethods
     133    public static JsonItem BuildJsonItem(JObject obj, IDictionary<string, string> typeList) {
     134      object val = obj[nameof(Value)]?.ToObject<object>();
     135      if (val is JContainer)
     136        val = ((JContainer)val).ToObject<object[]>();
     137
     138      return new JsonItem() {
     139        Name = obj[nameof(Name)]?.ToString(),
     140        Path = obj[nameof(Path)]?.ToString(),
     141        Value = val,
     142        Range = obj[nameof(Range)]?.ToObject<object[]>(),
     143        Type = GetType(obj[nameof(Path)]?.ToObject<string>(), typeList),
     144        ActualName = obj[nameof(ActualName)]?.ToString(),
     145        Parameters = PopulateParameters(obj, typeList),
     146        Operators = PopulateOperators(obj, typeList)
     147      };
     148  }
     149
     150    private static string GetType(string path, IDictionary<string, string> typeList) {
     151      if (!string.IsNullOrEmpty(path))
     152        if (typeList.TryGetValue(path, out string value))
     153          return value;
     154      return null;
     155    }
     156
     157    private static IList<JsonItem> PopulateParameters(JObject obj, IDictionary<string, string> typeList) {
     158      IList<JsonItem> list = new List<JsonItem>();
     159
     160      // add staticParameters
     161      if (obj[Constants.StaticParameters] != null)
     162        foreach (JObject param in obj[Constants.StaticParameters])
     163          list.Add(BuildJsonItem(param, typeList));
     164
     165      // merge staticParameter with freeParameter
     166      if (obj[Constants.FreeParameters] != null) {
     167        foreach (JObject param in obj[Constants.FreeParameters]) {
     168          JsonItem tmp = BuildJsonItem(param, typeList);
     169
     170          // search staticParameter from list
     171          JsonItem comp = null;
     172          foreach (var p in list)
     173            if (p.Name == tmp.Name) comp = p;
     174          if (comp == null)
     175            throw new InvalidDataException($"Invalid {Constants.FreeParameters.Trim('s')}: '{tmp.Name}'!");
     176
     177          JsonItem.Merge(comp, tmp);
     178        }
     179      }
     180      return list;
     181    }
     182
     183    private static IList<JsonItem> PopulateOperators(JObject obj, IDictionary<string, string> typeList) {
     184      IList<JsonItem> list = new List<JsonItem>();
     185      JToken operators = obj[nameof(JsonItem.Operators)];
     186      if (operators != null)
     187        foreach (JObject sp in operators)
     188          list.Add(BuildJsonItem(sp, typeList));
     189      return list;
     190    }
    132191    #endregion
    133192  }
Note: See TracChangeset for help on using the changeset viewer.