Initial Upload

This commit is contained in:
2025-05-12 22:16:30 -04:00
parent 42482bdae7
commit e5e3e6c59d
15 changed files with 613 additions and 0 deletions

View 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;
}
}

View 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;
}
};
}
}

View 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;
}
}

View 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]);
}
}

View 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";
}
}