using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Core; using HeuristicLab.Common; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Problems.MetaOptimization { [StorableClass] public abstract class ParameterConfiguration : IParameterConfiguration { [Storable] public IParameter Parameter { get; set; } [Storable] public string Category { get; set; } public ParameterConfiguration() { } [StorableConstructor] protected ParameterConfiguration(bool deserializing) { } public ParameterConfiguration(IParameter parameter, string category) { this.Parameter = parameter; this.Category = category; Parameter.NameChanged += this.NameChanged; Parameter.NameChanging += this.NameChanging; Parameter.DescriptionChanged += this.DescriptionChanged; Parameter.ItemImageChanged += this.ItemImageChanged; parameter.ToStringChanged += this.ToStringChanged; } public bool CanChangeDescription { get { return false; } } public bool CanChangeName { get { return false; } } public string Description { get { return Parameter.Description; } set { throw new NotSupportedException(); } } public string Name { get { return Parameter.Name; } set { throw new NotSupportedException(); } } public string ItemDescription { get { return Parameter.ItemDescription; } } public System.Drawing.Image ItemImage { get { return Parameter.ItemImage; } } public string ItemName { get { return Parameter.ItemName; } } public Version ItemVersion { get { return Parameter.ItemVersion; } } #region Events public virtual event EventHandler NameChanged; public virtual event EventHandler> NameChanging; public virtual event EventHandler DescriptionChanged; public virtual event EventHandler ItemImageChanged; public virtual event EventHandler ToStringChanged; protected virtual void OnToStringChanged() { var handler = ToStringChanged; if (handler != null) handler(this, EventArgs.Empty); } #endregion #region Cloning public virtual IDeepCloneable Clone(Cloner cloner) { ParameterConfiguration clone = (ParameterConfiguration)Activator.CreateInstance(this.GetType(), true); cloner.RegisterClonedObject(this, clone); clone.Parameter = (IParameter)cloner.Clone(this.Parameter); clone.Category = this.Category; return clone; } public object Clone() { return Clone(new Cloner()); } #endregion public override string ToString() { return string.Format("{0}.{1}", Category, Parameter.Name); } public abstract void SetParameterWithRandomValue(IRandom random); } }