Initial Upload
This commit is contained in:
26
src/main/java/tech/nevets/quickflags/Flag.java
Normal file
26
src/main/java/tech/nevets/quickflags/Flag.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package tech.nevets.quickflags;
|
||||
|
||||
//TODO add the ability to store multiple values for one flag.
|
||||
//TODO last value added is returned by getValue, add getValues
|
||||
//TODO method that returns array of values.
|
||||
public abstract class Flag {
|
||||
private String value;
|
||||
|
||||
public abstract String getLongFlag();
|
||||
|
||||
public char getShortFlag() {
|
||||
return getLongFlag().charAt(0);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return getLongFlag();
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
46
src/main/java/tech/nevets/quickflags/FlagFactory.java
Normal file
46
src/main/java/tech/nevets/quickflags/FlagFactory.java
Normal file
@@ -0,0 +1,46 @@
|
||||
package tech.nevets.quickflags;
|
||||
|
||||
public class FlagFactory {
|
||||
|
||||
public static Flag createFlag(String longFlag) {
|
||||
return new Flag() {
|
||||
@Override
|
||||
public String getLongFlag() {
|
||||
return longFlag;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Flag createFlag(String longFlag, char shortFlag) {
|
||||
return new Flag() {
|
||||
@Override
|
||||
public String getLongFlag() {
|
||||
return longFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public char getShortFlag() {
|
||||
return shortFlag;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Flag createFlag(String name, String longFlag, char shortFlag) {
|
||||
return new Flag() {
|
||||
@Override
|
||||
public char getShortFlag() {
|
||||
return shortFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLongFlag() {
|
||||
return longFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
87
src/main/java/tech/nevets/quickflags/FlagHandler.java
Normal file
87
src/main/java/tech/nevets/quickflags/FlagHandler.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package tech.nevets.quickflags;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class FlagHandler {
|
||||
|
||||
private boolean debug = false;
|
||||
private final List<Flag> flags;
|
||||
private String[] remainingArgs;
|
||||
|
||||
public FlagHandler() {
|
||||
flags = new ArrayList<>();
|
||||
}
|
||||
|
||||
public FlagHandler registerFlag(Flag flag) {
|
||||
flags.add(flag);
|
||||
return this;
|
||||
}
|
||||
|
||||
//TODO add more debug output
|
||||
public void setDebug(boolean debug) {
|
||||
this.debug = debug;
|
||||
}
|
||||
|
||||
//TODO BUG: calculating remaining args no worky rn
|
||||
public void loadArgs(String[] args) {
|
||||
if (args.length == 0) return;
|
||||
boolean nextIsValue = false;
|
||||
int flagIndex = -1;
|
||||
int lastFlagIndex = -1;
|
||||
|
||||
int index = 0;
|
||||
for (String s : args) {
|
||||
if (args.length < 2) {
|
||||
lastFlagIndex = -2;
|
||||
break;
|
||||
}
|
||||
if (nextIsValue) {
|
||||
flags.get(flagIndex).setValue(s);
|
||||
nextIsValue = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (s.startsWith("--")) {
|
||||
for (Flag f : flags) {
|
||||
if (f.getLongFlag().equals(s.substring(2))) {
|
||||
flagIndex = flags.indexOf(f);
|
||||
nextIsValue = true;
|
||||
lastFlagIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (s.startsWith("-")) {
|
||||
for (Flag f : flags) {
|
||||
if (f.getShortFlag() == s.charAt(1)) {
|
||||
flagIndex = flags.indexOf(f);
|
||||
nextIsValue = true;
|
||||
lastFlagIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
remainingArgs = Arrays.copyOfRange(args, lastFlagIndex + 2, args.length);
|
||||
}
|
||||
|
||||
public String getValue(String flagName) {
|
||||
for (Flag f : flags) {
|
||||
if (f.getName().equals(flagName)) {
|
||||
return f.getValue();
|
||||
}
|
||||
}
|
||||
if (debug) {
|
||||
System.out.println("DEBUG: No value found for flag \"" + flagName + "\"");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String[] getRemainingArgs() {
|
||||
return this.remainingArgs;
|
||||
}
|
||||
|
||||
}
|
||||
50
src/test/java/tech/nevets/quickflags/FlagMappingTest.java
Normal file
50
src/test/java/tech/nevets/quickflags/FlagMappingTest.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package tech.nevets.quickflags;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import tech.nevets.quickflags.testflags.HelpFlag;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
||||
public class FlagMappingTest {
|
||||
|
||||
@Test
|
||||
public void testShortFlags() {
|
||||
String[] args = new String[]{"-h", "someArg", "-d", "Another Thing"};
|
||||
FlagHandler fh = new FlagHandler()
|
||||
.registerFlag(new HelpFlag())
|
||||
.registerFlag(FlagFactory.createFlag("dino"));
|
||||
fh.loadArgs(args);
|
||||
|
||||
String helpVal = fh.getValue("help");
|
||||
String dinoVal = fh.getValue("dino");
|
||||
|
||||
Assertions.assertEquals("someArg", helpVal);
|
||||
Assertions.assertEquals("Another Thing", dinoVal);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRemainingArgs() {
|
||||
String[] args = new String[]{"-h", "someArg", "-d", "Another Thing", "regularArg", "andSomeMore", "oneLastThing"};
|
||||
FlagHandler fh = new FlagHandler()
|
||||
.registerFlag(new HelpFlag())
|
||||
.registerFlag(FlagFactory.createFlag("dino"));
|
||||
fh.loadArgs(args);
|
||||
|
||||
String[] remainingArgs = fh.getRemainingArgs();
|
||||
|
||||
Assertions.assertEquals(3, remainingArgs.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRemainingArgsEdgeCase() {
|
||||
String[] args = new String[]{"regularArg"};
|
||||
FlagHandler fh = new FlagHandler()
|
||||
.registerFlag(new HelpFlag())
|
||||
.registerFlag(FlagFactory.createFlag("dino"));
|
||||
fh.loadArgs(args);
|
||||
|
||||
String[] remainingArgs = fh.getRemainingArgs();
|
||||
|
||||
Assertions.assertEquals("regularArg", remainingArgs[0]);
|
||||
}
|
||||
}
|
||||
10
src/test/java/tech/nevets/quickflags/testflags/HelpFlag.java
Normal file
10
src/test/java/tech/nevets/quickflags/testflags/HelpFlag.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package tech.nevets.quickflags.testflags;
|
||||
|
||||
import tech.nevets.quickflags.Flag;
|
||||
|
||||
public class HelpFlag extends Flag {
|
||||
@Override
|
||||
public String getLongFlag() {
|
||||
return "help";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user