Editor/Window/Containers/CreateECRRepoStep.cs (84 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using UnityEngine; using UnityEngine.UIElements; using System.Threading.Tasks; using System.Collections.Generic; using System.Linq; namespace AmazonGameLift.Editor { public class CreateECRRepoStep : ContainerStepComponent { private const string RepositoryName = "gamelift-unity-plugin"; private readonly CoreApi _coreApi; private string _errorMessage = null; private VisualElement _repoNameField; public CreateECRRepoStep(VisualElement container, StateManager stateManager) : base(container, stateManager, "EditorWindow/Components/Containers/CreateECRRepoStep") { _coreApi = CoreApi.SharedInstance; var elementLocalizer = new ElementLocalizer(_container); elementLocalizer.SetElementText("RepoNameValue", RepositoryName); container.Q<VisualElement>("ECRUserGuideLinkParent") .RegisterCallback<ClickEvent>(_ => Application.OpenURL(Urls.ECRUserGuide)); _repoNameField = container.Q<VisualElement>("RepoNameField"); Hide(container.Q<VisualElement>("ButtonsWhenFailed")); Hide(_repoNameField); container.Q<Button>("ProceedButton").RegisterCallback<ClickEvent>(_ => { base.CompleteStep(); }); container.Q<Button>("TryAgainButton").RegisterCallback<ClickEvent>(_ => { base.TryStart(); }); } protected sealed override Task StartOrResumeStep() { bool stopEarly = false; Show(_repoNameField); if (_errorMessage != null) { EncounteredException(_errorMessage); stopEarly = true; } if (_stateManager.IsECRRepoCreated && _stateManager.ContainerECRRepositoryUri != null) { SetRepoUriAndComplete(_stateManager.ContainerECRRepositoryUri); stopEarly = true; } if (stopEarly) { return Task.CompletedTask; } // First see if repository already exists var describeResponse = _coreApi.DescribeECRRepositories(_stateManager.ProfileName, _stateManager.Region, new List<string> { RepositoryName }); if (describeResponse.Success && describeResponse.ECRRepositories.Count() > 0) { SetRepoUriAndComplete(describeResponse.ECRRepositories.First().RepositoryUri); return Task.CompletedTask; } var response = _coreApi.CreateRepository(_stateManager.ProfileName, _stateManager.Region, RepositoryName); if (response.Success) { SetRepoUriAndComplete(response.RepositoryUri); } else { EncounteredException(response.ErrorMessage); } return Task.CompletedTask; } protected sealed override void ResetStep() { _stateManager.ContainerECRRepositoryUri = null; _stateManager.ContainerECRRepositoryName = null; _errorMessage = null; Hide(_container.Q<VisualElement>("ButtonsWhenFailed")); } private void SetRepoUriAndComplete(string ECRRepositoryUri) { _stateManager.ContainerECRRepositoryUri = ECRRepositoryUri; _stateManager.ContainerECRRepositoryName = RepositoryName; _stateManager.IsECRRepoCreated = true; Hide(_container.Q<VisualElement>("ButtonsWhenFailed")); base.CompleteStep(); } private void EncounteredException(string errorMessage) { _errorMessage = errorMessage; base.EncounteredException(StatusBox.StatusBoxType.Error, errorMessage); Show(_container.Q("ButtonsWhenFailed")); } } }