1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 00:17:11 -07:00

Jersey work.

This commit is contained in:
Cedric Beust 2016-04-27 03:11:33 -08:00
parent 85db1c767e
commit 8b9f2d9655
7 changed files with 196 additions and 67 deletions

View file

@ -1,25 +1,57 @@
<component name="libraryTable">
<library name="kobalt (Compile)">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/repository/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/ext/jersey-entity-filtering/2.22.2/jersey-entity-filtering-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/media/jersey-media-moxy/2.22.2/jersey-media-moxy-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/inject/extensions/guice-assistedinject/4.0/guice-assistedinject-4.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/retrofit2/retrofit/2.0.0/retrofit-2.0.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/hk2/hk2-api/2.4.0-b34/hk2-api-2.4.0-b34.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b34/aopalliance-repackaged-2.4.0-b34.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/osgi/org.osgi.core/4.3.1/org.osgi.core-4.3.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/code/gson/gson/2.6.2/gson-2.6.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-security/8.1.19.v20160209/jetty-security-8.1.19.v20160209.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/core/jersey-server/2.22.2/jersey-server-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/hk2/hk2-utils/2.4.0-b34/hk2-utils-2.4.0-b34.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/beust/jcommander/1.48/jcommander-1.48.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/containers/jersey-container-jetty-http/2.22.2/jersey-container-jetty-http-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/hk2/osgi-resource-locator/1.0.1/osgi-resource-locator-1.0.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-servlet/8.1.19.v20160209/jetty-servlet-8.1.19.v20160209.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/okhttp3/okhttp/3.2.0/okhttp-3.2.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/okio/okio/1.6.0/okio-1.6.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/inject/javax.inject/1/javax.inject-1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/maven/maven-model/3.3.9/maven-model-3.3.9.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/github/spullara/mustache/java/compiler/0.9.1/compiler-0.9.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/osgi/org.osgi.core/4.3.1/org.osgi.core-4.3.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.0.0/kotlin-compiler-embeddable-1.0.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/code/gson/gson/2.6.2/gson-2.6.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/retrofit2/converter-gson/2.0.0/converter-gson-2.0.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.22.2/jersey-container-servlet-core-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/inject/guice/4.0/guice-4.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/biz/aQute/bnd/bndlib/2.4.0/bndlib-2.4.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-continuation/9.1.1.v20140108/jetty-continuation-9.1.1.v20140108.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-server/9.1.1.v20140108/jetty-server-9.1.1.v20140108.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/okio/okio/1.6.0/okio-1.6.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-io/9.1.1.v20140108/jetty-io-9.1.1.v20140108.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/media/jersey-media-jaxb/2.22.2/jersey-media-jaxb-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/core/jersey-common/2.22.2/jersey-common-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/github/spullara/mustache/java/compiler/0.9.1/compiler-0.9.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/core/jersey-client/2.22.2/jersey-client-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/retrofit2/retrofit/2.0.0/retrofit-2.0.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/hk2/external/javax.inject/2.4.0-b34/javax.inject-2.4.0-b34.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/persistence/org.eclipse.persistence.core/2.6.0/org.eclipse.persistence.core-2.6.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-http/9.1.1.v20140108/jetty-http-9.1.1.v20140108.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/jetty/jetty-util/9.1.1.v20140108/jetty-util-9.1.1.v20140108.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.22.2/jersey-guava-2.22.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.0.0/kotlin-compiler-embeddable-1.0.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/retrofit2/converter-gson/2.0.0/converter-gson-2.0.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/persistence/org.eclipse.persistence.moxy/2.6.0/org.eclipse.persistence.moxy-2.6.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/persistence/org.eclipse.persistence.asm/2.6.0/org.eclipse.persistence.asm-2.6.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/glassfish/hk2/hk2-locator/2.4.0-b34/hk2-locator-2.4.0-b34.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />

View file

@ -1,7 +1,9 @@
<component name="libraryTable">
<library name="kobalt (Test)">
<CLASSES>
<root url="jar://$USER_HOME$/java/testng/kobaltBuild/libs/testng-6.9.11-SNAPSHOT.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/beust/jcommander/1.48/jcommander-1.48.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/testng/testng/6.9.10/testng-6.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />

View file

