package hudson.plugins.tfs.util;
import java.util.Collection;
import java.util.HashSet;
import hudson.util.ArgumentListBuilder;
/**
* ArgumentListBuilder that supports marking arguments as masked.
*
* @author Erik Ramfelt
*/
public class MaskedArgumentListBuilder extends ArgumentListBuilder{
private static final long serialVersionUID = 1L;
private Collection<Integer> maskedArgumentIndex;
@Override
public ArgumentListBuilder prepend(String... args) {
if (maskedArgumentIndex != null) {
Collection<Integer> newMaskedArgumentIndex = new HashSet<Integer>();
for (Integer argIndex : maskedArgumentIndex) {
newMaskedArgumentIndex.add(argIndex + args.length);
}
maskedArgumentIndex = newMaskedArgumentIndex;
}
return super.prepend(args);
}
/**
* Returns true if there are any masked arguments.
* @return true if there are any masked arguments; false otherwise
*/
public boolean hasMaskedArguments() {
return (maskedArgumentIndex != null);
}
/**
* Returns an array of booleans where the masked arguments are marked as true
* @return an array of booleans.
*/
public boolean[] toMaskArray() {
String[] commands = toCommandArray();
boolean[] mask = new boolean[commands.length];
if (maskedArgumentIndex != null) {
for (Integer argIndex : maskedArgumentIndex) {
mask[argIndex] = true;
}
}
return mask;
}
/**
* Add a masked argument
* @param string the argument
*/
public void addMasked(String string) {
if (maskedArgumentIndex == null) {
maskedArgumentIndex = new HashSet<Integer>();
}
maskedArgumentIndex.add(toCommandArray().length);
add(string);
}
}