- Timestamp:
- 11/19/19 16:59:18 (5 years ago)
- Location:
- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
r17353 r17354 75 75 76 76 obj.Property(nameof(JsonItem.Parameters))?.Remove(); 77 RefactorFreeParameters(obj );78 RefactorStaticParameters(obj );77 RefactorFreeParameters(obj, genData); 78 RefactorStaticParameters(obj, genData); 79 79 80 80 obj.Property(nameof(JsonItem.Value))?.Remove(); … … 87 87 88 88 // deletes unnecessary properties for free parameters. 89 private static void RefactorFreeParameters(JToken token ) {89 private static void RefactorFreeParameters(JToken token, GenData genData) { 90 90 IList<JObject> objToRemove = new List<JObject>(); 91 91 TransformNodes(x => { 92 var p = x.ToObject<JsonItem>();92 var p = JsonItem.BuildJsonItem(x, genData.TypeList); 93 93 x.Property(nameof(JsonItem.Type))?.Remove(); 94 94 x.Property(nameof(JsonItem.Parameters))?.Remove(); … … 105 105 106 106 // deletes unnecessary properties for static parameters. 107 private static void RefactorStaticParameters(JToken token ) {107 private static void RefactorStaticParameters(JToken token, GenData genData) { 108 108 IList<JObject> objToRemove = new List<JObject>(); 109 109 TransformNodes(x => { 110 var p = x.ToObject<JsonItem>();110 var p = JsonItem.BuildJsonItem(x, genData.TypeList); 111 111 x.Property(nameof(JsonItem.Range))?.Remove(); 112 112 x.Property(nameof(JsonItem.Operators))?.Remove(); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs
r17353 r17354 83 83 private static void CollectParameterizedItems(InstData instData) { 84 84 foreach (JObject item in instData.Template[Constants.Objects]) { 85 JsonItem data = BuildJsonItem(item, instData);85 JsonItem data = JsonItem.BuildJsonItem(item, instData.TypeList); 86 86 instData.ParameterizedItems.Add(data.Path, data); 87 87 } … … 120 120 foreach (JObject obj in instData.Config) { 121 121 // build item from config object 122 JsonItem item = BuildJsonItem(obj, instData);122 JsonItem item = JsonItem.BuildJsonItem(obj, instData.TypeList); 123 123 // override default value 124 124 if (instData.ConfigurableItems.TryGetValue(item.Path, out JsonItem param)) { … … 145 145 } else throw new TypeLoadException($"Cannot find AssemblyQualifiedName for {data.Name}."); 146 146 } 147 148 #region BuildJsonItemMethods149 private static JsonItem BuildJsonItem(JObject obj, InstData instData) =>150 new JsonItem() {151 Name = obj[nameof(JsonItem.Name)]?.ToString(),152 Path = obj[nameof(JsonItem.Path)]?.ToString(),153 Value = obj[nameof(JsonItem.Value)]?.ToObject<object>(),154 Range = obj[nameof(JsonItem.Range)]?.ToObject<object[]>(),155 Type = GetType(obj[nameof(JsonItem.Path)]?.ToObject<string>(), instData),156 ActualName = obj[nameof(JsonItem.ActualName)]?.ToString(),157 Parameters = PopulateParameters(obj, instData),158 Operators = PopulateOperators(obj, instData)159 };160 161 private static string GetType(string path, InstData instData) {162 if(!string.IsNullOrEmpty(path))163 if (instData.TypeList.TryGetValue(path, out string value))164 return value;165 return null;166 }167 168 private static IList<JsonItem> PopulateParameters(JObject obj, InstData instData) {169 IList<JsonItem> list = new List<JsonItem>();170 171 // add staticParameters172 if (obj[Constants.StaticParameters] != null)173 foreach (JObject param in obj[Constants.StaticParameters])174 list.Add(BuildJsonItem(param, instData));175 176 // merge staticParameter with freeParameter177 if (obj[Constants.FreeParameters] != null) {178 foreach (JObject param in obj[Constants.FreeParameters]) {179 JsonItem tmp = BuildJsonItem(param, instData);180 181 // search staticParameter from list182 JsonItem comp = null;183 foreach (var p in list)184 if (p.Name == tmp.Name) comp = p;185 if (comp == null)186 throw new InvalidDataException($"Invalid {Constants.FreeParameters.Trim('s')}: '{tmp.Name}'!");187 188 JsonItem.Merge(comp, tmp);189 }190 }191 return list;192 }193 194 private static IList<JsonItem> PopulateOperators(JObject obj, InstData instData) {195 IList<JsonItem> list = new List<JsonItem>();196 JToken operators = obj[nameof(JsonItem.Operators)];197 if (operators != null)198 foreach (JObject sp in operators)199 list.Add(BuildJsonItem(sp, instData));200 return list;201 }202 #endregion203 147 #endregion 204 148 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs
r17353 r17354 1 1 using System; 2 2 using System.Collections.Generic; 3 using System.IO; 3 4 using System.Linq; 4 5 using System.Text; … … 19 20 private IEnumerable<object> range; 20 21 #endregion 21 22 public string Name { 23 get => name; 22 23 public string Name { 24 get => name; 24 25 set { 25 26 name = value; 26 27 Path = Name; 27 28 UpdatePath(); 28 } 29 } 29 30 } 30 31 public string Type { get; set; } … … 33 34 public IList<JsonItem> Operators { get; set; } 34 35 public object Value { 35 get => value; 36 get => value; 36 37 set { 37 if (value is JContainer) 38 this.value = ((JContainer)value).ToObject<object[]>(); 39 else 40 this.value = value; 38 this.value = value; 41 39 CheckConstraints(); 42 } 40 } 43 41 } 44 public IEnumerable<object> Range { 45 get => range; 42 public IEnumerable<object> Range { 43 get => range; 46 44 set { 47 45 range = value; 48 46 CheckConstraints(); 49 } 47 } 50 48 } 51 49 public string ActualName { get; set; } … … 84 82 UpdatePathHelper(Operators); 85 83 86 if (Reference != null)84 if (Reference != null) 87 85 UpdatePathHelper(Reference); 88 86 } … … 90 88 91 89 #region Helper 92 private void UpdatePathHelper(params JsonItem[] items) => 90 private void UpdatePathHelper(params JsonItem[] items) => 93 91 UpdatePathHelper((IEnumerable<JsonItem>)items); 94 92 … … 105 103 } 106 104 107 private bool IsInRange() => IsInRangeList() || 105 private bool IsInRange() => IsInRangeList() || 108 106 (Value.GetType().IsArray && ((object[])Value).All(x => IsInNumericRange(x))) || 109 107 (!Value.GetType().IsArray && IsInNumericRange(Value)); … … 129 127 (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0); 130 128 } 131 129 130 #endregion 131 132 #region BuildJsonItemMethods 133 public static JsonItem BuildJsonItem(JObject obj, IDictionary<string, string> typeList) { 134 object val = obj[nameof(Value)]?.ToObject<object>(); 135 if (val is JContainer) 136 val = ((JContainer)val).ToObject<object[]>(); 137 138 return new JsonItem() { 139 Name = obj[nameof(Name)]?.ToString(), 140 Path = obj[nameof(Path)]?.ToString(), 141 Value = val, 142 Range = obj[nameof(Range)]?.ToObject<object[]>(), 143 Type = GetType(obj[nameof(Path)]?.ToObject<string>(), typeList), 144 ActualName = obj[nameof(ActualName)]?.ToString(), 145 Parameters = PopulateParameters(obj, typeList), 146 Operators = PopulateOperators(obj, typeList) 147 }; 148 } 149 150 private static string GetType(string path, IDictionary<string, string> typeList) { 151 if (!string.IsNullOrEmpty(path)) 152 if (typeList.TryGetValue(path, out string value)) 153 return value; 154 return null; 155 } 156 157 private static IList<JsonItem> PopulateParameters(JObject obj, IDictionary<string, string> typeList) { 158 IList<JsonItem> list = new List<JsonItem>(); 159 160 // add staticParameters 161 if (obj[Constants.StaticParameters] != null) 162 foreach (JObject param in obj[Constants.StaticParameters]) 163 list.Add(BuildJsonItem(param, typeList)); 164 165 // merge staticParameter with freeParameter 166 if (obj[Constants.FreeParameters] != null) { 167 foreach (JObject param in obj[Constants.FreeParameters]) { 168 JsonItem tmp = BuildJsonItem(param, typeList); 169 170 // search staticParameter from list 171 JsonItem comp = null; 172 foreach (var p in list) 173 if (p.Name == tmp.Name) comp = p; 174 if (comp == null) 175 throw new InvalidDataException($"Invalid {Constants.FreeParameters.Trim('s')}: '{tmp.Name}'!"); 176 177 JsonItem.Merge(comp, tmp); 178 } 179 } 180 return list; 181 } 182 183 private static IList<JsonItem> PopulateOperators(JObject obj, IDictionary<string, string> typeList) { 184 IList<JsonItem> list = new List<JsonItem>(); 185 JToken operators = obj[nameof(JsonItem.Operators)]; 186 if (operators != null) 187 foreach (JObject sp in operators) 188 list.Add(BuildJsonItem(sp, typeList)); 189 return list; 190 } 132 191 #endregion 133 192 }
Note: See TracChangeset
for help on using the changeset viewer.