@ -5,26 +5,26 @@
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/inject/extensions/guice-assistedinject/4.0/guice-assistedinject-4.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/sonatype/sisu/sisu-inject-plexus/2.2.3/sisu-inject-plexus-2.2.3.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/aether/aether-impl/1.1.0/aether-impl-1.1.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/code/gson/gson/2.6.2/gson-2.6.2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/beust/jcommander/1.48/jcommander-1.48.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/maven/maven-artifact/3.3.9/maven-artifact-3.3.9.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/beust/jcommander/1.48/jcommander-1.48.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/sonatype/aether/aether-util/1.13.1/aether-util-1.13.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/aether/aether-transport-http/1.1.0/aether-transport-http-1.1.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/slf4j/slf4j-nop/1.6.0/slf4j-nop-1.6.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/sonatype/aether/aether-connector-wagon/1.13.1/aether-connector-wagon-1.13.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/squareup/okhttp3/okhttp/3.2.0/okhttp-3.2.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/inject/javax.inject/1/javax.inject-1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/eclipse/aether/aether-spi/1.1.0/aether-spi-1.1.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/javax/inject/javax.inject/1/javax.inject-1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/maven/maven-model/3.3.9/maven-model-3.3.9.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/maven/maven-model-builder/3.3.9/maven-model-builder-3.3.9.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/sonatype/aether/aether-api/1.13.1/aether-api-1.13.1.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/io/reactivex/rxjava/1.0.16/rxjava-1.0.16.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/maven/maven-aether-provider/3.3.9/maven-aether-provider-3.3.9.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/sonatype/sisu/sisu-inject-bean/2.2.3/sisu-inject-bean-2.2.3.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/guava/guava/19.0-rc2/guava-19.0-rc2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/codehaus/plexus/plexus-component-annotations/1.6/plexus-component-annotations-1.6.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/guava/guava/19.0-rc2/guava-19.0-rc2.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/com/google/inject/guice/4.0/guice-4.0.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar!/" />
<root url="jar://$USER_HOME$/.kobalt/repository/org/sonatype/sisu/sisu-guice/3.0.3/sisu-guice-3.0.3.jar!/" />

View file

