Changeset 3329 for trunk/sources/HeuristicLab.Optimization/3.3
- Timestamp:
- 04/13/10 17:07:10 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs
r3317 r3329 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 using System.Linq; 24 25 using HeuristicLab.Core; 26 using HeuristicLab.Data; 25 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 using HeuristicLab.Common; 26 29 27 30 namespace HeuristicLab.Optimization { 28 31 [StorableClass] 29 32 [Item("RunCollection", "Represents a collection of runs.")] 30 public class RunCollection : ItemCollection<IRun> { 31 public RunCollection() : base() { } 32 public RunCollection(int capacity) : base(capacity) { } 33 public RunCollection(IEnumerable<IRun> collection) : base(collection) { } 33 public class RunCollection : ItemCollection<IRun>, IStringConvertibleMatrix { 34 public RunCollection() : base() { Initialize(); } 35 public RunCollection(int capacity) : base(capacity) { Initialize(); } 36 public RunCollection(IEnumerable<IRun> collection) : base(collection) { Initialize(); this.OnItemsAdded(collection); } 37 38 protected static Type[] viewableDataTypes = new Type[]{typeof(BoolValue), typeof(DoubleValue), typeof(IntValue), 39 typeof(PercentValue), typeof(StringValue)}; 40 41 protected override void OnCollectionReset(IEnumerable<IRun> items, IEnumerable<IRun> oldItems) { 42 parameterNames.Clear(); 43 resultNames.Clear(); 44 foreach (IRun run in items) { 45 foreach (KeyValuePair<string, IItem> parameter in run.Parameters) 46 AddParameter(parameter.Key, parameter.Value); 47 foreach (KeyValuePair<string, IItem> result in run.Results) 48 AddResult(result.Key, result.Value); 49 } 50 base.OnCollectionReset(items, oldItems); 51 OnReset(); 52 OnColumnNamesChanged(); 53 OnRowNamesChanged(); 54 } 55 protected override void OnItemsAdded(IEnumerable<IRun> items) { 56 bool columnNamesChanged = false; 57 foreach (IRun run in items) { 58 foreach (KeyValuePair<string, IItem> parameter in run.Parameters) 59 columnNamesChanged |= AddParameter(parameter.Key, parameter.Value); 60 foreach (KeyValuePair<string, IItem> result in run.Results) 61 columnNamesChanged |= AddResult(result.Key, result.Value); 62 } 63 base.OnItemsAdded(items); 64 OnReset(); 65 if (columnNamesChanged) 66 OnColumnNamesChanged(); 67 OnRowNamesChanged(); 68 } 69 protected override void OnItemsRemoved(IEnumerable<IRun> items) { 70 bool columnNamesChanged = false; 71 foreach (IRun run in items) { 72 foreach (string parameterName in run.Parameters.Keys) 73 columnNamesChanged |= RemoveParameterName(parameterName); 74 foreach (string resultName in run.Results.Keys) 75 columnNamesChanged |= RemoveResultName(resultName); 76 } 77 base.OnItemsRemoved(items); 78 OnReset(); 79 if (columnNamesChanged) 80 OnColumnNamesChanged(); 81 OnRowNamesChanged(); 82 } 83 84 private void Initialize() { 85 parameterNames = new List<string>(); 86 resultNames = new List<string>(); 87 this.ReadOnlyView = true; 88 } 89 90 private bool AddParameter(string name, IItem value) { 91 if (value == null) 92 return false; 93 if (!parameterNames.Contains(name) && 94 viewableDataTypes.Any(x => x.IsAssignableFrom(value.GetType()))) { 95 parameterNames.Add(name); 96 return true; 97 } 98 return false; 99 } 100 private bool AddResult(string name, IItem value) { 101 if (value == null) 102 return false; 103 if (!resultNames.Contains(name) && 104 viewableDataTypes.Any(x => x.IsAssignableFrom(value.GetType()))) { 105 resultNames.Add(name); 106 return true; 107 } 108 return false; 109 } 110 private bool RemoveParameterName(string name) { 111 if (!list.Any(x => x.Parameters.ContainsKey(name))) { 112 parameterNames.Remove(name); 113 return true; 114 } 115 return false; 116 } 117 private bool RemoveResultName(string name) { 118 if (!list.Any(x => x.Results.ContainsKey(name))) { 119 resultNames.Remove(name); 120 return true; 121 } 122 return false; 123 } 124 125 #region IStringConvertibleMatrix Members 126 private List<string> parameterNames; 127 private List<string> resultNames; 128 public int Rows { 129 get { return this.Count; } 130 set { throw new System.NotImplementedException(); } 131 } 132 public int Columns { 133 get { return parameterNames.Count + resultNames.Count; } 134 set { throw new NotSupportedException(); } 135 } 136 public IEnumerable<string> ColumnNames { 137 get { 138 List<string> value = new List<string>(parameterNames); 139 value.AddRange(resultNames); 140 return value; 141 } 142 set { throw new NotSupportedException(); } 143 } 144 public IEnumerable<string> RowNames { 145 get { return list.Select(x => x.Name).ToList(); } 146 set { throw new NotSupportedException(); } 147 } 148 public bool SortableView { 149 get { return true; } 150 set { throw new NotSupportedException(); } 151 } 152 153 public string GetValue(int rowIndex, int columnIndex) { 154 IRun run = this.list[rowIndex]; 155 string value = string.Empty; 156 157 if (columnIndex < parameterNames.Count) { 158 string parameterName = parameterNames[columnIndex]; 159 if (run.Parameters.ContainsKey(parameterName)) { 160 IItem param = run.Parameters[parameterName]; 161 if (param != null) value = param.ToString(); 162 } 163 } else if (columnIndex < parameterNames.Count + resultNames.Count) { 164 string resultName = resultNames[columnIndex - parameterNames.Count]; 165 if (run.Results.ContainsKey(resultName)) { 166 IItem result = run.Results[resultName]; 167 if (result != null) value = result.ToString(); 168 } 169 } 170 return value; 171 } 172 173 public event EventHandler<EventArgs<int, int>> ItemChanged; 174 protected virtual void OnItemChanged(int rowIndex, int columnIndex) { 175 if (ItemChanged != null) 176 ItemChanged(this, new EventArgs<int, int>(rowIndex, columnIndex)); 177 OnToStringChanged(); 178 } 179 public event EventHandler Reset; 180 protected virtual void OnReset() { 181 if (Reset != null) 182 Reset(this, EventArgs.Empty); 183 OnToStringChanged(); 184 } 185 public event EventHandler ColumnNamesChanged; 186 protected virtual void OnColumnNamesChanged() { 187 EventHandler handler = ColumnNamesChanged; 188 if (handler != null) 189 handler(this, EventArgs.Empty); 190 } 191 public event EventHandler RowNamesChanged; 192 protected virtual void OnRowNamesChanged() { 193 EventHandler handler = RowNamesChanged; 194 if (handler != null) 195 handler(this, EventArgs.Empty); 196 } 197 198 public event EventHandler SortableViewChanged; 199 public bool Validate(string value, out string errorMessage) { throw new NotSupportedException(); } 200 public bool SetValue(string value, int rowIndex, int columnIndex) { throw new NotSupportedException(); } 201 #endregion 34 202 } 35 203 }
Note: See TracChangeset
for help on using the changeset viewer.