Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs @ 18183

Last change on this file since 18183 was 18059, checked in by dpiringe, 3 years ago

#3026

  • removed/renamed all interfaces, classes and views related to results (are replaced by RunCollectionModifiers)
  • fixed a bug in JsonTemplateInstantiator to prevent errors for opening templates without a defined property for RunCollectionModifiers
File size: 3.8 KB
RevLine 
[17519]1using System.Collections.Generic;
[17263]2using HeuristicLab.Optimization;
3using Newtonsoft.Json.Linq;
[17374]4using HEAL.Attic;
[17435]5using System.IO;
[17689]6using HeuristicLab.Core;
[18046]7using System.Linq;
[17263]8
[17284]9namespace HeuristicLab.JsonInterface {
[17353]10  /// <summary>
[17404]11  /// Class to generate json interface templates.
[17353]12  /// </summary>
[17600]13  public class JsonTemplateGenerator {
[17404]14
[17828]15    /// <summary>
16    /// static Function to generate a template.
17    /// </summary>
18    /// <param name="templatePath">the path for the template files</param>
19    /// <param name="optimizer">the optimizer object to serialize</param>
20    /// <param name="rootItem">Root JsonItem for serialization, considers only active JsonItems for serialization</param>
[18055]21    public static void GenerateTemplate(string templatePath, IOptimizer optimizer, IJsonItem rootItem, IEnumerable<IRunCollectionModifier> runCollectionModifiers) {
[17828]22      // clear all runs
[18050]23      if (optimizer.ExecutionState == ExecutionState.Paused)
24        optimizer.Stop();
[17828]25      optimizer.Runs.Clear();
[17349]26
[17828]27      // validation
28      ValidationResult validationResult = rootItem.GetValidator().Validate();
29      if (!validationResult.Success)
30        throw validationResult.GenerateException();
[17374]31
[17477]32      #region Init
[17435]33      JObject template = JObject.Parse(Constants.Template);
34      JArray parameterItems = new JArray();
35      JArray resultItems = new JArray();
[18055]36      JArray runCollectionModifierItems = new JArray();
[17828]37      string templateName = Path.GetFileName(templatePath);
38      string templateDirectory = Path.GetDirectoryName(templatePath);
[17477]39      #endregion
40
[18050]41      // filter items with values/ranges/actualNames
42      var jsonItems = rootItem.Where(x => x.Active && !(x is EmptyJsonItem) && !(x is UnsupportedJsonItem));
[17689]43
[17477]44      #region Serialize HL File
[17404]45      ProtoBufSerializer serializer = new ProtoBufSerializer();
[18030]46      // get absolute path for serialization
[17828]47      string hlFilePath = Path.Combine(templateDirectory, $"{templateName}.hl");
[17435]48      serializer.Serialize(optimizer, hlFilePath);
[18030]49      // overwrite string for relative path
[18040]50      hlFilePath = Path.Combine($".", $"{templateName}.hl");
[17477]51      #endregion
[17404]52
[17477]53      #region Filter Items
[17435]54      foreach (var item in jsonItems) {
[18059]55        parameterItems.Add(item.GenerateJObject());
[17404]56      }
[17477]57      #endregion
58
[18055]59      #region RunCollectionModifiers Serialization
[18059]60      foreach (var rcModifier in runCollectionModifiers) {
61        JArray rcModifierParameterItems = new JArray();
62        var guid = StorableTypeAttribute.GetStorableTypeAttribute(rcModifier.GetType()).Guid.ToString();
63        var item = JsonItemConverter.Extract(rcModifier);
[18050]64
[18059]65        var rcModifierItems = item
[18050]66          .Where(x => !(x is EmptyJsonItem) && !(x is UnsupportedJsonItem))
67          .Select(x => x.GenerateJObject());
68
[18059]69        foreach (var i in rcModifierItems)
70          rcModifierParameterItems.Add(i);
[18050]71
[18059]72        JObject rcModifierObj = new JObject();
73        rcModifierObj.Add(nameof(IJsonItem.Name), item.Name);
74        rcModifierObj.Add("GUID", guid);
75        rcModifierObj.Add(Constants.Parameters, rcModifierParameterItems);
76        runCollectionModifierItems.Add(rcModifierObj);
[18050]77      }
78      #endregion
79
[17477]80      #region Set Template Data
[17435]81      template[Constants.Metadata][Constants.TemplateName] = templateName;
82      template[Constants.Metadata][Constants.HLFileLocation] = hlFilePath;
[18056]83      template[Constants.Metadata][Constants.OptimizerDescription] = optimizer.Description;
[17435]84      template[Constants.Parameters] = parameterItems;
[18055]85      template[Constants.RunCollectionModifiers] = runCollectionModifierItems;
[17477]86      #endregion
[17404]87
[17477]88      #region Serialize and write to file
[17828]89      File.WriteAllText(Path.Combine(templateDirectory, $"{templateName}.json"), SingleLineArrayJsonWriter.Serialize(template));
[17477]90      #endregion
[17404]91    }
[17263]92  }
93}
Note: See TracBrowser for help on using the repository browser.