Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/11/20 17:35:28 (4 years ago)
Author:
dpiringe
Message:

#3026:

  • set read-only to false for name input (in JsonItemBaseControl)
  • result items now can be selected/deselected in export dialog
  • removed metadata.problem property and renamed metadata.optimizer property to TemplateName in json template
  • fixed bug with wrong description for result items in AlgorithmConverter
  • refactored a lot of code in JCGenerator and added the need for a directory path (location for the template files)
  • fixed a null reference bug in JsonItemValidator (cannot try to iterate through possible null referenced collections)
File:
1 edited

Legend:

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

    r17410 r17435  
    99using Newtonsoft.Json.Linq;
    1010using HEAL.Attic;
     11using System.IO;
    1112
    1213namespace HeuristicLab.JsonInterface {
     
    1516  /// </summary>
    1617  public class JCGenerator {
    17     private JObject Template { get; set; } = JObject.Parse(Constants.Template);
    18     private JArray JArrayItems { get; set; }
    19     private IList<IJsonItem> JsonItems { get; set; }
    20     private IOptimizer Optimizer { get; set; }
    2118
    22    
    23     public string GenerateTemplate(IOptimizer optimizer) {
    24       // data container
    25       JArrayItems = new JArray();
    26       JArray ResultItems = new JArray();
    27       JsonItems = new List<IJsonItem>();
     19    public void GenerateTemplate(string path, IOptimizer optimizer) =>
     20      GenerateTemplate(path, optimizer.Name, optimizer);
    2821
     22    public void GenerateTemplate(string path, string templateName, IOptimizer optimizer) =>
     23      GenerateTemplate(path, templateName, optimizer, JsonItemConverter.Extract(optimizer));
     24
     25    public void GenerateTemplate(string path, string templateName, IOptimizer optimizer, IJsonItem rootItem) {
     26      // init
     27      JObject template = JObject.Parse(Constants.Template);
     28      JArray parameterItems = new JArray();
     29      JArray resultItems = new JArray();
     30      IList<IJsonItem> jsonItems = new List<IJsonItem>();
     31      string fullPath = Path.GetDirectoryName(Path.GetFullPath(path));
     32     
     33      // recursively filter items with values/ranges/actualNames
     34      PopulateJsonItems(rootItem, jsonItems);
     35
     36      // serialize hl file
    2937      ProtoBufSerializer serializer = new ProtoBufSerializer();
    30       serializer.Serialize(optimizer, @"C:\Workspace\template.hl");
    31       Template[Constants.Metadata][Constants.HLFileLocation] = @"C:\Workspace\template.hl";
     38      string hlFilePath = fullPath + @"\" + templateName + ".hl";
     39      serializer.Serialize(optimizer, hlFilePath);
    3240
    33       // extract JsonItem, save the name in the metadata section of the
    34       // template and save it an JArray incl. all parameters of the JsonItem,
    35       // which have parameters aswell
    36       AddIItem(optimizer);
    37       // save the JArray with JsonItems (= IParameterizedItems)
     41      // filter result items
     42      foreach (var item in jsonItems) {
     43        if (item is ResultItem)
     44          resultItems.Add(Serialize(item));
     45        else
     46          parameterItems.Add(Serialize(item));
     47      }
     48     
     49      // set template data
     50      template[Constants.Metadata][Constants.TemplateName] = templateName;
     51      template[Constants.Metadata][Constants.HLFileLocation] = hlFilePath;
     52      template[Constants.Parameters] = parameterItems;
     53      template[Constants.ActivatedResults] = resultItems;
    3854
    39       JArrayItems = new JArray();
    40       foreach (var item in JsonItems) {
    41         if (item is ResultItem)
    42           ResultItems.Add(Serialize(item));
    43         else
    44           JArrayItems.Add(Serialize(item));
    45       }
    46       Template[Constants.Parameters] = JArrayItems;
    47       Template[Constants.ActivatedResults] = ResultItems;
    48       // serialize template and return string
    49       return SingleLineArrayJsonWriter.Serialize(Template);
     55      // serialize template and write file
     56      File.WriteAllText(fullPath + @"\" + templateName + ".json", SingleLineArrayJsonWriter.Serialize(template));
    5057    }
    5158
    52     public string GenerateTemplate(IEnumerable<IJsonItem> items) {
    53       ProtoBufSerializer serializer = new ProtoBufSerializer();
    54       serializer.Serialize(Optimizer, @"C:\Workspace\template.hl");
    55       Template[Constants.Metadata][Constants.HLFileLocation] = @"C:\Workspace\template.hl";
    56 
    57       JArray ResultItems = new JArray();
    58 
    59       JArrayItems = new JArray();
    60       foreach (var item in items) {
    61         if (item is ResultItem)
    62           ResultItems.Add(Serialize(item));
    63         else
    64           JArrayItems.Add(Serialize(item));
    65       }
    66       Template[Constants.Parameters] = JArrayItems;
    67       Template[Constants.ActivatedResults] = ResultItems;
    68 
    69       // serialize template and return string
    70       return SingleLineArrayJsonWriter.Serialize(Template);
    71     }
    72 
    73     public string GenerateTemplate(IJsonItem rootItem, IOptimizer optimizer) {
    74       // data container
    75       Template = JObject.Parse(Constants.Template);
    76       JsonItems = new List<IJsonItem>();
    77 
    78       // extract JsonItem, save the name in the metadata section of the
    79       // template and save it an JArray incl. all parameters of the JsonItem,
    80       // which have parameters aswell
    81       Template[Constants.Metadata][Constants.Optimizer] = optimizer.Name;
    82       PopulateJsonItems(rootItem);
    83 
    84       ProtoBufSerializer serializer = new ProtoBufSerializer();
    85       serializer.Serialize(Optimizer, @"C:\Workspace\template.hl");
    86       Template[Constants.Metadata][Constants.HLFileLocation] = @"C:\Workspace\template.hl";
    87 
    88       JArray ResultItems = new JArray();
    89 
    90       JArrayItems = new JArray();
    91       foreach (var item in JsonItems) {
    92         if (item is ResultItem)
    93           ResultItems.Add(Serialize(item));
    94         else
    95           JArrayItems.Add(Serialize(item));
    96       }
    97       Template[Constants.Parameters] = JArrayItems;
    98       Template[Constants.ActivatedResults] = ResultItems;
    99 
    100       // serialize template and return string
    101       return SingleLineArrayJsonWriter.Serialize(Template);
    102     }
    103 
    104     public IEnumerable<IJsonItem> FetchJsonItems(IOptimizer optimizer) {
    105       // data container
    106       Template = JObject.Parse(Constants.Template);
    107       JsonItems = new List<IJsonItem>();
    108       Optimizer = optimizer;
    109 
    110       // extract JsonItem, save the name in the metadata section of the
    111       // template and save it an JArray incl. all parameters of the JsonItem,
    112       // which have parameters aswell
    113       AddIItem(optimizer);
    114 
    115       // serialize template and return string
    116       return JsonItems;
    117     }
    118    
    119     #region Helper
    120 
    121     private void AddIItem(IItem item) {
    122       IJsonItem jsonItem = JsonItemConverter.Extract(item);
    123       Template[Constants.Metadata][Constants.Optimizer] = item.ItemName;
    124       PopulateJsonItems(jsonItem);
    125     }
    126 
     59    #region Helper   
    12760    // serializes ParameterizedItems and saves them in list "JsonItems".
    128     private void PopulateJsonItems(IJsonItem item) {
     61    private void PopulateJsonItems(IJsonItem item, IList<IJsonItem> jsonItems) {
    12962      IEnumerable<IJsonItem> tmpParameter = item.Children;
    13063     
    13164      if (item.Value != null || item.Range != null || item is ResultItem || item.ActualName != null) {
    132         JsonItems.Add(item);
     65        jsonItems.Add(item);
    13366      }
    13467
    13568      if (tmpParameter != null) {
    13669        foreach (var p in tmpParameter) {
    137           PopulateJsonItems(p);
     70          PopulateJsonItems(p, jsonItems);
    13871        }
    13972      }
Note: See TracChangeset for help on using the changeset viewer.