#region License Information /* HeuristicLab * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System; using System.Linq; using System.Windows.Forms; using HeuristicLab.Core.Views; using HeuristicLab.MainForm; namespace HeuristicLab.Clients.Hive.Views { [View("HiveJob View")] [Content(typeof(HiveJob), true)] public partial class HiveJobView : ItemView { public new HiveJob Content { get { return (HiveJob)base.Content; } set { if (base.Content != value) { base.Content = value; } } } public HiveJobView() { InitializeComponent(); } protected override void RegisterContentEvents() { base.RegisterContentEvents(); Content.OptimizerJobChanged += new EventHandler(Content_OptimizerJobChanged); Content.JobChanged += new EventHandler(Content_JobChanged); Content.JobStateChanged += new EventHandler(Content_JobStateChanged); } protected override void DeregisterContentEvents() { Content.OptimizerJobChanged -= new EventHandler(Content_OptimizerJobChanged); Content.JobChanged -= new EventHandler(Content_JobChanged); Content.JobStateChanged -= new EventHandler(Content_JobStateChanged); base.DeregisterContentEvents(); } protected override void OnContentChanged() { base.OnContentChanged(); if (Content != null && Content.Job != null) { logView.Content = Content.OptimizerJob.Log; computeInParallelCheckBox.Checked = Content.OptimizerJob.ComputeInParallel; } else { logView.Content = null; computeInParallelCheckBox.Checked = false; } Content_OptimizerJobChanged(this, EventArgs.Empty); Content_JobChanged(this, EventArgs.Empty); Content_JobStateChanged(this, EventArgs.Empty); } protected void Content_OptimizerJobChanged(object sender, EventArgs e) { RegisterJobEvents(); Job_OptimizerChanged(this, e); } protected void Job_OptimizerChanged(object sender, EventArgs e) { if (Content != null && Content.Job != null && Content.OptimizerJob.Optimizer != null) { optimizerNamedItemView.Content = Content.OptimizerJob.Optimizer; runCollectionViewHost.Content = Content.OptimizerJob.Optimizer.Runs; } else { optimizerNamedItemView.Content = null; runCollectionViewHost.Content = null; } } private void RegisterJobEvents() { if (Content != null && Content.Job != null) { Content.OptimizerJob.ComputeInParallelChanged += new EventHandler(OptimizerJob_ComputeInParallelChanged); Content.OptimizerJob.OptimizerChanged += new EventHandler(Job_OptimizerChanged); } } private void DeregisterJobEvents() { if (Content != null && Content.Job != null) { Content.OptimizerJob.ComputeInParallelChanged -= new EventHandler(OptimizerJob_ComputeInParallelChanged); Content.OptimizerJob.OptimizerChanged -= new EventHandler(Job_OptimizerChanged); } } #region Content Events private void Content_JobChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(Content_JobChanged), sender, e); } else { if (Content != null && Content.Job != null) { this.jobIdTextBox.Text = Content.Job.Id.ToString(); this.dateCreatedTextBox.Text = Content.Job.DateCreated.HasValue ? Content.Job.DateCreated.ToString() : string.Empty; this.priorityTextBox.Text = Content.Job.Priority.ToString(); this.coresNeededTextBox.Text = Content.Job.CoresNeeded.ToString(); this.memoryNeededTextBox.Text = Content.Job.MemoryNeeded.ToString(); } else { this.jobIdTextBox.Text = string.Empty; this.dateCreatedTextBox.Text = string.Empty; this.priorityTextBox.Text = string.Empty; this.coresNeededTextBox.Text = string.Empty; this.memoryNeededTextBox.Text = string.Empty; } } } private void Content_JobStateChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(Content_JobStateChanged), sender, e); } else { if (Content != null && Content.Job != null) { this.stateTextBox.Text = Content.Job.State.ToString(); this.executionTimeTextBox.Text = Content.Job.ExecutionTime.ToString(); this.dateFinishedTextBox.Text = Content.Job.DateFinished.ToString(); this.exceptionTextBox.Text = Content.Job.CurrentStateLog != null ? Content.Job.CurrentStateLog.Exception : string.Empty; this.lastUpdatedTextBox.Text = Content.Job.LastJobDataUpdate.ToString(); if (Content.OptimizerJob.ComputeInParallel) { this.stateLogViewHost.Content = new StateLogListList( this.Content.ChildHiveJobs.Select(child => new StateLogList(child.Job.StateLog) )); } else { this.stateLogViewHost.Content = new StateLogList(Content.Job.StateLog); } } else { this.stateTextBox.Text = string.Empty; this.executionTimeTextBox.Text = string.Empty; this.dateCalculatedText.Text = string.Empty; this.dateFinishedTextBox.Text = string.Empty; this.exceptionTextBox.Text = string.Empty; this.stateLogViewHost.Content = null; this.lastUpdatedTextBox.Text = string.Empty; } SetEnabledStateOfControls(); } } protected override void SetEnabledStateOfControls() { base.SetEnabledStateOfControls(); this.jobIdTextBox.ReadOnly = true; this.stateTextBox.ReadOnly = true; this.executionTimeTextBox.ReadOnly = true; this.dateCreatedTextBox.ReadOnly = true; this.dateCalculatedText.ReadOnly = true; this.dateFinishedTextBox.ReadOnly = true; this.exceptionTextBox.ReadOnly = true; this.lastUpdatedTextBox.ReadOnly = true; this.priorityTextBox.ReadOnly = this.ReadOnly; this.coresNeededTextBox.ReadOnly = this.ReadOnly; this.memoryNeededTextBox.ReadOnly = this.ReadOnly; this.computeInParallelCheckBox.Enabled = !this.ReadOnly && this.Content != null && this.Content.OptimizerJob != null && this.Content.OptimizerJob.IsParallelizable; this.restartButton.Enabled = Content != null && Content.Job.State == JobState.Paused; this.pauseButton.Enabled = Content != null && Content.Job.State == JobState.Calculating; this.stopButton.Enabled = Content != null && (Content.Job.State == JobState.Calculating || Content.Job.State == JobState.Waiting || Content.Job.State == JobState.Paused); this.showOptimizerButton.Enabled = Content != null && Content.Job.State == JobState.Paused && Content.OptimizerJob != null && Content.OptimizerJob.Optimizer != null; optimizerNamedItemView.ReadOnly = true; } void OptimizerJob_ComputeInParallelChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(OptimizerJob_ComputeInParallelChanged), sender, e); } else { computeInParallelCheckBox.Checked = Content.OptimizerJob.ComputeInParallel; } } #endregion private void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) { if (Content != null && Content.OptimizerJob != null) { this.Content.OptimizerJob.ComputeInParallel = this.computeInParallelCheckBox.Checked; } } private void exceptionTextBox_DoubleClick(object sender, EventArgs e) { using (TextDialog dialog = new TextDialog("Exception", exceptionTextBox.Text, ReadOnly || !Content.CanChangeDescription)) { if (dialog.ShowDialog(this) == DialogResult.OK) Content.Description = dialog.Content; } } private void restartButton_Click(object sender, EventArgs e) { Content.Restart(); } private void pauseButton_Click(object sender, EventArgs e) { Content.Pause(); } private void stopButton_Click(object sender, EventArgs e) { Content.Stop(); } private void showOptimizerButton_Click(object sender, EventArgs e) { MainFormManager.MainForm.ShowContent(Content.OptimizerJob.Optimizer); } } }