/
ProgramRecord.scala
75 lines (66 loc) · 2.57 KB
/
ProgramRecord.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
68
69
70
71
72
73
74
75
/**
* Licensed to Big Data Genomics (BDG) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The BDG licenses this file
* to you 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 org.bdgenomics.adam.models
import htsjdk.samtools.SAMProgramRecord
private[models] object ProgramRecord {
/**
* Builds a program record model from a SAM program record.
*
* @param pr The SAM program record to build from.
* @return Returns a serializable program record model.
*/
def apply(pr: SAMProgramRecord): ProgramRecord = {
// ID is a required field
val id: String = pr.getId
// these fields are optional and can be left null, so must check for null...
val commandLine: Option[String] = Option(pr.getCommandLine)
val name: Option[String] = Option(pr.getProgramName)
val version: Option[String] = Option(pr.getProgramVersion)
val previousID: Option[String] = Option(pr.getPreviousProgramGroupId)
new ProgramRecord(id, commandLine, name, version, previousID)
}
}
/**
* A serializable equivalent to the htsjdk SAMProgramRecord.
*
* @param id The ID of the program record line.
* @param commandLine An optional command line that was run.
* @param name An optional name for the command/tool that was run.
* @param version An optional version for the command/tool that was run.
* @param previousID An optional ID for the ID of the previous stage that was
* run.
*/
private[models] case class ProgramRecord(
id: String,
commandLine: Option[String],
name: Option[String],
version: Option[String],
previousID: Option[String]) {
/**
* @return Exports back to the htsjdk SAMProgramRecord.
*/
def toSAMProgramRecord(): SAMProgramRecord = {
val pr = new SAMProgramRecord(id)
// set optional fields
commandLine.foreach(cl => pr.setCommandLine(cl))
name.foreach(n => pr.setProgramName(n))
version.foreach(v => pr.setProgramVersion(v))
previousID.foreach(id => pr.setPreviousProgramGroupId(id))
pr
}
}