Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/05/11 15:37:04 (14 years ago)
Author:
cneumuel
Message:

#1233

  • seperated ExperimentMangerClient (OKB-Style, contains business logic) and HiveExperiment (mainly only contains information)
  • fixed redundant cloning methods in dtos
  • added simple statistics in HiveExperiment which the user can see before downloading an experiment
  • added db-delete cascade for slaves and statelogs - now slaves can be safely deleted
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/HiveExperimentView.cs

    r5852 r5955  
    2121
    2222using System;
     23using System.ComponentModel;
    2324using System.Threading;
    2425using System.Windows.Forms;
     
    3435  /// </summary>
    3536  [View("Experiment View")]
    36   [Content(typeof(HiveExperimentClient), true)]
    37   public sealed partial class HiveExperimentView : NamedItemView {
     37  [Content(typeof(HiveExperiment), true)]
     38  public sealed partial class HiveExperimentView : ItemView {
    3839    private ProgressView progressView;
    3940
    40     public new HiveExperimentClient Content {
    41       get { return (HiveExperimentClient)base.Content; }
     41    public new HiveExperiment Content {
     42      get { return (HiveExperiment)base.Content; }
    4243      set { base.Content = value; }
    4344    }
     
    4849    public HiveExperimentView() {
    4950      InitializeComponent();
    50       downloadExperimentPanel.Dock = DockStyle.Fill;
    5151    }
    5252
    5353    protected override void DeregisterContentEvents() {
    54       Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
     54      //Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
    5555      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
    5656      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
    57       Content.Prepared -= new EventHandler(Content_Prepared);
    58       Content.Started -= new EventHandler(Content_Started);
    59       Content.Paused -= new EventHandler(Content_Paused);
    60       Content.Stopped -= new EventHandler(Content_Stopped);
    61       Content.IsResultsPollingChanged -= new EventHandler(Content_IsResultsPollingChanged);
     57      //Content.Prepared -= new EventHandler(Content_Prepared);
     58      //Content.Started -= new EventHandler(Content_Started);
     59      //Content.Paused -= new EventHandler(Content_Paused);
     60      //Content.Stopped -= new EventHandler(Content_Stopped);
     61      Content.RefreshAutomaticallyChanged -= new EventHandler(Content_RefreshAutomaticallyChanged);
    6262      Content.HiveJobChanged -= new EventHandler(Content_HiveJobChanged);
    6363      Content.IsProgressingChanged -= new EventHandler(Content_IsProgressingChanged);
     64      Content.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(Content_PropertyChanged);
    6465      base.DeregisterContentEvents();
    6566    }
     
    6768    protected override void RegisterContentEvents() {
    6869      base.RegisterContentEvents();
    69       Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
     70      //Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
    7071      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
    7172      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
    72       Content.Prepared += new EventHandler(Content_Prepared);
    73       Content.Started += new EventHandler(Content_Started);
    74       Content.Paused += new EventHandler(Content_Paused);
    75       Content.Stopped += new EventHandler(Content_Stopped);
    76       Content.IsResultsPollingChanged += new EventHandler(Content_IsResultsPollingChanged);
     73      //Content.Prepared += new EventHandler(Content_Prepared);
     74      //Content.Started += new EventHandler(Content_Started);
     75      //Content.Paused += new EventHandler(Content_Paused);
     76      //Content.Stopped += new EventHandler(Content_Stopped);
     77      Content.RefreshAutomaticallyChanged += new EventHandler(Content_RefreshAutomaticallyChanged);
    7778      Content.HiveJobChanged += new EventHandler(Content_HiveJobChanged);
    7879      Content.IsProgressingChanged += new EventHandler(Content_IsProgressingChanged);
     80      Content.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Content_PropertyChanged);
    7981    }
    8082
     
    8284      base.OnContentChanged();
    8385      if (Content == null) {
     86        nameTextBox.Text = string.Empty;
    8487        executionTimeTextBox.Text = string.Empty;
    8588        resourceNamesTextBox.Text = string.Empty;
    8689        useLocalPluginsCheckBox.Checked = false;
    8790        logView.Content = null;
     91        //includeJobsCheckBox.Checked = false;
     92        refreshAutomaticallyCheckBox.Checked = false;
     93        jobsTextBox.Text = "0";
     94        calculatingTextBox.Text = "0";
     95        finishedTextBox.Text = "0";
    8896      } else {
     97        nameTextBox.Text = Content.Name;
    8998        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
    9099        resourceNamesTextBox.Text = Content.ResourceNames;
    91100        useLocalPluginsCheckBox.Checked = Content.UseLocalPlugins;
    92         logView.Content = Content.Log;
     101        //includeJobsCheckBox.Checked = Content.IncludeJobs;
     102        refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
     103        jobsTextBox.Text = Content.JobCount.ToString();
     104        calculatingTextBox.Text = Content.CalculatingCount.ToString();
     105        finishedTextBox.Text = Content.FinishedCount.ToString();
    93106      }
    94107      Content_HiveJobChanged(this, EventArgs.Empty);
     
    101114      executionTimeTextBox.Enabled = Content != null;
    102115      experimentNamedItemView.ReadOnly = true;
     116      jobsTextBox.ReadOnly = true;
     117      calculatingTextBox.ReadOnly = true;
     118      finishedTextBox.ReadOnly = true;
     119
    103120      if (Content != null) {
    104         this.nameTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
    105         this.resourceNamesTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
    106         this.jobsTreeView.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
    107         this.useLocalPluginsCheckBox.Enabled = Content.ExecutionState == ExecutionState.Prepared;
    108 
    109         viewExperimentButton.Enabled = Content.GetExperiment() != null;
    110 
    111         this.Locked = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
    112         downloadExperimentPanel.Visible = Content.HiveExperimentId != Guid.Empty && Content.GetExperiment() == null;
     121        bool alreadyUploaded = Content.RootJobId != null && Content.Id != Guid.Empty;
     122        bool jobsLoaded = Content.HiveJob != null && Content.HiveJob.Job.Id != Guid.Empty;
     123
     124        this.nameTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
     125        this.resourceNamesTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
     126        this.jobsTreeView.ReadOnly = Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
     127        this.useLocalPluginsCheckBox.Enabled = !(Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded);
     128        this.refreshAutomaticallyCheckBox.Enabled = alreadyUploaded && jobsLoaded && Content.ExecutionState == ExecutionState.Started;
     129        this.viewExperimentButton.Enabled = Content.GetExperiment() != null;
     130        this.openExperimentButton.Enabled = !alreadyUploaded && Content.ExecutionState == ExecutionState.Prepared;
     131        this.newExperimentButton.Enabled = !alreadyUploaded && Content.ExecutionState == ExecutionState.Prepared;
     132        this.refreshButton.Enabled = alreadyUploaded;
     133
     134        this.Locked = Content.ExecutionState == ExecutionState.Started;
    113135      }
    114136      SetEnabledStateOfExecutableButtons();
     
    117139    protected override void OnClosed(FormClosedEventArgs e) {
    118140      if (Content != null) {
    119         if (Content.IsPollingResults)
     141        if (Content.RefreshAutomatically)
    120142          Content.StopResultPolling();
    121143      }
     
    176198        ErrorHandling.ShowErrorDialog(this, e.Value);
    177199    }
    178     private void Content_IsResultsPollingChanged(object sender, EventArgs e) {
    179       if (InvokeRequired)
    180         Invoke(new EventHandler(Content_IsResultsPollingChanged), sender, e);
    181       else {
    182         SetEnabledStateOfControls();
    183       }
    184     }
    185     void Content_HiveJobChanged(object sender, EventArgs e) {
     200    private void Content_RefreshAutomaticallyChanged(object sender, EventArgs e) {
     201      if (InvokeRequired)
     202        Invoke(new EventHandler(Content_RefreshAutomaticallyChanged), sender, e);
     203      else {
     204        refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
     205        SetEnabledStateOfControls();
     206      }
     207    }
     208    private void Content_HiveJobChanged(object sender, EventArgs e) {
    186209      if (InvokeRequired)
    187210        Invoke(new EventHandler(Content_HiveJobChanged), sender, e);
     
    197220      }
    198221    }
     222    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
     223      if (InvokeRequired)
     224        Invoke(new PropertyChangedEventHandler(Content_PropertyChanged), sender, e);
     225      else {
     226        jobsTextBox.Text = Content.JobCount.ToString();
     227        calculatingTextBox.Text = Content.CalculatingCount.ToString();
     228        finishedTextBox.Text = Content.FinishedCount.ToString();
     229      }
     230    }
    199231    #endregion
    200232
    201233    #region Control events
    202234    private void startButton_Click(object sender, EventArgs e) {
    203       Content.Start();
     235      ExperimentManagerClient.StartExperiment(new Action<Exception>((Exception ex) => ErrorHandling.ShowErrorDialog(this, "Start failed.", ex)), Content);
    204236    }
    205237    private void pauseButton_Click(object sender, EventArgs e) {
    206       Content.Pause();
     238      ExperimentManagerClient.PauseExperiment(Content);
    207239    }
    208240    private void stopButton_Click(object sender, EventArgs e) {
    209       Content.Stop();
    210     }
    211     private void resetButton_Click(object sender, EventArgs e) {
    212       Content.Prepare();
     241      ExperimentManagerClient.StopExperiment(Content);
     242    }
     243    private void resetButton_Click(object sender, EventArgs e) {  }
     244
     245    private void nameTextBox_Validated(object sender, EventArgs e) {
     246      if (Content.Name != nameTextBox.Text)
     247        Content.Name = nameTextBox.Text;
    213248    }
    214249
    215250    private void resourceNamesTextBox_Validated(object sender, EventArgs e) {
    216       Content.ResourceNames = resourceNamesTextBox.Text;
     251      if (Content.ResourceNames != resourceNamesTextBox.Text)
     252        Content.ResourceNames = resourceNamesTextBox.Text;
    217253    }
    218254
     
    238274    }
    239275
    240     private void disconnectButton_Click(object sender, EventArgs e) {
     276    private void viewExperimentButton_Click(object sender, EventArgs e) {
     277      MainFormManager.MainForm.ShowContent(Content.GetExperiment());
     278    }
     279
     280    private void includeJobsCheckBox_CheckedChanged(object sender, EventArgs e) {
     281      //if (Content != null) Content.IncludeJobs = includeJobsCheckBox.Checked;
     282    }
     283
     284    private void refreshAutomaticallyCheckBox_CheckedChanged(object sender, EventArgs e) {
    241285      if (Content != null) {
    242         Content.StopResultPolling();
    243         SetEnabledStateOfControls();
    244       }
    245     }
    246 
    247     private void reconnectButton_Click(object sender, EventArgs e) {
    248       if (Content != null) {
    249         Content.StartResultPolling();
    250         SetEnabledStateOfControls();
     286        Content.RefreshAutomatically = refreshAutomaticallyCheckBox.Checked;
    251287      }
    252288    }
    253289
    254290    private void useLocalPluginsCheckBox_CheckedChanged(object sender, EventArgs e) {
    255       if (Content != null) {
    256         Content.UseLocalPlugins = useLocalPluginsCheckBox.Checked;
    257       }
    258     }
    259     #endregion
    260 
    261     #region Helpers
    262     private void SetEnabledStateOfExecutableButtons() {
    263       if (Content == null) {
    264         startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = reconnectButton.Enabled = disconnectButton.Enabled = false;
    265       } else {
    266         startButton.Enabled = Content.GetExperiment() != null && Content.ExecutionState == ExecutionState.Prepared;
    267         pauseButton.Enabled = false;
    268         stopButton.Enabled = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
    269         resetButton.Enabled = false;
    270         reconnectButton.Enabled = (Content.ExecutionState == ExecutionState.Started) && !Content.IsPollingResults;
    271         disconnectButton.Enabled = (Content.ExecutionState == ExecutionState.Started) && Content.IsPollingResults;
    272       }
    273     }
    274     #endregion
    275 
    276     private void downloadExperimentButton_Click(object sender, EventArgs e) {
    277       var invoker = new MethodInvoker(Content.LoadHiveJob);
    278       invoker.BeginInvoke((ar) => {
     291      if (Content != null) Content.UseLocalPlugins = useLocalPluginsCheckBox.Checked;
     292    }
     293
     294    private void refreshButton_Click(object sender, EventArgs e) {
     295      var invoker = new Action<HiveExperiment>(ExperimentManagerClient.LoadExperiment);
     296      invoker.BeginInvoke(Content, (ar) => {
    279297        try {
    280298          invoker.EndInvoke(ar);
     
    285303      }, null);
    286304    }
    287 
     305    #endregion
     306
     307    #region Helpers
     308    private void SetEnabledStateOfExecutableButtons() {
     309      if (Content == null) {
     310        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
     311      } else {
     312        startButton.Enabled = Content.GetExperiment() != null && Content.ExecutionState == ExecutionState.Prepared;
     313        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
     314        stopButton.Enabled = Content.ExecutionState == ExecutionState.Started;
     315        resetButton.Enabled = false;
     316      }
     317    }
     318    #endregion
     319
     320    #region Progress reporting
    288321    private void Content_IsProgressingChanged(object sender, EventArgs e) {
    289322      if (this.InvokeRequired) {
     
    312345      }
    313346    }
     347    #endregion
     348 
    314349  }
    315350}
Note: See TracChangeset for help on using the changeset viewer.