Skip to content

Commit 93ef6e5

Browse files
committed
feat(container): add support for baseline version 242 in RunDevContainerService #306
- Introduce `createDeployViewComponentFor242` to handle baseline version 242. - Add error logging for context and component creation failures. - Refactor component creation logic to support multiple baseline versions.
1 parent 0ec80d2 commit 93ef6e5

File tree

1 file changed

+53
-10
lines changed

1 file changed

+53
-10
lines changed

exts/ext-container/src/241/main/kotlin/cc/unitmesh/container/RunDevContainerService.kt

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ import com.intellij.docker.connection.sshId
1111
import com.intellij.docker.utils.createDefaultDockerServer
1212
import com.intellij.docker.utils.getDockerServers
1313
import com.intellij.execution.configurations.RunProfile
14+
import com.intellij.openapi.application.ApplicationInfo
1415
import com.intellij.openapi.project.Project
1516
import com.intellij.openapi.project.guessProjectDir
1617
import com.intellij.openapi.ui.DialogWrapper
1718
import com.intellij.openapi.vfs.VirtualFile
1819
import com.intellij.psi.PsiElement
20+
import com.intellij.remoteDev.hostStatus.UnattendedHostStatus
1921
import com.intellij.remoteServer.configuration.RemoteServer
2022
import com.intellij.util.ui.JBUI
2123
import com.intellij.util.ui.components.BorderLayoutPanel
24+
import com.jetbrains.gateway.api.GatewayConnectionHandle
25+
import com.jetbrains.gateway.api.GatewayConnector
2226
import com.jetbrains.rd.util.lifetime.Lifetime
2327
import java.io.File
2428
import javax.swing.JComponent
@@ -47,6 +51,7 @@ class RunDevContainerService : RunService {
4751
val context = try {
4852
createContext(containerFile, projectDir, server)
4953
} catch (e: Exception) {
54+
logger<RunDevContainerService>().warn(project, "Cannot create context: $e")
5055
DockerDevcontainerDeployContext()
5156
}
5257

@@ -56,25 +61,32 @@ class RunDevContainerService : RunService {
5661
val panel = contentPanel
5762
val lifetime = Lifetime.Companion.Eternal
5863

59-
try {
60-
val component = createDeployViewComponent(project, lifetime, context)
61-
component.setBorder(JBUI.Borders.empty())
62-
63-
panel.add(component)
64-
panel.revalidate()
65-
panel.repaint()
64+
val baseLine = ApplicationInfo.getInstance().build.baselineVersion
65+
val component = try {
66+
if (baseLine >= 242) {
67+
createDeployViewComponentFor242(project, lifetime, context)
68+
} else {
69+
createDeployViewComponentFor241(project, lifetime, context)
70+
}
6671
} catch (e: Exception) {
67-
AutoDevNotifications.error(project, "Cannot create DockerDeployView: ${e.message}")
68-
e.printStackTrace()
72+
logger<RunDevContainerService>().warn(project, "Cannot create DockerDeployView: $e")
73+
createByLifetime(lifetime) ?: throw e
6974
}
75+
76+
component.setBorder(JBUI.Borders.empty())
77+
78+
panel.add(component)
79+
panel.revalidate()
80+
panel.repaint()
81+
7082
}
7183
}
7284

7385
wrapper.show()
7486
return "Running devcontainer.json"
7587
}
7688

77-
private fun createDeployViewComponent(
89+
private fun createDeployViewComponentFor241(
7890
project: Project,
7991
lifetime: Lifetime,
8092
context: DockerDevcontainerDeployContext
@@ -97,6 +109,37 @@ class RunDevContainerService : RunService {
97109
return component
98110
}
99111

112+
private fun createDeployViewComponentFor242(
113+
project: Project,
114+
lifetime: Lifetime,
115+
context: DockerDevcontainerDeployContext
116+
): JComponent {
117+
val dockerDeployViewClass = Class.forName("com.intellij.clouds.docker.gateway.ui.DockerDeployView")
118+
val constructor = dockerDeployViewClass.getDeclaredConstructor(
119+
Project::class.java,
120+
Lifetime::class.java,
121+
DockerDevcontainerDeployContext::class.java,
122+
Function2::class.java
123+
)
124+
125+
val function2 = { _: GatewayConnectionHandle, _: UnattendedHostStatus -> Unit }
126+
127+
val instance = constructor.newInstance(project, lifetime, context, function2)
128+
val componentMethod = dockerDeployViewClass.getMethod("getComponent")
129+
val component = componentMethod.invoke(instance) as JComponent
130+
return component
131+
}
132+
133+
fun createByLifetime(lifetime: Lifetime): JComponent? {
134+
val view = GatewayConnector.getConnectors()
135+
.firstOrNull { it.isAvailable() && it.javaClass.name == "com.intellij.clouds.docker.gateway.DockerGatewayConnector" }
136+
?: return null
137+
138+
val connectorView = view.createView(lifetime)
139+
140+
return connectorView.component
141+
}
142+
100143
private fun dockerServers(): List<RemoteServer<DockerCloudConfiguration>> {
101144
val filteredServers =
102145
getDockerServers().filter {

0 commit comments

Comments
 (0)