private void UpdateExistingServerInstallationInstance()

in Configurator/UI/Wizards/ServerConfigPages/ServerConfigServerInstallationsPage.cs [373:517]


    private void UpdateExistingServerInstallationInstance()
    {
      if (_existingServerInstallationInstance == null)
      {
        throw new ArgumentNullException(nameof(_existingServerInstallationInstance));
      }

      if (_existingServerInstallationInstance.Controller == null)
      {
        throw new ArgumentNullException(nameof(_existingServerInstallationInstance.Controller));
      }

      // Determine if the upgrade is supported.
      VersionTextBox.Text = _existingServerInstallationInstance.ServerVersion?.ToString();
      string versionErrorMessage = null;
      var newVersion = _controller.ServerInstallation.Version;
      var oldVersion = _existingServerInstallationInstance.ServerVersion;
      var upgradeViability = newVersion.ServerSupportsInPlaceUpgrades(oldVersion);
      switch (upgradeViability)
      {
        case UpgradeViability.UnsupportedWithWarning:
          versionErrorMessage = string.Format(Resources.UpgradeNotSupportedWithWarningError, oldVersion, newVersion);
          break;
        case UpgradeViability.Unsupported:
          if (oldVersion.Major < 8)
          {
            versionErrorMessage = Resources.UpgradeOldServerNotSupportedError;
          }
          else if (oldVersion == newVersion)
          {
            versionErrorMessage = Resources.SameVersionError;
          }
          else
          {
            versionErrorMessage = string.Format(Resources.UpgradeNotSupportedError, oldVersion, newVersion);
          }

          break;
      }

      var errorInVersionTextbox = _existingServerInstallationInstance.ServerVersion == null;
      ValidationsErrorProvider.SetProperties(VersionTextBox, new ErrorProviderProperties(errorInVersionTextbox 
          ? Resources.ServerInstanceGetServerVersionError 
          : string.Empty));
      if (!errorInVersionTextbox
          && !string.IsNullOrEmpty(versionErrorMessage))
      {
        if (upgradeViability != UpgradeViability.Unsupported
            && !versionErrorMessage.Equals(Resources.UpgradeHigherVersionError, StringComparison.InvariantCultureIgnoreCase)
            && !versionErrorMessage.Equals(Resources.SameVersionError, StringComparison.InvariantCultureIgnoreCase))
        {
          VersionWarningProvider.SetProperties(VersionTextBox, new ErrorProviderProperties(versionErrorMessage, Resources.warning_sign_icon));
          VersionErrorProvider.Clear();
        }
        else
        {
          VersionErrorProvider.SetProperties(VersionTextBox, new ErrorProviderProperties(versionErrorMessage, Resources.Config_ErrorIcon));
          VersionWarningProvider.Clear();
        }
      }
      else
      {
        VersionErrorProvider.Clear();
        VersionWarningProvider.Clear();
      }

      // Populate server details.
      InstallDirectoryTextBox.Text = _existingServerInstallationInstance.BaseDir;
      ExistingDataDirectoryTextBox.Text = _existingServerInstallationInstance.DataDir;
      DataDirectoryRenameWarningProvider.SetProperties(ExistingDataDirectoryTextBox, new ErrorProviderProperties(_existingServerInstallationInstance.IsDataDirNameDefault(_controller.ServerVersion)
        ? string.Format(Resources.ExistingDataDirectoryIsDefaultAndWillBeRenamed, $"MySQL Server {_controller.ServerVersion.ToString(2)}") 
        : string.Empty, Resources.warning_sign_icon));
      ValidationsErrorProvider.SetProperties(ExistingDataDirectoryTextBox, new ErrorProviderProperties(string.IsNullOrEmpty(_existingServerInstallationInstance.DataDir)
        ? Resources.ServerInstanceFailedToRetrieveDataDir :
        string.Empty));

      var configFileIsValid = false;
      if (!string.IsNullOrEmpty(_existingServerInstallationInstance.DataDir))
      {
        string dataDirectory = null;
        if (!Directory.Exists(_existingServerInstallationInstance.DataDir))
        {
          return;
        }

        dataDirectory = new DirectoryInfo(_existingServerInstallationInstance.DataDir).Parent.FullName;
        var defaultConfigFile = Path.Combine(dataDirectory, MySqlServerSettings.DEFAULT_CONFIG_FILE_NAME);
        var alternateConfigFile = Path.Combine(dataDirectory, MySqlServerSettings.ALTERNATE_CONFIG_FILE_NAME);

        var configFile = File.Exists(defaultConfigFile)
          ? defaultConfigFile
          : File.Exists(alternateConfigFile)
            ? alternateConfigFile
            : null;
        configFileIsValid = configFile != null
          ? ValidateExistingServerInstallationInstanceConfigurationFile(configFile)
          : false;
        if (!configFileIsValid)
        {
          ValidationsErrorProvider.SetProperties(ExistingConfigFileBrowseButton, new ErrorProviderProperties(Resources.ServerConfigConfigurationFileNotValid));
        }

        ExistingConfigFilePathTextBox.Text = configFile;
      }
      else
      {
        ExistingConfigFilePathTextBox.Text = string.Empty;
      }

      // Get authentication plugin.
      _controller.RootUserAuthenticationPlugin = _existingServerInstallationInstance.GetUserAuthenticationPlugin(MySqlServerUser.ROOT_USERNAME);
      if (_controller.RootUserAuthenticationPlugin == MySqlAuthenticationPluginType.MysqlNativePassword)
      {
        UserWarningProvider.SetProperties(RootPasswordTextBox, new ErrorProviderProperties(Resources.ServerConfigInvalidAuthenticationPlugin, Resources.warning_sign_icon));
      }

      // Set existing instance relevant properties for rollback.
      if (!errorInVersionTextbox)
      {
        _existingServerInstallationInstance.Controller.ServerVersion = _existingServerInstallationInstance.ServerVersion;
        _existingServerInstallationInstance.Controller.ServerInstallation.VersionString = _existingServerInstallationInstance.Controller.ServerVersion.ToString();
      }

      if (!string.IsNullOrEmpty(_existingServerInstallationInstance.BaseDir))
      {
        var serviceNames = MySqlServiceControlManager.FindServiceNamesWithBaseDirectory(_existingServerInstallationInstance.BaseDir);
        if (serviceNames.Length > 0)
        {
          _existingServerInstallationInstance.Controller.Settings.ServiceName = serviceNames[0];
          _existingServerInstallationInstance.Controller.Settings.ConfigureAsService = true;
        }

        if (!string.IsNullOrEmpty(ExistingConfigFilePathTextBox.Text)
            && configFileIsValid)
        {
          var iniFile = new IniFileEngine(ExistingConfigFilePathTextBox.Text).Load();
          _existingServerInstallationInstance.Controller.Settings.DataDirectory = new DirectoryInfo(iniFile.FindValue("mysqld", "datadir", false)).Parent.FullName;
          _existingServerInstallationInstance.Controller.Settings.ErrorLogFileName = iniFile.FindValue("mysqld", "log-error", false);
        }
        else
        {
          ValidationsErrorProvider.SetProperties(ExistingConfigFileBrowseButton, new ErrorProviderProperties(Resources.ServerConfigConfigurationFileNotFound));
        }
      }
    }