Changeset 14058 for branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs
- Timestamp:
- 07/13/16 10:51:56 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs
r12764 r14058 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 21 21 22 22 using System; 23 using System.Drawing; 23 24 using HeuristicLab.Common; 25 using HeuristicLab.Common.Resources; 24 26 using HeuristicLab.Core; 25 27 using HeuristicLab.Parameters; … … 31 33 [StorableClass] 32 34 [NonDiscoverableType] 33 public sealed class ResultParameter<T> : LookupParameter<ResultCollection>, IResultParameter<T> where T : class, IItem, new() { 35 public sealed class ResultParameter<T> : LookupParameter<T>, IResultParameter<T> where T : class, IItem { 36 public override Image ItemImage { get { return VSImageLibrary.Exception; } } 34 37 35 38 [Storable] 36 private string result Name;37 public string Result Name {38 get { return result Name; }39 private string resultCollectionName; 40 public string ResultCollectionName { 41 get { return resultCollectionName; } 39 42 set { 40 43 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(); 44 if (string.IsNullOrWhiteSpace(value)) throw new ArgumentNullException(); 45 else if (!resultCollectionName.Equals(value)) { 46 resultCollectionName = value; 47 OnResultCollectionNameChanged(); 47 48 } 48 49 } … … 61 62 } 62 63 63 public T ResultValue {64 get { return GetResultValue(); }65 set { SetResultValue(value); }66 }67 68 64 [StorableConstructor] 69 65 private ResultParameter(bool deserializing) : base(deserializing) { } 70 66 private ResultParameter(ResultParameter<T> original, Cloner cloner) 71 67 : base(original, cloner) { 72 result Name = original.resultName;68 resultCollectionName = original.resultCollectionName; 73 69 defaultValue = cloner.Clone(original.defaultValue); 74 70 } … … 76 72 return new ResultParameter<T>(this, cloner); 77 73 } 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") { 74 public ResultParameter() : this("Anonymous", string.Empty, "Results") { } 75 public ResultParameter(string name) : this(name, string.Empty, "Results") { } 76 public ResultParameter(string name, string description) : this(name, description, "Results") { } 77 public ResultParameter(string name, string description, string resultCollectionName) 78 : base(name, description, string.Empty) { 79 if (string.IsNullOrEmpty(resultCollectionName)) throw new ArgumentException("resultCollectionName"); 80 this.resultCollectionName = resultCollectionName; 81 } 82 public ResultParameter(string name, string description, string resultCollectionName, T defaultValue) 83 : base(name, description, string.Empty) { 84 if (string.IsNullOrEmpty(resultCollectionName)) throw new ArgumentException("resultCollectionName"); 87 85 if (defaultValue == null) throw new ArgumentNullException("defaultValue"); 88 resultName =Name;86 this.resultCollectionName = resultCollectionName; 89 87 this.defaultValue = defaultValue; 90 88 } 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 } 89 90 protected override IItem GetActualValue() { 91 ResultCollection results; 92 if (CachedActualValue != null) { 93 results = CachedActualValue as ResultCollection; 94 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found."); 95 } else { 96 var tmp = ResultCollectionName; 97 // verifyType has to be disabled, because the ResultCollection may not be identical to the generic type of the parameter 98 results = GetValue(ExecutionContext, ref tmp) as ResultCollection; 99 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found."); 100 CachedActualValue = results; 101 } 98 102 99 public override string ToString() { 100 if (Name.Equals(ResultName)) return Name; 101 return Name + ": " + ResultName; 102 } 103 IResult result; 104 if (!results.TryGetValue(ActualName, out result)) { 105 if (DefaultValue == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): Result not found and no default value specified."); 106 result = new Result(ActualName, (T)DefaultValue.Clone()); 107 results.Add(result); 108 } 103 109 104 private T GetResultValue() { 105 var results = ActualValue; 106 if (results == null) 107 throw new InvalidOperationException("ResultParameter (" + ResultName + "): ResultCollection " + ActualName + " not found."); 108 109 if (!results.ContainsKey(ResultName)) results.Add(new Result(ResultName, (T)DefaultValue.Clone())); 110 var resultValue = results[ResultName].Value as T; 110 var resultValue = result.Value as T; 111 111 if (resultValue == null) 112 throw new InvalidOperationException(string.Format("Type mismatch. Result \"{0}\" does not contain a \"{1}\".", ResultName, typeof(T).GetPrettyName()));112 throw new InvalidOperationException(string.Format("Type mismatch. Result \"{0}\" does not contain a \"{1}\".", ActualName, typeof(T).GetPrettyName())); 113 113 114 114 return resultValue; 115 115 } 116 116 117 private void SetResultValue(T value) { 118 var results = ActualValue; 119 if (results == null) 120 throw new InvalidOperationException("ResultParameter (" + ResultName + "): ResultCollection " + ActualName + " not found."); 117 protected override void SetActualValue(IItem value) { 118 ResultCollection results; 119 if (CachedActualValue != null) { 120 results = CachedActualValue as ResultCollection; 121 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found."); 122 } else { 123 var tmp = ResultCollectionName; 124 results = GetValue(ExecutionContext, ref tmp) as ResultCollection; 125 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found."); 126 CachedActualValue = results; 127 } 121 128 122 if (!results.ContainsKey(ResultName)) 123 results.Add(new Result(ResultName, value)); 124 else results[ResultName].Value = value; 129 IResult result; 130 if (!results.TryGetValue(ActualName, out result)) { 131 result = new Result(ActualName, value); 132 results.Add(result); 133 } else result.Value = value; 125 134 } 126 135 127 public event EventHandler ResultNameChanged; 128 private void OnResultNameChanged() { 129 var handler = ResultNameChanged; 136 137 public event EventHandler ResultCollectionNameChanged; 138 private void OnResultCollectionNameChanged() { 139 var handler = ResultCollectionNameChanged; 130 140 if (handler != null) handler(this, EventArgs.Empty); 131 141 OnToStringChanged();
Note: See TracChangeset
for help on using the changeset viewer.