Commit 7ef47a09 authored by Peter van 't Hof's avatar Peter van 't Hof
Browse files

Switch to Argonaut library

parent 6294de9f
...@@ -54,6 +54,11 @@ ...@@ -54,6 +54,11 @@
<artifactId>gatk-queue-package-distribution</artifactId> <artifactId>gatk-queue-package-distribution</artifactId>
<version>3.2</version> <version>3.2</version>
</dependency> </dependency>
<dependency>
<groupId>io.argonaut</groupId>
<artifactId>argonaut_2.11</artifactId>
<version>6.1-M3</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
......
package nl.lumc.sasc.biopet.core.config package nl.lumc.sasc.biopet.core.config
import nl.lumc.sasc.biopet.core._ import nl.lumc.sasc.biopet.core._
import scala.util.parsing.json._
import java.io.File import java.io.File
import org.broadinstitute.gatk.queue.util.Logging import org.broadinstitute.gatk.queue.util.Logging
import argonaut._, Argonaut._
import scalaz._, Scalaz._
class Config(var map: Map[String,Any]) extends Logging { class Config(var map: Map[String,Any]) extends Logging {
logger.debug("Init phase of config") logger.debug("Init phase of config")
...@@ -24,23 +25,45 @@ class Config(var map: Map[String,Any]) extends Logging { ...@@ -24,23 +25,45 @@ class Config(var map: Map[String,Any]) extends Logging {
} }
def loadConfigFile(configFile:File) { def loadConfigFile(configFile:File) {
var configJson = JSON.parseFull(scala.io.Source.fromFile(configFile).mkString) logger.debug("Jsonfile: " + configFile)
val jsonText = scala.io.Source.fromFile(configFile).mkString
val json = Parse.parseOption(jsonText)
logger.debug(json)
val configJson = jsonToMap(json.get)
logger.debug("Contain: " + configJson)
if (configJson == None) { if (configJson == None) {
throw new IllegalStateException("The config JSON file is either not properly formatted or not a JSON file, file: " + configFile) throw new IllegalStateException("The config JSON file is either not properly formatted or not a JSON file, file: " + configFile)
} }
this.logger.debug("Jsonfile: " + configFile) if (map.isEmpty) map = configJson
this.logger.debug("Contain: " + configJson) else map = Config.mergeMaps(configJson, map)
configJson.get match { logger.debug("New config: " + map)
case m:Map[_,_] => { }
logger.debug(m)
if (map.isEmpty) map = m.asInstanceOf[Map[String,Any]] private def jsonToMap(json:Json) : Map[String, Any] = {
else map = Config.mergeMaps(m.asInstanceOf[Map[String,Any]], map) var output: Map[String, Any] = Map()
if (json.isObject) {
for (key <- json.objectFieldsOrEmpty) {
val value: Any = jsonToAny(json.field(key).get)
output += (key -> value)
} }
case null => logger.warn("Config " + configFile + " wrong format") } else return null
} return output
this.logger.debug("config: " + map) }
private def jsonToAny(json:Json): Any = {
if (json.isObject) return jsonToMap(json)
else if (json.isArray) {
var list:List[Any] = List()
for (value <- json.objectValues.get) list ::= jsonToAny(value)
return list
} else if (json.isBool) return json.bool.get
else if (json.isString) return json.string.get.toString
else if (json.isNumber) {
val num = json.number.get
if (num.toString.contains(".")) return num.toDouble
else return num.toLong
} else throw new IllegalStateException("Config value type not supported, value: " + json)
} }
def getMap() : Map[String,Any] = map def getMap() : Map[String,Any] = map
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment