Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
action.q.hello.description=Hello description
amazonqInlineChat.hint.edit = Edit
amazonqInlineChat.popup.accept=Accept \u23CE
amazonqInlineChat.popup.cancel=Cancel \u238B
Expand All @@ -10,9 +9,9 @@ amazonqInlineChat.popup.title=Enter Instructions for Q
amazonq.refresh.panel=Refresh Chat Session
amazonq.title=Amazon Q
amazonq.workspace.settings.open.prompt=Workspace index is now enabled. You can disable it from Amazon Q settings.
action.q.profile.usage.text=You changed profile
action.q.profile.usage=You're using the '<b>{0}</b>' profile for Amazon Q.
action.q.switchProfiles.text=Change profile
action.q.profile.usage.text=You changed your profile
action.q.profile.usage=You''re using the ''<b>{0}</b>'' profile for Amazon Q.
action.q.switchProfiles.text=Change Profile
action.q.switchProfiles.dialog.text=Amazon Q Developer Profile
action.q.switchProfiles.dialog.account.label=Account: {0}
action.q.switchProfiles.dialog.panel.text=Change your Q Developer profile
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,10 @@
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.DumbAware
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIntent
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileDialog
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
import software.aws.toolkits.resources.AmazonQBundle.message
import software.aws.toolkits.telemetry.MetricResult
import software.aws.toolkits.telemetry.Telemetry

