- Timestamp:
- 09/25/19 17:18:41 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCGenerator.cs
r17266 r17269 16 16 17 17 public class CustomWriter : JsonTextWriter { 18 private const int ArrayFlatterLvl = 1; 18 19 private Stack<Formatting> formattings = new Stack<Formatting>(); 19 20 private int lvl = 0; 20 21 public override void WriteStartArray() { 21 22 base.WriteStartArray(); 22 if(lvl > 1) {23 if(lvl > ArrayFlatterLvl) { 23 24 formattings.Push(base.Formatting); 24 25 base.Formatting = Formatting.None; … … 30 31 base.WriteEndArray(); 31 32 lvl--; 32 if (lvl > 1)33 if (lvl > ArrayFlatterLvl) 33 34 base.Formatting = formattings.Pop(); 34 35 } … … 49 50 50 51 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': [] 58 57 }"); 59 58 60 59 61 60 private Dictionary<string, string> TypeList = new Dictionary<string, string>(); 62 61 63 62 public string GenerateTemplate(IAlgorithm algorithm, IProblem problem, params string[] freeParameters) { 64 63 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); 66 68 JArray jsonItems = new JArray(); 67 69 68 foreach(var item in items ) {70 foreach(var item in items.Distinct()) { 69 71 JToken token = JObject.FromObject(item, Settings()); 70 72 token["StaticParameters"] = token["Parameters"]; 73 token["FreeParameters"] = token["Parameters"]; 74 token.Cast<JObject>().Property("Parameters")?.Remove(); 71 75 RefactorFreeParameters(token, freeParameters); 72 76 RefactorStaticParameters(token); 73 77 if(token["StaticParameters"].HasValues || token["FreeParameters"].HasValues) 74 78 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); 77 86 } 78 87 88 #region Helper 79 89 private void RefactorFreeParameters(JToken token, string[] freeParameters) { 80 90 81 token["FreeParameters"] = token["StaticParameters"];91 //token["FreeParameters"] = token["StaticParameters"]; 82 92 83 93 IList<JObject> objToRemove = new List<JObject>(); … … 98 108 }, token["FreeParameters"]); 99 109 foreach (var x in objToRemove) x.Remove(); 100 110 101 111 } 102 112 … … 110 120 foreach (var x in objToRemove) x.Remove(); 111 121 } 112 113 114 115 #region Helper116 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 141 122 142 123 private JsonSerializer Settings() => new JsonSerializer() { … … 152 133 } 153 134 #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 }*/170 135 } 171 136 }
Note: See TracChangeset
for help on using the changeset viewer.