using System; using System.Drawing; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Clients.Hive { [StorableClass] public class EngineJob : ItemJob { [Storable] protected IOperation initialOperation; public IOperation InitialOperation { get { return initialOperation; } set { initialOperation = value; } } public new IEngine Item { get { return (IEngine)base.Item; } set { base.Item = value; } } public override TimeSpan ExecutionTime { get { return Item.ExecutionTime; } } public override ExecutionState ExecutionState { get { return Item.ExecutionState; } } #region constructors and cloning public EngineJob() { } public EngineJob(IOperation initialOperation, IEngine engine) { this.initialOperation = initialOperation; this.Item = engine; } [StorableConstructor] protected EngineJob(bool deserializing) : base(deserializing) { } protected EngineJob(EngineJob original, Cloner cloner) : base(original, cloner) { this.initialOperation = cloner.Clone(original.initialOperation); } public override IDeepCloneable Clone(Cloner cloner) { return new EngineJob(this, cloner); } #endregion public override bool IsParallelizable { get { return false; } } public override void Prepare() { } public override void Start() { Item.Prepare(initialOperation); Item.Start(); } public override void Pause() { Item.Pause(); } public override void Stop() { Item.Stop(); } protected override void RegisterItemEvents() { base.RegisterItemEvents(); Item.Stopped += new EventHandler(engine_Stopped); Item.Paused += new EventHandler(Item_Paused); Item.Started += new EventHandler(Item_Started); Item.ExceptionOccurred += new EventHandler>(engine_ExceptionOccurred); Item.ExecutionStateChanged += new EventHandler(Item_ExecutionStateChanged); Item.ExecutionTimeChanged += new EventHandler(Item_ExecutionTimeChanged); } protected override void DeregisterItemEvents() { Item.Stopped -= new EventHandler(engine_Stopped); Item.Paused -= new EventHandler(Item_Paused); Item.Started -= new EventHandler(Item_Started); Item.ExceptionOccurred -= new EventHandler>(engine_ExceptionOccurred); Item.ExecutionStateChanged -= new EventHandler(Item_ExecutionStateChanged); Item.ExecutionTimeChanged -= new EventHandler(Item_ExecutionTimeChanged); base.DeregisterItemEvents(); } private void engine_ExceptionOccurred(object sender, EventArgs e) { OnJobFailed(e); } private void engine_Stopped(object sender, EventArgs e) { OnJobStopped(); } private void Item_Paused(object sender, EventArgs e) { OnJobPaused(); } private void Item_ExecutionTimeChanged(object sender, EventArgs e) { OnExecutionTimeChanged(); } private void Item_ExecutionStateChanged(object sender, EventArgs e) { OnExecutionStateChanged(); } private void Item_Started(object sender, EventArgs e) { OnJobStarted(); } public override bool CanChangeDescription { get { return false; } } public override bool CanChangeName { get { return false; } } public override string Description { get { return string.Empty; } set { throw new NotSupportedException(); } } public override string Name { get { return Item != null ? Item.ToString() : null; } set { throw new NotSupportedException(); } } public override string ItemDescription { get { return Description; } } public override Image ItemImage { get { return HeuristicLab.Common.Resources.VSImageLibrary.Operator; } } public override string ItemName { get { return "EngineJob"; } } public override Version ItemVersion { get { return null; } } } }