Ticket #2281: ResultsParameter3.patch
File ResultsParameter3.patch, 7.8 KB (added by mkommend, 8 years ago) |
---|
-
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Results/IResultParameter.cs
24 24 25 25 namespace HeuristicLab.Optimization { 26 26 public interface IResultParameter : ILookupParameter { 27 string ResultName { get; set; }28 event EventHandler ResultNameChanged;27 //string ResultName { get; set; } 28 //event EventHandler ResultNameChanged; 29 29 } 30 30 31 public interface IResultParameter<T> : ILookupParameter<ResultCollection>, IResultParameter where T : class, IItem, new() { 31 public interface IResultParameter<T> : ILookupParameter<T>, IResultParameter where T : class, IItem, new() { 32 string ResultCollectionName { get; set; } 33 32 34 T DefaultValue { get; set; } 33 T ResultValue { get; set; }35 event EventHandler DefaultValueChanged; 34 36 } 35 37 } -
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs
30 30 [Item("ResultParameter", "A parameter whose value is written to a result collection.")] 31 31 [StorableClass] 32 32 [NonDiscoverableType] 33 public sealed class ResultParameter<T> : LookupParameter< ResultCollection>, IResultParameter<T> where T : class, IItem, new() {33 public sealed class ResultParameter<T> : LookupParameter<T>, IResultParameter<T> where T : class, IItem, new() { 34 34 35 35 [Storable] 36 private string result Name;37 public string Result Name {38 get { return result Name; }36 private string resultCollectionName; 37 public string ResultCollectionName { 38 get { return resultCollectionName; } 39 39 set { 40 40 if (value == null) throw new ArgumentNullException(); 41 if (string.IsNullOrWhiteSpace(value)) { 42 resultName = Name; 43 OnResultNameChanged(); 44 } else if (!resultName.Equals(value)) { 45 resultName = value; 46 OnResultNameChanged(); 41 if (string.IsNullOrWhiteSpace(value)) throw new ArgumentNullException(); 42 else if (!resultCollectionName.Equals(value)) { 43 resultCollectionName = value; 44 OnResultCollectionNameChanged(); 47 45 } 48 46 } 49 47 } … … 60 58 } 61 59 } 62 60 63 public T ResultValue {64 get { return GetResultValue(); }65 set { SetResultValue(value); }66 }67 68 61 [StorableConstructor] 69 62 private ResultParameter(bool deserializing) : base(deserializing) { } 70 63 private ResultParameter(ResultParameter<T> original, Cloner cloner) 71 64 : base(original, cloner) { 72 result Name = original.resultName;65 resultCollectionName = original.resultCollectionName; 73 66 defaultValue = cloner.Clone(original.defaultValue); 74 67 } 75 68 public override IDeepCloneable Clone(Cloner cloner) { 76 69 return new ResultParameter<T>(this, cloner); 77 70 } 78 public ResultParameter() : this("Anonymous") { } 79 public ResultParameter(string name) 80 : base(name, string.Empty, "Results") { 81 resultName = Name; 82 defaultValue = new T(); 83 } 84 public ResultParameter(string name, string description) : this(name, description, new T()) { } 85 public ResultParameter(string name, string description, T defaultValue) 86 : base(name, description, "Results") { 71 public ResultParameter() : this("Anonymous", string.Empty, "Results", new T()) { } 72 73 public ResultParameter(string name, string description, string resultCollectionName, T defaultValue) 74 : base(name, description, string.Empty) { 87 75 if (defaultValue == null) throw new ArgumentNullException("defaultValue"); 88 resultName = Name; 76 if (resultCollectionName == null) throw new ArgumentNullException("resultCollectionName"); 77 if (string.IsNullOrEmpty(resultCollectionName)) throw new ArgumentException("resultCollectionName"); 78 79 this.resultCollectionName = resultCollectionName; 89 80 this.defaultValue = defaultValue; 90 81 } 91 public ResultParameter(string name, string description, string resultName) : this(name, description, new T(), resultName) { }92 public ResultParameter(string name, string description, T defaultValue, string resultName)93 : base(name, description, "Results") {94 if (defaultValue == null) throw new ArgumentNullException("defaultValue");95 this.resultName = string.IsNullOrWhiteSpace(resultName) ? Name : resultName;96 this.defaultValue = defaultValue;97 }98 82 99 public override string ToString() {100 if (Name.Equals(ResultName)) return Name;101 return Name + ": " + ResultName;102 }103 83 104 private T GetResultValue() { 105 var results = ActualValue; 84 protected override IItem GetActualValue() { 85 ResultCollection results; 86 if (CachedActualValue != null) results = (ResultCollection)CachedActualValue; 87 88 //TODO name & type checks 89 else results = (ResultCollection)GetActualValue(ExecutionContext, ResultCollectionName); 90 91 CachedActualValue = results; 92 106 93 if (results == null) 107 throw new InvalidOperationException("ResultParameter (" + ResultName + "): ResultCollection " + ActualName + "not found.");94 throw new InvalidOperationException("ResultParameter (" + Name + "): ResultCollection not found."); 108 95 109 if (!results.ContainsKey(ResultName)) results.Add(new Result(ResultName, (T)DefaultValue.Clone())); 110 var resultValue = results[ResultName].Value as T; 96 //null check for default value 97 if (!results.ContainsKey(Name)) results.Add(new Result(Name, (T)DefaultValue.Clone())); 98 99 var resultValue = results[Name].Value as T; 111 100 if (resultValue == null) 112 throw new InvalidOperationException(string.Format("Type mismatch. Result \"{0}\" does not contain a \"{1}\".", ResultName, typeof(T).GetPrettyName()));101 throw new InvalidOperationException(string.Format("Type mismatch. Result \"{0}\" does not contain a \"{1}\".", Name, typeof(T).GetPrettyName())); 113 102 114 103 return resultValue; 115 104 } 105 protected override void SetActualValue(IItem value) { 106 ResultCollection results; 107 if (CachedActualValue != null) results = (ResultCollection)CachedActualValue; 116 108 117 private void SetResultValue(T value) { 118 var results = ActualValue; 109 110 else //TODO name & type checks 111 results = (ResultCollection)GetActualValue(ExecutionContext, ResultCollectionName); 112 113 CachedActualValue = results; 114 119 115 if (results == null) 120 throw new InvalidOperationException("ResultParameter (" + ResultName + "): ResultCollection " + ActualName + "not found.");116 throw new InvalidOperationException("ResultParameter (" + Name + "): ResultCollection not found."); 121 117 122 if (!results.ContainsKey( ResultName))123 results.Add(new Result( ResultName, value));124 else results[ ResultName].Value = value;118 if (!results.ContainsKey(Name)) 119 results.Add(new Result(Name, value)); 120 else results[Name].Value = value; 125 121 } 126 122 127 public event EventHandler ResultNameChanged; 128 private void OnResultNameChanged() { 129 var handler = ResultNameChanged; 123 124 public event EventHandler ResultCollectionNameChanged; 125 private void OnResultCollectionNameChanged() { 126 var handler = ResultCollectionNameChanged; 130 127 if (handler != null) handler(this, EventArgs.Empty); 131 128 OnToStringChanged(); 132 129 }