package hudson.plugins.tfs.commands;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import hudson.plugins.tfs.util.MaskedArgumentListBuilder;
public class GetFilesToWorkFolderCommand extends AbstractCommand implements ParseableCommand<List<String>> {
private static final Pattern ITEM_PATTERN = Pattern.compile("\\w+\\s+(.*)");
private static final Pattern PATH_PATTERN = Pattern.compile("(.+):");
private final String workFolder;
private final boolean preview;
public GetFilesToWorkFolderCommand(ServerConfigurationProvider provider, String workFolder, boolean preview) {
super(provider);
this.workFolder = workFolder;
this.preview = preview;
}
public GetFilesToWorkFolderCommand(ServerConfigurationProvider provider, String workFolder) {
this(provider, workFolder, false);
}
public MaskedArgumentListBuilder getArguments() {
MaskedArgumentListBuilder arguments = new MaskedArgumentListBuilder();
arguments.add("get");
arguments.add(workFolder);
arguments.add("-recursive");
if (preview) {
arguments.add("-preview");
}
arguments.add("-noprompt");
addLoginArgument(arguments);
return arguments;
}
public List<String> parse(Reader r) throws ParseException, IOException {
BufferedReader reader = new BufferedReader(r);
List<String> list = new ArrayList<String>();
String line = reader.readLine();
String lastPath = null;
while (line != null) {
Matcher matcher = PATH_PATTERN.matcher(line);
if (matcher.matches()) {
lastPath = matcher.group(1);
} else {
if (lastPath != null) {
matcher = ITEM_PATTERN.matcher(line);
if (matcher.matches()) {
list.add(lastPath + "\\" + matcher.group(1));
}
}
}
line = reader.readLine();
}
return list;
}
}