Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.cs @ 7366

Last change on this file since 7366 was 7366, checked in by spimming, 13 years ago

#1680:

  • Constants for deployments added
  • worker for creating a deployment added
  • create hosted service
File size: 10.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Windows.Forms;
5using HeuristicLab.Clients.Hive.CloudManager.Model;
6using HeuristicLab.Core;
7
8namespace HeuristicLab.Clients.Hive.CloudManager.Views {
9  public partial class AddAzureServiceDialog : Form {
10    private BindingList<Subscription> subscriptions;
11    private BindingList<HostedService> hostedServices;
12    private BindingList<string> locations;
13    private BindingList<AffinityGroup> affinityGroups;
14
15    private BackgroundWorker workerUpdate;
16    private BackgroundWorker workerCreate;
17
18    private bool isInitializing;
19    private bool bwCompleted;
20    private bool closePending;
21
22    private string certificateFile;
23    private string certificatePassword;
24
25    public AddAzureServiceDialog(IItemList<Subscription> subs) {
26      InitializeComponent();
27      isInitializing = true;
28      bwCompleted = true;
29
30      this.subscriptions = new BindingList<Subscription>(subs);
31      this.hostedServices = new BindingList<HostedService>();
32      this.locations = new BindingList<string>();
33      this.affinityGroups = new BindingList<AffinityGroup>();
34
35      SetLookupBinding(cmbLocation, locations, "", "");
36      SetLookupBinding(cmbAffinityGroup, affinityGroups, "Label", "Name");
37      SetLookupBinding(cmbChooseHostedService, hostedServices, "ServiceName", "ServiceName");
38      SetLookupBinding(cmbChooseSubscription, subscriptions, "SubscriptionName", "SubscriptionID");
39
40      if (!cbNewHostedService.Checked) {
41        SetGroupBoxControlsEnabled(gbNewHostedService, cbNewHostedService.Checked);
42      }
43
44      workerUpdate = new BackgroundWorker();
45      workerUpdate.DoWork += new DoWorkEventHandler(UpdateTask);
46      workerUpdate.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
47
48      workerCreate = new BackgroundWorker();
49      workerCreate.DoWork += new DoWorkEventHandler(CreateDoploymentTask);
50      workerCreate.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CreateDeploymentCompleted);
51
52      isInitializing = false;
53      cmbChooseSubscription_SelectedValueChanged(this, EventArgs.Empty);
54    }
55
56    protected override void OnFormClosing(FormClosingEventArgs e) {
57      if (!bwCompleted) {
58        SetAllControlsEnabled(this, false);
59        e.Cancel = true;
60        closePending = true;
61      }
62    }
63
64    private void SetLookupBinding(ListControl toBind, object dataSource, string displayMember, string valueMember) {
65      toBind.DisplayMember = displayMember;
66      toBind.ValueMember = valueMember;
67      toBind.DataSource = dataSource;
68    }
69
70    private void SetGroupBoxControlsEnabled(GroupBox gb, bool isEnabled) {
71      foreach (Control ctrl in gb.Controls) {
72        ctrl.Enabled = isEnabled;
73      }
74    }
75
76    private void SetAllControlsEnabled(Form frm, bool isEnabled) {
77      foreach (Control ctrl in frm.Controls) {
78        if (!(ctrl is ProgressBar)) {
79          ctrl.Enabled = isEnabled;
80        }
81      }
82    }
83
84    private void SetBindingList<T>(ref BindingList<T> bindinglist, List<T> list) {
85      if (list != null) {
86        BindingList<T> newList = new BindingList<T>(list);
87        bindinglist = newList;
88      }
89    }
90
91    private void UpdateBindingList<T>(BindingList<T> bindinglist, List<T> list) {
92      if (list != null) {
93        bindinglist.Clear();
94        foreach (T item in list)
95          bindinglist.Add(item);
96      }
97    }
98
99    private void UpdateSubscriptionItem(BindingList<Subscription> bindinglist, Subscription item) {
100      if (item != null) {
101        foreach (Subscription blItem in bindinglist)
102          if (blItem.Equals(item)) {
103            blItem.Merge(item);
104          }
105      }
106    }
107
108    private void cbNewHostedService_CheckedChanged(object sender, EventArgs e) {
109      if (cbNewHostedService.Checked) {
110        Subscription subscription = (Subscription)cmbChooseSubscription.SelectedItem;
111        if (subscription.CurrentHostedServices == subscription.MaxHostedServices) {
112          MessageBox.Show("You have already created the maximum number of hosted services", "Limit Reached", MessageBoxButtons.OK, MessageBoxIcon.Error);
113          cbNewHostedService.Checked = false;
114        } else {
115          SetGroupBoxControlsEnabled(gbNewHostedService, cbNewHostedService.Checked);
116          cmbChooseHostedService.Enabled = false;
117        }
118      } else {
119        // checked == false
120        SetGroupBoxControlsEnabled(gbNewHostedService, false);
121        if (hostedServices.Count == 0) {
122          cbNewHostedService.Checked = true;
123        }
124      }
125    }
126
127    private void cmbChooseSubscription_SelectedValueChanged(object sender, EventArgs e) {
128      if (!isInitializing) {
129        Subscription item = (Subscription)cmbChooseSubscription.SelectedItem;
130        if (item != null) {
131          bwCompleted = false;
132          progressBar.Visible = true;
133          SetAllControlsEnabled(this, false);
134          workerUpdate.RunWorkerAsync(item);
135        }
136      }
137    }
138
139    private void btnAddCertificate_Click(object sender, EventArgs e) {
140      using (var form = new AddCertificate()) {
141        form.ShowDialog();
142        if (!form.ErrorOccured) {
143          certificateFile = form.CertificateFile;
144          certificatePassword = form.CertificatePassword;
145          lblCertificateFile.Text = certificateFile;
146        }
147      }
148    }
149
150    private void btnCancel_Click(object sender, EventArgs e) {
151      this.Close();
152    }
153
154    private void btnOk_Click(object sender, EventArgs e) {
155      if (cmbChooseSubscription.SelectedItem != null) {
156        Subscription sub = (Subscription)cmbChooseSubscription.SelectedItem;
157        bool newHostedServiceChecked = cbNewHostedService.Checked;
158        bool regionChecked = rbRegion.Checked;
159        string certFile = certificateFile;
160        string certPw = certificatePassword;
161        int instanceCount = Convert.ToInt32(tbInstanceCount.Text);
162        HostedService hostedService = new HostedService();
163        hostedService.ServiceName = tbServiceName.Text;
164        HostedServiceProperties properties = new HostedServiceProperties();
165        if (regionChecked) {
166          properties.AffinityGroup = string.Empty;
167          properties.Location = (string)cmbLocation.SelectedItem;
168        } else {
169          properties.AffinityGroup = ((AffinityGroup)cmbAffinityGroup.SelectedItem).Name;
170          properties.Location = string.Empty;
171        }
172        properties.AffinityGroup = ((AffinityGroup)cmbAffinityGroup.SelectedItem).Name;
173        properties.Label = tbLabel.Text;
174        properties.Location = (string)cmbLocation.SelectedItem;
175        hostedService.HostedServiceProperties = properties;
176
177        var parameters = Tuple.Create<Subscription, bool, bool, string, string, HostedService, int>(sub, newHostedServiceChecked, regionChecked, certificateFile, certificatePassword, hostedService, instanceCount);
178
179        bwCompleted = false;
180        progressBar.Visible = true;
181        SetAllControlsEnabled(this, false);
182        workerCreate.RunWorkerAsync(parameters);
183      }
184    }
185
186    private void UpdateTask(object sender, DoWorkEventArgs e) {
187      try {
188        Subscription item = (Subscription)e.Argument;
189        item = CloudManagerClient.Instance.AzureProvider.GetSubscriptionInfo(item.SubscriptionID, item.CertificateThumbprint);
190        this.Invoke((MethodInvoker)delegate { lblCores.Text = item.CurrentCoreCount + " / " + item.MaxCoreCount; });
191
192        List<HostedService> services = CloudManagerClient.Instance.AzureProvider.ListHostedServices(item);
193        List<string> locs = CloudManagerClient.Instance.AzureProvider.ListLocations(item);
194        List<AffinityGroup> groups = CloudManagerClient.Instance.AzureProvider.ListAffinityGroups(item);
195
196        this.Invoke((MethodInvoker)delegate { UpdateSubscriptionItem(subscriptions, item); });
197        this.Invoke((MethodInvoker)delegate { UpdateBindingList<HostedService>(hostedServices, services); });
198        this.Invoke((MethodInvoker)delegate { UpdateBindingList<string>(locations, locs); });
199        this.Invoke((MethodInvoker)delegate { UpdateBindingList<AffinityGroup>(affinityGroups, groups); });
200      }
201      catch (Exception ex) {
202        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
203      }
204    }
205
206    private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
207      SetAllControlsEnabled(this, true);
208      progressBar.Visible = false;
209      bwCompleted = true;
210      if (closePending) {
211        this.Close();
212      }
213    }
214
215    private void CreateDoploymentTask(object sender, DoWorkEventArgs e) {
216      Tuple<Subscription, bool, bool, string, string, HostedService, int> parameters = (Tuple<Subscription, bool, bool, string, string, HostedService, int>)e.Argument;
217
218      Subscription sub = parameters.Item1;
219      bool newHostedServiceChecked = parameters.Item2;
220      bool regionChecked = parameters.Item3;
221      string certFile = parameters.Item4;
222      string certPw = parameters.Item5;
223      HostedService hostedService = parameters.Item6;
224      int instanceCount = parameters.Item7;
225
226      //STEP 1 - Create Hosted Service
227      if (newHostedServiceChecked) {
228        if (regionChecked) {
229          CloudManagerClient.Instance.AzureProvider.CreateHostedService(sub, hostedService.ServiceName, hostedService.HostedServiceProperties.Label, hostedService.HostedServiceProperties.Description, hostedService.HostedServiceProperties.Location);
230        } else {
231          CloudManagerClient.Instance.AzureProvider.CreateHostedService(sub, hostedService.ServiceName, hostedService.HostedServiceProperties.Label, hostedService.HostedServiceProperties.Description, new AffinityGroup() { Name = hostedService.HostedServiceProperties.AffinityGroup });
232        }
233      }
234
235    }
236
237    private void CreateDeploymentCompleted(object sender, RunWorkerCompletedEventArgs e) {
238      SetAllControlsEnabled(this, true);
239      progressBar.Visible = false;
240      bwCompleted = true;
241      if (closePending) {
242        this.Close();
243      }
244    }
245  }
246}
Note: See TracBrowser for help on using the repository browser.