@@ -3,8 +3,11 @@ package cc.unitmesh.container
3
3
import cc.unitmesh.devti.provider.RunService
4
4
import com.intellij.docker.DockerCloudConfiguration
5
5
import com.intellij.docker.DockerCloudType
6
+ import com.intellij.docker.DockerRunConfigurationCreator
6
7
import com.intellij.docker.DockerServerRuntimesManager
7
- import com.intellij.docker.dockerFile.DockerLanguage
8
+ import com.intellij.docker.deploymentSource.DockerImageDeploymentSourceType
9
+ import com.intellij.docker.runtimes.DockerServerRuntime
10
+ import com.intellij.execution.configurations.RunConfiguration
8
11
import com.intellij.execution.configurations.RunProfile
9
12
import com.intellij.openapi.application.ApplicationManager
10
13
import com.intellij.openapi.application.runReadAction
@@ -14,39 +17,72 @@ import com.intellij.psi.PsiElement
14
17
import com.intellij.psi.PsiManager
15
18
import com.intellij.remoteServer.ServerType
16
19
import com.intellij.remoteServer.configuration.RemoteServer
20
+ import com.intellij.remoteServer.configuration.RemoteServersManager
17
21
import kotlinx.coroutines.future.await
18
22
import kotlinx.coroutines.runBlocking
19
23
20
24
class RunDockerfileService : RunService {
21
- override fun isApplicable (project : Project , file : VirtualFile ): Boolean = file.name == " Dockerfile" ||
22
- file.isValid && runReadAction {
23
- PsiManager .getInstance(project).findFile(file)?.language == DockerLanguage .INSTANCE
25
+ override fun isApplicable (project : Project , file : VirtualFile ): Boolean {
26
+ if (file.name == " Dockerfile" ) {
27
+ return true
28
+ }
29
+
30
+ return runReadAction {
31
+ PsiManager .getInstance(project).findFile(file)?.language?.displayName == " Dockerfile"
32
+ }
24
33
}
25
34
26
35
override fun runConfigurationClass (project : Project ): Class <out RunProfile >? = null
27
36
28
- fun defaultDockerConnection () = object : RemoteServer <DockerCloudConfiguration > {
37
+ fun remoteServerConfig () = object : RemoteServer <DockerCloudConfiguration > {
29
38
override fun getName (): String = " DockerConnection"
30
- override fun getType (): ServerType <DockerCloudConfiguration ? > = DockerCloudType .getInstance()
39
+ override fun getType (): ServerType <DockerCloudConfiguration > = DockerCloudType .getInstance()
31
40
override fun getConfiguration (): DockerCloudConfiguration = DockerCloudConfiguration .createDefault()
32
41
33
42
override fun setName (name : String? ) {}
34
43
}
35
44
45
+ fun listAllDockerAccounts (): MutableList <RemoteServer <DockerCloudConfiguration >> {
46
+ return RemoteServersManager .getInstance().getServers<DockerCloudConfiguration >(DockerCloudType .getInstance())
47
+ }
48
+
49
+ override fun createConfiguration (
50
+ project : Project ,
51
+ virtualFile : VirtualFile
52
+ ): RunConfiguration ? {
53
+ val imageType = DockerImageDeploymentSourceType .getInstance()
54
+ val imageSource = imageType.singletonSource
55
+ val creator = DockerRunConfigurationCreator (project)
56
+ val cloudType = DockerCloudType .getInstance()
57
+ val deploymentConfiguration = creator.createDeploymentConfigurationFromTemplate(imageType)
58
+ ? : cloudType.createDeploymentConfigurator(project)
59
+ .createDefaultConfiguration(imageSource)
60
+
61
+ val server: RemoteServer <* > = remoteServerConfig()
62
+ val createConfiguration = creator.createConfiguration(imageSource, deploymentConfiguration, server)
63
+ return createConfiguration.configuration
64
+ }
65
+
36
66
override fun runFile (project : Project , virtualFile : VirtualFile , psiElement : PsiElement ? , isFromToolAction : Boolean )
37
67
: String? {
38
68
39
69
ApplicationManager .getApplication().invokeAndWait {
40
70
runBlocking {
41
- val instance = DockerServerRuntimesManager .getInstance(project)
42
- val dockerConnection = defaultDockerConnection()
43
- val runtime = instance
44
- .getOrCreateConnection(dockerConnection)
45
- .await()
71
+ createRuntime(project)
72
+
46
73
}
47
74
}
48
75
49
-
50
76
return null
51
77
}
78
+
79
+ private suspend fun createRuntime (project : Project ): DockerServerRuntime {
80
+ val instance = DockerServerRuntimesManager .getInstance(project)
81
+ val dockerConnection = remoteServerConfig()
82
+ val runtime: DockerServerRuntime = instance
83
+ .getOrCreateConnection(dockerConnection)
84
+ .await()
85
+
86
+ return runtime
87
+ }
52
88
}
0 commit comments