gatk-3.8/scala/src/org/broadinstitute/sting/queue/QArguments.scala

106 lines
2.8 KiB
Scala
Executable File

package org.broadinstitute.sting.queue
import collection.mutable.ListBuffer
import collection.JavaConversions._
import org.broadinstitute.sting.queue.util.Logging
import org.broadinstitute.sting.utils.text.XReadLines
import java.io.{FileInputStream, File}
import java.util.Properties
class QArguments(args: Array[String]) {
var bsubAllJobs = false
var bsubWaitJobs = false
var dryRun = false
val scripts = new ListBuffer[String]
var inputPaths = List.empty[File]
var properties = Map.empty[String, String]
val userArgs = parseArgs(args)
private def parseArgs(args: Array[String]) = {
var filtered = new ListBuffer[String]
filtered.appendAll(args)
if (isFlagged(filtered, "-debug"))
Logging.setDebug
if (isFlagged(filtered, "-trace"))
Logging.setTrace
if (isFlagged(filtered, "-dry"))
dryRun = true
if (isFlagged(filtered, "-bsub"))
bsubAllJobs = true
if (isFlagged(filtered, "-bsubWait"))
bsubWaitJobs = true
for (arg <- getArgs(filtered, "-P"))
addProperties(arg)
for (arg <- getArgs(filtered, "-I"))
addFile(arg)
for (arg <- getArgs(filtered, "-S"))
scripts.append(arg)
List(filtered:_*)
}
private def isFlagged(filtered: ListBuffer[String], search: String) = {
var found = false
var index = 0
while (0 <= index && index < filtered.size) {
index = filtered.indexOf(search)
if (index >= 0) {
found = true
filtered.remove(index)
}
}
found
}
private def getArgs(filtered: ListBuffer[String], search: String) = {
var found = new ListBuffer[String]
var index = 0
while (0 <= index && index < filtered.size) {
index = filtered.indexOf(search)
if (index >= 0) {
found.append(filtered(index+1))
filtered.remove(index, 2)
}
}
found
}
def addProperties(arg: String) = {
var file = new File(arg)
if (arg.contains("=") && !file.exists) {
val tokens = arg.split("=", 2)
properties += tokens(0) -> tokens(1)
} else if (arg.endsWith(".properties")) {
if (!file.exists)
throw new QException("File not found: " + file.getAbsolutePath)
var props = new Properties
props.load(new FileInputStream(file))
for ((name, value) <- props)
properties += name -> value
} else {
throw new QException("Invalid property: " + arg)
}
}
def addFile(arg: String): Unit = {
var file = new File(arg)
inputPaths :+= file
if (arg.endsWith(".list"))
new XReadLines(file).iterator.foreach(addFile(_))
}
}
object QArguments {
def strip(filtered: ListBuffer[String], search: String) = {
var index = 0
while (0 <= index && index < filtered.size) {
index = filtered.indexOf(search)
if (index >= 0) {
filtered.remove(index, 2)
}
}
}
}