From 38194b88c26e5dc81d7497926ef8169ad5183f92 Mon Sep 17 00:00:00 2001
From: Peter van 't Hof <p.j.van_t_hof@lumc.nl>
Date: Mon, 16 Feb 2015 11:33:25 +0100
Subject: [PATCH] First version of write function

---
 .../biopet/core/summary/WriteSummary.scala    | 40 ++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/WriteSummary.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/WriteSummary.scala
index c57313648..90395ff94 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/WriteSummary.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/WriteSummary.scala
@@ -1,11 +1,16 @@
 package nl.lumc.sasc.biopet.core.summary
 
-import java.io.{PrintWriter, File}
+import java.io.{FileInputStream, PrintWriter, File}
+import java.security.MessageDigest
 
 import nl.lumc.sasc.biopet.core.config.Configurable
+import nl.lumc.sasc.biopet.utils.ConfigUtils
 import org.broadinstitute.gatk.queue.function.{ QFunction, InProcessFunction }
 import org.broadinstitute.gatk.utils.commandline.{ Output, Input }
 
+import scala.collection.mutable
+import scala.io.Source
+
 /**
  * Created by pjvan_thof on 2/14/15.
  */
@@ -37,6 +42,39 @@ class WriteSummary(val root: Configurable) extends InProcessFunction with Config
   def run(): Unit = {
     val writer = new PrintWriter(out)
 
+    val bla = for (((name, sampleId, libraryId), summarizables) <- summaryQScript.summarizables;
+         summarizable <- summarizables) yield {
+      val map = Map(name -> parseSummarizable(summarizable))
+
+      (sampleId match {
+        case Some(sampleId) => Map("samples" -> Map(sampleId -> (libraryId match {
+          case Some(libraryId) => Map("libraries" -> Map(libraryId -> map))
+          case _ => map
+        })))
+        case _ => map
+      }, (v1:Any, v2:Any, key:String) => summarizable.resolveSummaryConflict(v1, v2, key))
+    }
+    bla.foldRight(Map[String, Any]())((a, b) => ConfigUtils.mergeMaps(a._1, b, a._2))
+
+    //TODO: QScript merging
+
     writer.close()
   }
+
+  def parseSummarizable(summarizable: Summarizable): Map[String, Map[String, Any]] = {
+    Map("data" -> summarizable.summaryData, "files" -> parseFiles(summarizable.summaryFiles))
+  }
+
+  def parseFiles(files: Map[String, File]): Map[String, Map[String, Any]] = {
+    for ((key, file) <- files) yield {
+      val map: mutable.Map[String, Any] = mutable.Map()
+      map += "path" -> file.getAbsolutePath
+      if (md5sum) map += "md5" -> parseChechsum(SummaryQScript.md5sumCache(file))
+      key -> map.toMap
+    }
+  }
+
+  def parseChechsum(checksumFile: File): String = {
+    Source.fromFile(checksumFile).getLines().toList.head.split(" ")(0)
+  }
 }
-- 
GitLab