src/Forms/AzureMigrateExportMainForm.cs (749 lines of code) (raw):
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using Azure.Migrate.Export.Authentication;
using Azure.Migrate.Export.Common;
using Azure.Migrate.Export.Models;
namespace Azure.Migrate.Export.Forms
{
public partial class AzureMigrateExportMainForm : Form
{
private ProjectDetailsForm ProjectDetailsFormObj;
private ConfigurationForm ConfigurationFormObj;
private AssessmentSettingsForm AssessmentSettingsFormObj;
private TrackProgressForm TrackProgressFormObj;
private Button CurrentButtonTab = null;
private Form CurrentlyActiveForm = null;
private bool HasImportInventory = false;
private bool HasApplianceInventory = false;
public AzureMigrateExportMainForm()
{
InitializeComponent();
ProjectDetailsFormObj = new ProjectDetailsForm(this);
ConfigurationFormObj = new ConfigurationForm(this);
ConfigurationFormObj.SetDefaultConfigurationValues();
AssessmentSettingsFormObj = new AssessmentSettingsForm(this);
AssessmentSettingsFormObj.Initialize(ConfigurationFormObj.GetBusinessProposal());
TrackProgressFormObj = new TrackProgressForm(this);
// Display the first tab -> Project details
HandleTabChange(ProjectDetailsFormObj, ProjectDetailsTabButton);
// Show verison on UI
VersionLabel.Text = "v " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
}
#region Azure Authentication
public async void BeginAzureAuthentication()
{
if (ProjectDetailsFormObj == null)
{
MessageBox.Show("Azure authentication failed. Please close the application and re-login.");
CloseForm();
}
await ProjectDetailsFormObj.InitializeAuthentication();
}
#endregion
#region Action Button click
private void NextButton_Click(object sender, EventArgs e)
{
if (CurrentButtonTab == ProjectDetailsTabButton)
{
ConfigurationFormObj.SetDefaultConfigurationValues();
HandleTabChange(ConfigurationFormObj, ConfigurationTabButton);
}
else if (CurrentButtonTab == ConfigurationTabButton)
HandleTabChange(AssessmentSettingsFormObj, AssessmentSettingsTabButton);
}
private void BackButton_Click(object sender, EventArgs e)
{
if (CurrentButtonTab == ConfigurationTabButton)
HandleTabChange(ProjectDetailsFormObj, ProjectDetailsTabButton);
else if (CurrentButtonTab == AssessmentSettingsTabButton)
HandleTabChange(ConfigurationFormObj, ConfigurationTabButton);
}
private void SubmitButton_Click(object sender, EventArgs e)
{
// Retrieve project details
string tenantId = ProjectDetailsFormObj.GetTenantId();
KeyValuePair<string, string> subscription = ProjectDetailsFormObj.GetSelectedSubscription();
KeyValuePair<string, string> resourceGroup = ProjectDetailsFormObj.GetSelectedResourceGroupName();
KeyValuePair<string, string> azureMigrateProject = ProjectDetailsFormObj.GetSelectedAzureMigrateProject();
string discoverySiteName = ProjectDetailsFormObj.GetDiscoverySiteName();
string assessmentProjectName = ProjectDetailsFormObj.GetAssessmentProjectName();
// Retrieve configuration
List<string> azureMigrateSourceAppliances = ConfigurationFormObj.GetAzureMigrateSourceAppliances();
bool isExpressWorkflow = ConfigurationFormObj.IsExpressWorkflowSelected();
string businessProposal = ConfigurationFormObj.GetBusinessProposal();
string module = ConfigurationFormObj.GetModule();
// Retrieve assessment settings
KeyValuePair<string, string> targetRegion = AssessmentSettingsFormObj.GetTargetRegion();
KeyValuePair<string, string> currency = AssessmentSettingsFormObj.GetCurrency();
KeyValuePair<string, string> assessmentDuration = AssessmentSettingsFormObj.GetAssessmentDuration();
KeyValuePair<string, string> optimizationPreference = AssessmentSettingsFormObj.GetSelectedOptimizationPreference();
bool assessSqlServicesSeparately = AssessmentSettingsFormObj.IsAssessSqlServicesSeparatelyChecked();
UserInput userInputObj = new UserInput(
tenantId,
subscription,
resourceGroup,
azureMigrateProject,
discoverySiteName,
assessmentProjectName,
azureMigrateSourceAppliances,
isExpressWorkflow,
businessProposal,
module,
targetRegion,
currency,
assessmentDuration,
optimizationPreference,
assessSqlServicesSeparately
);
HandleTabChange(TrackProgressFormObj, TrackProgressTabButton);
TrackProgressFormObj.BeginProcess(userInputObj);
}
private void StopButton_Click(object sender, EventArgs e)
{
if (TrackProgressFormObj.IsProcessCancellationRequested())
{
MessageBox.Show("Process cancellation request has been received.\nPlease wait until we terminate all processes.", "Azure Migrate Export");
return;
}
DialogResult messageBoxResult = MessageBox.Show("Process has not finished, are you sure you want to stop? Please be patient as the process will stop at the next stable state once you select 'Yes'.", "Azure Migrate Export", MessageBoxButtons.YesNo);
if (messageBoxResult != DialogResult.Yes)
return;
TrackProgressFormObj.CancelProcess();
}
private void RetryButton_Click(object sender, EventArgs e)
{
HandleTabChange(ProjectDetailsFormObj, ProjectDetailsTabButton);
}
private void AssessButton_Click(object sender, EventArgs e)
{
ConfigurationFormObj.SetModule("Assessment");
ConfigurationFormObj.EnableBusinessProposal();
List<string> applianceList = ConfigurationFormObj.GetAzureMigrateSourceAppliances();
if (applianceList.Contains("import"))
{
ConfigurationFormObj.CheckOnlyQuickAvsProposal();
}
HandleTabChange(ConfigurationFormObj, ConfigurationTabButton);
}
#endregion
#region Tab Button Click
private void ProjectDetailsTabButton_Click(object sender, EventArgs e)
{
HandleTabChange(ProjectDetailsFormObj, ProjectDetailsTabButton);
}
private void ConfigurationTabButton_Click(object sender, EventArgs e)
{
HandleTabChange(ConfigurationFormObj, ConfigurationTabButton);
}
private void AssessmentSettingsTabButton_Click(object sender, EventArgs e)
{
HandleTabChange(AssessmentSettingsFormObj, AssessmentSettingsTabButton);
}
private void TrackProgressTabButton_Click(object sender, EventArgs e)
{
HandleTabChange(TrackProgressFormObj, TrackProgressTabButton);
}
#endregion
#region Tab Change Handler
private void HandleTabChange(Form formObjToActivate, Button nextButtonTab)
{
if (CurrentButtonTab != null)
CurrentButtonTab.BackColor = Color.FromArgb(255, 255, 255);
DecideVisibleActionButtons(nextButtonTab);
DecideEnabledActionButtons(nextButtonTab);
DecideVisibleTabButtons();
DecideEnabledTabButtons(nextButtonTab);
if (nextButtonTab != null)
{
nextButtonTab.BackColor = Color.FromArgb(120, 190, 255);
CurrentButtonTab = nextButtonTab;
}
if (nextButtonTab == AssessmentSettingsTabButton)
{
AssessmentSettingsFormObj.Initialize(ConfigurationFormObj.GetBusinessProposal());
}
OpenChildForm(formObjToActivate);
}
private void OpenChildForm(Form formObjToActivate)
{
if (formObjToActivate == null)
{
MessageBox.Show("Failed to load the form. Please re-login");
this.Close();
}
CurrentlyActiveForm = formObjToActivate;
formObjToActivate.TopLevel = false;
formObjToActivate.FormBorderStyle = FormBorderStyle.None;
formObjToActivate.Dock = DockStyle.Fill;
FillDockChildFormPanel.Controls.Add(formObjToActivate);
FillDockChildFormPanel.Tag = formObjToActivate;
formObjToActivate.BringToFront();
formObjToActivate.Show();
}
#endregion
#region Action Button Handler
private void DecideVisibleActionButtons(Button nextButtonTab)
{
if (nextButtonTab == ProjectDetailsTabButton)
{
HideBackButton();
ShowNextButton();
HideStopButton();
HideAssessButton();
HideSubmitButton();
HideRetryButton();
}
else if (nextButtonTab == ConfigurationTabButton)
{
ShowBackButton();
HideStopButton();
HideAssessButton();
if (ConfigurationFormObj.DisplaySubmitButton())
{
ShowSubmitButton();
HideNextButton();
}
else
{
ShowNextButton();
HideSubmitButton();
}
HideRetryButton();
}
else if (nextButtonTab == AssessmentSettingsTabButton)
{
ShowBackButton();
HideRetryButton();
HideAssessButton();
ShowSubmitButton();
HideStopButton();
HideNextButton();
}
else if (nextButtonTab == TrackProgressTabButton)
{
HideRetryButton();
HideBackButton();
HideAssessButton();
ShowStopButton();
HideNextButton();
HideSubmitButton();
}
}
private void DecideEnabledActionButtons(Button nextButtonTab)
{
if (nextButtonTab == ProjectDetailsTabButton)
{
MakeProjectDetailsActionButtonEnableDecision();
}
else if (nextButtonTab == ConfigurationTabButton)
{
MakeConfigurationActionButtonsEnabledDecision();
}
else if (nextButtonTab == AssessmentSettingsTabButton)
{
MakeAssessmentSettingsActionButtonsEnabledDecision();
}
else if (nextButtonTab == TrackProgressTabButton)
{
MakeTrackProgressActionButtonsEnabledDecisions();
}
}
#endregion
#region Tab Button Handler
public void DecideVisibleTabButtons()
{
ShowProjectDetailsTabButton();
ShowConfigurationTabButton();
if (ConfigurationFormObj.DisplaySubmitButton())
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
ShowTrackProgressTabButton();
}
private void DecideEnabledTabButtons(Button nextButtonTab)
{
if (nextButtonTab == ProjectDetailsTabButton)
{
MakeProjectDetailsTabButtonEnableDecision();
/*
bool displaySubmitButton = ConfigurationFormObj.DisplaySubmitButton();
if (ProjectDetailsFormObj == null || !ProjectDetailsFormObj.ValidateProjectDetails())
{
DisableConfigurationTabButton();
if (displaySubmitButton)
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
DisableAssessmentSettingsTabButton();
DisableTrackProgressTabButton();
return;
}
EnableConfigurationTabButton();
if (ConfigurationFormObj == null || !ConfigurationFormObj.ValidateConfiguration())
{
if (displaySubmitButton)
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
DisableAssessmentSettingsTabButton();
DisableTrackProgressTabButton();
return;
}
if (displaySubmitButton)
{
HideAssessmentSettingsTabButton();
EnableTrackProgressTabButton();
return;
}
ShowAssessmentSettingsTabButton();
EnableAssessmentSettingsTabButton();
if (AssessmentSettingsFormObj == null || !AssessmentSettingsFormObj.ValidateAssessmentSettings())
{
DisableTrackProgressTabButton();
return;
}
EnableTrackProgressTabButton();
*/
}
else if (nextButtonTab == ConfigurationTabButton)
{
MakeConfigurationTabButtonEnableDecisions();
/*
bool displaySubmitButton = ConfigurationFormObj.DisplaySubmitButton();
if (ConfigurationFormObj == null || !ConfigurationFormObj.ValidateConfiguration())
{
if (displaySubmitButton)
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
DisableAssessmentSettingsTabButton();
DisableTrackProgressTabButton();
return;
}
if (displaySubmitButton)
{
HideAssessmentSettingsTabButton();
EnableTrackProgressTabButton();
return;
}
ShowAssessmentSettingsTabButton();
EnableAssessmentSettingsTabButton();
if (AssessmentSettingsFormObj == null || !AssessmentSettingsFormObj.ValidateAssessmentSettings())
{
DisableTrackProgressTabButton();
return;
}
EnableTrackProgressTabButton();
*/
}
else if (nextButtonTab == AssessmentSettingsTabButton)
{
MakeAssessmentSettingsTabButtonEnableDecisions();
}
else if (nextButtonTab == TrackProgressTabButton)
{
MakeTrackProgressTabButtonEnableDecisions();
}
}
#endregion
#region Form Closing
public void CloseForm()
{
this.Close();
}
private void BottomDockCloseButton_Click(object sender, EventArgs e)
{
this.CloseForm();
}
private async void AzureMigrateExportMainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (TrackProgressFormObj.IsBackGroundWorkerRunning())
{
DialogResult messageBoxResult = MessageBox.Show("Process has not finished, are you sure you want to close application?", "Azure Migrate Export", MessageBoxButtons.YesNo);
if (messageBoxResult != DialogResult.Yes)
{
e.Cancel = true;
return;
}
TrackProgressFormObj.CancelProcess();
}
try
{
await AzureAuthenticationHandler.Logout();
}
catch (Exception exLogout)
{
MessageBox.Show($"Failed to logout. Please delete the cached token file. Error: {exLogout.Message}");
}
}
#endregion
#region Enable/Disable/Hide/Show Action Buttons
public void EnableNextButton()
{
NextButton.EnableActionButton();
}
public void DisableNextButton()
{
NextButton.DisableActionButton();
}
public void EnableSubmitButton()
{
SubmitButton.EnableActionButton();
}
public void DisableSubmitButton()
{
SubmitButton.DisableActionButton();
}
public void EnableBackButton()
{
BackButton.EnableActionButton();
}
public void DisableBackButton()
{
BackButton.DisableActionButton();
}
public void EnableStopButton()
{
StopButton.EnableActionButton();
}
public void DisableStopButton()
{
StopButton.DisableActionButton();
}
public void EnableRetryButton()
{
RetryButton.EnableActionButton();
}
public void DisableRetryButton()
{
RetryButton.DisableActionButton();
}
public void EnableAssessButton()
{
AssessButton.EnableActionButton();
}
public void DisableAssessButton()
{
AssessButton.DisableActionButton();
}
public void HideAssessButton()
{
AssessButton.Visible = false;
}
public void ShowAssessButton()
{
AssessButton.Visible = true;
}
public void HideNextButton()
{
NextButton.Visible = false;
}
public void ShowNextButton()
{
NextButton.Visible = true;
}
public void HideSubmitButton()
{
SubmitButton.Visible = false;
}
public void ShowSubmitButton()
{
SubmitButton.Visible = true;
}
public void ShowBackButton()
{
BackButton.Visible = true;
}
public void HideBackButton()
{
BackButton.Visible = false;
}
public void ShowRetryButton()
{
RetryButton.Visible = true;
}
public void HideRetryButton()
{
RetryButton.Visible = false;
}
public void ShowStopButton()
{
StopButton.Visible = true;
}
public void HideStopButton()
{
StopButton.Visible = false;
}
#endregion
#region Enable/Disable/Hide/Show Tab Buttons
public void EnableProjectDetailsTabButton()
{
ProjectDetailsTabButton.EnableTabButton();
}
public void DisableProjectDetailsTabButton()
{
ProjectDetailsTabButton.DisableTabButton();
}
public void EnableConfigurationTabButton()
{
ConfigurationTabButton.EnableTabButton();
}
public void DisableConfigurationTabButton()
{
ConfigurationTabButton.DisableTabButton();
}
public void EnableAssessmentSettingsTabButton()
{
AssessmentSettingsTabButton.EnableTabButton();
}
public void DisableAssessmentSettingsTabButton()
{
AssessmentSettingsTabButton.DisableTabButton();
}
public void EnableTrackProgressTabButton()
{
TrackProgressTabButton.EnableTabButton();
}
public void DisableTrackProgressTabButton()
{
TrackProgressTabButton.DisableTabButton();
}
public void ShowProjectDetailsTabButton()
{
ProjectDetailsTabButton.Visible = true;
}
public void HideProjectDetailsTabButton()
{
ProjectDetailsTabButton.Visible = false;
}
public void ShowConfigurationTabButton()
{
ConfigurationTabButton.Visible = true;
}
public void HideConfigurationTabButton()
{
ConfigurationTabButton.Visible = false;
}
public void ShowAssessmentSettingsTabButton()
{
AssessmentSettingsTabButton.Visible = true;
}
public void HideAssessmentSettingsTabButton()
{
AssessmentSettingsTabButton.Visible = false;
}
public void ShowTrackProgressTabButton()
{
TrackProgressTabButton.Visible = true;
}
public void HideTrackProgressTabButton()
{
TrackProgressTabButton.Visible = false;
}
#endregion
#region Tab specific action button Enable/Disable/Hide/Show decision makers
public void MakeProjectDetailsActionButtonEnableDecision()
{
HideBackButton();
HideRetryButton();
HideAssessButton();
if (ProjectDetailsFormObj.ValidateProjectDetails())
{
ShowNextButton();
EnableNextButton();
HideSubmitButton();
HideStopButton();
}
else
{
ShowNextButton();
DisableNextButton();
HideSubmitButton();
HideStopButton();
}
}
public void MakeConfigurationActionButtonsEnabledDecision()
{
ShowBackButton();
EnableBackButton();
HideRetryButton();
HideAssessButton();
if (ConfigurationFormObj.ValidateConfiguration())
{
if (ConfigurationFormObj.DisplaySubmitButton())
{
ShowSubmitButton();
if (!TrackProgressFormObj.IsBackGroundWorkerRunning())
EnableSubmitButton();
else
DisableSubmitButton();
HideNextButton();
HideStopButton();
}
else
{
ShowNextButton();
EnableNextButton();
HideStopButton();
HideSubmitButton();
}
}
else
{
if (ConfigurationFormObj.DisplaySubmitButton())
{
ShowSubmitButton();
DisableSubmitButton();
HideStopButton();
HideNextButton();
}
else
{
ShowNextButton();
DisableNextButton();
HideStopButton();
HideSubmitButton();
}
}
}
public void MakeAssessmentSettingsActionButtonsEnabledDecision()
{
ShowBackButton();
EnableBackButton();
HideRetryButton();
HideAssessButton();
ShowSubmitButton();
HideNextButton();
HideStopButton();
if (AssessmentSettingsFormObj.ValidateAssessmentSettings() && !TrackProgressFormObj.IsBackGroundWorkerRunning())
EnableSubmitButton();
else
DisableSubmitButton();
}
public void MakeTrackProgressActionButtonsEnabledDecisions(bool showAndEnableAssessButton = false, bool showAndEnableRetryButton = false)
{
HideStopButton();
HideNextButton();
HideSubmitButton();
HideRetryButton();
HideBackButton();
HideAssessButton();
if (TrackProgressFormObj.DisplayActionButtonDecision() == 1)
{
ShowAssessButton();
EnableAssessButton();
DisableRetryButton();
HideRetryButton();
}
else if (TrackProgressFormObj.DisplayActionButtonDecision() == 2)
{
ShowRetryButton();
EnableRetryButton();
DisableAssessButton();
HideAssessButton();
}
else if (TrackProgressFormObj.DisplayActionButtonDecision() == 3)
{
DisableRetryButton();
HideRetryButton();
DisableAssessButton();
HideAssessButton();
}
if (TrackProgressFormObj.IsBackGroundWorkerRunning())
{
ShowStopButton();
EnableStopButton();
}
else
{
DisableStopButton();
HideStopButton();
}
if (showAndEnableAssessButton)
{
ShowAssessButton();
EnableAssessButton();
}
else if (showAndEnableRetryButton)
{
ShowRetryButton();
EnableRetryButton();
}
}
#endregion
#region Tab specific tab button Enable/Disable/Hide/Show decision makers
public void MakeProjectDetailsTabButtonEnableDecision()
{
bool displaySubmitButton = ConfigurationFormObj.DisplaySubmitButton();
if (ProjectDetailsFormObj == null || !ProjectDetailsFormObj.ValidateProjectDetails())
{
DisableConfigurationTabButton();
if (displaySubmitButton)
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
DisableAssessmentSettingsTabButton();
DisableTrackProgressTabButton();
return;
}
EnableConfigurationTabButton();
if (ConfigurationFormObj == null || !ConfigurationFormObj.ValidateConfiguration())
{
if (displaySubmitButton)
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
DisableAssessmentSettingsTabButton();
DisableTrackProgressTabButton();
return;
}
if (displaySubmitButton)
{
HideAssessmentSettingsTabButton();
EnableTrackProgressTabButton();
return;
}
ShowAssessmentSettingsTabButton();
EnableAssessmentSettingsTabButton();
if(AssessmentSettingsFormObj == null || !AssessmentSettingsFormObj.ValidateAssessmentSettings())
{
DisableTrackProgressTabButton();
return;
}
EnableTrackProgressTabButton();
}
public void MakeConfigurationTabButtonEnableDecisions()
{
bool displaySubmitButton = ConfigurationFormObj.DisplaySubmitButton();
if (ConfigurationFormObj == null || !ConfigurationFormObj.ValidateConfiguration())
{
if (displaySubmitButton)
HideAssessmentSettingsTabButton();
else
ShowAssessmentSettingsTabButton();
DisableAssessmentSettingsTabButton();
DisableTrackProgressTabButton();
return;
}
if (displaySubmitButton)
{
HideAssessmentSettingsTabButton();
EnableTrackProgressTabButton();
return;
}
ShowAssessmentSettingsTabButton();
EnableAssessmentSettingsTabButton();
if (AssessmentSettingsFormObj == null || !AssessmentSettingsFormObj.ValidateAssessmentSettings())
{
DisableTrackProgressTabButton();
return;
}
EnableTrackProgressTabButton();
}
public void MakeAssessmentSettingsTabButtonEnableDecisions()
{
if (AssessmentSettingsFormObj == null || !AssessmentSettingsFormObj.ValidateAssessmentSettings())
{
DisableTrackProgressTabButton();
return;
}
EnableTrackProgressTabButton();
}
public void MakeTrackProgressTabButtonEnableDecisions()
{
// Previous state must be retained, enabled tab buttons do not change.
}
#endregion
#region Utilities
public bool IsAvsBusinessProposalSelected()
{
return (ConfigurationFormObj.GetBusinessProposal() == BusinessProposal.AVS.ToString());
}
public bool IsImportAndComprehensiveProposalSelected()
{
return ((ConfigurationFormObj.GetBusinessProposal() == BusinessProposal.Comprehensive.ToString()) &&
(ConfigurationFormObj.IsImportRadioButtonChecked()));
}
public void DisableOptimizationPreferenceComboBox()
{
if (AssessmentSettingsFormObj == null)
return;
AssessmentSettingsFormObj.InitializeCurrencyComboBox();
AssessmentSettingsFormObj.InitializeTargetRegionComboBox();
AssessmentSettingsFormObj.DisableOptimizationPreferenceComboBox();
}
public void EnableOptimizationPreferenceComboBox()
{
if (AssessmentSettingsFormObj == null)
return;
AssessmentSettingsFormObj.InitializeCurrencyComboBox();
AssessmentSettingsFormObj.InitializeTargetRegionComboBox();
AssessmentSettingsFormObj.EnableOptimizationPreferenceComboBox();
}
public void DisableAssessmentDurationComboBox()
{
if (AssessmentSettingsFormObj == null)
return;
AssessmentSettingsFormObj.InitializeCurrencyComboBox();
AssessmentSettingsFormObj.InitializeTargetRegionComboBox();
AssessmentSettingsFormObj.DisableAssessmentDurationComboBox();
}
public void EnableAssessmentDurationComboBox()
{
if (AssessmentSettingsFormObj == null)
return;
AssessmentSettingsFormObj.InitializeCurrencyComboBox();
AssessmentSettingsFormObj.InitializeTargetRegionComboBox();
AssessmentSettingsFormObj.EnableAssessmentDurationComboBox();
}
public void SetHasImportInventory(bool hasImportInventory)
{
HasImportInventory = hasImportInventory;
}
public void SetHasApplianceInventory(bool hasApplianceInventory)
{
HasApplianceInventory = hasApplianceInventory;
}
public bool GetHasImportInventory()
{
return HasImportInventory;
}
public bool GetHasApplianceInventory()
{
return HasApplianceInventory;
}
#endregion
}
}