From 9b206d4dc58f24360dc7184b236a795351e0d8a5 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 19 Oct 2015 22:56:40 -0700 Subject: [PATCH] Better JSON. --- build.gradle | 3 +- kobalt.iml | 1 + kobalt/src/Build.kt | 4 +- .../com/beust/kobalt/internal/KobaltServer.kt | 76 ++++++++----------- 4 files changed, 35 insertions(+), 49 deletions(-) diff --git a/build.gradle b/build.gradle index 928554da..2d92f804 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,8 @@ dependencies { 'com.google.guava:guava:18.0', 'org.apache.maven:maven-model:3.3.3', 'com.github.spullara.mustache.java:compiler:0.8.18', - "io.reactivex:rxjava:1.0.14" + "io.reactivex:rxjava:1.0.14", + "com.google.code.gson:gson:2.4" // compile files("/Users/beust/.kobalt/repository/com/beust/kobalt-example-plugin/build/libs/kobalt-example-plugin.jar") testCompile 'org.testng:testng:6.9.6' diff --git a/kobalt.iml b/kobalt.iml index bf0ac307..6b210483 100644 --- a/kobalt.iml +++ b/kobalt.iml @@ -41,5 +41,6 @@ + \ No newline at end of file diff --git a/kobalt/src/Build.kt b/kobalt/src/Build.kt index 71dd7370..e9305bd7 100644 --- a/kobalt/src/Build.kt +++ b/kobalt/src/Build.kt @@ -60,14 +60,14 @@ val kobalt = kotlinProject(wrapper) { "com.beust:jcommander:1.48", "com.beust:klaxon:0.16", "com.squareup.okhttp:okhttp:2.5.0", - "org.slf4j:slf4j-api:1.7.12", "org.jsoup:jsoup:1.8.3", "com.google.inject:guice:4.0", "com.google.inject.extensions:guice-assistedinject:4.0", "com.google.guava:guava:19.0-rc2", "org.apache.maven:maven-model:3.3.3", "com.github.spullara.mustache.java:compiler:0.9.1", - "io.reactivex:rxjava:1.0.14" + "io.reactivex:rxjava:1.0.14", + "com.google.code.gson:gson:2.4" ) } } diff --git a/src/main/kotlin/com/beust/kobalt/internal/KobaltServer.kt b/src/main/kotlin/com/beust/kobalt/internal/KobaltServer.kt index 63585c73..d77a4f38 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/KobaltServer.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/KobaltServer.kt @@ -1,24 +1,19 @@ package com.beust.kobalt.internal -import com.beust.klaxon.json import com.beust.kobalt.Args -import com.beust.kobalt.api.Project import com.beust.kobalt.kotlin.BuildFile 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.gson.Gson import com.google.inject.Inject -import com.google.inject.assistedinject.Assisted import java.io.BufferedReader import java.io.InputStreamReader import java.io.PrintWriter import java.net.ServerSocket import java.nio.file.Paths -import java.util.concurrent.Executor -import java.util.concurrent.ExecutorService public class KobaltServer @Inject constructor(val args: Args, val executors: KobaltExecutors, val buildFileCompilerFactory: ScriptCompiler2.IFactory) : Runnable { @@ -44,9 +39,7 @@ public class KobaltServer @Inject constructor(val args: Args, val executors: Kob while (inputLine != null) { log(1, "Received $inputLine") val command = getCommand(inputLine) - if (command != null) { - command!!.run() - } + command?.run() if (inputLine.equals("Bye.")) break; inputLine = ins.readLine() @@ -72,9 +65,36 @@ public class KobaltServer @Inject constructor(val args: Args, val executors: Kob } } + class DependencyData(val id: String, val path: String) + + class ProjectData( val name: String, val dependencies: List, + val providedDependencies: List, + val runtimeDependencies: List, + val testDependencies: List, + val testProvidedDependencies: List) + + class GetDependenciesData(val projects: List) + private fun toJson(info: ScriptCompiler2.BuildScriptInfo) : String { + val executor = executors.miscExecutor + val projects = arrayListOf() + + fun toDependencyData(d: IClasspathDependency) : DependencyData { + val dep = MavenDependency.create(d.id, executor) + return DependencyData(d.id, dep.jarFile.get().absolutePath) + } + + info.projects.forEach { project -> + projects.add(ProjectData(project.name!!, + project.compileDependencies.map { toDependencyData(it) }, + project.compileProvidedDependencies.map { toDependencyData(it) }, + project.compileRuntimeDependencies.map { toDependencyData(it) }, + project.testDependencies.map { toDependencyData(it) }, + project.testProvidedDependencies.map { toDependencyData(it) })) + } log(1, "Returning JSON for BuildScriptInfo") - return toJson(info, executors.miscExecutor) + val result = Gson().toJson(GetDependenciesData(projects)) + return result } private fun getCommand(command: String): Command? { @@ -96,40 +116,4 @@ public class KobaltServer @Inject constructor(val args: Args, val executors: Kob } } } - - 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, 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(",") + - "]" - } - } }