From 2bc51901f2f8252525a2d2258593082979ba7122 Mon Sep 17 00:00:00 2001 From: albfan Date: Mon, 18 Jul 2016 16:17:15 +0200 Subject: [PATCH] Accept complex status filter --- .../redmine/cli/command/IssuesCommand.java | 99 +++++++++++++++++-- 1 file changed, 90 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/ad/tools/redmine/cli/command/IssuesCommand.java b/src/main/java/de/ad/tools/redmine/cli/command/IssuesCommand.java index c667be4..46e0e9a 100644 --- a/src/main/java/de/ad/tools/redmine/cli/command/IssuesCommand.java +++ b/src/main/java/de/ad/tools/redmine/cli/command/IssuesCommand.java @@ -11,12 +11,10 @@ import de.ad.tools.redmine.cli.Configuration; import de.ad.tools.redmine.cli.util.RedmineUtil; import de.ad.tools.redmine.cli.util.StringUtil; +import org.apache.commons.lang3.StringUtils; import java.io.PrintStream; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import static de.ad.tools.redmine.cli.util.DateUtil.getTimeDifferenceAsText; @@ -89,7 +87,48 @@ public void process(String[] arguments) throws Exception { private Map buildParameterMapFromOptions() throws Exception { //Parameter spec: http://www.redmine.org/projects/redmine/wiki/Rest_Issues - Map parameters = new HashMap<>(); + + HashMapparameters = new HashMap() { + + Set> entries; + @Override + public Set> entrySet() { + return entries; + } + + @Override + public int size() { + return entries.size(); + } + + public String put(String key, String value) { + if (entries == null) { + entries = new AbstractSet>() { + + ArrayList> list = new ArrayList<>(); + @Override + public Iterator> iterator() { + return list.iterator(); + } + + @Override + public int size() { + return list.size(); + } + + @Override + public boolean add(Entry stringStringEntry) { + return list.add(stringStringEntry); + } + }; + } + StatusHandler.MyEntry entry = new StatusHandler.MyEntry(); + entry.setKey(key); + entry.setValue(value); + entries.add(entry); + return value; + } + }; for (Option option : getOptions()) { if (option.getValue() == null) { @@ -189,10 +228,52 @@ public void handle(RedmineManager redmineManager, Optional status = RedmineUtil.resolveStatusByName(redmineManager, value); - status.ifPresent(s -> parameters.put("status_id", String.valueOf( - s.getId()))); - status.orElseThrow( - () -> new Exception(String.format(INVALID_STATUS_MESSAGE, value))); + if (value.contains(",")) { + String[] split = value.trim().split(","); + parameters.put("f[]","status_id"); + parameters.put("op[status_id]","="); + for (int i = 0; i < split.length; i++) { + String s = split[i]; + Optional statusSplit = + RedmineUtil.resolveStatusByName(redmineManager, s); + if (statusSplit.isPresent()) { + parameters.put("v[status_id][]", String.valueOf(statusSplit.get().getId())); + } + } + } else if ("open".equalsIgnoreCase(value) || "close".equalsIgnoreCase(value)) { + parameters.put("status_id", value); + } else { + if (status.isPresent()) { + parameters.put("status_id", String.valueOf(status.get().getId())); + } else { + throw new Exception(String.format(INVALID_STATUS_MESSAGE, value)); + } + } + } + + private static class MyEntry implements Map.Entry { + String key; + String value; + + @Override + public String getKey() { + return key; + } + + @Override + public String getValue() { + return value; + } + + @Override + public String setValue(String value) { + this.value = value; + return value; + } + + public void setKey(String key) { + this.key = key; + } } }