command.line/java/com/jetbrains/teamcity/command/Args.java (99 lines of code) (raw):
package com.jetbrains.teamcity.command;
import com.jetbrains.teamcity.Util;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import org.jetbrains.annotations.NotNull;
public class Args {
public static final String DEBUG_ARG = Messages.getString("Args.debug.switch.name"); //$NON-NLS-1$
public static final String SILENT_ARG = Messages.getString("Args.silent.switch.name"); //$NON-NLS-1$
public static final String DEBUG_CLEAN_OFF = Messages.getString("Args.do.not.delete.file.after.run.switch.name"); //$NON-NLS-1$
static HashMap<String, Pattern> ourRegisteredArgs = new HashMap<String, Pattern>();
private final String[] myArgs;
private String myArgsLine = "";
private String myCommandId;
private boolean isDebugOn;
private boolean isSilentOn;
private boolean isCleanOff;
public static void registerArgument(final String argName, final String argPattern) {
final Pattern pattern = Pattern.compile(argPattern, Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
ourRegisteredArgs.put(argName, pattern);
}
public Args(final String argline) {
this(argline.split("\\s+"));
}
public Args(final String[] args) {
if (args == null || args.length == 0) {
myArgs = new String[] { Help.ID };
return;
}
final LinkedList<String> list = new LinkedList<String>(Arrays.asList(args));
// extract CommandId
myCommandId = list.get(0);
list.remove(0);
// remove -debug argument
if (list.contains(DEBUG_ARG)) {
list.remove(DEBUG_ARG);
isDebugOn = true;
}
// remove -debug-clean-off argument
if (list.contains(DEBUG_CLEAN_OFF)) {
list.remove(DEBUG_CLEAN_OFF);
isCleanOff = true;
}
// remove -silent
if (list.contains(SILENT_ARG)) {
list.remove(SILENT_ARG);
isSilentOn = true;
}
myArgs = list.toArray(new String[list.size()]);
for (String arg : myArgs) {
myArgsLine += arg + " ";
}
myArgsLine = myArgsLine.trim();
}
public String getCommandId() {
return myCommandId;
}
public boolean hasArgument(final String... arguments) {
boolean match = false;
boolean registeredFound = false;
for (final String arg : arguments) {
if (ourRegisteredArgs.containsKey(arg)) {
registeredFound = true;
final Pattern pattern = ourRegisteredArgs.get(arg);
match |= pattern.matcher(myArgsLine).find();
}
}
if (registeredFound) {
return match;
}
return Util.hasArgument(myArgs, arguments);
}
public String getArgument(final String... arguments) {
return Util.getArgumentValue(myArgs, arguments);
}
public String[] getArguments() {
return myArgs;
}
public String getLastArgument() {
if (myArgs != null && myArgs.length > 0) {
return myArgs[myArgs.length - 1];
}
return null;
}
@Override
public String toString() {
return String.format("", myCommandId, Arrays.toString(myArgs)); //$NON-NLS-1$
}
public boolean isDebugOn() {
return isDebugOn;
}
public boolean isCleanOff() {
return isCleanOff;
}
public boolean isSilentOn() {
return isSilentOn;
}
/**
* Return list of values for arguments which support them, like --param name1=value --param name2=value2
* In the case above, array of "name1=value","name2=value2" will be returned
* @param argName
* @return see above
*/
public List<String> getArgValues(@NotNull String argName) {
return Util.getArgumentValues(myArgs, argName);
}
}