@ -1,14 +1,18 @@
import com.beust.kobalt.*
import com.beust.kobalt.TaskResult
import com.beust.kobalt.api.License
import com.beust.kobalt.api.Project
import com.beust.kobalt.api.Scm
import com.beust.kobalt.api.annotation.Task
import com.beust.kobalt.homeDir
import com.beust.kobalt.plugin.application.application
import com.beust.kobalt.plugin.java.javaCompiler
import com.beust.kobalt.plugin.kotlin.kotlinCompiler
import com.beust.kobalt.plugin.packaging.assemble
import com.beust.kobalt.plugin.publish.bintray
import com.beust.kobalt.plugin.publish.github
import com.beust.kobalt.project
import com.beust.kobalt.test
import java.io.File
import java.nio.file.Files
import java.nio.file.Paths
@ -22,6 +26,8 @@ object Versions {
val aether = "1.1.0"
val sonatypeAether = "1.13.1"
val maven = "3.3.9"
val jersey = "2.22.2"
val jetty = "8.1.19.v20160209" // "9.3.9.M1"
}
val wrapper = project {
@ -57,7 +63,7 @@ val kobaltPluginApi = project {
directory = "modules/kobalt-plugin-api"
description = "A build system in Kotlin"
url = "http://beust.com/kobalt"
licenses = arrayListOf(License("Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0"))
licenses = listOf(License("Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0"))
scm = Scm(url = "http://github.com/cbeust/kobalt",
connection = "https://github.com/cbeust/kobalt.git",
developerConnection = "git@github.com:cbeust/kobalt.git")
@ -135,7 +141,14 @@ val kobaltApp = project(kobaltPluginApi, wrapper) {
"com.squareup.retrofit2:retrofit:${Versions.retrofit}",
"com.squareup.retrofit2:converter-gson:${Versions.retrofit}",
"org.codehaus.plexus:plexus-utils:3.0.22",
"biz.aQute.bnd:bndlib:2.4.0"
"biz.aQute.bnd:bndlib:2.4.0",
"org.eclipse.jetty:jetty-server:${Versions.jetty}",
"org.eclipse.jetty:jetty-servlet:${Versions.jetty}",
"org.glassfish.jersey.core:jersey-server:${Versions.jersey}",
"org.glassfish.jersey.containers:jersey-container-servlet-core:${Versions.jersey}",
"org.glassfish.jersey.containers:jersey-container-jetty-http:${Versions.jersey}",
"org.glassfish.jersey.media:jersey-media-moxy:${Versions.jersey}"
// "org.eclipse.jetty.aggregate:jetty-all::uber:9.3.9.M1"
)
}

View file

@ -16,7 +16,7 @@ enum class SourceSet(val outputDir: String) {
companion object {
fun of(isTest: Boolean) = if (isTest) TEST else MAIN
private fun unknown(sourceSet: SourceSet) = throw KobaltException("Unknown source set: $sourceSet")
private fun unknown(sourceSet: SourceSet) : Nothing = throw KobaltException("Unknown source set: $sourceSet")
}
}

View file

@ -9,24 +9,83 @@ import com.beust.kobalt.internal.KobaltSettings
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.log
import com.beust.kobalt.misc.warn
import com.google.gson.Gson
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import com.google.inject.Guice
import okhttp3.OkHttpClient
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.POST
import retrofit2.http.Query
import java.io.*
import java.net.ConnectException
import java.net.Socket
import java.nio.file.Paths
import java.util.*
import java.util.concurrent.Executors
import javax.inject.Inject
fun main(argv: Array<String>) {
Kobalt.INJECTOR = Guice.createInjector(MainModule(Args(), KobaltSettings.readSettingsXml()))
val port = ServerProcess().launch()
println("SERVER RUNNING ON PORT $port")
KobaltClient().run()
}
interface Api {
@POST("/getDependencies")
fun getDependencies(@Query("buildFile") buildFile: String) : Call<List<DependencyData.GetDependenciesData>>
}
class KobaltClient : Runnable {
var outgoing: PrintWriter? = null
private val service = Retrofit.Builder()
.client(OkHttpClient.Builder().build())
.baseUrl("http://localhost:1252")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(Api::class.java)
override fun run() {
val buildFile = Paths.get(SystemProperties.homeDir, "kotlin/klaxon/kobalt/src/Build.kt").toString()
val dependencies = service.getDependencies(buildFile)
val results = dependencies.execute()
println("Dependencies: $results")
// .toString())
// var done = false
// var attempts = 1
// while (attempts < 10 && ! done) {
// try {
// val socket = Socket("localhost", portNumber)
// outgoing = PrintWriter(socket.outputStream, true)
// val testBuildfile = Paths.get(SystemProperties.homeDir, "kotlin/klaxon/kobalt/src/Build.kt")
// .toFile().absolutePath
// val c : String = """{ "name": "getDependencies", "buildFile": "$testBuildfile"}"""
// outgoing!!.println(c)
// val ins = BufferedReader(InputStreamReader(socket.inputStream))
// var line = ins.readLine()
// while (! done && line != null) {
// log(1, "Received from server:\n" + line)
// val jo = JsonParser().parse(line) as JsonObject
// if (jo.has("name") && "quit" == jo.get("name").asString.toLowerCase()) {
// log(1, "Quitting")
//// outgoing!!.println("{ \"name\": \"Quit\" }")
// done = true
// } else {
// val data = jo.get("data").asString
// val dd = Gson().fromJson(data, DependencyData.GetDependenciesData::class.java)
// println("Read GetDependencyData, project count: ${dd.projects.size}")
// line = ins.readLine()
// }
// }
// } catch(ex: ConnectException) {
// log(1, "Server not up, sleeping a bit")
// Thread.sleep(2000)
// attempts++
// }
// }
}
}
class ServerProcess {
val SERVER_FILE = KFiles.joinDir(homeDir(KFiles.KOBALT_DOT_DIR, "kobaltServer.properties"))
val KEY_PORT = "port"
@ -123,43 +182,3 @@ class ServerProcess {
}
}
class KobaltClient @Inject constructor() : Runnable {
var outgoing: PrintWriter? = null
override fun run() {
val portNumber = 1234
var done = false
var attempts = 1
while (attempts < 10 && ! done) {
try {
val socket = Socket("localhost", portNumber)
outgoing = PrintWriter(socket.outputStream, true)
val testBuildfile = Paths.get(SystemProperties.homeDir, "kotlin/klaxon/kobalt/src/Build.kt")
.toFile().absolutePath
val c : String = """{ "name": "getDependencies", "buildFile": "$testBuildfile"}"""
outgoing!!.println(c)
val ins = BufferedReader(InputStreamReader(socket.inputStream))
var line = ins.readLine()
while (! done && line != null) {
log(1, "Received from server:\n" + line)
val jo = JsonParser().parse(line) as JsonObject
if (jo.has("name") && "quit" == jo.get("name").asString.toLowerCase()) {
log(1, "Quitting")
// outgoing!!.println("{ \"name\": \"Quit\" }")
done = true
} else {
val data = jo.get("data").asString
val dd = Gson().fromJson(data, DependencyData.GetDependenciesData::class.java)
println("Read GetDependencyData, project count: ${dd.projects.size}")
line = ins.readLine()
}
}
} catch(ex: ConnectException) {
log(1, "Server not up, sleeping a bit")
Thread.sleep(2000)
attempts++
}
}
}
}

View file

@ -1,5 +1,6 @@
package com.beust.kobalt.app.remote
import com.beust.kobalt.Args
import com.beust.kobalt.api.Kobalt
import com.beust.kobalt.api.Project
import com.beust.kobalt.homeDir
@ -11,12 +12,21 @@ import com.beust.kobalt.misc.log
import com.google.gson.Gson
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import org.glassfish.jersey.jetty.JettyHttpContainerFactory
import org.glassfish.jersey.server.ResourceConfig
import org.glassfish.jersey.server.ServerProperties
import java.io.*
import java.lang.management.ManagementFactory
import java.net.ServerSocket
import java.net.SocketException
import java.util.*
import java.util.concurrent.Callable
import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
import javax.ws.rs.QueryParam
import javax.ws.rs.core.MediaType
import javax.ws.rs.core.UriBuilder
/**
* Launch a Kobalt server. If @param{force} is specified, a new server will be launched even if one was detected
@ -31,6 +41,16 @@ class KobaltServer(val force: Boolean, val port: Int = 1234,
// var outgoing: PrintWriter? = null
val pending = arrayListOf<CommandData>()
companion object {
lateinit var initCallback: (String) -> List<Project>
lateinit var cleanUpCallback: () -> Unit
}
init {
KobaltServer.initCallback = initCallback
KobaltServer.cleanUpCallback = cleanUpCallback
}
private val COMMAND_CLASSES = listOf(GetDependenciesCommand::class.java, PingCommand::class.java)
private val COMMANDS = COMMAND_CLASSES.map {
Kobalt.INJECTOR.getInstance(it).let { Pair(it.name, it) }
@ -39,8 +59,9 @@ class KobaltServer(val force: Boolean, val port: Int = 1234,
override fun call() : Int {
val availablePort = ProcessUtil.findAvailablePort(port)
try {
if (createServerFile(availablePort, force)) {
privateRun(availablePort)
if (createServerFile(port, force)) {
// oldRun(port)
privateRun(port)
}
} catch(ex: Exception) {
ex.printStackTrace()
@ -97,8 +118,50 @@ class KobaltServer(val force: Boolean, val port: Int = 1234,
}
}
@Path("/v0")
class MyResource : ResourceConfig() {
init {
property(ServerProperties.TRACING, "ALL")
}
@GET
@Path("getDependencies")
@Produces(MediaType.APPLICATION_JSON)
fun getDependencies(@QueryParam("buildFile") buildFile: String) : String {
try {
val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java)
val args = Kobalt.INJECTOR.getInstance(Args::class.java)
val projects = initCallback(buildFile)
val dd = dependencyData.dependenciesDataFor(buildFile, args)
val data = CommandData("getDependencies", Gson().toJson(dd), dd.errorMessage)
return Gson().toJson(data)
} catch(ex: Exception) {
return "Error: " + ex.message
} finally {
cleanUpCallback()
}
}
}
private fun privateRun(port: Int) {
log(1, "Listening to port $port")
val baseUri = UriBuilder.fromUri("http://localhost/").port(port).build()
val config = ResourceConfig(MyResource::class.java)
with (JettyHttpContainerFactory.createServer(baseUri, config)) {
try {
start()
join()
} finally {
destroy()
}
}
}
private fun oldRun(port: Int) {
log(1, "Listening to port $port")
var quit = false
serverInfo = ServerInfo(port)
while (!quit) {