diff --git a/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/fileModules.ssp b/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/fileModules.ssp
new file mode 100644
index 0000000000000000000000000000000000000000..79b49c238ba6b2ab2a1d7855b2c883bcc8a1b8ec
--- /dev/null
+++ b/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/fileModules.ssp
@@ -0,0 +1,22 @@
+#import(nl.lumc.sasc.biopet.utils.summary.db.Schema.File)
+#import(nl.lumc.sasc.biopet.utils.summary.db.SummaryDb)
+#import(nl.lumc.sasc.biopet.utils.summary.db.SummaryDb._)
+#import(nl.lumc.sasc.biopet.utils.summary.db.SummaryDb.Implicts._)
+#import(nl.lumc.sasc.biopet.core.report.ReportPage)
+#import(scala.concurrent.Await)
+#import(scala.concurrent.duration.Duration)
+<%@ var summary: SummaryDb %>
+<%@ var sampleId: Option[Int] = None %>
+<%@ var libId: Option[Int] = None %>
+<%@ var runId: Int %>
+<%@ var pipelineNames: List[Option[String]] %>
+
+
+ Pipeline |
+
+
+ #for (pipelineName <- pipelineNames)
+ ${pipelineName} |
+ #end
+
+
diff --git a/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/files.ssp b/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/files.ssp
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57911cf797e909aba904cbabfe5d413473aeab2a 100644
--- a/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/files.ssp
+++ b/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/files.ssp
@@ -0,0 +1,23 @@
+#import(nl.lumc.sasc.biopet.utils.summary.db.Schema.File)
+#import(nl.lumc.sasc.biopet.utils.summary.db.SummaryDb)
+#import(nl.lumc.sasc.biopet.utils.summary.db.SummaryDb._)
+#import(nl.lumc.sasc.biopet.utils.summary.db.SummaryDb.Implicts._)
+#import(nl.lumc.sasc.biopet.core.report.ReportPage)
+#import(scala.concurrent.Await)
+#import(scala.concurrent.duration.Duration)
+<%@ var summary: SummaryDb %>
+<%@ var sampleId: Option[Int] = None %>
+<%@ var libId: Option[Int] = None %>
+<%@ var runId: Int %>
+<%@ var files: Seq[File]%>
+
+
+ Key |
+ path | md5 |
+
+
+#for (file <- files)
+ ${file.key} | ${file.path} | ${file.md5} |
+#end
+
+
diff --git a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDb.scala b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDb.scala
index 9822cac16862c9e693e666f88b74252bfd3e2994..802818bd3217a8be296bf86a14018074b43c2326 100644
--- a/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDb.scala
+++ b/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDb.scala
@@ -177,6 +177,11 @@ class SummaryDb(val db: Database) extends Closeable {
getPipelines(runId = Some(runId), name = Some(pipelineName)).map(_.headOption.map(_.id))
}
+ /** Return name of a pipeline */
+ def getPipelineName(pipelineId: Int): Future[Option[String]] = {
+ getPipelines(pipelineId = Some(pipelineId)).map(_.headOption.map(_.name))
+ }
+
/** Creates a new module, even if it already exist. This may give a database exeption */
def forceCreateModule(name: String, runId: Int, pipelineId: Int): Future[Int] = {
val id = Await.result(db.run(modules.size.result), Duration.Inf)
@@ -211,6 +216,11 @@ class SummaryDb(val db: Database) extends Closeable {
getModules(runId = Some(runId), name = Some(moduleName), pipelineId = Some(pipelineId)).map(_.headOption.map(_.id))
}
+ /** Returns name of a module */
+ def getModuleName(pipelineId: Int, moduleId: Int): Future[Option[String]] = {
+ getModules(pipelineId = Some(pipelineId), moduleId = Some(moduleId)).map(_.headOption.map(_.name))
+ }
+
/** Create a new stat in the database, This method is need checking before */
def createStat(runId: Int, pipelineId: Int, moduleId: Option[Int] = None,
sampleId: Option[Int] = None, libId: Option[Int] = None, content: String): Future[Int] = {
diff --git a/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDbTest.scala b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDbTest.scala
index a7ff95f453d13964b6ef053a6df1ff04810ff307..e819bded22fc34833de8b812af7cca19ce17136f 100644
--- a/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDbTest.scala
+++ b/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/summary/db/SummaryDbTest.scala
@@ -101,7 +101,9 @@ class SummaryDbTest extends TestNGSuite with Matchers {
val runId = Await.result(db.createRun("name", "dir", "version", "hash", date), Duration.Inf)
Await.result(db.getPipelines(), Duration.Inf) shouldBe empty
+ Await.result(db.getPipelineName(0), Duration.Inf) shouldBe None
val pipelineId = Await.result(db.createPipeline("test", runId), Duration.Inf)
+ Await.result(db.getPipelineName(pipelineId), Duration.Inf) shouldBe Some("test")
Await.result(db.getPipelines(), Duration.Inf) shouldBe Seq(Schema.Pipeline(pipelineId, "test", runId))
Await.result(db.getPipelineId(runId, "test"), Duration.Inf) shouldBe Some(pipelineId)
Await.result(db.createPipeline("test", runId), Duration.Inf) shouldBe pipelineId
@@ -122,8 +124,10 @@ class SummaryDbTest extends TestNGSuite with Matchers {
val runId = Await.result(db.createRun("name", "dir", "version", "hash", date), Duration.Inf)
val pipelineId = Await.result(db.createPipeline("test", runId), Duration.Inf)
Await.result(db.getModules(), Duration.Inf) shouldBe empty
+ Await.result(db.getModuleName(pipelineId, 0), Duration.Inf) shouldBe None
val moduleId = Await.result(db.createModule("test", runId, pipelineId), Duration.Inf)
Await.result(db.getmoduleId(runId, "test", pipelineId), Duration.Inf) shouldBe Some(moduleId)
+ Await.result(db.getModuleName(pipelineId, moduleId), Duration.Inf) shouldBe Some("test")
Await.result(db.getModules(), Duration.Inf) shouldBe Seq(Schema.Module(pipelineId, "test", runId, pipelineId))
Await.result(db.createModule("test", runId, pipelineId), Duration.Inf) shouldBe pipelineId
Await.result(db.getModules(), Duration.Inf) shouldBe Seq(Schema.Module(pipelineId, "test", runId, pipelineId))
diff --git a/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala b/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala
index 0f7d621ad3f8866f23fe9a4713f58fa0cf97445d..1d0e39a45ea31749f68ca31a32d189f7982bae2a 100644
--- a/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala
+++ b/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala
@@ -14,14 +14,14 @@
*/
package nl.lumc.sasc.biopet.pipelines.mapping
-import nl.lumc.sasc.biopet.core.report.{MultisampleReportBuilder, ReportBuilderExtension, ReportPage, ReportSection}
+import nl.lumc.sasc.biopet.core.report.{ MultisampleReportBuilder, ReportBuilderExtension, ReportPage, ReportSection }
import nl.lumc.sasc.biopet.pipelines.bammetrics.BammetricsReport
import nl.lumc.sasc.biopet.pipelines.flexiprep.FlexiprepReport
import nl.lumc.sasc.biopet.utils.config.Configurable
import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb.Implicts._
import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb._
-import scala.concurrent.{Await, Future}
+import scala.concurrent.{ Await, Future }
import scala.concurrent.duration.Duration
import scala.concurrent.ExecutionContext.Implicits.global
@@ -119,15 +119,22 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder {
val dbFiles = summary.getFiles(runId, sample = Some(sampleId.map(SampleId).getOrElse(NoSample)),
library = Some(libraryId.map(LibraryId).getOrElse(NoLibrary)))
.map(_.groupBy(_.pipelineId))
- .map(_.map { case (pipelineId, files) =>
- val moduleSections = files.groupBy(_.moduleId).map { case (moduleId, files) =>
- summary.getModules(moduleId = moduleId, pipelineId = pipelineId)
- .map(_.headOption.map(_.name).getOrElse("Pipeline") -> ReportSection("/nl/lumc/sasc/biopet/core/report/files.ssp"))
- }
- summary.getPipelines(pipelineId = pipelineId).map(_.head.name -> ReportPage(Nil, Await.result(Future.sequence(moduleSections), Duration.Inf).toList, Map()))
+ val modulePages = dbFiles.map(_.map {
+ case (pipelineId, files) =>
+ val moduleSections = files.groupBy(_.moduleId).map {
+ case (moduleId, files) =>
+ val moduleName: Future[String] = moduleId match {
+ case Some(id) => summary.getModuleName(pipelineId, id).map(_.getOrElse("Pipeline"))
+ case _ => Future("Pipeline")
+ }
+ moduleName.map(_ -> ReportSection("/nl/lumc/sasc/biopet/core/report/files.ssp", Map("files" -> files)))
+ }
+ summary.getPipelineName(pipelineId = pipelineId).map(_.get -> ReportPage(Nil, Await.result(Future.sequence(moduleSections), Duration.Inf).toList, Map()))
})
- dbFiles.flatMap(Future.sequence(_)).map(x => ReportPage(x.toList, Nil, Map()))
+ val pipelineNames = dbFiles.flatMap(x => Future.sequence(x.map(y => summary.getPipelineName(y._1))))
+
+ modulePages.flatMap(Future.sequence(_)).map(x => ReportPage(x.toList, "Pipelines" -> ReportSection("/nl/lumc/sasc/biopet/core/report/fileModules.ssp", Map("pipelineNames" -> Await.result(pipelineNames, Duration.Inf).toList)) ::Nil, Map()))
}
/** Single sample page */
@@ -184,7 +191,7 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder {
else Nil) ::: (if (krakenExecuted) List("Dustbin analysis" -> ReportPage(List(), List(
"Krona Plot" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp"
)), Map()))
- else Nil),
+ else Nil) ::: List("Files" -> Await.result(filesPage(sampleId = sampleId, libraryId = libId), Duration.Inf)),
"Alignment" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp") ::
(if (flexiprepExecuted) List("QC reads" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"),
"QC bases" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp"))