Currently in GATK4 we have some support for tagging arguments, but the tagging is done on the value side, and manually by the engine. Eg.,
This causes many issues: parsing ambiguity with URIs, interfering with shell auto-expansion, etc.
Let's add native tagging support to barclay, so that the tag can be on the argument side rather than the value side. Eg.,
We also need to support arbitrary key/value pairs after the tag. Eg.,
-I:tumor,key=value,key2=value2
I think that the way to do this is to introduce a new TaggedArgument
interface in barclay with methods to get/set both the tag and the optional key/value pairs. Eg.,
void setTag(String)
String getTag()
void setTagAttributes(Map<String, String> attributes)
Map<String, String> getTagAttributes()
The upcoming URI
class in GATK will implement this interface. When barclay encounters an @Argument
-annotated field of a type that implements the TaggedArgument
interface, it should parse the tags and inject them into the object instance for that field via the setter methods.