Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/03/20 15:13:35 (4 years ago)
Author:
dpiringe
Message:

#3026:

  • added initial VM (ArrayValueVM) and control for array values (JsonItemArrayValueControl)
  • new types of JsonItems for better type safety:
    • for arrays: DoubleArrayJsonItem, IntArrayJsonItem, BoolArrayJsonItem
    • for matrix: DoubleMatrixJsonItem, IntMatrixJsonItem, BoolMatrixJsonItem
  • refactored ValueTypeArrayConverter and ValueTypeMatrixConverter -> better type safety with new JsonItems
  • enhanced StringValueVM and implemented JsonItemValidValuesControl with MVVM architecture
  • the VM of JsonItemBaseControl is now protected (was private)
  • improved JsonItem<V,R> -> now handles JTokens correctly
File:
1 edited

Legend:

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

    r17407 r17417  
    1212    public override int Priority => 1;
    1313    public override Type ConvertableType => typeof(IntMatrix);
     14    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
     15      IntMatrix mat = item as IntMatrix;
     16      IntMatrixJsonItem d = data as IntMatrixJsonItem;
     17      CopyMatrixData(mat, d.Value);
     18    }
     19
     20    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
     21      new IntMatrixJsonItem() {
     22        Name = "[OverridableParamName]",
     23        Value = Transform((IntMatrix)value)
     24      };
    1425  }
    1526
     
    1728    public override int Priority => 1;
    1829    public override Type ConvertableType => typeof(DoubleMatrix);
     30
     31    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
     32      DoubleMatrix mat = item as DoubleMatrix;
     33      DoubleMatrixJsonItem d = data as DoubleMatrixJsonItem;
     34      CopyMatrixData(mat, d.Value);
     35    }
     36
     37    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
     38      new DoubleMatrixJsonItem() {
     39        Name = "[OverridableParamName]",
     40        Value = Transform((DoubleMatrix)value)
     41      };
    1942  }
    2043
     
    2245    public override int Priority => 2;
    2346    public override Type ConvertableType => typeof(PercentMatrix);
     47
     48    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
     49      PercentMatrix mat = item as PercentMatrix;
     50      DoubleMatrixJsonItem d = data as DoubleMatrixJsonItem;
     51      CopyMatrixData(mat, d.Value);
     52    }
     53
     54    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
     55      new DoubleMatrixJsonItem() {
     56        Name = "[OverridableParamName]",
     57        Value = Transform((PercentMatrix)value)
     58      };
    2459  }
    2560
     
    2762    public override int Priority => 1;
    2863    public override Type ConvertableType => typeof(BoolMatrix);
     64
     65    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
     66      BoolMatrix mat = item as BoolMatrix;
     67      BoolMatrixJsonItem d = data as BoolMatrixJsonItem;
     68      CopyMatrixData(mat, d.Value);
     69    }
     70
     71    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
     72      new BoolMatrixJsonItem() {
     73        Name = "[OverridableParamName]",
     74        Value = Transform((BoolMatrix)value)
     75      };
    2976  }
    3077
     
    3380    where T : struct
    3481  {
    35     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) =>
    36       CopyMatrixData(item as MatrixType, data.Value);
     82    #region Helper
     83    protected void CopyMatrixData(MatrixType matrix, T[][] data) {
     84      var rows = data.Length;
     85      var cols = data.Length > 0 ? data[0].Length : 0;
    3786
    38     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
    39       new JsonItem() {
    40         Name = "[OverridableParamName]",
    41         Value = ((MatrixType)value).CloneAsMatrix()
     87      var rowInfo = matrix.GetType().GetProperty("Rows");
     88      rowInfo.SetValue(matrix, rows);
     89      var colInfo = matrix.GetType().GetProperty("Columns");
     90      colInfo.SetValue(matrix, cols);
    4291
    43       };
    44 
    45     #region Helper
    46     private void CopyMatrixData(MatrixType matrix, object data) {
    47       if (data is Array arr) {
    48         var rows = arr.Length;
    49         var cols = arr.Length > 0 && arr.GetValue(0) is JArray jarr ? jarr.Count : 0;
    50 
    51         var rowInfo = matrix.GetType().GetProperty("Rows");
    52         rowInfo.SetValue(matrix, rows);
    53         var colInfo = matrix.GetType().GetProperty("Columns");
    54         colInfo.SetValue(matrix, cols);
    55 
    56         for (int x = 0; x < rows; ++x) {
    57           jarr = (JArray)arr.GetValue(x);
    58           for (int y = 0; y < cols; ++y) {
    59             matrix[x, y] = jarr[y].ToObject<T>();
    60           }
     92      for (int x = 0; x < rows; ++x) {
     93        for (int y = 0; y < cols; ++y) {
     94          matrix[x, y] = data[x][y];
    6195        }
    6296      }
     97    }
     98
     99    protected T[][] Transform(MatrixType matrix) {
     100      T[][] m = new T[matrix.Rows][];
     101      for (int r = 0; r < matrix.Rows; ++r) {
     102        m[r] = new T[matrix.Columns];
     103        for (int c = 0; c < matrix.Columns; ++c) {
     104          m[r][c] = matrix[r, c];
     105        }
     106      }
     107      return m;
    63108    }
    64109    #endregion
Note: See TracChangeset for help on using the changeset viewer.