Changeset 17410
- Timestamp:
- 01/28/20 14:53:45 (5 years ago)
- Location:
- branches/3026_IntegrationIntoSymSpace
- Files:
-
- 7 added
- 5 deleted
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
r17405 r17410 78 78 </ItemGroup> 79 79 <ItemGroup> 80 <Compile Include="Interfaces\IJsonItemValueParser.cs" /> 81 <Compile Include="Parser\JsonItemDoubleValueParser.cs" /> 82 <Compile Include="Parser\JsonItemIntValueParser.cs" /> 80 83 <Compile Include="Properties\Resources.Designer.cs"> 81 84 <AutoGen>True</AutoGen> … … 95 98 <DependentUpon>NumericRangeControl.cs</DependentUpon> 96 99 </Compile> 100 <Compile Include="ViewModels\JsonItemVMBase.cs" /> 101 <Compile Include="ViewModels\RangeVM.cs" /> 102 <Compile Include="ViewModels\SingleValueVM.cs" /> 103 <Compile Include="ViewModels\StringValueVM.cs" /> 97 104 <Compile Include="Views\ExportJsonDialog.cs"> 98 105 <SubType>Form</SubType> … … 102 109 </Compile> 103 110 <Compile Include="FileManager.cs" /> 104 <Compile Include="Views\JsonItemArrayControl.cs">105 <SubType>UserControl</SubType>106 </Compile>107 <Compile Include="Views\JsonItemArrayControl.Designer.cs">108 <DependentUpon>JsonItemArrayControl.cs</DependentUpon>109 </Compile>110 111 <Compile Include="Views\JsonItemBoolControl.cs"> 111 112 <SubType>UserControl</SubType> … … 113 114 <Compile Include="Views\JsonItemBoolControl.Designer.cs"> 114 115 <DependentUpon>JsonItemBoolControl.cs</DependentUpon> 115 </Compile>116 <Compile Include="Views\JsonItemDefaultControl.cs">117 <SubType>UserControl</SubType>118 </Compile>119 <Compile Include="Views\JsonItemDefaultControl.Designer.cs">120 <DependentUpon>JsonItemDefaultControl.cs</DependentUpon>121 116 </Compile> 122 117 <Compile Include="Views\JsonItemRangeControl.cs"> … … 199 194 <EmbeddedResource Include="Views\ExportJsonDialog.resx"> 200 195 <DependentUpon>ExportJsonDialog.cs</DependentUpon> 201 </EmbeddedResource>202 <EmbeddedResource Include="Views\JsonItemArrayControl.resx">203 <DependentUpon>JsonItemArrayControl.cs</DependentUpon>204 196 </EmbeddedResource> 205 197 <EmbeddedResource Include="Views\JsonItemBoolControl.resx"> -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs
r17405 r17410 51 51 this.checkBoxActive.TabIndex = 2; 52 52 this.checkBoxActive.UseVisualStyleBackColor = true; 53 this.checkBoxActive.CheckedChanged += new System.EventHandler(this.checkBoxActive_CheckedChanged);54 53 // 55 54 // textBoxActualName … … 61 60 this.textBoxActualName.Size = new System.Drawing.Size(404, 20); 62 61 this.textBoxActualName.TabIndex = 12; 63 this.textBoxActualName.TextChanged += new System.EventHandler(this.textBoxActualName_TextChanged);64 62 // 65 63 // labelActualName … … 82 80 this.textBoxName.Size = new System.Drawing.Size(404, 20); 83 81 this.textBoxName.TabIndex = 10; 84 this.textBoxName.TextChanged += new System.EventHandler(this.textBoxName_TextChanged);85 82 // 86 83 // label1 -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs
r17405 r17410 11 11 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 12 12 public partial class JsonItemBaseControl : UserControl { 13 p ublic JsonItemVMVM { get; set; }13 private JsonItemVMBase VM { get; set; } 14 14 15 15 private JsonItemBaseControl() { … … 17 17 } 18 18 19 public JsonItemBaseControl(JsonItemVM vm) {19 public JsonItemBaseControl(JsonItemVMBase vm) { 20 20 InitializeComponent(); 21 21 VM = vm; 22 checkBoxActive.Checked = VM.Selected; 23 textBoxName.Text = VM.Item.Name; 22 23 checkBoxActive.DataBindings.Add("Checked", VM, nameof(JsonItemVMBase.Selected)); 24 textBoxName.DataBindings.Add("Text", VM, nameof(JsonItemVMBase.Name)); 25 textBoxActualName.DataBindings.Add("Text", VM, nameof(JsonItemVMBase.ActualName)); 26 27 //checkBoxActive.Checked = VM.Selected; 28 //textBoxName.Text = VM.Item.Name; 24 29 if (string.IsNullOrWhiteSpace(VM.Item.ActualName)) 25 30 textBoxActualName.ReadOnly = true; … … 27 32 textBoxActualName.Text = VM.Item.ActualName; 28 33 } 29 30 private void checkBoxActive_CheckedChanged(object sender, EventArgs e) {31 VM.Selected = checkBoxActive.Checked;32 }33 34 private void textBoxName_TextChanged(object sender, EventArgs e) {35 VM.Item.Name = textBoxName.Text;36 }37 38 private void textBoxActualName_TextChanged(object sender, EventArgs e) {39 VM.Item.ActualName = textBoxActualName.Text;40 }41 34 } 42 35 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs
r17405 r17410 1 namespace HeuristicLab.JsonInterface.OptimizerIntegration .Shared{1 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 2 2 partial class NumericRangeControl { 3 3 /// <summary> -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs
r17405 r17410 10 10 using System.Globalization; 11 11 12 namespace HeuristicLab.JsonInterface.OptimizerIntegration .Shared{12 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 13 13 public partial class NumericRangeControl : UserControl { 14 14 … … 22 22 } 23 23 public bool IsDouble { get; set; } 24 25 26 24 27 25 public NumericRangeControl() { -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs
r17406 r17410 2 2 using System.Collections; 3 3 using System.Collections.Generic; 4 using System.ComponentModel; 4 5 using System.Linq; 5 6 using System.Text; 6 7 using System.Threading.Tasks; 8 using System.Windows.Forms; 7 9 8 10 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 9 public delegate void OnSelectionChangeHandler(JsonItemVM sender, bool selection);10 public delegate void OnChildAddedHandler(JsonItemVM sender, JsonItemVM child);11 11 12 public class JsonItemVM { 13 public IJsonItem Item { get; set; } 12 //TODO: controls/views only initcomponents and delegate events to this, this has parsers and other actions? 13 // maybe different VMs? 14 public class JsonItemVM : JsonItemVMBase { 14 15 15 private IList<JsonItemVM> children = new List<JsonItemVM>(); 16 public IEnumerable<JsonItemVM> Children { 17 get => children; 18 } 16 public override Type JsonItemType => typeof(JsonItem); 19 17 20 public JsonItemVM Parent { get; set; } 18 //protected IJsonItemValueParser Parser { get; set; } 19 //child tree 20 //private IList<JsonItemVM> nodes = new List<JsonItemVM>(); 21 22 //public IEnumerable<JsonItemVM> Nodes { get => nodes; } 23 //public JsonItemVM Parent { get; private set; } 24 21 25 22 26 private bool selected = true; 23 27 public bool Selected { 24 get => selected; 28 get => selected; 25 29 set { 26 30 selected = value; 27 On SelectionChange?.Invoke(this, Selected);28 } 31 OnPropertyChange(this, nameof(Selected)); 32 } 29 33 } 30 34 31 public event OnSelectionChangeHandler OnSelectionChange; 32 public event OnChildAddedHandler OnChildAdded; 33 34 public JsonItemVM(IJsonItem item) { 35 this.Item = item; 35 public string Name { 36 get => Item.Name; 37 set { 38 Item.Name = value; 39 OnPropertyChange(this, nameof(Name)); 40 } 36 41 } 37 42 38 public void AddChild(JsonItemVM vm) { 39 children.Add(vm); 40 vm.Parent = this; 41 OnChildAdded?.Invoke(this, vm); 43 public string ActualName { 44 get => Item.ActualName; 45 set { 46 Item.ActualName = value; 47 OnPropertyChange(this, nameof(ActualName)); 48 } 42 49 } 50 public override JsonItemBaseControl GetControl() { 51 return new JsonItemBaseControl(this); 52 } 53 54 55 /* 56 public abstract UserControl Control { get; } 57 58 public void OnSelectChange(object sender, EventArgs e) { 59 CheckBox checkBox = sender as CheckBox; 60 Selected = checkBox.Checked; 61 } 62 63 public void OnNameChange(object sender, EventArgs e) { 64 TextBox textBox = sender as TextBox; 65 Item.Name = textBox.Text; 66 } 67 68 public void OnActualNameChange(object sender, EventArgs e) { 69 TextBox textBox = sender as TextBox; 70 Item.ActualName = textBox.Text; 71 } 72 73 public abstract void OnValueChange(object sender, EventArgs e); 74 75 public abstract void OnRangeChange(object sender, EventArgs e); 76 */ 43 77 } 44 78 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
r17406 r17410 12 12 using HeuristicLab.Common; 13 13 using HeuristicLab.Optimization; 14 using HeuristicLab.PluginInfrastructure; 14 15 15 16 namespace HeuristicLab.JsonInterface.OptimizerIntegration { … … 30 31 vms = new List<JsonItemVM>(); 31 32 treeView.Nodes.Clear(); 32 33 33 34 optimizer = content as IOptimizer; 34 35 root = JsonItemConverter.Extract(optimizer); 35 36 TreeNode parent = new TreeNode(root.Name); 37 36 38 BuildTreeNode(parent, root); 37 39 treeView.Nodes.Add(parent); … … 39 41 } 40 42 43 private IDictionary<Type, JsonItemVMBase> VMs { get; set; } 44 45 46 private void InitCache() { 47 VMs = new Dictionary<Type, JsonItemVMBase>(); 48 foreach (var vm in ApplicationManager.Manager.GetInstances<JsonItemVMBase>()) { 49 VMs.Add(vm.JsonItemType, vm); 50 } 51 } 52 41 53 public ExportJsonDialog() { 42 54 InitializeComponent(); 55 InitCache(); 43 56 } 44 57 … … 67 80 } 68 81 69 private JsonItemVM BuildTreeNode(TreeNode node, IJsonItem item) { 70 JsonItemVM vm = new JsonItemVM(item); 82 private void BuildTreeNode(TreeNode node, IJsonItem item) { 71 83 72 vms.Add(vm); 73 ctrlCollection.Add(node.GetHashCode(), GenerateControl(vm)); 74 if (item.Children != null) { 75 foreach (var c in item.Children) { 76 if (IsDrawableItem(c)) { 77 if (c is ResultItem) { 84 if (VMs.TryGetValue(item.GetType(), out JsonItemVMBase vm)) { 85 //vm.Item = item; 86 //UserControl control = vm.GetControl(); 87 //if (control != null) { 88 // control.Dock = DockStyle.Fill; 89 // control.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; 90 //} 91 //ctrlCollection.Add(node.GetHashCode(), control); 92 if (item.Children != null) { 93 foreach (var c in item.Children) { 94 if (IsDrawableItem(c)) { 95 if (c is ResultItem) { 78 96 79 } else { 80 TreeNode childNode = new TreeNode(c.Name); 81 node.Nodes.Add(childNode); 82 vm.AddChild(BuildTreeNode(childNode, c)); 97 } else { 98 TreeNode childNode = new TreeNode(c.Name); 99 node.Nodes.Add(childNode); 100 BuildTreeNode(childNode, c); 101 //vm.AddChild(BuildTreeNode(childNode, c)); 102 } 83 103 } 84 104 } 85 105 } 106 } else { 107 Console.WriteLine(); 86 108 } 87 88 return vm;89 109 } 90 110 … … 109 129 } 110 130 } 111 112 private UserControl GenerateControl(JsonItemVM vm) {113 IJsonItem item = vm.Item;114 UserControl control = null;115 if (!(item is UnsupportedJsonItem)) {116 if (item.Value is string && item.Range != null) {117 control = new JsonItemValidValuesControl(vm);118 } else if (item.Value is bool && item.Range != null) {119 control = new JsonItemBoolControl(vm);120 } else if (item.Value is int && item.Range != null) {121 control = new JsonItemValueControl(vm, false);122 } else if (item.Value is double && item.Range != null) {123 control = new JsonItemValueControl(vm, true);124 } else if (item.Value is Array) {125 Array arr = (Array)item.Value;126 if (arr.Length == 2 && arr.GetValue(0) is int && item.Range != null)127 control = new JsonItemRangeControl(vm, false);128 else if (arr.Length == 2 && arr.GetValue(0) is double && item.Range != null)129 control = new JsonItemRangeControl(vm, true);130 else if (arr.Rank == 1 && arr.GetValue(0) is double) {131 control = new JsonItemArrayControl(vm);132 }133 } else {134 control = new JsonItemBaseControl(vm);135 }136 if (control != null) {137 control.Dock = DockStyle.Fill;138 control.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;139 }140 }141 return control;142 }143 131 } 144 132 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs
r17405 r17410 38 38 this.checkBoxValue.TabIndex = 19; 39 39 this.checkBoxValue.UseVisualStyleBackColor = true; 40 this.checkBoxValue.CheckStateChanged += new System.EventHandler(this.checkBoxValue_CheckStateChanged);41 40 // 42 41 // label2 -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.cs
r17404 r17410 11 11 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 12 12 public partial class JsonItemBoolControl : JsonItemBaseControl { 13 public JsonItemBoolControl(JsonItemVM vm) : base(vm) { 13 14 public JsonItemBoolControl(BoolValueVM vm) : base(vm) { 14 15 InitializeComponent(); 15 checkBoxValue.Checked = (bool)vm.Item.Value;16 //checkBoxValue.Checked = (bool)vm.Item.Value; 16 17 } 17 18 /* 18 19 private void checkBoxValue_CheckStateChanged(object sender, EventArgs e) { 19 20 VM.Item.Value = checkBoxValue.Checked; 20 21 } 22 */ 21 23 } 22 24 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs
r17405 r17410 29 29 this.label4 = new System.Windows.Forms.Label(); 30 30 this.label2 = new System.Windows.Forms.Label(); 31 this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration. Shared.NumericRangeControl();31 this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.NumericRangeControl(); 32 32 this.groupBox1.SuspendLayout(); 33 33 this.SuspendLayout(); … … 56 56 this.textBoxValueTo.Size = new System.Drawing.Size(230, 20); 57 57 this.textBoxValueTo.TabIndex = 3; 58 this.textBoxValueTo.Leave += new System.EventHandler(this.textBoxValueTo_Leave);59 58 // 60 59 // textBoxValueFrom … … 64 63 this.textBoxValueFrom.Size = new System.Drawing.Size(230, 20); 65 64 this.textBoxValueFrom.TabIndex = 2; 66 this.textBoxValueFrom.Leave += new System.EventHandler(this.textBoxValueFrom_Leave);67 65 // 68 66 // label4 … … 94 92 this.numericRangeControl1.Size = new System.Drawing.Size(487, 112); 95 93 this.numericRangeControl1.TabIndex = 18; 96 this.numericRangeControl1.Load += new System.EventHandler(this.numericRangeControl1_Load);97 94 // 98 95 // JsonItemRangeControl … … 120 117 private System.Windows.Forms.Label label4; 121 118 private System.Windows.Forms.Label label2; 122 private Shared.NumericRangeControl numericRangeControl1;119 private NumericRangeControl numericRangeControl1; 123 120 } 124 121 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs
r17405 r17410 12 12 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 13 13 public partial class JsonItemRangeControl : JsonItemBaseControl { 14 bool isDouble = false;15 object[] range = new object[2];16 object[] value = new object[2];17 14 18 public JsonItemRangeControl( JsonItemVM vm, bool isDouble) : base(vm) {15 public JsonItemRangeControl(DoubleRangeVM vm) : base(vm) { 19 16 InitializeComponent(); 17 /* 20 18 this.isDouble = isDouble; 21 19 textBoxValueFrom.Text = ((Array)VM.Item.Value).GetValue(0).ToString(); … … 23 21 textBoxValueFrom.Text = VM.Item.Range.First().ToString(); 24 22 textBoxValueTo.Text = VM.Item.Range.Last().ToString(); 23 */ 25 24 } 26 27 private object Parse(string s) { 28 if (isDouble) { 29 if (s == "-1,79769313486232E+308") return double.MinValue; 30 if (s == "1,79769313486232E+308") return double.MaxValue; 31 return double.Parse(s.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture); 32 } 33 return int.Parse(s); 34 } 25 /* 26 protected abstract object Parse(string s); 35 27 36 28 private void SetValue() { … … 59 51 numericRangeControl1.VM = VM; 60 52 } 53 */ 61 54 } 62 55 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs
r17405 r17410 92 92 this.Name = "JsonItemValidValuesControl"; 93 93 this.Size = new System.Drawing.Size(500, 290); 94 this.Load += new System.EventHandler(this.JsonItemValidValuesControl_Load);95 94 this.Controls.SetChildIndex(this.groupBoxRange, 0); 96 95 this.Controls.SetChildIndex(this.comboBoxValues, 0); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs
r17405 r17410 11 11 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 12 12 public partial class JsonItemValidValuesControl : JsonItemBaseControl { 13 14 13 15 public JsonItemValidValuesControl( JsonItemVM vm) : base(vm) {14 public JsonItemValidValuesControl(StringValueVM vm) : base(vm) { 16 15 InitializeComponent(); 16 /* 17 17 foreach (var i in VM.Item.Range) { 18 18 AddOption((string)i); … … 20 20 comboBoxValues.SelectedItem = (string)i; 21 21 } 22 } 23 22 }*/ 24 23 } 25 24 /* 26 25 private void AddOption(string opt) { 27 26 AddComboOption(opt); … … 72 71 73 72 } 73 */ 74 74 } 75 75 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs
r17405 r17410 26 26 this.textBoxValue = new System.Windows.Forms.TextBox(); 27 27 this.label2 = new System.Windows.Forms.Label(); 28 this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration. Shared.NumericRangeControl();28 this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.NumericRangeControl(); 29 29 this.SuspendLayout(); 30 30 // … … 37 37 this.textBoxValue.Size = new System.Drawing.Size(404, 20); 38 38 this.textBoxValue.TabIndex = 14; 39 this.textBoxValue.Leave += new System.EventHandler(this.textBoxValue_Leave);40 39 // 41 40 // label2 … … 56 55 this.numericRangeControl1.TabIndex = 16; 57 56 this.numericRangeControl1.VM = null; 58 this.numericRangeControl1.Load += new System.EventHandler(this.numericRangeControl1_Load);59 57 // 60 58 // JsonItemValueControl … … 79 77 private System.Windows.Forms.TextBox textBoxValue; 80 78 private System.Windows.Forms.Label label2; 81 private Shared.NumericRangeControl numericRangeControl1;79 private NumericRangeControl numericRangeControl1; 82 80 } 83 81 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
r17405 r17410 11 11 12 12 namespace HeuristicLab.JsonInterface.OptimizerIntegration { 13 public partial class JsonItemValueControl : JsonItemBaseControl {14 bool isDouble = false;15 object[] range = new object[2];16 13 17 public JsonItemValueControl(JsonItemVM vm, bool isDouble) : base(vm) { 18 InitializeComponent(); 19 this.isDouble = isDouble; 20 textBoxValue.Text = VM.Item.Value.ToString(); 21 range[0] = VM.Item.Range.First(); 22 range[1] = VM.Item.Range.Last(); 14 public class JsonItemIntValueControl : JsonItemValueControl { 15 16 public JsonItemIntValueControl(SingleValueVM<int> vm) : base(vm) { } 17 18 } 19 20 public class JsonItemDoubleValueControl : JsonItemValueControl { 21 private SingleValueVM<double> VM { get; set; } 22 23 public JsonItemDoubleValueControl(SingleValueVM<double> vm) : base(vm) { 24 VM = vm; 23 25 } 24 26 25 private object Parse(string s) { 26 if (isDouble) { 27 return double.Parse(s.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture); 28 } 29 return int.Parse(s); 27 } 28 29 public abstract partial class JsonItemValueControl : JsonItemBaseControl { 30 31 public JsonItemValueControl(JsonItemVMBase vm) : base(vm) { 32 InitializeComponent(); 30 33 } 31 34 32 33 private void textBoxValue_Leave(object sender, EventArgs e) {34 if (!string.IsNullOrWhiteSpace(textBoxValue.Text))35 VM.Item.Value = Parse(textBoxValue.Text);36 }37 38 private void numericRangeControl1_Load(object sender, EventArgs e) {39 numericRangeControl1.IsDouble = isDouble;40 numericRangeControl1.VM = VM;41 }42 35 } 43 36 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/BaseConverter.cs
r17407 r17410 34 34 TypeCode typeCode = Type.GetTypeCode(t); 35 35 36 36 37 if (t.IsEqualTo(typeof(PercentValue))) 37 38 return 1.0d; 39 40 if(t == typeof(IntValue)) { 41 return int.MaxValue; 42 } 38 43 39 44 switch (typeCode) { … … 59 64 return 0.0d; 60 65 66 if (t == typeof(IntValue)) { 67 return int.MinValue; 68 } 69 61 70 switch (typeCode) { 62 71 case TypeCode.Int16: return short.MinValue; -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs
r17407 r17410 13 13 14 14 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 15 StringJsonItem cdata = data as StringJsonItem; 15 16 IParameter parameter = item as IParameter; 16 17 foreach (var x in GetValidValues(parameter)) 17 if(x.ToString() == CastValue<string>( data.Value))18 if(x.ToString() == CastValue<string>(cdata.Value)) 18 19 parameter.ActualValue = x; 19 20 20 if (parameter.ActualValue is IParameterizedItem && data.Children != null) {21 foreach(var param in data.Children) {21 if (parameter.ActualValue is IParameterizedItem && cdata.Children != null) { 22 foreach(var param in cdata.Children) { 22 23 if(param.Name == parameter.ActualValue.ItemName) 23 24 root.Inject(parameter.ActualValue, param, root); … … 29 30 IParameter parameter = value as IParameter; 30 31 31 IJsonItem item = new JsonItem() {32 IJsonItem item = new StringJsonItem() { 32 33 Name = parameter.Name, 33 34 Value = parameter.ActualValue?.ToString(), -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/EnumTypeConverter.cs
r17407 r17410 15 15 ((dynamic)item).Value = Enum.Parse( 16 16 item.GetType().GenericTypeArguments.First(), 17 CastValue<string>(data.Value));17 ((StringJsonItem)data).Value); 18 18 19 19 public override IJsonItem Extract(IItem value, IJsonItemConverter root) { 20 20 object val = ((dynamic)value).Value; 21 21 Type enumType = val.GetType(); 22 return new JsonItem() {22 return new StringJsonItem() { 23 23 Name = value.ItemName, 24 24 Value = Enum.GetName(enumType, val), -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs
r17407 r17410 24 24 dynamic val = value as dynamic; 25 25 foreach (var op in val.Operators) { 26 item.AddChilds(new JsonItem() {26 item.AddChilds(new BoolJsonItem() { 27 27 Name = op.Name, 28 28 Value = val.Operators.ItemChecked(op), 29 Range = new object[] { false, true }29 Range = new bool[] { false, true } 30 30 }); 31 31 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs
r17407 r17410 16 16 if(data.Children != null) { 17 17 foreach (var sp in data.Children) 18 if (pItem.Parameters.TryGetValue(sp.Name, out IParameter param) )18 if (pItem.Parameters.TryGetValue(sp.Name, out IParameter param) && param != null) 19 19 root.Inject(param, sp, root); 20 20 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/StringValueConverter.cs
r17407 r17410 13 13 14 14 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 15 ((StringValue)item).Value = CastValue<string>(data.Value);15 ((StringValue)item).Value = ((StringJsonItem)data).Value; 16 16 17 17 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 18 new JsonItem() {18 new StringJsonItem() { 19 19 Name = value.ItemName, 20 20 Value = ((StringValue)value).Value -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs
r17407 r17410 31 31 if (tmp.Name == "[OverridableParamName]") { 32 32 tmp.Name = parameter.Name; 33 JsonItem.Merge(item as JsonItem, tmp as JsonItem); 33 item = tmp; 34 //JsonItem.Merge(item as JsonItem, tmp as JsonItem); 34 35 } else 35 36 item.AddChilds(tmp); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs
r17407 r17410 11 11 namespace HeuristicLab.JsonInterface { 12 12 13 public class IntRangeConverter : ValueRangeConverter<IntRange, IntValue, int>{13 public class IntRangeConverter : BaseConverter { 14 14 public override int Priority => 1; 15 15 public override Type ConvertableType => typeof(IntRange); 16 }17 public class DoubleRangeConverter : ValueRangeConverter<DoubleRange, DoubleValue, double> {18 public override int Priority => 1;19 public override Type ConvertableType => typeof(DoubleRange);20 }21 22 public abstract class ValueRangeConverter<RangeType, T, TType> : BaseConverter23 where RangeType : StringConvertibleValueTuple<T, T>24 where T : ValueTypeValue<TType>, IDeepCloneable, IStringConvertibleValue25 where TType : struct {26 27 private const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Instance;28 16 29 17 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 30 object[] arr = (object[])data.Value;31 Tuple<T,T> tuple = new Tuple<T,T>(Instantiate<T>(arr[0]), Instantiate<T>(arr[1]));32 var field = item.GetType().GetField("values", Flags);33 field.SetValue(tuple, item);18 IntRange range = item as IntRange; 19 IntArrayJsonItem cdata = data as IntArrayJsonItem; 20 range.Start = cdata.Value[0]; 21 range.End = cdata.Value[1]; 34 22 } 35 23 36 24 public override IJsonItem Extract(IItem value, IJsonItemConverter root) { 37 var field = value.GetType().GetField("values", Flags); 38 Tuple<T, T> tuple = (Tuple<T, T>)field.GetValue(value); 39 return new JsonItem() { 25 IntRange range = value as IntRange; 26 return new IntArrayJsonItem() { 40 27 Name = "[OverridableParamName]", 41 Value = new object[] { tuple.Item1.Value, tuple.Item2.Value},42 Range = new object[] { GetMinValue(typeof(TType)), GetMaxValue(typeof(TType))}28 Value = new int[] { range.Start, range.End }, 29 Range = new int[] { int.MinValue, int.MaxValue } 43 30 }; 44 31 } 45 32 } 33 34 public class DoubleRangeConverter : BaseConverter { 35 public override int Priority => 1; 36 public override Type ConvertableType => typeof(DoubleRange); 37 38 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 39 DoubleRange range = item as DoubleRange; 40 DoubleArrayJsonItem cdata = data as DoubleArrayJsonItem; 41 range.Start = cdata.Value[0]; 42 range.End = cdata.Value[1]; 43 } 44 45 public override IJsonItem Extract(IItem value, IJsonItemConverter root) { 46 DoubleRange range = value as DoubleRange; 47 return new DoubleArrayJsonItem() { 48 Name = "[OverridableParamName]", 49 Value = new double[] { range.Start, range.End }, 50 Range = new double[] { double.MinValue, double.MaxValue } 51 }; 52 } 46 53 } 47 54 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeValueConverter.cs
r17407 r17410 9 9 namespace HeuristicLab.JsonInterface { 10 10 11 public class IntValueConverter : ValueTypeValueConverter<IntValue, int>{11 public class IntValueConverter : BaseConverter { 12 12 public override int Priority => 1; 13 13 public override Type ConvertableType => typeof(IntValue); 14 15 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 16 ((IntValue)item).Value = ((IntJsonItem)data).Value; 17 18 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 19 new IntJsonItem() { 20 Name = "[OverridableParamName]", 21 Value = ((IntValue)value).Value, 22 Range = new int[] { int.MinValue, int.MaxValue } 23 }; 14 24 } 15 25 16 public class DoubleValueConverter : ValueTypeValueConverter<DoubleValue, double>{26 public class DoubleValueConverter : BaseConverter { 17 27 public override int Priority => 1; 18 28 public override Type ConvertableType => typeof(DoubleValue); 29 30 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 31 ((DoubleValue)item).Value = ((DoubleJsonItem)data).Value; 32 33 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 34 new DoubleJsonItem() { 35 Name = "[OverridableParamName]", 36 Value = ((DoubleValue)value).Value, 37 Range = new double[] { double.MinValue, double.MaxValue } 38 }; 19 39 } 20 40 21 public class PercentValueConverter : ValueTypeValueConverter<PercentValue, double>{41 public class PercentValueConverter : BaseConverter { 22 42 public override int Priority => 2; 23 43 public override Type ConvertableType => typeof(PercentValue); 44 45 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 46 ((PercentValue)item).Value = ((DoubleJsonItem)data).Value; 47 48 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 49 new DoubleJsonItem() { 50 Name = "[OverridableParamName]", 51 Value = ((PercentValue)value).Value, 52 Range = new double[] { double.MinValue, double.MaxValue } 53 }; 24 54 } 25 55 26 public class BoolValueConverter : ValueTypeValueConverter<BoolValue, bool>{56 public class BoolValueConverter : BaseConverter { 27 57 public override int Priority => 1; 28 58 public override Type ConvertableType => typeof(BoolValue); 59 60 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 61 ((BoolValue)item).Value = ((BoolJsonItem)data).Value; 62 63 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 64 new BoolJsonItem() { 65 Name = "[OverridableParamName]", 66 Value = ((BoolValue)value).Value, 67 Range = new bool[] { false, true } 68 }; 29 69 } 30 70 31 public class DateTimeValueConverter : ValueTypeValueConverter<DateTimeValue, DateTime>{71 public class DateTimeValueConverter : BaseConverter { 32 72 public override int Priority => 1; 33 73 public override Type ConvertableType => typeof(DateTimeValue); 34 }35 36 public abstract class ValueTypeValueConverter<ValueType, T> : BaseConverter37 where ValueType : ValueTypeValue<T>38 where T : struct {39 74 40 75 public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 41 (( ValueType)item).Value = CastValue<T>(data.Value);76 ((DateTimeValue)item).Value = ((DateTimeJsonItem)data).Value; 42 77 43 78 public override IJsonItem Extract(IItem value, IJsonItemConverter root) => 44 new JsonItem() {79 new DateTimeJsonItem() { 45 80 Name = "[OverridableParamName]", 46 Value = (( ValueType)value).Value,47 Range = new object[] { GetMinValue(typeof(T)), GetMaxValue(typeof(T))}81 Value = ((DateTimeValue)value).Value, 82 Range = new DateTime[] { DateTime.MinValue, DateTime.MaxValue } 48 83 }; 49 84 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
r17408 r17410 68 68 <Compile Include="Interfaces\IJsonItem.cs" /> 69 69 <Compile Include="Interfaces\IJsonItemValidator.cs" /> 70 <Compile Include="Models\GenericJsonItem.cs" /> 70 71 <Compile Include="Models\JsonItem.cs" /> 72 <Compile Include="Models\JsonItems.cs" /> 71 73 <Compile Include="Models\ResultItem.cs" /> 72 74 <Compile Include="Models\UnsupportedJsonItem.cs" /> -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
r17406 r17410 15 15 /// </summary> 16 16 public class JCGenerator { 17 private JObject Template { get; set; } 17 private JObject Template { get; set; } = JObject.Parse(Constants.Template); 18 18 private JArray JArrayItems { get; set; } 19 19 private IList<IJsonItem> JsonItems { get; set; } … … 24 24 // data container 25 25 JArrayItems = new JArray(); 26 JArray ResultItems = new JArray(); 26 27 JsonItems = new List<IJsonItem>(); 27 28 … … 35 36 AddIItem(optimizer); 36 37 // save the JArray with JsonItems (= IParameterizedItems) 38 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 } 37 46 Template[Constants.Parameters] = JArrayItems; 47 Template[Constants.ActivatedResults] = ResultItems; 38 48 // serialize template and return string 39 49 return SingleLineArrayJsonWriter.Serialize(Template); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItemConverter.cs
r17406 r17410 52 52 53 53 public void Inject(IItem item, IJsonItem data, IJsonItemConverter root) { 54 if( !Cache.ContainsKey(item.GetHashCode())) {54 if(item != null && !Cache.ContainsKey(item.GetHashCode())) { 55 55 IJsonItemConverter converter = GetConverter(item.GetType()); 56 56 if(converter != null) converter.Inject(item, data, root); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs
r17406 r17410 22 22 public JArray Config { get; set; } 23 23 public IDictionary<string, IJsonItem> Objects { get; set; } 24 public IOptimizer Optimizer { get; set; } 24 25 } 25 26 … … 47 48 ProtoBufSerializer serializer = new ProtoBufSerializer(); 48 49 IOptimizer optimizer = (IOptimizer)serializer.Deserialize(hLFileLocation); 50 instData.Optimizer = optimizer; 49 51 50 52 // collect all parameterizedItems from template … … 65 67 66 68 #region Helper 69 70 private static object GetValueFromJObject(JObject obj) { 71 object val = obj[nameof(IJsonItem.Value)]?.ToObject<object>(); 72 if (val is JContainer jContainer) // for resolving array values 73 val = jContainer.ToObject<object[]>(); 74 75 return val; 76 } 77 67 78 private static void CollectParameterizedItems(InstData instData) { 79 //JCGenerator generator = new JCGenerator(); 80 //IEnumerable<IJsonItem> items = generator.FetchJsonItems(instData.Optimizer); 81 IJsonItem root = JsonItemConverter.Extract(instData.Optimizer); 82 instData.Objects.Add(root.Path, root); 83 84 foreach (JObject obj in instData.Template[Constants.Parameters]) { 85 string[] pathParts = obj.Property("Path").Value.ToString().Split('.'); 86 IJsonItem tmp = root; 87 IJsonItem old = null; 88 for(int i = 1; i < pathParts.Length; ++i) { 89 foreach(var c in tmp.Children) { 90 if (c.Name == pathParts[i]) 91 tmp = c; 92 } 93 if (old == tmp) 94 throw new Exception($"Invalid path '{string.Join(".", pathParts)}'"); 95 else old = tmp; 96 } 97 tmp.Value = GetValueFromJObject(obj); 98 tmp.Range = obj[nameof(IJsonItem.Range)]?.ToObject<object[]>(); 99 tmp.ActualName = obj[nameof(IJsonItem.ActualName)]?.ToString(); 100 instData.Objects.Add(tmp.Path, tmp); 101 } 102 103 104 /* 68 105 foreach (JObject item in instData.Template[Constants.Parameters]) { 69 106 string[] pathParts = item.Property("Path").Value.ToString().Split('.'); … … 89 126 parent.AddChilds(data); 90 127 instData.Objects.Add(data.Path, data); 91 } 128 }*/ 92 129 } 93 130 … … 95 132 foreach (JObject obj in instData.Config) { 96 133 // build item from config object 97 IJsonItem item = JsonItem.BuildJsonItem(obj); 134 //IJsonItem item = JsonItem.BuildJsonItem(obj); 135 string path = obj.Property("Path").Value.ToString(); 98 136 // override default value 99 if (instData.Objects.TryGetValue( item.Path, out IJsonItem param)) {100 param.Value = item.Value;137 if (instData.Objects.TryGetValue(path, out IJsonItem param)) { 138 param.Value = GetValueFromJObject(obj); 101 139 // override ActualName (for LookupParameters) 102 140 if (param.ActualName != null) 103 param.ActualName = item.ActualName;104 } else throw new InvalidDataException($"No parameter with path='{ item.Path}' defined!");141 param.ActualName = obj[nameof(IJsonItem.ActualName)]?.ToString(); 142 } else throw new InvalidDataException($"No parameter with path='{path}' defined!"); 105 143 } 106 144 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs
r17408 r17410 152 152 } 153 153 #endregion 154 155 #region BuildJsonItemMethods156 public static IJsonItem BuildJsonItem(JObject obj) {157 object val = obj[nameof(Value)]?.ToObject<object>();158 if (val is JContainer jContainer) // for resolving array values159 val = jContainer.ToObject<object[]>();160 161 return new JsonItem() {162 Name = obj[nameof(Name)]?.ToString(),163 Value = val,164 Range = obj[nameof(Range)]?.ToObject<object[]>(),165 ActualName = obj[nameof(ActualName)]?.ToString()166 };167 }168 #endregion169 154 } 170 155 } -
branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs
r17394 r17410 45 45 alg.Problem = tsp; 46 46 47 File.WriteAllText(@"C:\Workspace\Template.json", JCGenerator.GenerateTemplate(alg)); 47 JCGenerator generator = new JCGenerator(); 48 49 //File.WriteAllText(@"C:\Workspace\Template.json", generator.GenerateTemplate(alg)); 48 50 JsonTemplateInstantiator.Instantiate(@"C:\Workspace\Template.json"); 49 51 /*
Note: See TracChangeset
for help on using the changeset viewer.