Skip to content

Commit

Permalink
feat(httpclient): add HttpClientRunService for HTTP requests
Browse files Browse the repository at this point in the history
Add HttpClientRunService to handle HTTP request configurations and executions.

- Added HttpClientRunService class to handle HTTP request configurations and executions.
- Updated project dependencies to include the httpclient module.
- Added plugin configuration for the HttpClient extension in the project settings.
  • Loading branch information
phodal committed Jun 2, 2024
1 parent 4fc31da commit 8a33137
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 0 deletions.
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,17 @@ project(":toolsets:git") {
}
}

project(":toolsets:httpclient") {
intellij {
version.set(prop("ideaVersion"))
plugins.set(ideaPlugins + "com.jetbrains.restClient")
}

dependencies {
implementation(project(":core"))
}
}

project(":shirelang") {
apply {
plugin("org.jetbrains.grammarkit")
Expand Down Expand Up @@ -195,6 +206,7 @@ project(":plugin") {
implementation(project(":shirelang"))
implementation(project(":languages:java"))
implementation(project(":toolsets:git"))
implementation(project(":toolsets:httpclient"))
}

// Collects all jars produced by compilation of project modules and merges them into singe one.
Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ include(
"languages:shell",

"toolsets:git",
"toolsets:httpclient",
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.phodal.shire.httpclient

import com.intellij.execution.Executor
import com.intellij.execution.RunManager
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.configurations.RunProfile
import com.intellij.httpClient.http.request.run.HttpRequestExecutorExtensionFactory
import com.intellij.httpClient.http.request.run.HttpRequestRunConfigurationExecutor
import com.intellij.httpClient.http.request.run.config.HttpRequestRunConfiguration
import com.intellij.httpClient.http.request.run.config.HttpRequestRunConfigurationType
import com.intellij.ide.scratch.ScratchFileService
import com.intellij.ide.scratch.ScratchRootType
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
import com.phodal.shirecore.provider.RunService

class HttpClientRunService : RunService {
override fun runConfigurationClass(project: Project): Class<out RunProfile>? {
return HttpRequestRunConfiguration::class.java
}

override fun runFile(project: Project, virtualFile: VirtualFile, psiElement: PsiElement?): String? {
val originFile: PsiFile = PsiManager.getInstance(project).findFile(virtualFile) ?: return null
val text = originFile.text

// create temporary file for http request
ScratchFileService.getInstance()
val scratchFile = ScratchRootType.getInstance()
.createScratchFile(project, "autodev-http-request.http", originFile.language, text) ?: return null

val psiFile = PsiManager.getInstance(project).findFile(scratchFile) ?: return null

val runner: RunnerAndConfigurationSettings = ConfigurationContext(psiFile)
.configurationsFromContext
?.firstOrNull()
?.configurationSettings ?: return null


val factory = HttpRequestRunConfigurationType.getInstance().configurationFactories[0]
val configuration = HttpRequestRunConfiguration(project, factory, "HttpRequest")

val runManager: RunManager = RunManager.getInstance(project)

configuration.settings.filePath = virtualFile.path

runManager.setUniqueNameIfNeeded(configuration)
runner.isTemporary = true
runManager.addConfiguration(runner)

val selectedRunner = runManager.selectedConfiguration
if ((selectedRunner == null || selectedRunner.isTemporary) && runManager.shouldSetRunConfigurationFromContext()) {
runManager.selectedConfiguration = runner
}

val executor: Executor = HttpRequestExecutorExtensionFactory.getRunExtension().executor ?: return null
HttpRequestRunConfigurationExecutor.getInstance().execute(
project, runner, executor
)

return "Run Success"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<idea-plugin package="com.phodal.shire.httpclient">
<!--suppress PluginXmlValidity -->
<dependencies>
<plugin id="com.jetbrains.restClient"/>
</dependencies>

<extensions defaultExtensionNs="com.phodal">
<shireRunService implementation="com.phodal.shire.httpclient.HttpClientRunService"/>
</extensions>
</idea-plugin>

0 comments on commit 8a33137

Please sign in to comment.