From 53b312fdc03e797d751d73e79a58e2b2bb3f9e87 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 19:00:05 -0400
Subject: [PATCH] Simplify show user output

---
 src/main/java/com/gitblit/transport/ssh/gitblit/TicketsDispatcher.java |   92 ++++++++++++++++++++++++---------------------
 1 files changed, 49 insertions(+), 43 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/gitblit/TicketsDispatcher.java b/src/main/java/com/gitblit/transport/ssh/gitblit/TicketsDispatcher.java
index b08fdfb..dd29b6a 100644
--- a/src/main/java/com/gitblit/transport/ssh/gitblit/TicketsDispatcher.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/TicketsDispatcher.java
@@ -15,11 +15,9 @@
  */
 package com.gitblit.transport.ssh.gitblit;
 
-import java.text.SimpleDateFormat;
 import java.util.List;
 
 import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
 
 import com.gitblit.manager.IGitblit;
 import com.gitblit.models.RepositoryModel;
@@ -31,7 +29,8 @@
 import com.gitblit.tickets.TicketIndexer.Lucene;
 import com.gitblit.transport.ssh.commands.CommandMetaData;
 import com.gitblit.transport.ssh.commands.DispatchCommand;
-import com.gitblit.transport.ssh.commands.SshCommand;
+import com.gitblit.transport.ssh.commands.ListCommand;
+import com.gitblit.utils.ArrayUtils;
 import com.gitblit.utils.FlipTable;
 import com.gitblit.utils.FlipTable.Borders;
 import com.gitblit.utils.StringUtils;
@@ -44,60 +43,68 @@
 		register(user, ReviewCommand.class);
 		register(user, ListTickets.class);
 	}
-	
+
 	/* List tickets */
