package hudson.plugins.tfs.commands; import hudson.Util; import hudson.plugins.tfs.model.Workspace; import hudson.plugins.tfs.util.TextTableParser; import hudson.plugins.tfs.util.MaskedArgumentListBuilder; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; public class ListWorkspacesCommand extends AbstractCommand implements ParseableCommand<List<Workspace>> { private final WorkspaceFactory factory; private final String computer; public interface WorkspaceFactory { Workspace createWorkspace(String name, String computer, String owner, String comment); } public ListWorkspacesCommand(WorkspaceFactory factory, ServerConfigurationProvider provider) { this(factory, provider, null); } public ListWorkspacesCommand(WorkspaceFactory factory, ServerConfigurationProvider config, String computer) { super(config); this.computer = computer; this.factory = factory; } public MaskedArgumentListBuilder getArguments() { MaskedArgumentListBuilder arguments = new MaskedArgumentListBuilder(); arguments.add("workspaces"); arguments.add("-format:brief"); if (Util.fixEmpty(computer) != null) { arguments.add(String.format("-computer:%s", computer)); } addServerArgument(arguments); addLoginArgument(arguments); return arguments; } public List<Workspace> parse(Reader consoleReader) throws IOException { List<Workspace> list = new ArrayList<Workspace>(); TextTableParser parser = new TextTableParser(consoleReader, 1); while (parser.nextRow()) { Workspace workspace = factory.createWorkspace( parser.getColumn(0), parser.getColumn(2), parser.getColumn(1), Util.fixNull(parser.getColumn(3))); list.add(workspace); } return list; } }