using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Optimization; using HeuristicLab.Data; using HeuristicLab.Collections; using HeuristicLab.Core; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Common.Resources; using HeuristicLab.Common; using HeuristicLab.Parameters; namespace HeuristicLab.OKB.AlgorithmHost { [StorableClass] public class ParameterizedNamedItemContainer : Item { public ParameterizedNamedItemContainer() { ParameterMapping = new ObservableDictionary(); } [StorableConstructor] public ParameterizedNamedItemContainer(bool deserializing) : base(deserializing) { } [Storable] private IParameterizedNamedItem item; public IParameterizedNamedItem Item { get { return item; } set { if (value == item) return; if (item != null) DeregisterItemEvents(); item = value; if (item != null) RegisterItemEvents(); OnItemChanged(); } } public event EventHandler ItemChanged; protected void OnItemChanged() { InitializeMapping(); EventHandler handler = ItemChanged; if (handler != null) handler(this, EventArgs.Empty); } public virtual Type ItemType { get { return typeof(IParameterizedNamedItem); } } [Storable] public ObservableDictionary ParameterMapping { get; private set; } public virtual void InitializeMapping() { ParameterMapping.Clear(); foreach (Parameter p in item.Parameters) { ParameterMapping.Add(p.Name, null); } } protected virtual void RegisterItemEvents() { } protected virtual void DeregisterItemEvents() { } public override string ItemName { get { return "ParameterizedNamedItemContainer"; } } public override string ItemDescription { get { return "Container for parameterized named items to be stored in the OKB"; } } public override System.Drawing.Image ItemImage { get { return VS2008ImageLibrary.Module; } } public override string ToString() { return Item == null ? "Empty Container" : string.Format("<{0}>", Item.Name); } public override HeuristicLab.Common.IDeepCloneable Clone(Cloner cloner) { ParameterizedNamedItemContainer clone = (ParameterizedNamedItemContainer)Activator.CreateInstance(this.GetType()); cloner.RegisterClonedObject(this, clone); clone.Item = (IParameterizedNamedItem)cloner.Clone(Item); clone.ParameterMapping = new ObservableDictionary(); foreach (var item in ParameterMapping) { clone.ParameterMapping.Add(item.Key, item.Value); } return clone; } } }