Changeset 11564 for branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/ProgrammableNetworkItem.cs
- Timestamp:
- 11/23/14 05:32:41 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/ProgrammableNetworkItem.cs
r11563 r11564 35 35 [Item("ProgrammableNetworkItem", "Abstract base class for programmable items of a network.")] 36 36 [StorableClass] 37 public abstract class ProgrammableNetworkItem : NetworkItem, IProgrammableNetworkItem { 38 #region Item Properties 37 public abstract class ProgrammableNetworkItem : Item, IProgrammableNetworkItem { 39 38 public static new Image StaticItemImage { 40 39 get { return HeuristicLab.Common.Resources.VSImageLibrary.Script; } 41 40 } 41 42 #region Item Members 42 43 public override string ItemName { 43 get { return CompiledNetworkItem != null ? CompiledNetworkItem.ItemName : base.ItemName; }44 get { return CompiledNetworkItem.ItemName; } 44 45 } 45 46 public override string ItemDescription { 46 get { return CompiledNetworkItem != null ? CompiledNetworkItem.ItemDescription : base.ItemDescription; }47 get { return CompiledNetworkItem.ItemDescription; } 47 48 } 48 49 public override Image ItemImage { 49 get { return CompiledNetworkItem != null ? CompiledNetworkItem.ItemImage : base.ItemImage; } 50 } 51 #endregion 52 53 #region NamedItem Properties 54 public override bool CanChangeName { 55 get { return CompiledNetworkItem != null ? CompiledNetworkItem.CanChangeName : base.CanChangeName; } 56 } 57 public override bool CanChangeDescription { 58 get { return CompiledNetworkItem != null ? CompiledNetworkItem.CanChangeDescription : base.CanChangeDescription; } 50 get { return CompiledNetworkItem.ItemImage; } 51 } 52 #endregion 53 54 #region NamedItem Members 55 [Storable] 56 private string name; 57 public string Name { 58 get { return CompiledNetworkItem.Name; } 59 set { CompiledNetworkItem.Name = value; } 60 } 61 public bool CanChangeName { 62 get { return CompiledNetworkItem.CanChangeName; } 63 } 64 [Storable] 65 private string description; 66 public string Description { 67 get { return CompiledNetworkItem.Description; } 68 set { CompiledNetworkItem.Description = value; } 69 } 70 public virtual bool CanChangeDescription { 71 get { return CompiledNetworkItem.CanChangeDescription; } 72 } 73 public event EventHandler<CancelEventArgs<string>> NameChanging; 74 private void OnNameChanging(CancelEventArgs<string> e) { 75 var handler = NameChanging; 76 if (handler != null) handler(this, e); 77 } 78 public event EventHandler NameChanged; 79 private void OnNameChanged() { 80 var handler = NameChanged; 81 if (handler != null) handler(this, EventArgs.Empty); 82 } 83 public event EventHandler DescriptionChanged; 84 private void OnDescriptionChanged() { 85 var handler = DescriptionChanged; 86 if (handler != null) handler(this, EventArgs.Empty); 87 } 88 #endregion 89 90 #region NetworkItem Members 91 public INetworkItem Parent { 92 get { return CompiledNetworkItem.Parent; } 93 } 94 public IEnumerable<INetworkItem> Children { 95 get { return CompiledNetworkItem.Children; } 59 96 } 60 97 #endregion … … 79 116 public CompilerErrorCollection CompileErrors { 80 117 get { return compileErrors; } 81 pr ivateset {118 protected set { 82 119 compileErrors = value; 83 120 OnCompileErrorsChanged(); … … 85 122 } 86 123 87 private INetworkItem compiledNetworkItem; 88 protected INetworkItem CompiledNetworkItem { 124 private Type compiledNetworkItemType; 125 private CompiledProgrammableNetworkItem compiledNetworkItem; 126 protected CompiledProgrammableNetworkItem CompiledNetworkItem { 89 127 get { 90 if (compiledNetworkItem == null) { 91 Compile(); 92 } 128 if (compiledNetworkItem == null) 129 CompiledNetworkItem = (CompiledProgrammableNetworkItem)Activator.CreateInstance(compiledNetworkItemType, this); 93 130 return compiledNetworkItem; 94 131 } 95 set {132 private set { 96 133 if (compiledNetworkItem != value) { 97 if (compiledNetworkItem != null) DeregisterCompiledNetworkItemEvents(); 134 if (compiledNetworkItem != null) { 135 DeregisterCompiledNetworkItemEvents(); 136 compiledNetworkItem.DeregisterEvents(); 137 } 98 138 compiledNetworkItem = value; 99 if (compiledNetworkItem != null) RegisterCompiledNetworkItemEvents(); 100 OnCompiledNetworkItemChanged(); 139 if (compiledNetworkItem != null) { 140 RegisterCompiledNetworkItemEvents(); 141 compiledNetworkItem.RegisterEvents(); 142 } 101 143 OnToStringChanged(); 102 144 OnItemImageChanged(); 145 OnNameChanged(); 146 OnDescriptionChanged(); 103 147 } 104 148 } … … 109 153 protected ProgrammableNetworkItem(ProgrammableNetworkItem original, Cloner cloner) 110 154 : base(original, cloner) { 155 // name and description are cloned in CompiledProgrammableNetworkItem 111 156 code = original.code; 112 157 if (original.compileErrors != null) … … 115 160 } 116 161 protected ProgrammableNetworkItem() 117 : base("ProgrammableNetworkItem") { 162 : base() { 163 name = "ProgrammableNetworkItem"; 164 description = string.Empty; 118 165 code = CodeTemplate; 166 Compile(); 119 167 } 120 168 protected ProgrammableNetworkItem(string name) 121 : base(name) { 169 : base() { 170 this.name = string.IsNullOrEmpty(name) ? string.Empty : name; 171 description = string.Empty; 122 172 code = CodeTemplate; 173 Compile(); 123 174 } 124 175 protected ProgrammableNetworkItem(string name, string description) 125 : base(name, description) { 176 : base() { 177 this.name = string.IsNullOrEmpty(name) ? string.Empty : name; 178 this.description = string.IsNullOrEmpty(description) ? string.Empty : description; 126 179 code = CodeTemplate; 180 Compile(); 181 } 182 183 [StorableHook(HookType.AfterDeserialization)] 184 private void AfterDeserialization() { 185 Compile(); 127 186 } 128 187 129 188 public override string ToString() { 130 return CompiledNetworkItem != null ? CompiledNetworkItem.ToString() : base.ToString();189 return CompiledNetworkItem.ToString(); 131 190 } 132 191 … … 159 218 Name, Environment.NewLine, sb.ToString())); 160 219 } 161 CompiledNetworkItem = (INetworkItem)Activator.CreateInstance( 162 results.CompiledAssembly.GetTypes() 163 .Single(x => typeof(CompiledProgrammableNetworkItem) 164 .IsAssignableFrom(x)), 165 this); 220 compiledNetworkItemType = results.CompiledAssembly.GetTypes() 221 .Single(x => typeof(CompiledProgrammableNetworkItem).IsAssignableFrom(x)); 222 CompiledNetworkItem = null; 166 223 } 167 224 public virtual IEnumerable<Assembly> GetAssemblies() { … … 180 237 if (handler != null) handler(this, EventArgs.Empty); 181 238 } 182 public event EventHandler CompiledNetworkItemChanged;183 protected virtual void OnCompiledNetworkItemChanged() {184 var handler = CompiledNetworkItemChanged;185 if (handler != null) handler(this, EventArgs.Empty);186 }187 239 188 240 #region CompiledNetworkItem Events 189 241 protected virtual void RegisterCompiledNetworkItemEvents() { 190 if (compiledNetworkItem != null) { 191 compiledNetworkItem.ToStringChanged += CompiledNetworkItem_ToStringChanged; 192 compiledNetworkItem.ItemImageChanged += CompiledNetworkItem_ItemImageChanged; 193 } 242 CompiledNetworkItem.ToStringChanged += CompiledNetworkItem_ToStringChanged; 243 CompiledNetworkItem.ItemImageChanged += CompiledNetworkItem_ItemImageChanged; 244 CompiledNetworkItem.NameChanging += CompiledNetworkItem_NameChanging; 245 CompiledNetworkItem.NameChanged += CompiledNetworkItem_NameChanged; 246 CompiledNetworkItem.DescriptionChanged += CompiledNetworkItem_DescriptionChanged; 194 247 } 195 248 protected virtual void DeregisterCompiledNetworkItemEvents() { 196 if (compiledNetworkItem != null) { 197 compiledNetworkItem.ToStringChanged -= CompiledNetworkItem_ToStringChanged; 198 compiledNetworkItem.ItemImageChanged -= CompiledNetworkItem_ItemImageChanged; 199 } 249 CompiledNetworkItem.ToStringChanged -= CompiledNetworkItem_ToStringChanged; 250 CompiledNetworkItem.ItemImageChanged -= CompiledNetworkItem_ItemImageChanged; 251 CompiledNetworkItem.NameChanging -= CompiledNetworkItem_NameChanging; 252 CompiledNetworkItem.NameChanged -= CompiledNetworkItem_NameChanged; 253 CompiledNetworkItem.DescriptionChanged -= CompiledNetworkItem_DescriptionChanged; 200 254 } 201 255 private void CompiledNetworkItem_ToStringChanged(object sender, EventArgs e) { … … 204 258 private void CompiledNetworkItem_ItemImageChanged(object sender, EventArgs e) { 205 259 OnItemImageChanged(); 260 } 261 private void CompiledNetworkItem_NameChanging(object sender, CancelEventArgs<string> e) { 262 OnNameChanging(e); 263 } 264 private void CompiledNetworkItem_NameChanged(object sender, EventArgs e) { 265 OnNameChanged(); 266 } 267 private void CompiledNetworkItem_DescriptionChanged(object sender, EventArgs e) { 268 OnDescriptionChanged(); 206 269 } 207 270 #endregion … … 214 277 } 215 278 216 protected ProgrammableNetworkItem Context { get; private set; } 217 218 protected CompiledProgrammableNetworkItem(CompiledProgrammableNetworkItem original, Cloner cloner) 219 : base(original, cloner) { 220 Context = cloner.Clone(original.Context); 221 RegisterContextEvents(); 222 } 223 protected CompiledProgrammableNetworkItem(ProgrammableNetworkItem context) { 224 Context = context; 225 RegisterContextEvents(); 226 } 227 228 public override string ToString() { 229 return Name; 230 } 231 232 #region INamedItem Members 279 #region NamedItem Members 233 280 public string Name { 234 get { return Context.Name; } 235 set { Context.Name = value; } 281 get { return Context.name; } 282 set { 283 if (!CanChangeName) throw new NotSupportedException("Name cannot be changed."); 284 if (!(Context.name.Equals(value) || (value == null) && (Context.name == string.Empty))) { 285 CancelEventArgs<string> e = value == null ? new CancelEventArgs<string>(string.Empty) : new CancelEventArgs<string>(value); 286 OnNameChanging(e); 287 if (!e.Cancel) { 288 Context.name = value == null ? string.Empty : value; 289 OnNameChanged(); 290 } 291 } 292 } 236 293 } 237 294 public virtual bool CanChangeName { … … 239 296 } 240 297 public string Description { 241 get { return Context.Description; } 242 set { Context.Description = value; } 298 get { return Context.description; } 299 set { 300 if (!CanChangeDescription) throw new NotSupportedException("Description cannot be changed."); 301 if (!(Context.description.Equals(value) || (value == null) && (Context.description == string.Empty))) { 302 Context.description = value == null ? string.Empty : value; 303 OnDescriptionChanged(); 304 } 305 } 243 306 } 244 307 public virtual bool CanChangeDescription { … … 264 327 #endregion 265 328 266 #region INetworkItem Members 329 #region NetworkItem Members 330 private INetworkItem parent; 267 331 public INetworkItem Parent { 268 get { return Context.Parent; } 269 } 270 public IEnumerable<INetworkItem> Children { 271 get { return Context.Children; } 332 get { return parent; } 333 protected set { 334 if (value != parent) { 335 parent = value; 336 } 337 } 338 } 339 public virtual IEnumerable<INetworkItem> Children { 340 get { return Enumerable.Empty<INetworkItem>(); } 272 341 } 273 342 #endregion 274 343 275 #region Context Events 276 protected virtual void RegisterContextEvents() { 277 Context.NameChanging += Context_NameChanging; 278 Context.NameChanged += Context_NameChanged; 279 Context.DescriptionChanged += Context_DescriptionChanged; 280 Context.CompiledNetworkItemChanged += Context_CompiledNetworkItemChanged; 281 } 282 protected virtual void DeregisterContextEvents() { 283 Context.NameChanging -= Context_NameChanging; 284 Context.NameChanged -= Context_NameChanged; 285 Context.DescriptionChanged -= Context_DescriptionChanged; 286 Context.CompiledNetworkItemChanged -= Context_CompiledNetworkItemChanged; 287 } 288 private void Context_NameChanging(object sender, CancelEventArgs<string> e) { 289 OnNameChanging(e); 290 } 291 private void Context_NameChanged(object sender, EventArgs e) { 292 OnNameChanged(); 293 } 294 private void Context_DescriptionChanged(object sender, EventArgs e) { 295 OnDescriptionChanged(); 296 } 297 private void Context_CompiledNetworkItemChanged(object sender, EventArgs e) { 298 DeregisterContextEvents(); 299 } 344 protected ProgrammableNetworkItem Context { get; private set; } 345 346 protected CompiledProgrammableNetworkItem(CompiledProgrammableNetworkItem original, Cloner cloner) 347 : base(original, cloner) { 348 Context = cloner.Clone(original.Context); 349 Context.name = original.Context.name; 350 Context.description = original.Context.description; 351 } 352 protected CompiledProgrammableNetworkItem(ProgrammableNetworkItem context) 353 : base() { 354 Context = context; 355 } 356 357 public virtual void Initialize() { } 358 359 public override string ToString() { 360 return Name; 361 } 362 363 #region Events 364 public virtual void RegisterEvents() { } 365 public virtual void DeregisterEvents() { } 300 366 #endregion 301 367 } … … 303 369 304 370 #region Helpers 305 protected string ReadCodeTemplate(string templateName) {306 using (var stream = Assembly.Get ExecutingAssembly().GetManifestResourceStream(templateName))371 protected virtual string ReadCodeTemplate(string templateName) { 372 using (var stream = Assembly.GetAssembly(this.GetType()).GetManifestResourceStream(templateName)) 307 373 using (var reader = new StreamReader(stream)) { 308 374 return reader.ReadToEnd();
Note: See TracChangeset
for help on using the changeset viewer.