using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Windows.Forms; using HeuristicLab.Clients.Hive.CloudManager.Model; using HeuristicLab.Core; namespace HeuristicLab.Clients.Hive.CloudManager.Views { public partial class AddAzureServiceDialog : Form { private BindingList subscriptions; private BindingList hostedServices; private BindingList locations; private BindingList affinityGroups; private BackgroundWorker worker = new BackgroundWorker(); public AddAzureServiceDialog(IItemList subs) { InitializeComponent(); this.subscriptions = new BindingList(subs); SetLookupBinding(cmbChooseSubscription, subscriptions, "SubscriptionName", "SubscriptionID"); SetLookupBinding(cmbChooseHostedService, hostedServices, "ServiceName", "ServiceName"); SetLookupBinding(cmbRegion, locations, "", ""); SetLookupBinding(cmbAffinityGroup, affinityGroups, "Label", "Name"); if (!cbNewHostedService.Checked) { SetGroupBoxControlsEnabled(gbNewHostedService, cbNewHostedService.Checked); } worker.DoWork += new DoWorkEventHandler(UpdateTask); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted); } private void SetLookupBinding(ListControl toBind, object dataSource, string displayMember, string valueMember) { toBind.DisplayMember = displayMember; toBind.ValueMember = valueMember; toBind.DataSource = dataSource; } private void SetGroupBoxControlsEnabled(GroupBox gb, bool isEnabled) { foreach (Control ctrl in gb.Controls) { ctrl.Enabled = isEnabled; } } private void SetAllControlsEnabled(Form frm, bool isEnabled) { foreach (Control ctrl in frm.Controls) { if (!(ctrl is ProgressBar)) { this.Invoke((MethodInvoker)delegate { ctrl.Enabled = isEnabled; }); } } } private void SetBindingList(ref BindingList bindinglist, List list) { if (list != null) { BindingList newList = new BindingList(list); bindinglist = newList; } } private void cbNewHostedService_CheckedChanged(object sender, EventArgs e) { if (cbNewHostedService.Checked) { Subscription subscription = (Subscription)cmbChooseSubscription.SelectedItem; if (subscription.CurrentHostedServices == subscription.MaxHostedServices) { MessageBox.Show("You have already created the maximum number of hosted services", "Limit Reached", MessageBoxButtons.OK, MessageBoxIcon.Error); cbNewHostedService.Checked = false; } else { SetGroupBoxControlsEnabled(gbNewHostedService, cbNewHostedService.Checked); cmbChooseHostedService.Enabled = false; } } else { // checked == false SetGroupBoxControlsEnabled(gbNewHostedService, false); if (hostedServices == null) { cbNewHostedService.Checked = true; } } } private void cmbChooseSubscription_SelectedValueChanged(object sender, EventArgs e) { Subscription item = (Subscription)cmbChooseSubscription.SelectedItem; if (item != null) { progressBar.Visible = true; worker.RunWorkerAsync(item); } } private void btnAddCertificate_Click(object sender, EventArgs e) { using (var form = new AddCertificate()) { form.ShowDialog(); Debug.WriteLine("End - AddCertificateDialog"); } } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } private void btnOk_Click(object sender, EventArgs e) { if (cmbChooseSubscription.SelectedItem != null) { // TODO } } private void UpdateTask(object sender, DoWorkEventArgs e) { try { SetAllControlsEnabled(this, false); Subscription item = (Subscription)e.Argument; item = CloudManagerClient.Instance.AzureProvider.GetSubscriptionInfo(item.SubscriptionID, item.CertificateThumbprint); this.Invoke((MethodInvoker)delegate { lblCores.Text = item.CurrentCoreCount + " / " + item.MaxCoreCount; }); SetBindingList(ref hostedServices, CloudManagerClient.Instance.AzureProvider.ListHostedServices(item)); SetBindingList(ref locations, CloudManagerClient.Instance.AzureProvider.ListLocations(item)); SetBindingList(ref affinityGroups, CloudManagerClient.Instance.AzureProvider.ListAffinityGroups(item)); SetAllControlsEnabled(this, true); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.Invoke((MethodInvoker)delegate { progressBar.Visible = false; }); } } }