Skip to content

Commit f53e0ae

Browse files
manodnyababrooksv
andauthored
Type "delete me" instead of resource name for resource deletion (#2453)
* Type delete me instead of resource name for resource deletion * Type delete me instead of resource name for resource deletion * Dialog for delete resource confirmation with dialog wrapper * Delete resource confirmation UI Test change * Delete Resource * Ok button disabled until delete me entered * Ok button disabled until delete me entered * Override function OkAction removed * Override function OkAction removed - * Validation function properties removed Co-authored-by: Austin Brooks <[email protected]>
1 parent a681e33 commit f53e0ae

File tree

7 files changed

+66
-23
lines changed

7 files changed

+66
-23
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Deleting resources now requires typing \"delete me\" instead of the resource name"
4+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.core.explorer
5+
6+
import com.intellij.openapi.project.Project
7+
import com.intellij.openapi.ui.DialogWrapper
8+
import com.intellij.openapi.ui.Messages
9+
import com.intellij.ui.DocumentAdapter
10+
import com.intellij.ui.components.JBLabel
11+
import com.intellij.ui.components.JBTextField
12+
import com.intellij.ui.layout.panel
13+
import software.aws.toolkits.resources.message
14+
import javax.swing.JComponent
15+
import javax.swing.event.DocumentEvent
16+
17+
class DeleteResourceDialog(
18+
project: Project,
19+
private val resourceType: String,
20+
private val resourceName: String
21+
) : DialogWrapper(project) {
22+
private val deleteResourceConfirmation = JBTextField().apply { emptyText.text = message("delete_resource.confirmation_text") }
23+
private val warningIcon = JBLabel(Messages.getWarningIcon())
24+
private val component by lazy {
25+
panel {
26+
row {
27+
warningIcon(grow)
28+
right { label(message("delete_resource.message", resourceType, resourceName)) }
29+
}
30+
row {
31+
deleteResourceConfirmation(grow)
32+
}
33+
}
34+
}
35+
36+
init {
37+
super.init()
38+
title = message("delete_resource.title", resourceType, resourceName)
39+
okAction.isEnabled = false
40+
deleteResourceConfirmation.document.addDocumentListener(
41+
object : DocumentAdapter() {
42+
override fun textChanged(e: DocumentEvent) {
43+
isOKActionEnabled = deleteResourceConfirmation.text == message("delete_resource.confirmation_text")
44+
}
45+
}
46+
)
47+
}
48+
49+
override fun createCenterPanel(): JComponent = component
50+
}

jetbrains-core/src/software/aws/toolkits/jetbrains/core/explorer/actions/DeleteResourceAction.kt

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import com.intellij.icons.AllIcons
77
import com.intellij.openapi.actionSystem.AnActionEvent
88
import com.intellij.openapi.application.ApplicationManager
99
import com.intellij.openapi.project.DumbAware
10-
import com.intellij.openapi.ui.InputValidator
11-
import com.intellij.openapi.ui.Messages
10+
import software.aws.toolkits.jetbrains.core.explorer.DeleteResourceDialog
1211
import software.aws.toolkits.jetbrains.core.explorer.nodes.AwsExplorerResourceNode
1312
import software.aws.toolkits.jetbrains.utils.Operation
1413
import software.aws.toolkits.jetbrains.utils.TaggingResourceType
@@ -24,23 +23,11 @@ abstract class DeleteResourceAction<in T : AwsExplorerResourceNode<*>>(text: Str
2423
SingleResourceNodeAction<T>(text, icon = AllIcons.Actions.Cancel), DumbAware {
2524
final override fun actionPerformed(selected: T, e: AnActionEvent) {
2625
warnResourceOperationAgainstCodePipeline(selected.nodeProject, selected.displayName(), selected.resourceArn(), taggingResourceType, Operation.DELETE) {
26+
2727
val resourceType = selected.resourceType()
2828
val resourceName = selected.displayName()
29-
30-
val response = Messages.showInputDialog(
31-
selected.project,
32-
message("delete_resource.message", resourceType, resourceName),
33-
message("delete_resource.title", resourceType, resourceName),
34-
Messages.getWarningIcon(),
35-
null,
36-
object : InputValidator {
37-
override fun checkInput(inputString: String?): Boolean = inputString == resourceName
38-
39-
override fun canClose(inputString: String?): Boolean = checkInput(inputString)
40-
}
41-
)
42-
43-
if (response == null) {
29+
val response = DeleteResourceDialog(selected.nodeProject, resourceType, resourceName).showAndGet()
30+
if (!response) {
4431
AwsTelemetry.deleteResource(selected.project, ServiceType.from(selected.serviceId), Result.Cancelled)
4532
} else {
4633
ApplicationManager.getApplication().executeOnPooledThread {

resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,10 @@ datagrip.secretsmanager.validation.no_username=Secret {0} does not have a field
343343
datagrip.secretsmanager.validation.unkown_engine=Unknown database engine {0}
344344
datagrip.validation.invalid_credential_specified=Invalid credential profile {0} selected!
345345
datagrip.validation.invalid_region_specified=Invalid region {0} selected!
346+
delete_resource.confirmation_text=delete me
346347
delete_resource.delete_failed=Failed to delete {0} ''{1}''
347348
delete_resource.deleted=Deleted {0} ''{1}''
348-
delete_resource.message=Are you sure you want to delete {0} ''{1}''?\n\nType the {0} name below to confirm.
349+
delete_resource.message=Are you sure you want to delete {0} ''{1}''?\n\nType "delete me" below to confirm.
349350
delete_resource.title=Delete {0} {1}
350351
dockerfile.label=Dockerfile:
351352
ecr.copy_image_uri.action=Copy Tag URI

ui-tests/tst/software/aws/toolkits/jetbrains/uitests/tests/CloudFormationBrowserTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import software.aws.toolkits.jetbrains.uitests.CoreTest
1717
import software.aws.toolkits.jetbrains.uitests.extensions.uiTest
1818
import software.aws.toolkits.jetbrains.uitests.fixtures.IdeaFrame
1919
import software.aws.toolkits.jetbrains.uitests.fixtures.awsExplorer
20-
import software.aws.toolkits.jetbrains.uitests.fixtures.fillSingleTextField
20+
import software.aws.toolkits.jetbrains.uitests.fixtures.fillAllJBTextFields
2121
import software.aws.toolkits.jetbrains.uitests.fixtures.findAndClick
2222
import software.aws.toolkits.jetbrains.uitests.fixtures.idea
2323
import software.aws.toolkits.jetbrains.uitests.fixtures.pressOk
@@ -91,7 +91,7 @@ class CloudFormationBrowserTest {
9191
openExplorerActionMenu(cloudFormation, stack)
9292
}
9393
findAndClick("//div[@text='$deleteStackText']")
94-
fillSingleTextField(stack)
94+
fillAllJBTextFields("delete me")
9595
pressOk()
9696
}
9797

ui-tests/tst/software/aws/toolkits/jetbrains/uitests/tests/S3BrowserTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import software.aws.toolkits.jetbrains.uitests.fixtures.actionButton
2828
import software.aws.toolkits.jetbrains.uitests.fixtures.actionMenuItem
2929
import software.aws.toolkits.jetbrains.uitests.fixtures.awsExplorer
3030
import software.aws.toolkits.jetbrains.uitests.fixtures.fileBrowser
31+
import software.aws.toolkits.jetbrains.uitests.fixtures.fillAllJBTextFields
3132
import software.aws.toolkits.jetbrains.uitests.fixtures.fillSingleTextField
3233
import software.aws.toolkits.jetbrains.uitests.fixtures.findAndClick
3334
import software.aws.toolkits.jetbrains.uitests.fixtures.idea
@@ -192,7 +193,7 @@ class S3BrowserTest {
192193
openExplorerActionMenu(S3, bucket)
193194
}
194195
findAndClick("//div[@text='$deleteBucketText']")
195-
fillSingleTextField(bucket)
196+
fillAllJBTextFields("delete me")
196197
pressOk()
197198
waitForS3BucketDeletion()
198199
}

ui-tests/tst/software/aws/toolkits/jetbrains/uitests/tests/SQSTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ class SQSTest {
220220
openExplorerActionMenu(sqsNodeLabel, queueName)
221221
}
222222
actionMenuItem(deleteQueueText).click()
223-
fillSingleTextField(queueName)
223+
fillAllJBTextFields("delete me")
224224
pressOk()
225225
client.waitForDeletion(queueName)
226226
}
@@ -229,7 +229,7 @@ class SQSTest {
229229
openExplorerActionMenu(sqsNodeLabel, fifoQueueName)
230230
}
231231
actionMenuItem(deleteQueueText).click()
232-
fillSingleTextField(fifoQueueName)
232+
fillAllJBTextFields("delete me")
233233
pressOk()
234234
client.waitForDeletion(fifoQueueName)
235235
}

0 commit comments

Comments
 (0)