106 lines
2.8 KiB
Scala
Executable File
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)
|
|
}
|
|
}
|
|
}
|
|
}
|