From f74183504bf3eaee2855d9aeb38762223aacbfe8 Mon Sep 17 00:00:00 2001 From: Scott Frazer Date: Thu, 22 May 2014 11:19:28 -0400 Subject: [PATCH] Adding 'tasks' subcommand to get a list of task:version that a WDL uses --- README.md | 9 +++++---- pom.xml | 2 +- .../broadinstitute/compositetask/CompositeTask.java | 18 ++++++++++++++++++ .../compositetask/CompositeTaskSubTask.java | 10 +++++++++- .../java/org/broadinstitute/compositetask/Main.java | 7 +++++++ 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 15a5bd9..acf47e0 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ $ mvn package Which will create a file target/Wdl-${version}.jar as an executable JAR. To invoke the CLI: ``` -$ java -jar target/Wdl-0.0.4.jar examples/0.wdl ast +$ java -jar target/Wdl-0.0.5.jar examples/0.wdl ast ``` Generating the parser code @@ -57,7 +57,7 @@ Command-line Interface The command line interface provides some common tools for analyzing and displaying WDL files Below are the actions that can be taken by running the executable JAR without any parameters: ``` -$ java -jar target/Wdl-0.0.4.jar +$ java -jar target/Wdl-0.0.5.jar Usage: <.wdl file> Actions: @@ -70,6 +70,7 @@ Actions: format-ansi: reformat source code and colorize for the terminal format-html: reformat source code and add HTML span tags replace : replace a task/version with a different task/version + tasks: return 1 line in the format for each unique pair ``` CLI Examples @@ -102,7 +103,7 @@ composite_task test { Get the abstract syntax tree: ``` -$ java -jar dist/Wdl-0.0.4.jar examples/7.wdl ast +$ java -jar dist/Wdl-0.0.5.jar examples/7.wdl ast (CompositeTask: body=[ (Step: @@ -225,7 +226,7 @@ $ java -jar dist/Wdl-0.0.4.jar examples/7.wdl ast Get a view of the graph ``` -$ java -jar dist/Wdl-0.0.4.jar examples/7.wdl graph +$ java -jar dist/Wdl-0.0.5.jar examples/7.wdl graph VERTICIES --------- [Step: name=s1] diff --git a/pom.xml b/pom.xml index 47decf2..4f8bf2a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ org.broadinstitute.compositetask Wdl jar - 0.0.4 + 0.0.5 Wdl http://github.com/broadinstitute/wdl diff --git a/src/main/java/org/broadinstitute/compositetask/CompositeTask.java b/src/main/java/org/broadinstitute/compositetask/CompositeTask.java index b3e72e6..193a294 100644 --- a/src/main/java/org/broadinstitute/compositetask/CompositeTask.java +++ b/src/main/java/org/broadinstitute/compositetask/CompositeTask.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Set; import java.util.HashSet; +import java.util.TreeSet; import java.util.LinkedHashSet; import java.util.HashMap; import java.util.Iterator; @@ -379,6 +380,10 @@ public boolean contains(CompositeTaskNode node) { return replace(this.ast, from, from_version, to, to_version); } + public Set getAllSubTasks() { + return getAllSubTasks(this); + } + public int compareTo(CompositeTaskVertex other) { return this.toString().compareTo(other.toString()); } @@ -413,6 +418,19 @@ public String toString() { return steps; } + private Set getAllSubTasks(CompositeTaskScope scope) { + Set subTasks = new TreeSet(); + for ( CompositeTaskNode node : scope.getNodes() ) { + if ( node instanceof CompositeTaskStep ) { + CompositeTaskStep step = (CompositeTaskStep) node; + subTasks.add(step.getTask()); + } else if ( node instanceof CompositeTaskScope ) { + subTasks.addAll(getAllSubTasks((CompositeTaskScope) node)); + } + } + return subTasks; + } + private ParseTreeNode getParseTree(SourceCode source_code) throws SyntaxError { CompositeTaskParser parser = new CompositeTaskParser(this.error_formatter); Lexer lexer = new Lexer(); diff --git a/src/main/java/org/broadinstitute/compositetask/CompositeTaskSubTask.java b/src/main/java/org/broadinstitute/compositetask/CompositeTaskSubTask.java index 7d59315..1b8092f 100644 --- a/src/main/java/org/broadinstitute/compositetask/CompositeTaskSubTask.java +++ b/src/main/java/org/broadinstitute/compositetask/CompositeTaskSubTask.java @@ -2,7 +2,7 @@ import java.util.Set; -public class CompositeTaskSubTask { +public class CompositeTaskSubTask implements Comparable { private String name; private String version; @@ -31,6 +31,14 @@ public boolean equals(CompositeTaskSubTask other) { return false; } + public int compareTo(CompositeTaskSubTask other) { + int nameCompare = this.getTaskName().compareTo(other.getTaskName()); + int versionCompare = this.getVersion().compareTo(other.getVersion()); + if (nameCompare != 0) return nameCompare; + else if (versionCompare != 0) return versionCompare; + else return 0; + } + public String toString() { return "[Task: name="+this.name+", version="+this.version+"]"; } diff --git a/src/main/java/org/broadinstitute/compositetask/Main.java b/src/main/java/org/broadinstitute/compositetask/Main.java index da34098..e3ff892 100644 --- a/src/main/java/org/broadinstitute/compositetask/Main.java +++ b/src/main/java/org/broadinstitute/compositetask/Main.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeSet; import org.broadinstitute.parser.Utility; import org.broadinstitute.parser.Ast; @@ -27,6 +28,7 @@ public static void usage() { System.err.println(" format-ansi: reformat source code and colorize for the terminal"); System.err.println(" format-html: reformat source code and add HTML span tags"); System.err.println(" replace : replace a task/version with a different task/version"); + System.err.println(" tasks: return 1 line in the format for each unique pair"); System.exit(-1); } @@ -109,6 +111,11 @@ public static void main(String[] args) { CompositeTaskSourceCodeFormatter formatter = new CompositeTaskSourceCodeFormatter(); String formatted = formatter.format(ctask); System.out.println(formatted); + } else if ( args[1].equals("tasks") ) { + Set subTasks = ctask.getAllSubTasks(); + for ( CompositeTaskSubTask subTask : subTasks ) { + System.out.println(String.format("%s:%s", subTask.getTaskName(), subTask.getVersion())); + } } else { usage(); }