UnitsAdapter.scala 2.56 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
 * Copyright (c) 2015 Leiden University Medical Center and contributors
 *                    (see AUTHORS.md file for details).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package nl.lumc.sasc.sentinel.db

import com.mongodb.casbah.BulkWriteResult
import com.novus.salat._
import com.novus.salat.global._

bow's avatar
bow committed
23
import nl.lumc.sasc.sentinel.models.{ BaseLibRecord, BaseSampleRecord }
bow's avatar
bow committed
24
import nl.lumc.sasc.sentinel.processors.RunsProcessor
25
26
27
28

/**
 * Trait for storing samples and libraries from run summaries.
 *
bow's avatar
bow committed
29
30
 * @tparam S Subclass of [[nl.lumc.sasc.sentinel.models.BaseSampleRecord]] representing a sample run by a pipeline.
 * @tparam L Subclass of [[nl.lumc.sasc.sentinel.models.BaseLibRecord]] representing a library run by a pipeline.
31
 */
bow's avatar
bow committed
32
trait UnitsAdapter[S <: BaseSampleRecord, L <: BaseLibRecord] extends MongodbConnector { this: RunsProcessor =>
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

  /** Collection for the samples. */
  private lazy val samplesColl = mongo.db(collectionNames.pipelineSamples(pipelineName))

  /** Collection for the libraries. */
  private lazy val libsColl = mongo.db(collectionNames.pipelineLibs(pipelineName))

  /**
   * Stores the given sequence of samples into the sample collection.
   *
   * @param samples Samples to store.
   * @return Bulk write operation result.
   */
  def storeSamples(samples: Seq[S])(implicit m: Manifest[S]): BulkWriteResult = {
    // TODO: refactor to use Futures instead
    val builder = samplesColl.initializeUnorderedBulkOperation
    val docs = samples.map { case sample => grater[S].asDBObject(sample) }
    docs.foreach { case doc => builder.insert(doc) }
    builder.execute()
  }

  /**
   * Stores the given sequence of libraries into the sample collection.
   *
   * @param libs Libraries to store.
   * @return Bulk write operation result.
   */
  def storeLibs(libs: Seq[L])(implicit m: Manifest[L]): BulkWriteResult = {
    // TODO: refactor to use Futures instead
    val builder = libsColl.initializeUnorderedBulkOperation
    val docs = libs.map { case lib => grater[L].asDBObject(lib) }
    docs.foreach { case doc => builder.insert(doc) }
    builder.execute()
  }
}