From 8fc4872e795b0c9b757fa95c2f9552c414895311 Mon Sep 17 00:00:00 2001
From: Peter van 't Hof <p.j.van_t_hof@lumc.nl>
Date: Mon, 6 Apr 2015 11:35:59 +0200
Subject: [PATCH] Switch defaults from BIOPET_CONFIG env to a defaults var

---
 .../lumc/sasc/biopet/core/config/Config.scala | 24 ++++++++++++-------
 .../biopet/core/config/Configurable.scala     |  2 +-
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
index d2fe78ec2..21fa088ac 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
@@ -27,7 +27,8 @@ import scala.reflect.io.Directory
  * @param map Map with value for new config
  * @constructor Load config with existing map
  */
-class Config(var map: Map[String, Any]) extends Logging {
+class Config(var map: Map[String, Any],
+             protected[core] var defaults: Map[String, Any] = Map()) extends Logging {
   logger.debug("Init phase of config")
 
   /**
@@ -42,14 +43,14 @@ class Config(var map: Map[String, Any]) extends Logging {
    * Loading a environmental variable as location of config files to merge into the config
    * @param valueName Name of value
    */
-  def loadConfigEnv(valueName: String) {
+  def loadConfigEnv(valueName: String, default: Boolean) {
     sys.env.get(valueName) match {
       case Some(globalFiles) => {
         for (globalFile <- globalFiles.split(":")) {
           val file: File = new File(globalFile)
           if (file.exists) {
             logger.info("Loading config file: " + file)
-            loadConfigFile(file)
+            loadConfigFile(file, default)
           } else logger.warn(valueName + " value found but file '" + file + "' does not exist, no global config is loaded")
         }
       }
@@ -61,19 +62,24 @@ class Config(var map: Map[String, Any]) extends Logging {
    * Loading default value for biopet
    */
   def loadDefaultConfig() {
-    loadConfigEnv("BIOPET_CONFIG")
+    loadConfigEnv("BIOPET_CONFIG", true)
   }
 
   /**
    * Merge a json file into the config
    * @param configFile Location of file
    */
-  def loadConfigFile(configFile: File) {
+  def loadConfigFile(configFile: File, default: Boolean = false) {
     val configMap = fileToConfigMap(configFile)
-
-    if (map.isEmpty) map = configMap
-    else map = mergeMaps(configMap, map)
-    logger.debug("New config: " + map)
+    if (default) {
+      if (defaults.isEmpty) defaults = configMap
+      else defaults = mergeMaps(configMap, defaults)
+      logger.debug("New defaults: " + defaults)
+    } else {
+      if (map.isEmpty) map = configMap
+      else map = mergeMaps(configMap, map)
+      logger.debug("New config: " + map)
+    }
   }
 
   protected[config] var notFoundCache: List[ConfigValueIndex] = List()
diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala
index df01a5437..1a3df9eaf 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala
@@ -39,7 +39,7 @@ trait Configurable extends ImplicitConversions {
   /** Map to store defaults for config */
   def defaults: Map[String, Any] = {
     if (root != null) root.defaults
-    else Map()
+    else globalConfig.defaults
   }
 
   val config = new ConfigFunctions
-- 
GitLab