package net.jangaroo.utils; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.OptionDef; import org.kohsuke.args4j.spi.OptionHandler; import org.kohsuke.args4j.spi.Parameters; import org.kohsuke.args4j.spi.Setter; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Parses file arguments, separated by the system dependant path separator character (e.g. ':' on Unix systems, ';' on Windows) */ public class PathHandler extends OptionHandler<List<File>> { public PathHandler(CmdLineParser parser, OptionDef option, Setter<? super List<File>> setter) { super(parser, option, setter); } @Override public int parseArguments(Parameters parameters) throws CmdLineException { List<File> sourcePathFiles = null; String sourcePathString = parameters.getParameter(0).trim(); if (!sourcePathString.isEmpty()) { final String[] sourceDirs = sourcePathString.split("\\Q" + File.pathSeparatorChar + "\\E"); sourcePathFiles = new ArrayList<File>(sourceDirs.length); for (String sourceDirPath : sourceDirs) { // be tolerant, accept also '/' as file separator File sourceDir = new File(sourceDirPath.replace('/', File.separatorChar)); if (!sourceDir.exists()) { throw new CmdLineException(owner, "directory or file does not exist: " + sourceDir.getAbsolutePath()); } sourcePathFiles.add(sourceDir); } } if(sourcePathFiles == null) { sourcePathFiles = new ArrayList<File>(); } setter.addValue(sourcePathFiles); return 1; } @Override public String getDefaultMetaVariable() { return "PATH"; } }