10
10
******************************************************************************/
11
11
package com.redhat.devtools.intellij.kubernetes.editor.describe
12
12
13
- import com.intellij.openapi.application.ApplicationManager
14
13
import com.intellij.openapi.application.WriteAction
15
14
import com.intellij.openapi.fileEditor.FileDocumentManager
16
15
import com.intellij.openapi.fileEditor.FileEditor
@@ -19,19 +18,21 @@ import com.intellij.openapi.project.Project
19
18
import com.intellij.openapi.util.Key
20
19
import com.intellij.openapi.vfs.VirtualFile
21
20
import com.intellij.testFramework.LightVirtualFile
21
+ import com.redhat.devtools.intellij.kubernetes.CompletableFutureUtils.UI_EXECUTOR
22
22
import com.redhat.devtools.intellij.kubernetes.editor.describe.describer.PodDescriber
23
23
import com.redhat.devtools.intellij.kubernetes.model.util.isSameResource
24
24
import io.fabric8.kubernetes.api.model.HasMetadata
25
25
import io.fabric8.kubernetes.api.model.Pod
26
26
import org.jetbrains.yaml.YAMLFileType
27
+ import java.util.concurrent.CompletableFuture
27
28
28
29
29
- open class DescriptionViewerFactory protected constructor() {
30
+ open class DescriptionViewerDispatcher protected constructor() {
30
31
31
32
companion object {
32
33
const val PREFIX_FILE_NAME = " Description-"
33
34
34
- val instance = DescriptionViewerFactory ()
35
+ val instance = DescriptionViewerDispatcher ()
35
36
36
37
private val KEY_RESOURCE = Key <HasMetadata >(HasMetadata ::class .java.name)
37
38
@@ -51,15 +52,22 @@ open class DescriptionViewerFactory protected constructor() {
51
52
52
53
fun openEditor (resource : HasMetadata , project : Project ) {
53
54
val description = describe(resource) ? : return
54
- val editor = getOpenedEditor(resource, project)
55
- if (editor != null ) {
56
- putUserData(resource, editor.file)
57
- replaceDocument(editor, description)
58
- } else {
59
- val file = createYamlFile(description)
60
- putUserData(resource, file)
61
- openNewEditor(file, project)
62
- }
55
+ val manager = FileEditorManager .getInstance(project) ? : return
56
+
57
+ CompletableFuture .supplyAsync(
58
+ {
59
+ val editor = getOpenedEditor(resource, manager)
60
+ if (editor != null ) {
61
+ putUserData(resource, editor.file)
62
+ replaceDocument(editor, description)
63
+ } else {
64
+ val file = createYamlFile(description)
65
+ putUserData(resource, file)
66
+ openNewEditor(file, manager)
67
+ }
68
+ },
69
+ UI_EXECUTOR
70
+ )
63
71
}
64
72
65
73
private fun putUserData (resource : HasMetadata , file : VirtualFile ) {
@@ -95,17 +103,16 @@ open class DescriptionViewerFactory protected constructor() {
95
103
return file
96
104
}
97
105
98
- private fun openNewEditor (file : VirtualFile , project : Project ) {
99
- FileEditorManager .getInstance(project) .openFile(file, true )
106
+ private fun openNewEditor (file : VirtualFile , manager : FileEditorManager ) {
107
+ manager .openFile(file, true )
100
108
}
101
109
102
- private fun getOpenedEditor (resource : HasMetadata , project : Project ): FileEditor ? {
103
- val manager = FileEditorManager .getInstance(project)
104
- val file = getOpenedEditorFile(manager, resource) ? : return null
110
+ private fun getOpenedEditor (resource : HasMetadata , manager : FileEditorManager ): FileEditor ? {
111
+ val file = getOpenedEditorFile(resource, manager) ? : return null
105
112
return manager.openFile(file, true ).firstOrNull()
106
113
}
107
114
108
- private fun getOpenedEditorFile (manager : FileEditorManager , resource : HasMetadata ): VirtualFile ? {
115
+ private fun getOpenedEditorFile (resource : HasMetadata , manager : FileEditorManager ): VirtualFile ? {
109
116
return manager.openFiles.find { file ->
110
117
try {
111
118
val fileResource = getResource(file)
0 commit comments