Skip to content

Commit 51b6e83

Browse files
committed
Extract handles logic to AbstractConsoleArgument
Argument implementations can now declare their minimum size and aliases and let the abstract layer handle the bulk of the matching.
1 parent 7ea047d commit 51b6e83

File tree

7 files changed

+69
-39
lines changed

7 files changed

+69
-39
lines changed

src/main/java/org/scijava/command/console/RunArgument.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,8 @@
3535
import java.util.HashMap;
3636
import java.util.LinkedList;
3737
import java.util.Map;
38-
import java.util.concurrent.ExecutionException;
39-
import java.util.concurrent.Future;
4038

4139
import org.scijava.command.CommandInfo;
42-
import org.scijava.command.CommandModule;
4340
import org.scijava.command.CommandService;
4441
import org.scijava.console.AbstractConsoleArgument;
4542
import org.scijava.console.ConsoleArgument;
@@ -67,6 +64,12 @@ public class RunArgument extends AbstractConsoleArgument {
6764
@Parameter
6865
private LogService logService;
6966

67+
// -- Constructor --
68+
69+
public RunArgument() {
70+
super(2, "--run");
71+
}
72+
7073
// -- ConsoleArgument methods --
7174

7275
@Override
@@ -80,13 +83,6 @@ public void handle(final LinkedList<String> args) {
8083
run(commandToRun, optionString);
8184
}
8285

83-
// -- Typed methods --
84-
85-
@Override
86-
public boolean supports(final LinkedList<String> args) {
87-
return args != null && args.size() >= 2 && args.getFirst().equals("--run");
88-
}
89-
9086
// -- Helper methods --
9187

9288
/** Implements the {@code --run} command line argument. */

src/main/java/org/scijava/console/AbstractConsoleArgument.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131

3232
package org.scijava.console;
3333

34+
import java.util.HashSet;
3435
import java.util.LinkedList;
36+
import java.util.Set;
3537

3638
import org.scijava.plugin.AbstractHandlerPlugin;
3739

@@ -43,13 +45,43 @@
4345
public abstract class AbstractConsoleArgument extends
4446
AbstractHandlerPlugin<LinkedList<String>> implements ConsoleArgument
4547
{
48+
private int numArgs;
49+
private Set<String> aliasFlags;
50+
51+
public AbstractConsoleArgument() {
52+
this(1, new String[0]);
53+
}
54+
55+
public AbstractConsoleArgument(final String... aliases) {
56+
this(1, aliases);
57+
}
58+
59+
public AbstractConsoleArgument(final int requiredArgs, final String... aliases) {
60+
numArgs = requiredArgs;
61+
aliasFlags = new HashSet<String>();
62+
for (final String s : aliases) aliasFlags.add(s);
63+
}
4664

4765
// -- Typed methods --
4866

67+
@Override
68+
public boolean supports(final LinkedList<String> args) {
69+
if (args == null || args.size() < numArgs) return false;
70+
return isAlias(args);
71+
}
72+
4973
@Override
5074
@SuppressWarnings({ "rawtypes", "unchecked" })
5175
public Class<LinkedList<String>> getType() {
5276
return (Class) String.class;
5377
}
5478

79+
/**
80+
* @return true if there are no aliases for this {@code ConsoleArgument}, or
81+
* at least one alias matches the first argument in the provided
82+
* list
83+
*/
84+
protected boolean isAlias(final LinkedList<String> args) {
85+
return aliasFlags.isEmpty() || aliasFlags.contains(args.getFirst());
86+
}
5587
}

src/main/java/org/scijava/console/SystemPropertyArgument.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ public class SystemPropertyArgument extends AbstractConsoleArgument {
4949
private static final String SYS_PROP_REGEX = "-D([\\w\\._-]+)(=(.*))?";
5050
private static final Pattern SYS_PROP_PAT = Pattern.compile(SYS_PROP_REGEX);
5151

52+
// -- Constructor --
53+
54+
public SystemPropertyArgument() {
55+
super(1);
56+
}
57+
5258
// -- ConsoleArgument methods --
5359

5460
@Override
@@ -69,7 +75,7 @@ public void handle(final LinkedList<String> args) {
6975

7076
@Override
7177
public boolean supports(final LinkedList<String> args) {
72-
if (args == null || args.isEmpty()) return false;
78+
if (!super.supports(args)) return false;
7379
final String arg = args.getFirst();
7480
if (!arg.startsWith("-D")) return false;
7581
return SYS_PROP_PAT.matcher(arg).matches();

src/main/java/org/scijava/io/console/OpenArgument.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ public class OpenArgument extends AbstractConsoleArgument {
5959
@Parameter
6060
private LogService log;
6161

62+
// -- Constructor --
63+
64+
public OpenArgument() {
65+
super(2, "--open");
66+
}
67+
6268
// -- ConsoleArgument methods --
6369

6470
@Override
@@ -76,12 +82,4 @@ public void handle(final LinkedList<String> args) {
7682
log.error(exc);
7783
}
7884
}
79-
80-
// -- Typed methods --
81-
82-
@Override
83-
public boolean supports(final LinkedList<String> args) {
84-
return args != null && args.size() >= 2 && args.getFirst().equals("--open");
85-
}
86-
8785
}

src/main/java/org/scijava/main/console/MainArgument.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ public class MainArgument extends AbstractConsoleArgument {
5757
@Parameter(required = false)
5858
private LogService log;
5959

60+
// -- Constructor --
61+
62+
public MainArgument() {
63+
super(2, "--main", "--main-class");
64+
}
65+
6066
// -- ConsoleArgument methods --
6167

6268
@Override
@@ -67,7 +73,7 @@ public void handle(final LinkedList<String> args) {
6773
final String className = args.removeFirst();
6874

6975
final List<String> argList = new ArrayList<String>();
70-
while (!args.isEmpty() && !isMainFlag(args) && !isSeparator(args)) {
76+
while (!args.isEmpty() && !isAlias(args) && !isSeparator(args)) {
7177
argList.add(args.removeFirst());
7278
}
7379
if (isSeparator(args)) args.removeFirst(); // remove the -- separator
@@ -80,17 +86,11 @@ public void handle(final LinkedList<String> args) {
8086

8187
@Override
8288
public boolean supports(final LinkedList<String> args) {
83-
return mainService != null && isMainFlag(args);
89+
return mainService != null && super.supports(args);
8490
}
8591

8692
// -- Helper methods --
8793

88-
private boolean isMainFlag(final LinkedList<String> args) {
89-
if (args == null || args.isEmpty()) return false;
90-
final String arg = args.getFirst();
91-
return arg.equals("--main") || arg.equals("--main-class");
92-
}
93-
9494
private boolean isSeparator(final LinkedList<String> args) {
9595
if (args == null || args.isEmpty()) return false;
9696
return args.getFirst().equals("--");

src/main/java/org/scijava/ui/console/UIArgument.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ public class UIArgument extends AbstractConsoleArgument {
5555
@Parameter
5656
private LogService log;
5757

58+
// -- Constructor --
59+
60+
public UIArgument() {
61+
super(2, "--ui");
62+
}
63+
5864
// -- ConsoleArgument methods --
5965

6066
@Override
@@ -73,11 +79,4 @@ public void handle(final LinkedList<String> args) {
7379
}
7480
}
7581

76-
// -- Typed methods --
77-
78-
@Override
79-
public boolean supports(final LinkedList<String> args) {
80-
return args != null && args.size() >= 2 && args.getFirst().equals("--ui");
81-
}
82-
8382
}

src/test/java/org/scijava/console/ConsoleServiceTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ private void assertOutputEvent(final Source source, final String output,
208208
@Plugin(type = ConsoleArgument.class, priority = Priority.HIGH_PRIORITY)
209209
public static class FooArgument extends AbstractConsoleArgument {
210210

211+
public FooArgument() {
212+
super(1, "--foo");
213+
}
214+
211215
private boolean argsHandled;
212216

213217
@Override
@@ -219,11 +223,6 @@ public void handle(final LinkedList<String> args) {
219223
args.clear();
220224
argsHandled = true;
221225
}
222-
223-
@Override
224-
public boolean supports(final LinkedList<String> args) {
225-
return !args.isEmpty() && args.getFirst().equals("--foo");
226-
}
227226
}
228227

229228
private static class OutputTracker implements OutputListener {

0 commit comments

Comments
 (0)