Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/25/19 17:18:41 (5 years ago)
Author:
dpiringe
Message:

#3026

  • deleted IItemExtensions.cs
  • fixed a bug in GetInterfaceDistance in TypeExtensions.cs -> generic types were ignored
  • lots of code clean ups
  • added new transformers: ParameterizedItemTransformer, MultiCheckedOperatorTransformer
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCGenerator.cs

    r17266 r17269  
    1616
    1717  public class CustomWriter : JsonTextWriter {
     18    private const int ArrayFlatterLvl = 1;
    1819    private Stack<Formatting> formattings = new Stack<Formatting>();
    1920    private int lvl = 0;
    2021    public override void WriteStartArray() {
    2122      base.WriteStartArray();
    22       if(lvl > 1) {
     23      if(lvl > ArrayFlatterLvl) {
    2324        formattings.Push(base.Formatting);
    2425        base.Formatting = Formatting.None;
     
    3031      base.WriteEndArray();
    3132      lvl--;
    32       if (lvl > 1)
     33      if (lvl > ArrayFlatterLvl)
    3334        base.Formatting = formattings.Pop();
    3435    }
     
    4950
    5051    private JObject template = JObject.Parse(@"{
    51       'Metadata': {},
    52       'FreeParameters': {},
    53       'StaticParameters': {
    54         'Algorithm':{},
    55         'Problem':{},
    56         'TypeList':{}
    57       }
     52      'Metadata': {
     53        'Algorithm':'',
     54        'Problem':''
     55      },
     56      'Objects': []
    5857    }");
    5958
    6059   
    6160    private Dictionary<string, string> TypeList = new Dictionary<string, string>();
    62 
     61   
    6362    public string GenerateTemplate(IAlgorithm algorithm, IProblem problem, params string[] freeParameters) {
    6463      algorithm.Problem = problem;
    65       IList<JCObject> items = BJCO(algorithm);
     64      ParameterData algorithmData = Transformer.Extract(algorithm);
     65      ParameterData problemData = Transformer.Extract(problem);
     66      IList<ParameterData> items = algorithmData.ParameterizedItems;
     67      foreach (var pItem in problemData.ParameterizedItems) items.Add(pItem);
    6668      JArray jsonItems = new JArray();
    6769     
    68       foreach(var item in items) {
     70      foreach(var item in items.Distinct()) {
    6971        JToken token = JObject.FromObject(item, Settings());
    70 
     72        token["StaticParameters"] = token["Parameters"];
     73        token["FreeParameters"] = token["Parameters"];
     74        token.Cast<JObject>().Property("Parameters")?.Remove();
    7175        RefactorFreeParameters(token, freeParameters);
    7276        RefactorStaticParameters(token);
    7377        if(token["StaticParameters"].HasValues || token["FreeParameters"].HasValues)
    7478          jsonItems.Add(token);
    75       }
    76       return CustomWriter.Serialize(jsonItems);
     79      }
     80
     81      template["Metadata"]["Algorithm"] = algorithm.Name;
     82      template["Metadata"]["Problem"] = problem.Name;
     83      template["Objects"] = jsonItems;
     84
     85      return CustomWriter.Serialize(template);
    7786    }
    7887
     88    #region Helper
    7989    private void RefactorFreeParameters(JToken token, string[] freeParameters) {
    8090
    81       token["FreeParameters"] = token["StaticParameters"];
     91      //token["FreeParameters"] = token["StaticParameters"];
    8292
    8393      IList<JObject> objToRemove = new List<JObject>();
     
    98108      }, token["FreeParameters"]);
    99109      foreach (var x in objToRemove) x.Remove();
    100      
     110
    101111    }
    102112
     
    110120      foreach (var x in objToRemove) x.Remove();
    111121    }
    112      
    113    
    114 
    115     #region Helper
    116     private IList<JCObject> BJCO(IParameterizedItem item) {
    117       List<JCObject> list = new List<JCObject>();
    118       JCObject obj = new JCObject();
    119       obj.Name = item.ItemName;
    120       obj.Type = item.GetType().AssemblyQualifiedName;
    121       obj.StaticParameters = new List<ParameterData>();
    122       list.Add(obj);
    123 
    124       foreach (var param in item.Parameters) {
    125         if(!param.Hidden) {
    126           obj.StaticParameters.Add(Transformer.Extract(param));
    127 
    128           if (param is IParameterizedItem)
    129             list.AddRange(BJCO(param.Cast<IParameterizedItem>()));
    130          
    131           if (param.GetType().IsEqualTo(typeof(IConstrainedValueParameter<>)))
    132             foreach (var validValue in param.Cast<dynamic>().ValidValues)
    133               if (validValue is IParameterizedItem &&
    134                 ((IParameterizedItem)validValue).Parameters.Any(p => !p.Hidden))
    135                 list.AddRange(BJCO((IParameterizedItem)validValue));
    136         }
    137       }
    138       return list;
    139     }
    140 
    141122
    142123    private JsonSerializer Settings() => new JsonSerializer() {
     
    152133    }
    153134    #endregion
    154 
    155     /*
    156     private void ExtractOperatorInfo(IItem item, ParameterData obj) {
    157       if (item is IMultiOperator) {
    158         foreach (var op in ((IMultiOperator)item).Operators) {
    159           ParameterData newOperator = BuildJCParameter(op);
    160           if (obj.Operators == null)
    161             obj.Operators = new List<ParameterData>();
    162           obj.Operators.Add(newOperator);
    163           newOperator.Name = op.GetType().Name;
    164 
    165           newOperator.Path = obj.Path + ".Operators." + op.Name;
    166           MultiPermutationManipulator manipulator = new MultiPermutationManipulator();
    167         }
    168       }
    169     }*/
    170135  }
    171136}
Note: See TracChangeset for help on using the changeset viewer.