source: trunk/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs @ 16024

Last change on this file since 16024 was 16024, checked in by fholzing, 14 months ago

#2930: Made the permissions-check async and restructured the logic for short-circuit evaluation.

File size: 2.9 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2018 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.Collections.Generic;
24using System.Threading.Tasks;
25using HeuristicLab.Core;
26using HeuristicLab.MainForm;
27using HeuristicLab.Optimization;
28using HeuristicLab.Optimizer;
29
30namespace HeuristicLab.Clients.OKB.RunCreation {
31  internal class CreateFromExperimentMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
32    public override string Name {
33      get { return "&Upload Runs from Experiment"; }
34    }
35    public override IEnumerable<string> Structure {
36      get { return new string[] { "&Services", "&OKB" }; }
37    }
38    public override int Position {
39      get { return 4220; }
40    }
41
42    protected override void OnActiveViewChanged(object sender, EventArgs e) {
43      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
44
45      //The ToolStripItem is Disabled by default.
46      //If any of the following conditions apply, a Check for the user privilege can be omitted.
47      ToolStripItem.Enabled = false;
48      if (activeView == null) { return; }
49      if (activeView.Content == null) { return; }
50      if (!((activeView.Content is Experiment)
51        || (activeView.Content is RunCollection)
52        || (activeView.Content is IOptimizer))) { return; }
53      if (activeView.Locked) { return; }
54
55      //Check if the user has the required OKB permissions.
56      //In case of an server outage, a timeout may occur and the call takes a long time.
57      //To prevent a possible UI-freeze, the permission-check is implemented as async.
58      CheckPrivilege();
59    }
60
61    private async void CheckPrivilege() {
62      await Task.Run(() => {
63        IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
64        ToolStripItem.Enabled = true;//OKBRoles.CheckUserPermissions();
65      });
66    }
67
68    public override void Execute() {
69      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
70      var view = new OKBExperimentUploadView();
71      view.AddRuns((IItem)activeView.Content);
72      view.Show();
73    }
74  }
75}
Note: See TracBrowser for help on using the repository browser.