command.line/java/com/jetbrains/teamcity/command/ListCommand.java (102 lines of code) (raw):
package com.jetbrains.teamcity.command;
import com.jetbrains.teamcity.*;
import com.jetbrains.teamcity.Util.StringTable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import javax.naming.directory.InvalidAttributesException;
import jetbrains.buildServer.BuildTypeData;
import jetbrains.buildServer.ProjectData;
import jetbrains.buildServer.core.runtime.IProgressMonitor;
public class ListCommand implements ICommand {
private static final String EMPTY = Messages.getString("List.empty.description"); //$NON-NLS-1$
private static final String CONFIGURATION_SWITCH_LONG = Messages.getString("List.conf.runtime.param.long"); //$NON-NLS-1$
private static final String CONFIGURATION_SWITCH = Messages.getString("List.conf.runtime.param"); //$NON-NLS-1$
private static final String PROJECT_SWITCH_LONG = Messages.getString("List.project.runtime.param.long"); //$NON-NLS-1$
private static final String PROJECT_SWITCH = Messages.getString("List.project.runtime.param"); //$NON-NLS-1$
private static final String ID = Messages.getString("List.command.id"); //$NON-NLS-1$
private String myResultDescription;
public void execute(final Server server, final Args args, final IProgressMonitor monitor) throws EAuthorizationException, ECommunicationException, ERemoteError, InvalidAttributesException {
if (args.hasArgument(PROJECT_SWITCH, PROJECT_SWITCH_LONG)
&&args.getArgument(PROJECT_SWITCH, PROJECT_SWITCH_LONG) == null
&&!args.hasArgument(CONFIGURATION_SWITCH, CONFIGURATION_SWITCH_LONG)) {
myResultDescription = printProjects(server);
} else if (args.getArgument(PROJECT_SWITCH, PROJECT_SWITCH_LONG) != null
|| args.hasArgument(CONFIGURATION_SWITCH, CONFIGURATION_SWITCH_LONG)) {
myResultDescription = printConfigurations(server, args);
} else {
final StringBuffer resultBuffer = new StringBuffer();
resultBuffer.append(Messages.getString("List.projects.section.header")); //$NON-NLS-1$
resultBuffer.append(printProjects(server));
resultBuffer.append(Messages.getString("List.configurations.section.header")); //$NON-NLS-1$
resultBuffer.append(printConfigurations(server, null));
myResultDescription = resultBuffer.toString();
}
}
private String printConfigurations(final Server server, Args args) throws ECommunicationException {
final String filterByProject;
if (args != null && args.hasArgument(PROJECT_SWITCH, PROJECT_SWITCH_LONG)) {
filterByProject = args.getArgument(PROJECT_SWITCH, PROJECT_SWITCH_LONG);
} else {
filterByProject = null;
}
// get & sort
// cache projects
final HashMap<String, String> prjMap = new HashMap<String, String>();
for (final ProjectData prj : server.getProjects()) {
prjMap.put(prj.getExternalId(), prj.getName());
}
final ArrayList<BuildTypeData> configurations = new ArrayList<BuildTypeData>(server.getConfigurations());
Collections.sort(configurations, new Comparator<BuildTypeData>() {
public int compare(BuildTypeData o1, BuildTypeData o2) {
if (filterByProject != null) {
return o1.getName().compareTo(o2.getName());
}
final String prj1name = prjMap.get(o1.getExternalId());
final String prj2name = prjMap.get(o2.getExternalId());
return (prj1name + " " + o1.getName()).compareTo(prj2name + " " + o2.getName());
}
});
// display
final StringTable table = new Util.StringTable(Messages.getString("List.config.list.header")); //$NON-NLS-1$
for (final BuildTypeData config : configurations) {
// check
if ((filterByProject == null) || config.getProjectExternalId().equals(filterByProject)) {
final String description = config.getDescription() == null ? EMPTY : config.getDescription();
final String prjName = prjMap.get(config.getProjectExternalId());
table.addRow(MessageFormat.format(Messages.getString("List.config.list.pattern"), config.getExternalId(), prjName, config.getName(), config.getStatus(), description)); //$NON-NLS-1$
}
}
return table.toString();
}
private String printProjects(final Server server) throws ECommunicationException {
// get & sort
final ArrayList<ProjectData> projects = new ArrayList<ProjectData>(server.getProjects());
Collections.sort(projects, new Comparator<ProjectData>() {
public int compare(ProjectData o1, ProjectData o2) {
return o1.getName().compareTo(o2.getName());
}
});
// display
final StringTable table = new Util.StringTable(Messages.getString("List.project.list.header")); //$NON-NLS-1$
for (final ProjectData project : projects) {
final String description = project.getDescription() == null ? EMPTY : project.getDescription();
table.addRow(MessageFormat.format(Messages.getString("List.project.list.pattern"), project.getExternalId(), project.getName(), project.getStatus(), description)); //$NON-NLS-1$
}
return table.toString();
}
public String getId() {
return ID;
}
public boolean isConnectionRequired(final Args args) {
return true;
}
public String getUsageDescription() {
return MessageFormat.format(Messages.getString("List.help.usage.pattern"), //$NON-NLS-1$
getCommandDescription(), getId(), PROJECT_SWITCH, CONFIGURATION_SWITCH, PROJECT_SWITCH, PROJECT_SWITCH, PROJECT_SWITCH_LONG, CONFIGURATION_SWITCH, CONFIGURATION_SWITCH_LONG);
}
public String getCommandDescription() {
return Messages.getString("List.help.description"); //$NON-NLS-1$
}
public String getResultDescription() {
return myResultDescription;
}
public void validate(Args args) throws IllegalArgumentException {
// TODO Auto-generated method stub
}
}