source: branches/UnloadJobs/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs @ 9173

Last change on this file since 9173 was 9173, checked in by ascheibe, 9 years ago

#2005

  • fixed naming of event handlers that were forgotten when the naming from experiment to job was changed
  • fixed some more memory leaks
File size: 5.7 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Linq;
24using System.ServiceModel.Security;
25using System.Windows.Forms;
26using HeuristicLab.Clients.Hive.Views;
27using HeuristicLab.Collections;
28using HeuristicLab.MainForm;
29using HeuristicLab.MainForm.WindowsForms;
30using HeuristicLab.PluginInfrastructure;
31
32namespace HeuristicLab.Clients.Hive.JobManager.Views {
33  /// <summary>
34  /// The base class for visual representations of items.
35  /// </summary>
36  [View("Hive Job Manager")]
37  [Content(typeof(HiveClient), true)]
38  public partial class HiveJobManagerView : AsynchronousContentView {
39
40    public new HiveClient Content {
41      get { return (HiveClient)base.Content; }
42      set { base.Content = value; }
43    }
44
45    /// <summary>
46    /// Initializes a new instance of <see cref="ItemBaseView"/>.
47    /// </summary>
48    public HiveJobManagerView() {
49      InitializeComponent();
50    }
51
52    protected override void RegisterContentEvents() {
53      base.RegisterContentEvents();
54      Content.Refreshing += new EventHandler(Content_Refreshing);
55      Content.Refreshed += new EventHandler(Content_Refreshed);
56      Content.HiveJobsChanged += new EventHandler(Content_HiveJobsChanged);
57    }
58
59    protected override void DeregisterContentEvents() {
60      Content.Refreshing -= new EventHandler(Content_Refreshing);
61      Content.Refreshed -= new EventHandler(Content_Refreshed);
62      Content.HiveJobsChanged -= new EventHandler(Content_HiveJobsChanged);
63      base.DeregisterContentEvents();
64    }
65
66    protected override void OnContentChanged() {
67      base.OnContentChanged();
68      if (Content == null) {
69        hiveExperimentListView.Content = null;
70      } else {
71        hiveExperimentListView.Content = Content.Jobs;
72        if (Content != null)
73          Content.RefreshAsync(new Action<Exception>((Exception ex) => HandleServiceException(ex)));
74      }
75    }
76
77    protected override void SetEnabledStateOfControls() {
78      base.SetEnabledStateOfControls();
79      refreshButton.Enabled = Content != null;
80      hiveExperimentListView.Enabled = Content != null;
81    }
82
83    private void Content_Refreshing(object sender, EventArgs e) {
84      if (InvokeRequired) {
85        Invoke(new EventHandler(Content_Refreshing), sender, e);
86      } else {
87        Cursor = Cursors.AppStarting;
88        refreshButton.Enabled = false;
89        hiveExperimentListView.Enabled = false;
90      }
91    }
92    private void Content_Refreshed(object sender, EventArgs e) {
93      if (InvokeRequired) {
94        Invoke(new EventHandler(Content_Refreshed), sender, e);
95      } else {
96        hiveExperimentListView.Content = Content.Jobs;
97        refreshButton.Enabled = true;
98        hiveExperimentListView.Enabled = true;
99        Cursor = Cursors.Default;
100      }
101    }
102
103    private void refreshButton_Click(object sender, EventArgs e) {
104      Content.RefreshAsync(new Action<Exception>((Exception ex) => HandleServiceException(ex)));
105    }
106
107    private void HandleServiceException(Exception ex) {
108      if (this.InvokeRequired) {
109        Invoke(new Action<Exception>(HandleServiceException), ex);
110      } else {
111        if (ex is MessageSecurityException) {
112          MessageBox.Show("A Message Security error has occured. This normally means that your user name or password is wrong.", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
113        } else if (ex is AnonymousUserException) {
114          using (HiveInformationDialog dialog = new HiveInformationDialog()) {
115            dialog.ShowDialog(this);
116          }
117        } else {
118          ErrorHandling.ShowErrorDialog(this, "Refresh failed.", ex);
119        }
120      }
121    }
122
123    protected override void OnClosing(FormClosingEventArgs e) {
124      if (Content.Jobs.Any(x => x.IsProgressing)) {
125        MessageBox.Show("The Hive Job Manager can only be closed after all down/uploads are finished. ", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Information);
126        e.Cancel = true;
127      } else {
128        base.OnClosing(e);
129        if (Content != null && Content.Jobs != null) {
130          Content.Jobs.ItemsRemoved -= new CollectionItemsChangedEventHandler<RefreshableJob>(HiveExperiments_ItemsRemoved);
131          Content.ClearHiveClient();
132          Content = null;
133        }
134      }
135    }
136
137    private void HiveExperiments_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<RefreshableJob> e) {
138      foreach (var item in e.Items) {
139        HiveClient.Delete(item);
140      }
141    }
142
143    private void Content_HiveJobsChanged(object sender, EventArgs e) {
144      if (Content.Jobs != null) {
145        Content.Jobs.ItemsRemoved -= new CollectionItemsChangedEventHandler<RefreshableJob>(HiveExperiments_ItemsRemoved);
146        Content.Jobs.ItemsRemoved += new CollectionItemsChangedEventHandler<RefreshableJob>(HiveExperiments_ItemsRemoved);
147      }
148    }
149  }
150}
Note: See TracBrowser for help on using the repository browser.