package com.gitblit.transport.ssh.commands; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; import com.gitblit.utils.StringUtils; public abstract class ListCommand extends SshCommand { @Option(name = "--verbose", aliases = { "-v" }, usage = "verbose") protected boolean verbose; @Option(name = "--tabbed", aliases = { "-t" }, usage = "as tabbed output") private boolean tabbed; @Argument(index = 0, metaVar = "REGEX", usage = "regex filter expression") protected String regexFilter; private DateFormat df; protected abstract List getItems(); protected abstract boolean matches(T t); @Override public void run() { List list = getItems(); List filtered; if (StringUtils.isEmpty(regexFilter)) { // no regex filter filtered = list; } else { // regex filter the list filtered = new ArrayList(); for (T t : list) { if (matches(t)) { filtered.add(t); } } } if (tabbed) { asTabbed(filtered); } else { asTable(filtered); } } protected abstract void asTable(List list); protected abstract void asTabbed(List list); protected void outTabbed(Object... values) { StringBuilder pattern = new StringBuilder(); for (int i = 0; i < values.length; i++) { pattern.append("%s\t"); } pattern.setLength(pattern.length() - 1); stdout.println(String.format(pattern.toString(), values)); } protected String formatDate(Date date) { if (df == null) { df = new SimpleDateFormat("yyyy-MM-dd"); } return df.format(date); } }