-	@CommandMetaData(name = "list", aliases= { "ls" }, description = "List tickets")
-	public static class ListTickets extends SshCommand {
+	@CommandMetaData(name = "list", aliases = { "ls" }, description = "List tickets")
+	public static class ListTickets extends ListCommand<QueryResult> {
 
-		@Option(name = "--verbose", aliases = { "-v" }, usage = "verbose")
-		private boolean verbose;
+		private final String ALL = "ALL";
 
-		@Option(name = "--tabbed", aliases = { "-t" }, usage = "as tabbed output")
-		private boolean tabbed;
-
-		@Argument(index = 0, metaVar = "REPOSITORY", usage = "repository")
+		@Argument(index = 0, metaVar = "ALL|REPOSITORY", usage = "the repository or ALL")
 		protected String repository;
 
+		@Argument(index = 1, multiValued = true, metaVar="CONDITION", usage = "query condition")
+		protected List<String> query;
+
+		protected String userQuery;
+
 		@Override
-		public void run() throws UnloggedFailure {
+		protected List<QueryResult> getItems() throws UnloggedFailure {
 			IGitblit gitblit = getContext().getGitblit();
 			ITicketService tickets = gitblit.getTicketService();
 
 			QueryBuilder sb = new QueryBuilder();
-			sb.and(Lucene.status.matches(Status.New.toString())).or(Lucene.status.matches(Status.Open.toString()));
+			if (ArrayUtils.isEmpty(query)) {
+				sb.and(Lucene.status.matches(Status.New.toString())).or(Lucene.status.matches(Status.Open.toString()));
+			} else {
+				StringBuilder b = new StringBuilder();
+				for (String q : query) {
+					b.append(q).append(' ');
+				}
+				b.setLength(b.length() - 1);
+				sb.and(b.toString());
+			}
 
 			QueryBuilder qb;
-			if (StringUtils.isEmpty(repository)) {
+			if (StringUtils.isEmpty(repository) || ALL.equalsIgnoreCase(repository)) {
 				qb = sb;
+				userQuery = sb.build();
 			} else {
 				qb = new QueryBuilder();
 				RepositoryModel r = gitblit.getRepositoryModel(repository);
 				if (r == null) {
-					throw new UnloggedFailure(1,  String.format("%s not found!", repository));
+					throw new UnloggedFailure(1,  String.format("%s is not a repository!", repository));
 				}
 				qb.and(Lucene.rid.matches(r.getRID()));
 				qb.and(sb.toSubquery().toString());
+				userQuery = sb.build();
 			}
-			
+
 			String query = qb.build();
 			List<QueryResult> list = tickets.queryFor(query, 0, 0, null, true);
-
-			if (tabbed) {
-				asTabbed(list);
-			} else {
-				asTable(list);
-			}
+			return list;
 		}
 
+		@Override
 		protected void asTable(List<QueryResult> list) {
-			boolean forRepo = !StringUtils.isEmpty(repository);
+			boolean forRepo = !StringUtils.isEmpty(repository) && !ALL.equalsIgnoreCase(repository);
 			String[] headers;
 			if (verbose) {
 				if (forRepo) {
-					String[] h = { "ID", "Title", "Status", "Last Modified" };
+					String[] h = { "ID", "Title", "Status", "Last Modified", "Votes", "Commits" };
 					headers = h;
 				} else {
-					String[] h = { "Repository", "ID", "Title", "Status", "Last Modified" };
+					String[] h = { "Repository", "ID", "Title", "Status", "Last Modified", "Votes", "Commits" };
 					headers = h;
 				}
 			} else {
@@ -110,41 +117,40 @@
 				}
 			}
 
-			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-			String[][] data = new String[list.size()][];
+			Object[][] data = new Object[list.size()][];
 			for (int i = 0; i < list.size(); i++) {
 				QueryResult q = list.get(i);
 
 				if (verbose) {
 					if (forRepo) {
-						data[i] = new String[] { "" + q.number, q.title, q.status.toString(), df.format(q.getDate()) };
+						data[i] = new Object[] { q.number, q.title, q.status, formatDate(q.getDate()), q.votesCount, q.patchset == null ? "": q.patchset.commits };
 					} else {
-						data[i] = new String[] { q.repository, "" + q.number, q.title, q.status.toString(), df.format(q.getDate()) };
+						data[i] = new Object[] { q.repository, q.number, q.title, q.status, formatDate(q.getDate()), q.votesCount, q.patchset == null ? "": q.patchset.commits };
 					}
 				} else {
 					if (forRepo) {
-						data[i] = new String[] { "" + q.number, q.title, q.status.toString(), df.format(q.getDate()) };
+						data[i] = new Object[] { q.number, q.title, q.status, formatDate(q.getDate()) };
 					} else {
-						data[i] = new String[] { q.repository, "" + q.number, q.title, q.status.toString(), df.format(q.getDate()) };
+						data[i] = new Object[] { q.repository, q.number, q.title, q.status, formatDate(q.getDate()) };
 					}
 				}
 			}
-			stdout.println(FlipTable.of(headers, data, Borders.BODY_HCOLS));
+			stdout.print(FlipTable.of(headers, data, Borders.BODY_HCOLS));
+			stdout.println("  " + repository + ": " + userQuery);
+			stdout.println();
 		}
 
+		@Override
 		protected void asTabbed(List<QueryResult> list) {
-			String pattern;
 			if (verbose) {
-				pattern = "%s\t%s\t%s";
+				for (QueryResult q : list) {
+					outTabbed(q.repository, q.number, q.title, q.status.toString(),
+							formatDate(q.getDate()));
+				}
 			} else {
-				pattern = "%s";
-			}
-
-			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-			for (QueryResult q : list) {
-				stdout.println(String.format(pattern,
-						q.repository, q.number, q.title, q.status.toString(),
-						df.format(q.getDate())));
+				for (QueryResult q : list) {
+					outTabbed(q.repository, q.number, q.title);
+				}
 			}
 		}
 	}

--
Gitblit v1.9.1