package com.castlabs.dash.dashfragmenter.cmdlines; import com.castlabs.dash.dashfragmenter.FileAndTrackSelector; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.OptionDef; import org.kohsuke.args4j.spi.Messages; import org.kohsuke.args4j.spi.OneArgumentOptionHandler; import org.kohsuke.args4j.spi.Setter; import java.io.File; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FileAndTrackSelectorOptionHandler extends OneArgumentOptionHandler<FileAndTrackSelector> { Pattern p1 = Pattern.compile("(\\[.+\\])?(.+)"); Pattern p2 = Pattern.compile(" *(track|language|type|\\w+) *= *(\\w+) *"); public FileAndTrackSelectorOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super FileAndTrackSelector> setter) { super(parser, option, setter); } @Override protected FileAndTrackSelector parse(String argument) throws CmdLineException { try { Matcher m1 = p1.matcher(argument); FileAndTrackSelector fats = new FileAndTrackSelector(); if (m1.matches()) { if (m1.group(1) != null) { Matcher m2 = p2.matcher(m1.group(1)); while (m2.find()) { if ("track".equals(m2.group(1))) { fats.trackId = Integer.parseInt(m2.group(2)); } else if ("language".equals(m2.group(1))) { fats.language = m2.group(2); } else if ("type".equals(m2.group(1))) { fats.type = m2.group(2); } else { throw new CmdLineException(owner, argument + " is not valid. The selector contains the key " + m2.group(1) + " but only track, language or type is allowed."); } } } fats.file = new File(m1.group(2)); if (!fats.file.exists()) { throw new CmdLineException(owner, argument + " is not valid. The given file " + fats.file + " does not exist."); } return fats; } else { throw new CmdLineException(owner, argument + " is not valid. It not [...]filename"); } } catch (IllegalArgumentException e) { throw new CmdLineException(owner, Messages.ILLEGAL_UUID, argument); } } @Override public String getDefaultMetaVariable() { return "[property=value]filename"; } }