class QSwitchProfilesAction : AnAction(message("action.q.switchProfiles.text")), DumbAware {

Expand All @@ -29,30 +22,9 @@

override fun actionPerformed(e: AnActionEvent) {
val project = e.project ?: return
ApplicationManager.getApplication().executeOnPooledThread {
val profiles = try {
QRegionProfileManager.getInstance().listRegionProfiles(project)
} catch (e: Exception) {
val conn = ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection
Telemetry.amazonq.didSelectProfile.use { span ->
span.source(QProfileSwitchIntent.User.value)
.amazonQProfileRegion(QRegionProfileManager.getInstance().activeProfile(project)?.region ?: "not-set")
.ssoRegion(conn?.region)
.credentialStartUrl(conn?.startUrl)
.result(MetricResult.Failed)
.reason(e.message)
}
throw e
}
?: error("Attempted to fetch profiles while there does not exist")
val selectedProfile = QRegionProfileManager.getInstance().activeProfile(project) ?: profiles[0]
ApplicationManager.getApplication().invokeLater {
QRegionProfileDialog(
project,
profiles = profiles,
selectedProfile = selectedProfile
).show()
}
}
QRegionProfileDialog(
project,
selectedProfile = QRegionProfileManager.getInstance().activeProfile(project)
).show()

Check warning on line 28 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/actions/QSwitchProfilesAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/actions/QSwitchProfilesAction.kt#L25-L28

Added lines #L25 - L28 were not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,61 @@
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogPanel
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.ui.ColoredListCellRenderer
import com.intellij.ui.SimpleTextAttributes
import com.intellij.ui.dsl.builder.AlignX
import com.intellij.ui.dsl.builder.BottomGap
import com.intellij.ui.dsl.builder.bind
import com.intellij.ui.dsl.builder.bindItem
import com.intellij.ui.dsl.builder.panel
import com.intellij.ui.dsl.builder.toNullableProperty
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
import software.aws.toolkits.jetbrains.core.help.HelpIds
import software.aws.toolkits.jetbrains.ui.AsyncComboBox
import software.aws.toolkits.jetbrains.utils.ui.selected
import software.aws.toolkits.resources.AmazonQBundle.message
import software.aws.toolkits.resources.AwsCoreBundle
import software.aws.toolkits.telemetry.MetricResult
import software.aws.toolkits.telemetry.Telemetry
import javax.swing.JComponent
import javax.swing.JList

data class QRegionProfileDialogState(
var selectedProfile: QRegionProfile? = null,
)

Check warning on line 32 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L30-L32

Added lines #L30 - L32 were not covered by tests

class QRegionProfileDialog(
private var project: Project,
private var profiles: List<QRegionProfile>,
private var selectedProfile: QRegionProfile, // default
val state: QRegionProfileDialogState = QRegionProfileDialogState(),
private var selectedProfile: QRegionProfile?,

Check warning on line 37 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L36-L37

Added lines #L36 - L37 were not covered by tests
) : DialogWrapper(project) {

private val renderer = object : ColoredListCellRenderer<QRegionProfile>() {

Check warning on line 40 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L40

Added line #L40 was not covered by tests
override fun customizeCellRenderer(
list: JList<out QRegionProfile>,
value: QRegionProfile?,
index: Int,
selected: Boolean,
hasFocus: Boolean,
) {
value?.let {
append(

Check warning on line 49 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L49

Added line #L49 was not covered by tests
if (it == selectedProfile) {
"${it.profileName} - ${it.region} (connected)"

Check warning on line 51 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L51

Added line #L51 was not covered by tests
} else {
"${it.profileName} - ${it.region}"

Check warning on line 53 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L53

Added line #L53 was not covered by tests
},
SimpleTextAttributes.REGULAR_ATTRIBUTES

Check warning on line 55 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L55

Added line #L55 was not covered by tests
)

append(" " + message("action.q.switchProfiles.dialog.account.label", it.accountId), SimpleTextAttributes.GRAY_SMALL_ATTRIBUTES)
}
}

Check warning on line 60 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L58-L60

Added lines #L58 - L60 were not covered by tests
}

private val combo = AsyncComboBox<QRegionProfile>(customRenderer = renderer)

Check warning on line 63 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L63

Added line #L63 was not covered by tests

private val panel: DialogPanel by lazy {
panel {
row { label(message("action.q.switchProfiles.dialog.panel.text")).bold() }
Expand All @@ -36,32 +73,40 @@
}
separator().bottomGap(BottomGap.MEDIUM)

buttonsGroup {
profiles.forEach { profile ->
row {
radioButton("", profile)

panel {
val regionDisplay = if (profile == selectedProfile) {
"${profile.profileName} - ${profile.region} (connected)"
} else {
"${profile.profileName} - ${profile.region}"
}
row { label(regionDisplay) }
row {
label(message("action.q.switchProfiles.dialog.account.label", profile.accountId)).applyToComponent {
font = font.deriveFont(font.size2D - 2.0f)
}
}
}
}.bottomGap(BottomGap.MEDIUM)
combo.proposeModelUpdate { model ->
try {

Check warning on line 77 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L77

Added line #L77 was not covered by tests
QRegionProfileManager.getInstance().listRegionProfiles(project)?.forEach {
model.addElement(it)
} ?: error("Attempted to fetch profiles while there does not exist")

Check warning on line 80 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L79-L80

Added lines #L79 - L80 were not covered by tests

model.selectedItem = selectedProfile
} catch (e: Exception) {

Check warning on line 83 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L82-L83

Added lines #L82 - L83 were not covered by tests
val conn = ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection
Telemetry.amazonq.didSelectProfile.use { span ->
span.source(QProfileSwitchIntent.User.value)

Check warning on line 86 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L85-L86

Added lines #L85 - L86 were not covered by tests
.amazonQProfileRegion(QRegionProfileManager.getInstance().activeProfile(project)?.region ?: "not-set")
.ssoRegion(conn?.region)
.credentialStartUrl(conn?.startUrl)
.result(MetricResult.Failed)
.reason(e.message)

Check warning on line 91 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L90-L91

Added lines #L90 - L91 were not covered by tests
}
throw e

Check warning on line 93 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L93

Added line #L93 was not covered by tests
}
}.bind({ selectedOption }, { selectedOption = it })
}

Check warning on line 95 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L95

Added line #L95 was not covered by tests

row {
cell(combo)
.align(AlignX.FILL)

Check warning on line 99 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L97-L99

Added lines #L97 - L99 were not covered by tests
.errorOnApply(AwsCoreBundle.message("gettingstarted.setup.error.not_selected")) { it.selected() == null }
.bindItem(state::selectedProfile.toNullableProperty())
}

Check warning on line 102 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L101-L102

Added lines #L101 - L102 were not covered by tests

separator().bottomGap(BottomGap.MEDIUM)
}
}
private var selectedOption: QRegionProfile = selectedProfile // user selected

private val selectedOption
get() = state.selectedProfile // user selected

Check warning on line 109 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L109

Added line #L109 was not covered by tests

init {
title = message("action.q.switchProfiles.dialog.text")
Expand All @@ -87,7 +132,7 @@
Telemetry.amazonq.didSelectProfile.use { span ->
span.source(QProfileSwitchIntent.User.value)
.amazonQProfileRegion(profileManager.activeProfile(project)?.region ?: "not-set")
.profileCount(profiles.size)
.profileCount(combo.model.size)

Check warning on line 135 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/profile/QRegionProfileDialog.kt#L135

Added line #L135 was not covered by tests
.ssoRegion(conn?.region)
.credentialStartUrl(conn?.startUrl)
.result(MetricResult.Cancelled)
Expand Down
Loading