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(",") +
- "]"
- }
- }
}