James Moger
2014-03-23 1c7917fa526925c672d4e5dd336d5b93aa51e6a5
Add --json flag to the list command for outputing JSON
1 files renamed
4 files modified
67 ■■■■■ changed files
src/main/java/com/gitblit/transport/ssh/commands/ListCommand.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/commands/ListFilterCommand.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/gitblit/ProjectsDispatcher.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/gitblit/RepositoriesDispatcher.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/gitblit/UsersDispatcher.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/commands/ListCommand.java
@@ -22,6 +22,8 @@
import org.kohsuke.args4j.Option;
import com.gitblit.utils.JsonUtils;
/**
 * Parent class of a list command.
 * 
@@ -34,18 +36,31 @@
    @Option(name = "--verbose", aliases = { "-v" }, usage = "verbose")
    protected boolean verbose;
    @Option(name = "--tabbed", aliases = { "-t" }, usage = "as tabbed output")
    @Option(name = "--tabbed", usage = "generate tabbed-text output")
    protected boolean tabbed;
    @Option(name = "--json", usage = "generate JSON output")
    protected boolean json;
    private DateFormat df;
    protected abstract List<T> getItems() throws UnloggedFailure;
    
    protected void validateOutputFormat() throws UnloggedFailure {
        if (tabbed && json) {
            throw new UnloggedFailure(1, "Please specify --tabbed OR --json, not both!");
        }
    }
    @Override
    public void run() throws UnloggedFailure {
        validateOutputFormat();
        List<T> list = getItems();
        if (tabbed) {
            asTabbed(list);
        } else if (json) {
            asJSON(list);
        } else {
            asTable(list);
        }
@@ -64,6 +79,10 @@
        stdout.println(String.format(pattern.toString(), values));
    }
    
    protected void asJSON(List<T> list) {
        stdout.println(JsonUtils.toJsonString(list));
    }
    protected String formatDate(Date date) {
        if (df == null) {
            df = new SimpleDateFormat("yyyy-MM-dd");
src/main/java/com/gitblit/transport/ssh/commands/ListFilterCommand.java
File was renamed from src/main/java/com/gitblit/transport/ssh/commands/ListRegexCommand.java
@@ -23,31 +23,33 @@
import com.gitblit.utils.StringUtils;
/**
 * List command that accepts a regex filter parameter.
 * List command that accepts a filter parameter.
 * 
 * @author James Moger
 *
 * @param <T>
 */
public abstract class ListRegexCommand<T> extends ListCommand<T> {
public abstract class ListFilterCommand<T> extends ListCommand<T> {
    @Argument(index = 0, metaVar = "REGEX", usage = "regex filter expression")
    protected String regexFilter;
    @Argument(index = 0, metaVar = "FILTER", usage = "filter expression")
    private String filter;
    
    protected abstract boolean matches(T t);
    protected abstract boolean matches(String filter, T t);
    
    @Override
    public void run() throws UnloggedFailure {
        validateOutputFormat();
        List<T> list = getItems();
        List<T> filtered;
        if (StringUtils.isEmpty(regexFilter)) {
            // no regex filter
        if (StringUtils.isEmpty(filter)) {
            // no filter
            filtered = list;
        } else {
            // regex filter the list
            // filter the list
            filtered = new ArrayList<T>();
            for (T t : list) {
                if (matches(t)) {
                if (matches(filter, t)) {
                    filtered.add(t);
                }
            }
@@ -55,6 +57,8 @@
        if (tabbed) {
            asTabbed(filtered);
        } else if (json) {
            asJSON(filtered);
        } else {
            asTable(filtered);
        }
src/main/java/com/gitblit/transport/ssh/gitblit/ProjectsDispatcher.java
@@ -22,7 +22,7 @@
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.commands.CommandMetaData;
import com.gitblit.transport.ssh.commands.DispatchCommand;
import com.gitblit.transport.ssh.commands.ListRegexCommand;
import com.gitblit.transport.ssh.commands.ListFilterCommand;
import com.gitblit.utils.FlipTable;
import com.gitblit.utils.FlipTable.Borders;
@@ -36,7 +36,7 @@
    /* List projects */
    @CommandMetaData(name = "list", aliases= { "ls" }, description = "List projects")
    public static class ListProjects extends ListRegexCommand<ProjectModel> {
    public static class ListProjects extends ListFilterCommand<ProjectModel> {
        @Override
        protected List<ProjectModel> getItems() {
@@ -48,8 +48,8 @@
        }
        @Override
        protected boolean matches(ProjectModel p) {
            return p.name.matches(regexFilter);
        protected boolean matches(String filter, ProjectModel p) {
            return p.name.matches(filter);
        }
        @Override
src/main/java/com/gitblit/transport/ssh/gitblit/RepositoriesDispatcher.java
@@ -22,7 +22,7 @@
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.commands.CommandMetaData;
import com.gitblit.transport.ssh.commands.DispatchCommand;
import com.gitblit.transport.ssh.commands.ListRegexCommand;
import com.gitblit.transport.ssh.commands.ListFilterCommand;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.FlipTable;
import com.gitblit.utils.FlipTable.Borders;
@@ -38,7 +38,7 @@
    /* List repositories */
    @CommandMetaData(name = "list", aliases = { "ls" }, description = "List repositories")
    public static class ListRepositories extends ListRegexCommand<RepositoryModel> {
    public static class ListRepositories extends ListFilterCommand<RepositoryModel> {
        @Override
        protected List<RepositoryModel> getItems() {
@@ -49,8 +49,8 @@
        }
        @Override
        protected boolean matches(RepositoryModel r) {
            return r.name.matches(regexFilter);
        protected boolean matches(String filter, RepositoryModel r) {
            return r.name.matches(filter);
        }
        @Override
src/main/java/com/gitblit/transport/ssh/gitblit/UsersDispatcher.java
@@ -25,7 +25,7 @@
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.commands.CommandMetaData;
import com.gitblit.transport.ssh.commands.DispatchCommand;
import com.gitblit.transport.ssh.commands.ListRegexCommand;
import com.gitblit.transport.ssh.commands.ListFilterCommand;
import com.gitblit.transport.ssh.commands.SshCommand;
import com.gitblit.utils.FlipTable;
import com.gitblit.utils.FlipTable.Borders;
@@ -96,7 +96,7 @@
    }
    @CommandMetaData(name = "list", aliases= { "ls" }, description = "List users")
    public static class ListUsers extends ListRegexCommand<UserModel> {
    public static class ListUsers extends ListFilterCommand<UserModel> {
        @Override
        protected List<UserModel> getItems() {
@@ -106,8 +106,8 @@
        }
        @Override
        protected boolean matches(UserModel u) {
            return u.username.matches(regexFilter);
        protected boolean matches(String filter, UserModel u) {
            return u.username.matches(filter);
        }
        @Override