Skip to content

Commit 7d4a103

Browse files
authored
Remove project from ResourceSelector (#2122)
1 parent baf7553 commit 7d4a103

File tree

15 files changed

+89
-92
lines changed

15 files changed

+89
-92
lines changed

jetbrains-core/src/software/aws/toolkits/jetbrains/services/clouddebug/actions/InstrumentDialog.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import software.amazon.awssdk.services.iam.model.PolicyEvaluationDecisionType
1616
import software.aws.toolkits.core.utils.getLogger
1717
import software.aws.toolkits.core.utils.warn
1818
import software.aws.toolkits.jetbrains.core.awsClient
19-
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
2019
import software.aws.toolkits.jetbrains.core.help.HelpIds
2120
import software.aws.toolkits.jetbrains.services.RoleValidation
2221
import software.aws.toolkits.jetbrains.services.iam.IamResources
@@ -40,12 +39,9 @@ class InstrumentDialog(private val project: Project, val clusterArn: String, val
4039
}
4140

4241
private fun createUIComponents() {
43-
val credentials = AwsConnectionManager.getInstance(project).activeCredentialProvider
44-
val region = AwsConnectionManager.getInstance(project).activeRegion
45-
46-
iamRole = ResourceSelector.builder(project)
42+
iamRole = ResourceSelector.builder()
4743
.resource { IamResources.LIST_ALL }
48-
.awsConnection { Pair(region, credentials) }
44+
.awsConnection(project)
4945
.build()
5046

5147
iamRole.addItemListener {

jetbrains-core/src/software/aws/toolkits/jetbrains/services/ecs/execution/EcsCloudDebugSettingsEditorPanel.kt

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ import com.intellij.util.ui.JBUI
2929
import com.intellij.util.ui.JBUI.CurrentTheme.Validator.errorBackgroundColor
3030
import com.intellij.util.ui.JBUI.CurrentTheme.Validator.errorBorderColor
3131
import software.amazon.awssdk.services.ecs.model.ContainerDefinition
32-
import software.aws.toolkits.core.credentials.ToolkitCredentialsProvider
3332
import software.aws.toolkits.core.region.AwsRegion
3433
import software.aws.toolkits.core.utils.tryOrNull
3534
import software.aws.toolkits.jetbrains.core.AwsResourceCache
35+
import software.aws.toolkits.jetbrains.core.credentials.ConnectionSettings
3636
import software.aws.toolkits.jetbrains.core.credentials.CredentialManager
3737
import software.aws.toolkits.jetbrains.core.filter
3838
import software.aws.toolkits.jetbrains.core.region.AwsRegionProvider
@@ -67,7 +67,7 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
6767
private val toolbar = createToolbar()
6868
private var containerNames: Set<String> = emptySet()
6969
private val credentialManager = CredentialManager.getInstance()
70-
private val credentialSettings = AtomicReference<Pair<AwsRegion, ToolkitCredentialsProvider>>()
70+
private val credentialSettingsRef = AtomicReference<ConnectionSettings>()
7171

7272
val component: JComponent
7373
get() = panel
@@ -82,16 +82,16 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
8282
containerLoadingIndicator.setLoadingText(message("cloud_debug.ecs.run_config.container.loading"))
8383
containerLoadingIndicator.border = JBUI.Borders.empty()
8484

85-
clusterSelector = ResourceSelector.builder(project)
85+
clusterSelector = ResourceSelector.builder()
8686
.resource(EcsResources.LIST_CLUSTER_ARNS)
8787
.customRenderer { value, component -> component.append(EcsUtils.clusterArnToName(value)); component }
8888
.disableAutomaticLoading()
89-
.awsConnection { credentialSettings.get() ?: throw IllegalStateException("clusterSelector.reload() called before region/credentials set") }
89+
.awsConnection { credentialSettingsRef.get() ?: throw IllegalStateException("clusterSelector.reload() called before region/credentials set") }
9090
.build()
9191

9292
clusterSelector.addActionListener { this.onClusterSelectionChange() }
9393

94-
serviceSelector = ResourceSelector.builder(project).resource {
94+
serviceSelector = ResourceSelector.builder().resource {
9595
val selectedCluster = selectedCluster
9696
if (selectedCluster != null) {
9797
EcsResources.listServiceArns(selectedCluster).filter { EcsUtils.isInstrumented(it) }
@@ -100,7 +100,7 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
100100
}
101101
}.customRenderer { value, component -> component.append(EcsUtils.serviceArnToName(value)); component }
102102
.disableAutomaticLoading()
103-
.awsConnection { credentialSettings.get() ?: throw IllegalStateException("serviceSelector.reload() called before region/credentials set") }
103+
.awsConnection { credentialSettingsRef.get() ?: throw IllegalStateException("serviceSelector.reload() called before region/credentials set") }
104104
.build()
105105

106106
serviceSelector.isEnabled = false
@@ -190,18 +190,16 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
190190
emptyList()
191191
}
192192

193-
val (awsRegion, credentialProvider) = credentialSettings.get()
193+
val credentialSettings = credentialSettingsRef.get()
194194

195195
val resourceCache = AwsResourceCache.getInstance()
196196
resourceCache.getResource(
197197
EcsResources.describeService(clusterArn, serviceArn),
198-
awsRegion,
199-
credentialProvider
198+
credentialSettings
200199
).thenCompose { service ->
201200
resourceCache.getResource(
202201
EcsResources.listContainers(service.taskDefinition()),
203-
awsRegion,
204-
credentialProvider
202+
credentialSettings
205203
)
206204
}.whenComplete { containers, error ->
207205
runInEdt(ModalityState.any()) {
@@ -286,7 +284,7 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
286284
val credentialProvider = credentialManager.getAwsCredentialProvider(credentialIdentifier, region)
287285

288286
// Set initial state before telling UI to update
289-
credentialSettings.set(region to credentialProvider)
287+
credentialSettingsRef.set(ConnectionSettings(credentialProvider, region))
290288
selectedCluster = clusterArn
291289
selectedService = serviceArn
292290

@@ -315,9 +313,9 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
315313
}
316314

317315
fun applyTo(configuration: EcsCloudDebugRunConfiguration) {
318-
val (region, credentialsProvider) = credentialSettings.get() ?: return
319-
configuration.regionId(region.id)
320-
configuration.credentialProviderId(credentialsProvider.id)
316+
val connectionSettings = credentialSettingsRef.get() ?: return
317+
configuration.regionId(connectionSettings.region.id)
318+
configuration.credentialProviderId(connectionSettings.credentials.id)
321319
configuration.clusterArn(selectedCluster)
322320
configuration.serviceArn(selectedService)
323321

@@ -393,8 +391,9 @@ class EcsCloudDebugSettingsEditorPanel(private val project: Project) : Disposabl
393391
val credentialIdentifier = credentialManager.getCredentialIdentifierById(credentialProviderId) ?: return
394392
val credentialProvider = tryOrNull { credentialManager.getAwsCredentialProvider(credentialIdentifier, region) } ?: return
395393

396-
val oldSettings = credentialSettings.getAndUpdate { region to credentialProvider }
397-
if (oldSettings?.first == region && oldSettings.second == credentialProvider) return
394+
val newSettings = ConnectionSettings(credentialProvider, region)
395+
val oldSettings = credentialSettingsRef.getAndUpdate { newSettings }
396+
if (oldSettings == newSettings) return
398397

399398
// Clear out settings on region change
400399
containerNames = emptySet()

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/deploy/DeployServerlessApplicationPanel.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import software.aws.toolkits.jetbrains.services.s3.resources.S3Resources;
3131
import software.aws.toolkits.jetbrains.ui.ResourceSelector;
3232

33-
@SuppressWarnings("NullableProblems")
3433
public class DeployServerlessApplicationPanel {
3534
@NotNull JTextField newStackName;
3635
@NotNull JButton createS3BucketButton;
@@ -92,8 +91,8 @@ public Map<String, String> getTemplateParameters() {
9291
private void createUIComponents() {
9392
environmentVariablesTable = new EnvVariablesTable();
9493
stackParameters = new Wrapper();
95-
stacks = ResourceSelector.builder(project).resource(ACTIVE_STACKS).build();
96-
s3Bucket = ResourceSelector.builder(project).resource(S3Resources.listBucketNamesByActiveRegion(project)).build();
94+
stacks = ResourceSelector.builder().resource(ACTIVE_STACKS).awsConnection(project).build();
95+
s3Bucket = ResourceSelector.builder().resource(S3Resources.listBucketNamesByActiveRegion(project)).awsConnection(project).build();
9796

9897
if (!ApplicationManager.getApplication().isUnitTestMode()) {
9998
JComponent tableComponent = environmentVariablesTable.getComponent();

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/execution/remote/RemoteLambdaRunSettingsEditor.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ package software.aws.toolkits.jetbrains.services.lambda.execution.remote
55

66
import com.intellij.openapi.options.SettingsEditor
77
import com.intellij.openapi.project.Project
8-
import software.aws.toolkits.core.credentials.ToolkitCredentialsProvider
98
import software.aws.toolkits.core.region.AwsRegion
109
import software.aws.toolkits.core.utils.tryOrNull
10+
import software.aws.toolkits.jetbrains.core.credentials.ConnectionSettings
1111
import software.aws.toolkits.jetbrains.core.credentials.CredentialManager
1212
import software.aws.toolkits.jetbrains.core.map
1313
import software.aws.toolkits.jetbrains.services.lambda.resources.LambdaResources
@@ -16,12 +16,12 @@ import java.util.concurrent.atomic.AtomicReference
1616
import javax.swing.JPanel
1717

1818
class RemoteLambdaRunSettingsEditor(project: Project) : SettingsEditor<RemoteLambdaRunConfiguration>() {
19-
private val settings = AtomicReference<Pair<AwsRegion, ToolkitCredentialsProvider>>()
19+
private val credentialSettingsRef = AtomicReference<ConnectionSettings>()
2020
private val functionSelector = ResourceSelector
21-
.builder(project)
21+
.builder()
2222
.resource(LambdaResources.LIST_FUNCTIONS.map { it.functionName() })
2323
.disableAutomaticLoading()
24-
.awsConnection { settings.get() ?: throw IllegalStateException("functionSelector.reload() called before region/credentials set") }
24+
.awsConnection { credentialSettingsRef.get() ?: throw IllegalStateException("functionSelector.reload() called before region/credentials set") }
2525
.build()
2626
private val view = RemoteLambdaRunSettingsEditorPanel(project, functionSelector)
2727
private val credentialManager = CredentialManager.getInstance()
@@ -33,8 +33,9 @@ class RemoteLambdaRunSettingsEditor(project: Project) : SettingsEditor<RemoteLam
3333
val credentialIdentifier = credentialManager.getCredentialIdentifierById(credentialProviderId) ?: return
3434
val credentialProvider = tryOrNull { credentialManager.getAwsCredentialProvider(credentialIdentifier, region) } ?: return
3535

36-
val oldSettings = settings.getAndUpdate { region to credentialProvider }
37-
if (oldSettings?.first == region && oldSettings.second == credentialProvider) return
36+
val newSettings = ConnectionSettings(credentialProvider, region)
37+
val oldSettings = credentialSettingsRef.getAndUpdate { newSettings }
38+
if (oldSettings == newSettings) return
3839
functionSelector.reload()
3940
}
4041

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/upload/EditFunctionPanel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ private void createUIComponents() {
8787
envVars = new EnvironmentVariablesTextField();
8888
memorySlider = LambdaWidgets.lambdaMemory();
8989
timeoutSlider = LambdaWidgets.lambdaTimeout();
90-
iamRole = ResourceSelector.builder(project).resource(IamResources.LIST_LAMBDA_ROLES).build();
91-
sourceBucket = ResourceSelector.builder(project).resource(S3Resources.listBucketNamesByActiveRegion(project)).build();
90+
iamRole = ResourceSelector.builder().resource(IamResources.LIST_LAMBDA_ROLES).awsConnection(project).build();
91+
sourceBucket = ResourceSelector.builder().resource(S3Resources.listBucketNamesByActiveRegion(project)).awsConnection(project).build();
9292
}
9393

9494
public void setRuntimes(Collection<Runtime> runtimes) {

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/wizard/SamInitProjectBuilderCommon.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import com.intellij.openapi.application.runInEdt
99
import com.intellij.openapi.options.ShowSettingsUtil
1010
import com.intellij.openapi.progress.ProgressManager
1111
import com.intellij.openapi.project.DefaultProjectFactory
12-
import com.intellij.openapi.ui.ValidationInfo
1312
import software.aws.toolkits.jetbrains.core.executables.ExecutableInstance
1413
import software.aws.toolkits.jetbrains.core.executables.ExecutableManager
1514
import software.aws.toolkits.jetbrains.core.executables.getExecutable
@@ -21,10 +20,6 @@ import javax.swing.JButton
2120
import javax.swing.JComponent
2221
import javax.swing.JTextField
2322

24-
interface ValidatablePanel {
25-
fun validate(): ValidationInfo? = null
26-
}
27-
2823
@JvmOverloads
2924
fun setupSamSelectionElements(samExecutableField: JTextField, editButton: JButton, label: JComponent, postEditCallback: Runnable? = null) {
3025
fun getSamExecutable(): ExecutableInstance.ExecutableWithPath? =

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/wizard/SamInitSelectionPanel.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.intellij.ui.ColoredListCellRenderer;
99
import com.intellij.ui.components.JBLabel;
1010
import com.intellij.uiDesigner.core.GridConstraints;
11+
import com.intellij.util.text.SemVer;
1112
import java.awt.Dimension;
1213
import java.awt.event.ItemEvent;
1314
import java.util.List;
@@ -20,17 +21,16 @@
2021
import javax.swing.JList;
2122
import javax.swing.JPanel;
2223
import javax.swing.JTextField;
23-
import com.intellij.util.text.SemVer;
24-
import kotlin.Pair;
2524
import kotlin.Unit;
2625
import org.jetbrains.annotations.NotNull;
2726
import org.jetbrains.annotations.Nullable;
2827
import software.amazon.awssdk.services.lambda.model.Runtime;
2928
import software.aws.toolkits.core.credentials.CredentialIdentifier;
3029
import software.aws.toolkits.core.credentials.ToolkitCredentialsProvider;
3130
import software.aws.toolkits.core.region.AwsRegion;
32-
import software.aws.toolkits.jetbrains.core.credentials.CredentialManager;
3331
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager;
32+
import software.aws.toolkits.jetbrains.core.credentials.ConnectionSettings;
33+
import software.aws.toolkits.jetbrains.core.credentials.CredentialManager;
3434
import software.aws.toolkits.jetbrains.core.executables.ExecutableInstance;
3535
import software.aws.toolkits.jetbrains.core.executables.ExecutableManager;
3636
import software.aws.toolkits.jetbrains.core.executables.ExecutableType;
@@ -39,7 +39,7 @@
3939
import software.aws.toolkits.jetbrains.services.lambda.RuntimeGroupUtil;
4040
import software.aws.toolkits.jetbrains.services.lambda.sam.SamExecutable;
4141

42-
public class SamInitSelectionPanel implements ValidatablePanel {
42+
public class SamInitSelectionPanel {
4343
@NotNull
4444
public JPanel mainPanel;
4545
@NotNull
@@ -225,7 +225,7 @@ private Unit initSchemaSelectionPanel(AwsRegion awsRegion, CredentialIdentifier
225225

226226
ToolkitCredentialsProvider credentialProvider = CredentialManager.getInstance().getAwsCredentialProvider(credentialIdentifier, awsRegion);
227227

228-
this.schemaSelectionUi.reloadSchemas(new Pair<>(awsRegion, credentialProvider));
228+
this.schemaSelectionUi.reloadSchemas(new ConnectionSettings(credentialProvider, awsRegion));
229229

230230
mainPanel.revalidate();
231231

@@ -332,7 +332,6 @@ private void addOptionalSelectorPanel(JLabel newLabel, JComponent newSelector, i
332332
}
333333

334334
@Nullable
335-
@Override
336335
public ValidationInfo validate() {
337336
ExecutableInstance samExecutable = ExecutableManager.getInstance().getExecutableIfPresent(ExecutableType.getExecutable(SamExecutable.class));
338337
if (samExecutable instanceof ExecutableInstance.BadExecutable) {

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/wizard/SchemaResourceSelectorSelectionPanel.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import com.intellij.openapi.project.Project
77
import com.intellij.openapi.ui.ValidationInfo
88
import com.intellij.ui.ComboboxSpeedSearch
99
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
10+
import software.aws.toolkits.jetbrains.core.credentials.ConnectionSettings
1011
import software.aws.toolkits.jetbrains.services.schemas.resources.SchemasResources
11-
import software.aws.toolkits.jetbrains.ui.AwsConnection
1212
import software.aws.toolkits.jetbrains.ui.ResourceSelector
1313
import software.aws.toolkits.resources.message
1414
import java.awt.BorderLayout
@@ -20,7 +20,7 @@ class SchemaResourceSelectorSelectionPanel(
2020
val builder: SamProjectBuilder,
2121
val project: Project,
2222
// Subsequent parameters injectable for unit tests to enable mocking because ResourceSelector has inconsistent unit test behaviour
23-
val resourceSelectorBuilder: ResourceSelector.ResourceBuilder = ResourceSelector.builder(project),
23+
val resourceSelectorBuilder: ResourceSelector.ResourceBuilder = ResourceSelector.builder(),
2424
useSpeedSearch: Boolean = true,
2525
rootPanelBuilder: () -> JPanel = { JPanel(BorderLayout()) }
2626
) : SchemaSelectionPanelBase(project) {
@@ -29,7 +29,7 @@ class SchemaResourceSelectorSelectionPanel(
2929

3030
private val schemaPanel: JPanel
3131

32-
private var currentAwsConnection: AwsConnection?
32+
private var currentAwsConnection: ConnectionSettings?
3333

3434
private val schemasSelector: ResourceSelector<SchemaSelectionItem>
3535

@@ -50,10 +50,10 @@ class SchemaResourceSelectorSelectionPanel(
5050

5151
override val schemaSelectionPanel: JComponent = schemaPanel
5252

53-
private fun initializeAwsConnection(): AwsConnection? {
53+
private fun initializeAwsConnection(): ConnectionSettings? {
5454
val settings = AwsConnectionManager.getInstance(project)
5555
return if (settings.isValidConnectionSettings()) {
56-
settings.activeRegion to settings.activeCredentialProvider
56+
settings.connectionSettings()
5757
} else {
5858
null
5959
}
@@ -68,7 +68,7 @@ class SchemaResourceSelectorSelectionPanel(
6868
.awsConnection { currentAwsConnection ?: throw IllegalStateException(message("credentials.profile.not_configured")) } // Must be inline function as it gets updated and re-evaluated
6969
.build()
7070

71-
override fun reloadSchemas(awsConnection: AwsConnection?) {
71+
override fun reloadSchemas(awsConnection: ConnectionSettings?) {
7272
if (awsConnection != null) {
7373
currentAwsConnection = awsConnection
7474
}

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/wizard/SchemaSelectionPanel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import com.fasterxml.jackson.databind.JsonNode
77
import com.intellij.openapi.project.Project
88
import com.intellij.openapi.ui.ValidationInfo
99
import software.amazon.awssdk.services.lambda.model.Runtime
10+
import software.aws.toolkits.jetbrains.core.credentials.ConnectionSettings
1011
import software.aws.toolkits.jetbrains.services.lambda.runtimeGroup
1112
import software.aws.toolkits.jetbrains.services.schemas.SchemaDownloader
1213
import software.aws.toolkits.jetbrains.services.schemas.SchemaSummary
1314
import software.aws.toolkits.jetbrains.services.schemas.SchemaTemplateExtraContext
1415
import software.aws.toolkits.jetbrains.services.schemas.SchemaTemplateParameters
15-
import software.aws.toolkits.jetbrains.ui.AwsConnection
1616
import javax.swing.JComponent
1717
import javax.swing.JLabel
1818
import javax.swing.JPanel
@@ -27,7 +27,7 @@ interface SchemaSelectionPanel {
2727

2828
fun schemaName(): String? = null
2929

30-
fun reloadSchemas(awsConnection: AwsConnection? = null) {}
30+
fun reloadSchemas(awsConnection: ConnectionSettings? = null) {}
3131

3232
fun buildSchemaTemplateParameters(): SchemaTemplateParameters?
3333

jetbrains-core/src/software/aws/toolkits/jetbrains/services/sqs/ConfigureLambdaPanel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ class ConfigureLambdaPanel(private val project: Project) {
2828
}
2929

3030
private fun createUIComponents() {
31-
lambdaFunction = ResourceSelector.builder(project)
31+
lambdaFunction = ResourceSelector.builder()
3232
.resource(LambdaResources.LIST_FUNCTIONS)
3333
.customRenderer { value, component -> component.append(value.functionName()); component }
34+
.awsConnection(project)
3435
.build()
3536
}
3637
}

0 commit comments

Comments
 (0)