diff --git a/src/main/kotlin/com/asyncapi/plugin/idea/_core/AsyncAPISpecificationHtmlRenderer.kt b/src/main/kotlin/com/asyncapi/plugin/idea/_core/AsyncAPISpecificationHtmlRenderer.kt index 9e7eec6..2120779 100644 --- a/src/main/kotlin/com/asyncapi/plugin/idea/_core/AsyncAPISpecificationHtmlRenderer.kt +++ b/src/main/kotlin/com/asyncapi/plugin/idea/_core/AsyncAPISpecificationHtmlRenderer.kt @@ -8,14 +8,11 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory import com.intellij.json.JsonFileType import com.intellij.openapi.components.Service import com.intellij.openapi.components.service -import com.intellij.openapi.util.io.FileUtil -import com.intellij.openapi.util.io.systemIndependentPath import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import io.netty.handler.codec.http.FullHttpRequest import org.jetbrains.yaml.YAMLFileType import java.io.File -import java.util.function.Supplier /** * @author Pavel Bodiachevskii @@ -47,20 +44,19 @@ class AsyncAPISpecificationHtmlRenderer { val isJson = specificationVirtualFile.fileType is JsonFileType val specification = replaceLocalReferences(specificationFile.readText(Charsets.UTF_8), specificationVirtualFile, isJson) - val temporalSpecificationUrl = saveAsTemporalFile(specification, isJson) val specificationTemplate = this.javaClass.getResource(specificationTemplateUrl) specificationTemplate ?: return "specification template not found." val webSocket = webSocketRendererProvider.provide( fullHttpRequest = request, - supplier = Supplier { specificationVirtualFile } + supplier = { specificationVirtualFile } ) return specificationTemplate.readText(Charsets.UTF_8) .replace( - "url: '',", - "url: '${urlProvider.specification(temporalSpecificationUrl)}'," + "schema: {},", + "schema: $specification," ) .replace( "", @@ -74,7 +70,7 @@ class AsyncAPISpecificationHtmlRenderer { ) } - private fun replaceLocalReferences(specification: String, specificationFile: VirtualFile, isJson: Boolean): String { + fun replaceLocalReferences(specification: String, specificationFile: VirtualFile, isJson: Boolean): String { val objectMapper = if (isJson) { ObjectMapper() } else { @@ -89,7 +85,7 @@ class AsyncAPISpecificationHtmlRenderer { } } - return objectMapper.writeValueAsString(tree) + return ObjectMapper().writeValueAsString(tree) } private fun localReferenceToFileUrl(localReference: String, specificationFile: VirtualFile): String { @@ -104,17 +100,4 @@ class AsyncAPISpecificationHtmlRenderer { return urlProvider.reference(referencedFile.path, specificationComponentReference) } - private fun saveAsTemporalFile(specification: String, isJson: Boolean): String { - val suffix = if (isJson) { - ".json" - } else { - ".yaml" - } - - val tempSpecification = FileUtil.createTempFile("jasyncapi-idea-plugin-${System.currentTimeMillis()}", suffix, true) - tempSpecification.writeText(specification, Charsets.UTF_8) - - return tempSpecification.systemIndependentPath - } - } \ No newline at end of file diff --git a/src/main/kotlin/com/asyncapi/plugin/idea/extensions/web/StaticServer.kt b/src/main/kotlin/com/asyncapi/plugin/idea/extensions/web/StaticServer.kt index ce47320..706bdb4 100644 --- a/src/main/kotlin/com/asyncapi/plugin/idea/extensions/web/StaticServer.kt +++ b/src/main/kotlin/com/asyncapi/plugin/idea/extensions/web/StaticServer.kt @@ -12,6 +12,7 @@ import org.jetbrains.io.send import org.jetbrains.yaml.YAMLFileType import java.io.File import java.nio.charset.StandardCharsets +import kotlin.text.toByteArray /** * @author Pavel Bodiachevskii @@ -128,7 +129,12 @@ class StaticServer : HttpRequestHandler() { "application/x-yaml" } - return Resource(contentType, requestedFile.readBytes()) + val componentJson = asyncAPISpecificationHtmlRenderer.replaceLocalReferences( + requestedFile.readText(StandardCharsets.UTF_8), + referenceVirtualFile, + isJson + ) + return Resource(contentType, componentJson.toByteArray(StandardCharsets.UTF_8)) } private fun resolveResource(resourceName: String): Resource? { diff --git a/src/main/resources/ui/index.html b/src/main/resources/ui/index.html index c7524fa..c7df0db 100644 --- a/src/main/resources/ui/index.html +++ b/src/main/resources/ui/index.html @@ -11,10 +11,7 @@