1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-25 16:07:12 -07:00

JSON server.

This commit is contained in:
Cedric Beust 2015-10-20 03:57:00 -07:00
parent e792680dd5
commit 05c6da10f9
2 changed files with 47 additions and 3 deletions

View file

@ -1,15 +1,22 @@
package com.beust.kobalt.internal
import com.beust.kobalt.Args
import com.beust.kobalt.api.Project
import com.beust.kobalt.kotlin.ScriptCompiler2
import com.beust.kobalt.maven.IClasspathDependency
import com.beust.kobalt.maven.MavenDependency
import com.beust.kobalt.maven.SimpleDep
import com.beust.kobalt.misc.KobaltExecutors
import com.beust.kobalt.misc.log
import com.google.inject.Inject
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.PrintWriter
import java.net.ServerSocket
import java.util.concurrent.Executor
import java.util.concurrent.ExecutorService
public class KobaltServer @Inject constructor() : Runnable {
public class KobaltServer @Inject constructor(val executors: KobaltExecutors) : Runnable {
var outgoing: PrintWriter? = null
val pending = arrayListOf<ScriptCompiler2.BuildScriptInfo>()
@ -39,7 +46,8 @@ public class KobaltServer @Inject constructor() : Runnable {
fun sendInfo(info: ScriptCompiler2.BuildScriptInfo) {
if (outgoing != null) {
outgoing!!.println("Sending info with project count: " + info.projects.size())
val json = toJson(info, executors.miscExecutor)
outgoing!!.println(json)
} else {
log(1, "Queuing $info")
synchronized(pending) {
@ -47,4 +55,40 @@ public class KobaltServer @Inject constructor() : Runnable {
}
}
}
companion object {
internal fun toJson(info: ScriptCompiler2.BuildScriptInfo, executor: ExecutorService): String {
val result = "{ projects: [" +
info.projects.map { toJson(it, executor) }.join(",\n") +
"]\n}\n"
return result
}
private fun toJson(project: Project, executor: ExecutorService): String {
var result = "{\n" +
arrayListOf(
"\"name\" : \"${project.name}\"",
toJson("dependencies", project.compileDependencies, executor),
toJson("providedDependencies", project.compileProvidedDependencies, executor),
toJson("runtimeDependencies", project.compileRuntimeDependencies, executor),
toJson("testDependencies", project.testDependencies, executor),
toJson("testProvidedDependencies", project.testProvidedDependencies, executor)
).join(",\n") +
"}\n"
return result
}
private fun toJson(name: String, dependencies: List<IClasspathDependency>, executor: ExecutorService) : String {
return "\"$name\" : [" +
dependencies.map {
val dep = MavenDependency.create(it.id, executor)
val path = dep.jarFile.get()
"{\n" +
"\"id\" : \"${it.id}\",\n" +
"\"path\" : \"$path\"" +
"}\n"
}.join(",") +
"]"
}
}
}

View file

@ -25,7 +25,7 @@ open public class SimpleDep(override val groupId: String, override val artifactI
fun toPomFile(r: RepoFinder.RepoResult) = toFile(r.version, r.snapshotVersion, ".pom")
fun toJarFile(v: String) = toFile(v, "", ".jar")
fun toJarFile(v: String = version) = toFile(v, "", ".jar")
fun toJarFile(r: RepoFinder.RepoResult) = toFile(r.version, r.snapshotVersion, ".jar")