33
44package software.aws.toolkits.jetbrains.services.cloudformation
55
6+ import com.intellij.icons.AllIcons
7+ import com.intellij.ide.projectView.PresentationData
68import com.intellij.openapi.project.Project
9+ import com.intellij.ui.SimpleTextAttributes
10+ import com.intellij.ui.treeStructure.Tree
11+ import com.intellij.util.ui.UIUtil
12+ import com.intellij.util.ui.tree.TreeUtil
713import icons.AwsIcons
814import software.amazon.awssdk.services.cloudformation.CloudFormationClient
915import software.amazon.awssdk.services.cloudformation.model.StackStatus
1016import software.amazon.awssdk.services.cloudformation.model.StackSummary
17+ import software.aws.toolkits.jetbrains.core.explorer.AwsToolkitExplorerToolWindow
18+ import software.aws.toolkits.jetbrains.core.explorer.PinnedFirstNode
19+ import software.aws.toolkits.jetbrains.core.explorer.ToolkitToolWindowTab
1120import software.aws.toolkits.jetbrains.core.explorer.nodes.AwsExplorerNode
1221import software.aws.toolkits.jetbrains.core.explorer.nodes.AwsExplorerResourceNode
1322import software.aws.toolkits.jetbrains.core.explorer.nodes.AwsExplorerServiceNode
1423import software.aws.toolkits.jetbrains.core.explorer.nodes.CacheBackedAwsExplorerServiceRootNode
1524import software.aws.toolkits.jetbrains.services.cloudformation.resources.CloudFormationResources
1625import software.aws.toolkits.jetbrains.services.cloudformation.stack.StackWindowManager
1726import software.aws.toolkits.jetbrains.utils.toHumanReadable
18- import software.aws.toolkits.resources.message
27+ import software.aws.toolkits.resources.AwsToolkitBundle.message
28+ import javax.swing.JComponent
1929
2030class CloudFormationServiceNode (project : Project , service : AwsExplorerServiceNode ) : CacheBackedAwsExplorerServiceRootNode<StackSummary>(
2131 project,
@@ -24,6 +34,17 @@ class CloudFormationServiceNode(project: Project, service: AwsExplorerServiceNod
2434) {
2535 override fun displayName (): String = message(" explorer.node.cloudformation" )
2636 override fun toNode (child : StackSummary ): AwsExplorerNode <* > = CloudFormationStackNode (nodeProject, child.stackName(), child.stackStatus(), child.stackId())
37+
38+ override fun getChildren (): List <AwsExplorerNode <* >> {
39+ val hasCfnPanel = ToolkitToolWindowTab .EP_NAME .extensionList.any {
40+ it.tabId == message(" cloudformation.explorer.tab.title" ) && it.enabled()
41+ }
42+ return if (hasCfnPanel) {
43+ listOf (TryCloudFormationPanelNode (nodeProject)) + super .getChildren()
44+ } else {
45+ super .getChildren()
46+ }
47+ }
2748}
2849
2950class CloudFormationStackNode (
@@ -49,3 +70,32 @@ class CloudFormationStackNode(
4970 StackWindowManager .getInstance(nodeProject).openStack(stackName, stackId)
5071 }
5172}
73+
74+ class TryCloudFormationPanelNode (project : Project ) :
75+ AwsExplorerNode <String >(project, " try-cfn-panel" , AllIcons .Nodes .Favorite ), PinnedFirstNode {
76+
77+ override fun getChildren (): List <AwsExplorerNode <* >> = emptyList()
78+
79+ override fun isAlwaysLeaf (): Boolean = true
80+
81+ override fun displayName (): String = message(" cloudformation.explorer.try_new_panel" )
82+
83+ override fun update (presentation : PresentationData ) {
84+ presentation.setIcon(AllIcons .Nodes .Favorite )
85+ presentation.addText(displayName(), SimpleTextAttributes .REGULAR_BOLD_ATTRIBUTES )
86+ presentation.tooltip = message(" cloudformation.explorer.try_new_panel.tooltip" )
87+ }
88+
89+ override fun onDoubleClick () {
90+ val toolWindow = AwsToolkitExplorerToolWindow .toolWindow(nodeProject)
91+ toolWindow.activate {
92+ val explorerWindow = AwsToolkitExplorerToolWindow .getInstance(nodeProject)
93+ val tabComponent = explorerWindow.selectTab(message(" cloudformation.explorer.tab.title" ))
94+ (tabComponent as ? JComponent )?.let { component ->
95+ UIUtil .findComponentOfType(component, Tree ::class .java)?.let { tree ->
96+ TreeUtil .expand(tree, 1 )
97+ }
98+ }
99+ }
100+ }
101+ }
0 commit comments