From 6e23dd7f1a220bb440ebe006846710b005ef46d8 Mon Sep 17 00:00:00 2001 From: happymeal2024 Date: Tue, 5 Aug 2025 10:29:11 +0200 Subject: [PATCH] concept --- jcmd | 1 - jcmd/.DS_Store | Bin 0 -> 6148 bytes jcmd/.idea/.gitignore | 3 + jcmd/.idea/compiler.xml | 13 ++ jcmd/.idea/encodings.xml | 7 ++ jcmd/.idea/jarRepositories.xml | 20 +++ jcmd/.idea/misc.xml | 12 ++ jcmd/.idea/vcs.xml | 7 ++ jcmd/.mvn/jvm.config | 0 jcmd/.mvn/maven.config | 0 jcmd/pom.xml | 92 ++++++++++++++ jcmd/src/.DS_Store | Bin 0 -> 6148 bytes .../java/de/vimo/InputTextTillCommand.java | 12 ++ jcmd/src/main/java/de/vimo/Jcmd.java | 48 +++++++ jcmd/src/main/java/de/vimo/Main.java | 22 ++++ .../main/java/de/vimo/command/CdCommand.java | 26 ++++ .../java/de/vimo/command/HelpCommand.java | 25 ++++ .../main/java/de/vimo/command/LsCommand.java | 25 ++++ .../java/de/vimo/command/MkdirCommand.java | 25 ++++ jcmd/src/main/java/de/vimo/core/Argument.java | 15 +++ jcmd/src/main/java/de/vimo/core/Command.java | 12 ++ jcmd/src/main/java/de/vimo/core/Flag.java | 28 +++++ jcmd/src/main/java/de/vimo/core/Line.java | 78 ++++++++++++ jcmd/src/main/java/de/vimo/core/Parser.java | 6 + .../main/java/de/vimo/core/ParserVivi.java | 117 ++++++++++++++++++ jcmd/src/site/site.xml | 26 ++++ .../test/java/de/vimo/core/ParserTest.java | 49 ++++++++ jcmd/target/.DS_Store | Bin 0 -> 6148 bytes .../de/vimo/InputTextTillCommand.class | Bin 0 -> 259 bytes jcmd/target/classes/de/vimo/Jcmd.class | Bin 0 -> 1657 bytes jcmd/target/classes/de/vimo/Main.class | Bin 0 -> 919 bytes .../classes/de/vimo/check/StringCheck.class | Bin 0 -> 793 bytes .../classes/de/vimo/command/CdCommand.class | Bin 0 -> 941 bytes .../classes/de/vimo/command/HelpCommand.class | Bin 0 -> 947 bytes .../classes/de/vimo/command/LsCommand.class | Bin 0 -> 941 bytes .../de/vimo/command/MkdirCommand.class | Bin 0 -> 950 bytes .../classes/de/vimo/core/Argument.class | Bin 0 -> 464 bytes .../target/classes/de/vimo/core/Command.class | Bin 0 -> 396 bytes jcmd/target/classes/de/vimo/core/Flag.class | Bin 0 -> 748 bytes jcmd/target/classes/de/vimo/core/Line.class | Bin 0 -> 1149 bytes jcmd/target/classes/de/vimo/core/Parser.class | Bin 0 -> 164 bytes .../classes/de/vimo/core/ParserVivi.class | Bin 0 -> 4278 bytes .../de/vimo/core/ParserTest.class | Bin 0 -> 2737 bytes 43 files changed, 668 insertions(+), 1 deletion(-) delete mode 160000 jcmd create mode 100644 jcmd/.DS_Store create mode 100644 jcmd/.idea/.gitignore create mode 100644 jcmd/.idea/compiler.xml create mode 100644 jcmd/.idea/encodings.xml create mode 100644 jcmd/.idea/jarRepositories.xml create mode 100644 jcmd/.idea/misc.xml create mode 100644 jcmd/.idea/vcs.xml create mode 100644 jcmd/.mvn/jvm.config create mode 100644 jcmd/.mvn/maven.config create mode 100644 jcmd/pom.xml create mode 100644 jcmd/src/.DS_Store create mode 100644 jcmd/src/main/java/de/vimo/InputTextTillCommand.java create mode 100644 jcmd/src/main/java/de/vimo/Jcmd.java create mode 100644 jcmd/src/main/java/de/vimo/Main.java create mode 100644 jcmd/src/main/java/de/vimo/command/CdCommand.java create mode 100644 jcmd/src/main/java/de/vimo/command/HelpCommand.java create mode 100644 jcmd/src/main/java/de/vimo/command/LsCommand.java create mode 100644 jcmd/src/main/java/de/vimo/command/MkdirCommand.java create mode 100644 jcmd/src/main/java/de/vimo/core/Argument.java create mode 100644 jcmd/src/main/java/de/vimo/core/Command.java create mode 100644 jcmd/src/main/java/de/vimo/core/Flag.java create mode 100644 jcmd/src/main/java/de/vimo/core/Line.java create mode 100644 jcmd/src/main/java/de/vimo/core/Parser.java create mode 100644 jcmd/src/main/java/de/vimo/core/ParserVivi.java create mode 100644 jcmd/src/site/site.xml create mode 100644 jcmd/src/test/java/de/vimo/core/ParserTest.java create mode 100644 jcmd/target/.DS_Store create mode 100644 jcmd/target/classes/de/vimo/InputTextTillCommand.class create mode 100644 jcmd/target/classes/de/vimo/Jcmd.class create mode 100644 jcmd/target/classes/de/vimo/Main.class create mode 100644 jcmd/target/classes/de/vimo/check/StringCheck.class create mode 100644 jcmd/target/classes/de/vimo/command/CdCommand.class create mode 100644 jcmd/target/classes/de/vimo/command/HelpCommand.class create mode 100644 jcmd/target/classes/de/vimo/command/LsCommand.class create mode 100644 jcmd/target/classes/de/vimo/command/MkdirCommand.class create mode 100644 jcmd/target/classes/de/vimo/core/Argument.class create mode 100644 jcmd/target/classes/de/vimo/core/Command.class create mode 100644 jcmd/target/classes/de/vimo/core/Flag.class create mode 100644 jcmd/target/classes/de/vimo/core/Line.class create mode 100644 jcmd/target/classes/de/vimo/core/Parser.class create mode 100644 jcmd/target/classes/de/vimo/core/ParserVivi.class create mode 100644 jcmd/target/test-classes/de/vimo/core/ParserTest.class diff --git a/jcmd b/jcmd deleted file mode 160000 index 52e0edc..0000000 --- a/jcmd +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 52e0edc1b95565edc335a1d1c120cf7b8f4bd4c9 diff --git a/jcmd/.DS_Store b/jcmd/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f8c3a1f486283f155e14fe45891dbf5dec08a1f7 GIT binary patch literal 6148 zcmeHKJx{|h5IxfX5nVcTK!_m>EDVSaEDR`AVJcfU7W#!kQ9~*y%o!P2_y z2{5oSz=A+xMcmn^CT`jlRp?H#pX=xIi(eGG1^`t(?^FOv0N`RFbQZ806U0-=#SHh9 z5f#nR3oG?@9QAV}r9&JL2d2>h`gR>yhY-3ju)p7{wJaCKLD1^OE$nk|-uL!DULSUB zzBA;nzZ`dz?;mCMhQbD>!Yt}`p#z7|w3W-D&1SW0-&?DnMmv)q#i@ERyxn}xjj;4V zZ&9@F2rl5nR;NePo@g$sef;=y`IN4k`BZrvZ|my03vdRf(6&`qwvl5dtNHda-(xR_ zY^s=NZM_Bw&cOhhs2HNtBky?WZj{ez-!C83*lTN!tlN{u*w3NgH$98Q^f-WLHicU> zD782s4u}Io2WWrrun_u;i9x+}V5P4Bhz@q^z;=lmh#sTQm>5I`Lzz@WldAZNp-ejV zdpyo(ObnWIP<;7NtgQHkqO>~B@9E*7e1lSp1LA<~K*9Vh(fPkS`TlPw$uDt09Qaob zC?}`~Ra_FEt+~a~S?ghGV4 + + + + + + + + + + + + \ No newline at end of file diff --git a/jcmd/.idea/encodings.xml b/jcmd/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/jcmd/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/jcmd/.idea/jarRepositories.xml b/jcmd/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/jcmd/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/jcmd/.idea/misc.xml b/jcmd/.idea/misc.xml new file mode 100644 index 0000000..dab31a5 --- /dev/null +++ b/jcmd/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/jcmd/.idea/vcs.xml b/jcmd/.idea/vcs.xml new file mode 100644 index 0000000..288b36b --- /dev/null +++ b/jcmd/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/jcmd/.mvn/jvm.config b/jcmd/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/jcmd/.mvn/maven.config b/jcmd/.mvn/maven.config new file mode 100644 index 0000000..e69de29 diff --git a/jcmd/pom.xml b/jcmd/pom.xml new file mode 100644 index 0000000..67dee84 --- /dev/null +++ b/jcmd/pom.xml @@ -0,0 +1,92 @@ + + + + 4.0.0 + + de.vimo + jcmd + 1.0-SNAPSHOT + + jcmd + A simple jcmd. + + http://www.example.com + + + UTF-8 + 8 + 8 + + + + + org.junit.jupiter + junit-jupiter-api + 5.13.1 + test + + + + + + + + maven-clean-plugin + 3.4.0 + + + maven-site-plugin + 3.12.1 + + + maven-project-info-reports-plugin + 3.6.1 + + + + maven-resources-plugin + 3.3.1 + + + maven-compiler-plugin + 3.13.0 + + + maven-surefire-plugin + 3.3.0 + + + maven-jar-plugin + 3.4.2 + + + maven-install-plugin + 3.1.2 + + + maven-deploy-plugin + 3.1.2 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + + + + + + + + maven-project-info-reports-plugin + + + + diff --git a/jcmd/src/.DS_Store b/jcmd/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a0c34725c4c5d8c83d449af6fc36a82295769f83 GIT binary patch literal 6148 zcmeHKF;2rk5ZrTI7)X(l^1hIQ-bCgF{s4p^K#FlBk|q+8OC&x;#TR%16@Ng?-mbzO zHk2qryVBmAcW*uN_~i8wk(+H6Q=$nG6>!Gv0K&v!T^;TM7 zUlrhYms3L*bW3;X`x`yQxu&hE`LdlORveB$9$(*HPSgD2*Zk@x-WwjJ;JpXyny$X_ zp2WGB_x&N_)!L^0;vLGTyu8oB3r=vaQ{HSF=VIRHI^xyZn0F{Yz{}ibrhqA63haXd z=-F(=k)VyHfGJ=K>=fYdgNHMgik)EibYKWa0AP-AFwDb07SMA5SSogch`^kb0;SaH z5yMG2;$GL4ik+a8lMBqak1{(wp}4?~xDU(8m4Y^!0;WK!z(_79-2cyhKL4jhc4Z2f z0{=<@msfQ)!y{>L?L8d#S`R;mv+=r4a94s!XvJ8|t@s!o3~|pBV5!&%A_B7?fgpno Jrof*n@Co2MXE*== literal 0 HcmV?d00001 diff --git a/jcmd/src/main/java/de/vimo/InputTextTillCommand.java b/jcmd/src/main/java/de/vimo/InputTextTillCommand.java new file mode 100644 index 0000000..0fcbf5e --- /dev/null +++ b/jcmd/src/main/java/de/vimo/InputTextTillCommand.java @@ -0,0 +1,12 @@ +package de.vimo; + +public interface InputTextTillCommand { + + void splitTextToCommandOptionArgument(String text); + + void setCommand(String command); + + void setArgument(String argument); + + void setOption(String option); +} diff --git a/jcmd/src/main/java/de/vimo/Jcmd.java b/jcmd/src/main/java/de/vimo/Jcmd.java new file mode 100644 index 0000000..cfa1df7 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/Jcmd.java @@ -0,0 +1,48 @@ +package de.vimo; + +import java.util.Scanner; + +public class Jcmd implements InputTextTillCommand +{ + public static void main( String[] args ) + { + Scanner inputUser = new Scanner(System.in); + System.out.println("Typ your terminal command"); + + try { + while (inputUser.hasNextLine()) { + String line = inputUser.nextLine(); + if (line.equals("q")) { + break; + } + System.out.println(line); + } + } catch (IllegalStateException e) { + System.out.println(e); + } finally { + inputUser.close(); + } + + + } + + @Override + public void splitTextToCommandOptionArgument(String text) { + + } + + @Override + public void setCommand(String command) { + + } + + @Override + public void setArgument(String argument) { + + } + + @Override + public void setOption(String option) { + + } +} diff --git a/jcmd/src/main/java/de/vimo/Main.java b/jcmd/src/main/java/de/vimo/Main.java new file mode 100644 index 0000000..62f41fe --- /dev/null +++ b/jcmd/src/main/java/de/vimo/Main.java @@ -0,0 +1,22 @@ +package de.vimo; + +import de.vimo.core.Line; +import de.vimo.core.Parser; + +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + Parser parser = null; + + while (true) { + String raw = scanner.nextLine(); + Line line = parser.parse(raw); + + if (line.getCommand() != null) { + // line.getCommand().exec(line.getFlags(), line.getArgs()); + } + } + } +} diff --git a/jcmd/src/main/java/de/vimo/command/CdCommand.java b/jcmd/src/main/java/de/vimo/command/CdCommand.java new file mode 100644 index 0000000..6fb12f1 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/command/CdCommand.java @@ -0,0 +1,26 @@ +package de.vimo.command; + +import de.vimo.core.Argument; +import de.vimo.core.Command; +import de.vimo.core.Flag; + +import java.util.List; + +public class CdCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} + diff --git a/jcmd/src/main/java/de/vimo/command/HelpCommand.java b/jcmd/src/main/java/de/vimo/command/HelpCommand.java new file mode 100644 index 0000000..7eefe80 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/command/HelpCommand.java @@ -0,0 +1,25 @@ +package de.vimo.command; + +import de.vimo.core.Argument; +import de.vimo.core.Command; +import de.vimo.core.Flag; + +import java.util.List; + +public class HelpCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} \ No newline at end of file diff --git a/jcmd/src/main/java/de/vimo/command/LsCommand.java b/jcmd/src/main/java/de/vimo/command/LsCommand.java new file mode 100644 index 0000000..bb04f87 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/command/LsCommand.java @@ -0,0 +1,25 @@ +package de.vimo.command; + +import de.vimo.core.Argument; +import de.vimo.core.Command; +import de.vimo.core.Flag; + +import java.util.List; + +public class LsCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} \ No newline at end of file diff --git a/jcmd/src/main/java/de/vimo/command/MkdirCommand.java b/jcmd/src/main/java/de/vimo/command/MkdirCommand.java new file mode 100644 index 0000000..606a6a3 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/command/MkdirCommand.java @@ -0,0 +1,25 @@ +package de.vimo.command; + +import de.vimo.core.Argument; +import de.vimo.core.Command; +import de.vimo.core.Flag; + +import java.util.List; + +public class MkdirCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} diff --git a/jcmd/src/main/java/de/vimo/core/Argument.java b/jcmd/src/main/java/de/vimo/core/Argument.java new file mode 100644 index 0000000..c7cf009 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/core/Argument.java @@ -0,0 +1,15 @@ +package de.vimo.core; + +public class Argument { + + private final String value; + + public Argument(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} + diff --git a/jcmd/src/main/java/de/vimo/core/Command.java b/jcmd/src/main/java/de/vimo/core/Command.java new file mode 100644 index 0000000..e29e252 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/core/Command.java @@ -0,0 +1,12 @@ +package de.vimo.core; + +import java.util.List; + +public interface Command { + + int exec(List flags, List args); + + String getName(); + + List getFlags(); +} diff --git a/jcmd/src/main/java/de/vimo/core/Flag.java b/jcmd/src/main/java/de/vimo/core/Flag.java new file mode 100644 index 0000000..7139abd --- /dev/null +++ b/jcmd/src/main/java/de/vimo/core/Flag.java @@ -0,0 +1,28 @@ +package de.vimo.core; + +public class Flag { + + private final String shortName; + + private final String longName; + + private final String description; + + public Flag(String shortName, String longName, String description) { + this.shortName = shortName; + this.longName = longName; + this.description = description; + } + + public String getShortName() { + return shortName; + } + + public String getLongName() { + return longName; + } + + public String getDescription() { + return description; + } +} diff --git a/jcmd/src/main/java/de/vimo/core/Line.java b/jcmd/src/main/java/de/vimo/core/Line.java new file mode 100644 index 0000000..289f0d6 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/core/Line.java @@ -0,0 +1,78 @@ +package de.vimo.core; + +import java.util.List; + +public class Line { + + private String command; + + private List flags; + + private List args; + + public Line(String command, List flags, List args) { + this.command = command; + this.flags = flags; + this.args = args; + } + + public Line(String command) { + this.command = command; + } + + + public String getCommand() { + return command; + } + + public List getFlags() { + return flags; + } + + public List getArgs() { + return args; + } + +// @Override +// public Line parse(String raw) { +// String regex = "[\\s]"; +// String[] myArray = raw.split(regex); +// +// for (int i = 1; i < myArray.length; i++) { +// if (myArray[i].contains("-")) { +// flags.add(myArray[i]); +// } else { +// args.add(myArray[i]); +// } +// } +// +// return new Line(myArray[0], flags, args); +// } + +// +// --- Please ignore this --- +// +// private final Command command; +// +// private final List flags; +// +// private final List args; +// +// public Line(Command command, List flags, List args) { +// this.command = command; +// this.flags = flags; +// this.args = args; +// } +// +// public Command getCommand() { +// return command; +// } +// +// public List getFlags() { +// return flags; +// } +// +// public List getArgs() { +// return args; +// } +} diff --git a/jcmd/src/main/java/de/vimo/core/Parser.java b/jcmd/src/main/java/de/vimo/core/Parser.java new file mode 100644 index 0000000..23c0f8e --- /dev/null +++ b/jcmd/src/main/java/de/vimo/core/Parser.java @@ -0,0 +1,6 @@ +package de.vimo.core; + +public interface Parser { + + Line parse(String raw); +} diff --git a/jcmd/src/main/java/de/vimo/core/ParserVivi.java b/jcmd/src/main/java/de/vimo/core/ParserVivi.java new file mode 100644 index 0000000..56eff31 --- /dev/null +++ b/jcmd/src/main/java/de/vimo/core/ParserVivi.java @@ -0,0 +1,117 @@ +package de.vimo.core; + + +import java.util.ArrayList; +import java.util.List; + +public class ParserVivi implements Parser { + + List flags = new ArrayList<>(List.of()); + List args = new ArrayList<>(List.of()); + + + @Override + public Line parse(String raw) { + + flags = new ArrayList<>(List.of()); + args = new ArrayList<>(List.of()); + + String replaceWords = raw.replaceAll("\\s+"," "); + String trimWords = replaceWords.trim(); + String[] arrayWords = trimWords.split(" "); + + String command = null; + boolean commandCheck = isCommandValid(arrayWords); + boolean flagsCheck = isFlagsValid(arrayWords); + boolean argsCheck = isArgsValid(arrayWords); + + Line resultLine = null; + + if (arrayWords.length > 0) { + if (commandCheck) { + command = arrayWords[0]; + if (arrayWords.length == 1) { + resultLine = new Line(command, flags, args); + } else if (flagsCheck && !argsCheck) { + resultLine = new Line(command, flags, args); + } else if (!flagsCheck && argsCheck) { + resultLine = new Line(command, flags, args); + } else if (flagsCheck && argsCheck) { + resultLine = new Line(command, flags, args); + } + } + } + return resultLine; + } + + public boolean isArgsValid(String[] words) { + int arrayWordsLength = words.length; + boolean isArgsValid = false; + char[] charWord = new char[0]; + + for (int i = 1; i < words.length; i++) { + charWord = words[i].toCharArray(); + + if (checkCharArgs(charWord)) { + args.add(words[i]); + isArgsValid = true; + } + } + return isArgsValid; + } + + public boolean checkCharArgs(char[] charWord) { + boolean isChecked = false; + + if (charWord.length != 0) { + if (!(charWord[0] == '-')) { + isChecked = true; + } + } + return isChecked; + } + + public boolean isCommandValid(String[] arrayWords) { + int arrayWordsLength = arrayWords.length; + boolean isCommandValid = false; + + if (arrayWordsLength != 0) { + if (arrayWords[0].matches("[a-zA-Z]+")) { + isCommandValid = true; + } + } + return isCommandValid; + } + + public boolean isFlagsValid(String[] words) { + char[] charWord = new char[0]; + boolean isFlagsValid = false; + + for (int i = 1; i < words.length; i++) { + if (words[i].contains("-")) { + charWord = words[i].toCharArray(); + if (checkChar(charWord)) { + for (int j = 1; j < charWord.length; j++) { + flags.add(String.valueOf(charWord[j])); + } + isFlagsValid = true; + } + } + } + return isFlagsValid; + } + + public boolean checkChar(char[] charWord) { + boolean isChecked = false; + + if (charWord.length != 1) { + for (int i = 0; i < charWord.length; i++) { + if (charWord[0] == '-' && Character.isLetter(charWord[1])) { + isChecked = true; + break; + } + } + } + return isChecked; + } +} diff --git a/jcmd/src/site/site.xml b/jcmd/src/site/site.xml new file mode 100644 index 0000000..461f180 --- /dev/null +++ b/jcmd/src/site/site.xml @@ -0,0 +1,26 @@ + + + + + jcmd + https://maven.apache.org/images/apache-maven-project.png + https://www.apache.org/ + + + + https://maven.apache.org/images/maven-logo-black-on-white.png + https://maven.apache.org/ + + + + org.apache.maven.skins + maven-fluido-skin + 1.7 + + + + + + + \ No newline at end of file diff --git a/jcmd/src/test/java/de/vimo/core/ParserTest.java b/jcmd/src/test/java/de/vimo/core/ParserTest.java new file mode 100644 index 0000000..c75acd1 --- /dev/null +++ b/jcmd/src/test/java/de/vimo/core/ParserTest.java @@ -0,0 +1,49 @@ +package de.vimo.core; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + + +public class ParserTest +{ + @Test + public void testParser() { + // <-- Your implementation goes here + + Parser parser = new ParserVivi(); // <-- Your implementation goes here + + // test invalid strings -> should return null + assertNull(parser.parse("")); + assertNull(parser.parse("-")); + assertNull(parser.parse("ls -")); + assertNull(parser.parse("ls --")); + + // test valid string + testInput(parser, "ls", "ls", List.of(), List.of()); + testInput(parser, " ls -la", "ls", List.of("l", "a"), List.of()); + testInput(parser, "ls ./hello/world ", "ls", List.of(), List.of("./hello/world")); + testInput(parser, "ls -la ./what", "ls", List.of("l", "a"), List.of("./what")); + testInput(parser, "rm -r /bin /opt", "rm", List.of("r"), List.of("/bin", "/opt")); + testInput(parser, " cd . ", "cd", List.of(), List.of(".")); + testInput(parser, " mkdir . ", "mkdir", List.of(), List.of(".")); + testInput(parser, "super -abc -de -f super nice danke paul", "super", List.of("a", "b", "c", "d", "e", "f"), List.of("super", "nice", "danke", "paul")); + + // new tests + + testInput(parser, "print hello-world", "print", List.of(), List.of("hello-world")); + } + + private void testInput(Parser parser, String input, String expectedCommand, List expectedFlags, List expectedArgs) { + Line line = parser.parse(input); + + assertEquals(expectedCommand, line.getCommand(), "Wrong command"); + assertEquals(expectedFlags, line.getFlags(), "Wrong flags"); + assertEquals(expectedArgs, line.getArgs(), "Wrong args"); + } +} diff --git a/jcmd/target/.DS_Store b/jcmd/target/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..24cf8ce81142bb1a7729aa67f6c0b97fec42dacc GIT binary patch literal 6148 zcmeHKF;2r!4D~OS2x2K4V-`k+-XK)z%2J6Lnm`#6QW3gm;SAh>k&z>C1SVFxgE#=s z_9rDukjerG*^&Jce>>m*C5rQj$c+~1kZ3?e0hF<~1=Ars&f1cm_wb;Tdz5raWi}g5 zlA;xDj=#tNKf6szD5Dc9an#Q*pKH0j+jc}=#PKvMrWgsXpYCqnmJbJAQE44DempyT zeeQ~ypYz-DF&n>!v_mu0aRI$VRad~2_EB3w3wV-tjhwVj*5|sHNB4U#TG1Nw<;7|( z-^*;SPbxKI3>X8(z;82vp3M?$E1ES1i~(byW`MsBA(S!lSSiY<14gz0z&_j}IG2Ao zV8{+&t$ItBi4#mmr@P`skE>bjW3>X7V z1~&9^!2N&x_5Qz^WLL(3G4QV#aQ%1^kFX@)TU(3cUK>J>p)4F%Db^`CkyeaYZpFJ$ Z5%@zs0Y)AxMR*|gBOo-GF$R8=fp_2~V$lEq literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/InputTextTillCommand.class b/jcmd/target/classes/de/vimo/InputTextTillCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..f06ebc0dc981142d787ce9f070b7b699d7194985 GIT binary patch literal 259 zcmZvXu?oUK5JYD+8WSySECdTnZA@ulC4wLb776w-Il_g@U5J<9w^{fBew4Ukz{X~0 z2i`2R&)59{V2zQB4q=vxppk_M4!W#uByKj6O6^Qh#5#515XO1j#DR)+7Mw1*NGxG~ zEtUMjrbSPsl}2x?tS*FRWU@H^a-prH&Nj<4!M_UIMhHVTzlg`~dxo*l)Kwz(QVGKJ hU$@oge4jw*@;iXTReR|3LU3ChwCa77NuOs2!#DdEL>2%5 literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/Jcmd.class b/jcmd/target/classes/de/vimo/Jcmd.class new file mode 100644 index 0000000000000000000000000000000000000000..21cd8bafdacb4f3cbe7a84fddc41706e69698134 GIT binary patch literal 1657 zcmah}+j0{}5Itkd8cALoTk@TYWfBs}Hf$gvgvdaM!NgdW9VAqhuPx-;b1%y68wa1Q4g3OzoDAQ*UC1G<`ULdOU~ zbd}$#lu0v=SqnwXF%0gAPE9_Ks>+u}qF=T5GYg;N5<|xS;2JBH?M6i?`-nJE2sRJd}J{I1bF zf7DBwQn9&1j$_-`HAL8=+J$3EFl3e9(#IVcQbY`PcgjKhb%O>?YYqIBQy*r#5CO{w{tb z0dCQoyiBoux;5O#3fV!*dq6*iRXWWe{SE~V{tlBI<+sSLa9pi%Jk+{YaXuD^_-jFN zRN0~_I}tk*Who5nL_iOub~?nR6CgGch|SX>=1+k5Ie~a|I)r@!L_L9M7zG~x53PMw A82|tP literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/Main.class b/jcmd/target/classes/de/vimo/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..a0e73ecb7859af5dc2dcc04dd1baf7e4f8261886 GIT binary patch literal 919 zcmZuv+iuf95IyTS*(7z^=GHb1w{mIY-pr*?i6CAoAt5CNDODuI)5ckaEwLRrPJy4{ zm1lTp1xP&dz^CvJTxOk68ns$!?43Dt=FH6g`2FP@fL-inVIaX_T1X^4W5As>TAk?K1wSNOgRGst3w!?KXW>=aAu-7u0KgQ0we zawE=Ef%DWKjG|T)O5xSB;F#C-^9)P13n6w}gNhbPC^Mve`8H}OUow zL;f6sA={JDUf_Ac?{Zvcu>N71LU(WO1zjpQr|I@bUPp!pqSGf&p%J*E-xi_L_leVt zUa29&?5Pw@QYRKKCR?bzJm0w8rY(iyji&s+$jMYFwI9!{cuE-$B<_xaBJ5GU;svw} zd^p}S#mB^FmrtTn@i1ws65$?7nW#x1he7=Tr*(Jg}-Z1U*j_ec;Gu=*AJ#V2G= zXa}shag4(L=GJE{7LyQKM9$DW?v?L=$B20-ZcuCLlt@AEX5Ufh_yiX zb!<>Zm2_-k3#P7wZITSitKv59kd7QGxQlz#)(-hC7{8F?;2eu(iry!mfd_v9oYTtY literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/check/StringCheck.class b/jcmd/target/classes/de/vimo/check/StringCheck.class new file mode 100644 index 0000000000000000000000000000000000000000..cdfdc21536688cae4e7a3b4a71294dcb7dda4e32 GIT binary patch literal 793 zcmZ`%+iuf95Iqy8v11GkPFpDD;&N%@rl}uz04WFwRpQB9q*i$WA#I!`+18iHu`Bhn z%0rQO-~;$5#B7XIq7*;O?97=tb7sB2e*gFh-~|F3H5ex94pz`0v`)mC2x5_rgAcQ#9@rz(=(NTjE8Xe!Fsg3Sz{ zXI%>pfjk?xuxg^^;5OWaxkp8=(lNo#D#!6Efe=0JitRjd#+)zhG0&0N1QUrH7fmq z36HQjlEIluvLKqs=rpKSIMioC{V*Fz!fL2e`MyksGCvl>m@{seMIs)ET3iBK$Pqw{I`O8f!iA|EqJ`x=-~nB9NH@lDxBS(!)jt{G{|(1L;S_cAKMsJ+WWe`wqI8!;jf&7%=dJty2}?DV}lE#13{jqnp2Qg~5K! zHN&pkbZ=bZ=DTlb?_Xl`ipxcvYZ_c>GFKCA*mGX5>O}`W;|9ODJ#?AbfrWiOX`wwv HYB=}fgc5PfSWbsN$TLP#m)qZL9V2;n1#RFzPqN=Q}_3hIf=##zi({y^@!g8#$; zPDmX10sJV$TRTmHi7GBLJM(7VyxHAfzkmD$@B)V|IB-2Q+Gt`;VCP(3N3bnFNE!VK&2 z;FUo0eJmqV?$kl@$lM~mzlD7McqQg>t>tJ*6<0hV@$i^>2G`fU%%dVvsVQqW#yU!+ zDRSPxoB9H)2mCj?UDu10Ih6_7yZxE2@>$0w*J(tt>nyO!xp?QQVsV24PyR`+Rwd9H zXGI>W6K!8}YyKIY+eg76Jbp2O4gR+VJ--?44Msk_pl?3?4)Ki#2W?slgXNpF?WzD< z*k;7H!%bG%=68%-ddK}j>n?R}mYoL`I_tFD9o#C}9CUedaGQNS`U>mKv0diwl-WJz r?qZ+TPJBjhl{w;Ti7vEumb5x^t@m)BOxJhruIQ|0Kj5r~<(z{*+ds%i literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/command/HelpCommand.class b/jcmd/target/classes/de/vimo/command/HelpCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..9ed3e5e81b234d9c93864364b636e90561a5b1e7 GIT binary patch literal 947 zcma)4T~8B16g{)svQUfEQj3Zxgcw_6+(#cuNDK+lWP>p^Joz%+j?0k!Aj>S#|KtNc znfTxj@JAWX>=s%}Lwvb+?#DUz+?o0P=jSf~ud&mB1J^^Xi8_`9TBq_t`mszS|NZDx zg+^d$Pp8`K3%I@hv4>@W&9U+?bdvdDmLxJA`)^fzc2J!?Gz2=+hFtlRia_lk8!Lge zK&R@cNJc9EC`U0f?H~(fd@OTq<4Lk+PV~9JRxl;IF>OFn^+kmOyS<>4UKkzwfj&2b z`MCd1p#C|Q5lLI~Me@kpR=WR6`FeIG=h+-&Z$=lFJS6d8pL+VY_r1xZB2lR+dsl`! zN~I}s-oc0Y1r`tZZ+5$`7b$Zj6S8-D6J6!g4o$Aph+>!7V3l+6_EpF91_hqqNG?_- z&=_V#9;!oa-?KIIAzs;M!45orG=UZVx*9z{8|@uNKE0r?zxV<1od*X^T3ZI&S81D7 z1MXst5$SP{T^9U_kxTEm-)P+#8&zHT$a_T*7l56=UVGyY?0}9fgc5PfSWbsN$TLP#m)qZL9V2;n1#RFzPrN=Q}_3hIf=##zi({y@&Ug8#$; zPDmX10sJV$TRTmHi7GBLJM(7VyxHAfzkmD$@B)V|IB-2Q+Gt`;VCO3bnFLuYKHZA z@JgWhK9&(Fcj_Q{WNwk(-$Firyb|-c)^fC@iYuOycz8@bgX`;F=24NT)ReUwBORsE z6gh9;O?`pY1OA)cuIok0oXLdj-Tq8h`K%+8>olU+brx9VT)cBtvA98jC;uc@s}g99 zvLX-FskX1VHUA9H?W5oj9>18t2LD@wp5Ki21|y$d&^Mochxo>WgEp;&!SYSoc2$5a zY%}89;U=qW^E*Z^z2knNb(cCf%g%!eopoC74sMlf4!S%!xXr#EeTDVr*e-K-%IqF< rcd<`vCqARM${g{vL>F2+OIn?|)_b^5rt3R*S9DghA8^*ga?ZgYk~zqb literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/command/MkdirCommand.class b/jcmd/target/classes/de/vimo/command/MkdirCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..1f105d0f71c97ed3cc6786048402845a4f1aa247 GIT binary patch literal 950 zcma)4%Wl&^6g^`nb(^NN4I$-G`Vc}S2;n7*RFzPrN=R-I3hIi@#2L&KKhV^!+J9mJ zDql(SFb6@A4JNN$n^Ya&gSJ-X9f$O2xL>&tPYp3#D`mszS|LyQp zg}K1Oo=$bXFW`22Cmt3BHb=@o*GcAwS(3(8+9vTAeNrqAWI3iFx$VN(F zHPER#E|Q@#@8vM2rxj$Oj8CM|)*d@+`6qoQuoXdvA-YA!8`P72C{`?2TcRn06DQy@`U!iPP z3Alq*T3jF2nPrPV&~m9A_ba74Rk>1D?o`onrNwUHZi(ig&6k6Ftm{x$vCegDgTDKv u_W^wm@rcrPd_irQIpSLxop5bUadob_ZsIYKZm-;!Q(5)iVz2G8&(2>BY|KFb literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/core/Argument.class b/jcmd/target/classes/de/vimo/core/Argument.class new file mode 100644 index 0000000000000000000000000000000000000000..10d3d9675ca079ea130881ebdefeb0dbf8c34b2b GIT binary patch literal 464 zcmZvY%}T>S5Xb+UG))`R54E;uZ)pYh=s^)g=qc!-lKVDY;+8alHOX@+D1rwcz=slN zw-pa{7iMQ>XMXeX_5JY)-~y8X4qP9t5FXkL!?kDx&qa~(`{i1u6+`<<6{@;saHDC` zMF(9UL5Kr{3@0ne8?`BUT58E}bXIR((+#ecj-rB#t#Qc|?vuHG!Aeh|ytQp!~1iO|Z}J7=qUR8I_(_}><&Oed37vTb7&P4`PO1dFoPshlfQ zr1#tXxoH`vG^j%>q8ZGnq&cK}=#lJ`H7DEr2eWsu+1VTX7aKDm*@sJ#mTHzocSzQF s8;wKanG;wlBib=WJ0_=>(VsVah5t;71A}W@XJ|3uHeiRLUD~Me4}6_iJpcdz literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/core/Command.class b/jcmd/target/classes/de/vimo/core/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..7f7eb5c5e81f42da054156d7b9eb1a2fe4d237d1 GIT binary patch literal 396 zcmZWl%Sr=55UfsOHZL`V{DB9POXlcdMGzq%EQ;(GOg6(XVP_U5v%zok;0O3oV(%s@ zj<>Gv>Z+nXKHuH}++doZLzr)sI2c=rqVh^SRMtwjP0%Auck&=bDV-M2o1H2Gp{HI| zLAY9E?X3=`6q(tFG{(zE!Z0`5$xwSmc!@u5vp>G;QtI?BmWfFBUe{K+z{EyB(JDMi z%j)yR@))2En+I>4P6-1hG{Sqr?3?i$nQ;AY85y2Z5k`4c`$DZv$!?QVNvo!VK7r8X gK7lTGc7{IVgi!|r#zTzIbUDW4XMfJqMa#JS0^0Lx2LJ#7 literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/core/Flag.class b/jcmd/target/classes/de/vimo/core/Flag.class new file mode 100644 index 0000000000000000000000000000000000000000..6faa4c432292c1f0e150780c75141274e8274c2c GIT binary patch literal 748 zcma)3%TB^T6g>mwQ7CUj#aG-xeROFI#*Kzmg9{A%QYK|cX-z47mnISu7k+>rWxP|G zV1R|0WbWLPd(J)g&iBvf7l0d_<&Z!!14Tm$X@>H|T3Ci_d5-ZkoNzm2NZ$!hg!c@| zR(qf#3pInBhCDQe%7_~aG4&1G54h2FEr&s!jr}0(SyRqXHP?FmFc6;8kqSi(B}vb^ zzURnF305>zC72)anH`9iQ1~9hZEIWNKS+DPpgi~^GEp*x$9wbXkO$A!(2Z>Qw&f12 zK*&4>m2fO(3^j9WrVfMV@UXw0tKMpFn;`2{WyT{h6e)ZBJ4>$b&jXuxh4i4xZC%Ut z;GCvU(03$h0kl?nRpox7NGqYJfYJZd=&n=dQnf;{u77~(7fWRH%Owi>)e_}5!V}n| zyFm<)obRZ4$H=9M0+ lR_O?=M$+1%Q5`6Tjp`U@v}e}e!3 literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/core/Line.class b/jcmd/target/classes/de/vimo/core/Line.class new file mode 100644 index 0000000000000000000000000000000000000000..793ac8a22449e1a15880cfa0ff59985631f3e6af GIT binary patch literal 1149 zcmaiy&2H0B5QWdpZ*82U`Go?d6iP|Vk5`CAs!FI*RuL?MvSZ;SCb&v$ zD!gcK=M$CPWZW6D$z1rsC11V2brVEr z{ax|tP=gKu|aTLt_|}$l=)R0BoxW#Xa6+nr~GBo;^=~zb=X0uM|Ai26}lc3qR}^W!jy@a%B%r>bF9?pB`mSG zzG2Zzw)%W3SHj(hT@lvT_H;DMK(q(SlK9E@&h&%pzFn@WbuAVaeS(WG(1W* PsU}Sh|7r3l;ywNY8-&*U literal 0 HcmV?d00001 diff --git a/jcmd/target/classes/de/vimo/core/Parser.class b/jcmd/target/classes/de/vimo/core/Parser.class new file mode 100644 index 0000000000000000000000000000000000000000..9ea8001a6baaed65a01078457a59020d8a481ea7 GIT binary patch literal 164 zcmX^0Z`VEs1_pBmPId++Mh4-ORQ9+NM`>Z4qsOgtYXY8`xY@XD02m8QOm7^iwAQ zIq&6ppZ7h-H$J&G2Ve`{51|4+6^aHwDg|ne>eG6{($iy!{YQ=(DMz4kyO}nfZUJ9I z>SaEct=e;aexVOm;^(g>bkI;A^deYwHVa!1soDslo~fu6W$J44gQAVWaE%5 z(P0gb;xQtqkB|x_{?7X_6u{#G!C}4Scu&jFV{vI$*KhHoM+^LK z1TreJ8XV;2GvwBhG@z#(BSRm|Y_H+CLxo!C=92>VXLD0VCf1@KNyTEZmJx$r{*J~x zImc-;WyD7G^n|-KrROXOvabrq@sx@$YxoMjN|Ple;58#cJ|(--JxaE>rO61{p;?ipY7hfxRZ3V5|yMq z!rj%<*1p{25hHU@KVnf5?zL08HK1oqIWGtmXWV4IqNRS`?z2?r%jm=~e77}rk3ydu zv@;{r5|mA@Fb?VRz9>v;%k&{qEai18>M4wplFX#l5L>X@-V1`DY~zJ7dvi8tIWjz= zR_eElFN>nz(NhzB`ji`_ic?fceu}+J7O|DC*4%cl*GP{!*l<$CSq8+8 zDqS)t6Gw^dB8MjAxx&20#k%weV1n?HMx!B3cJM>9n7ZcT$xD>)= z%&3@^J@X0)Jz*rg>h{{`ZdR0?IVNzrxRwhWJ>z?L)mTP$U9W9V4TF-zuq)ZHqQx@Gm7jzKuJz3H@(Nm_a~Yh+bi7g&E+Oyyiv@mqn_ z|9>ly^Wwr9wt@;a=i~fBK1(=$j-v{ktkYcXLNTbOxi!+*v#ysm$ZKsN!qu z^i!amNAxhSU!twoxzJZ98vRF9SNMd$NJ8QdPc72@39_}=U2-0Wo7ig zgY8lOH9QE+U^gey_!abC!+|2na#!-OD~Sf*B1}F=I7boXw}!AT!7Ao)J@eN@SsQ2V zsN?%%HFlvMeSAV4z$OfEWtdMR9h-TnwG-$L!oCG(u@yhVHq4NA+A5-Y6aJ~(esxm2~p3FiN4}S9fj`}l~lS>pO%51V|g{)}NBIQT6lz%RqP!}Pnz*km{KXj@&eMK(5q>M&Y`j2AFVd5jnb%i{ z->c+j-u0o$)3e~ia+fa>rN{zGwX`fzl8jIxKE^U3-Qml=fW%EM%A^l6-+jJrr9+7* zGU0pT5v46WGK0}PI^>wi?`vXzIGV=>mln<3wL+F!bHu;-3MM@sxGeaHY*5IC*`jFL z*rY&|6y~au7}el4R@m$0=>;_74QBHvc!zIM!whmh@(BE&ASk)Oe5@BYQOEz15qx46aJW!NORHprat<4P-E|U& zdY2mKu_UfA$f-O6%8rW&p7b%ie-)8sEejBMms&1!G{f*_c`aPwACOl`_8Epaw~(|D z*1ADR2DUB)(YipP<{}DJ!S^vjLadYy2Z`5(g2OjxN~MCG;pyJ%s68}`FZDIYui_Ys zG5qwtf~Zr8DlG-!iBA8#v@%*5^?Tym7mHV~ACM5gLlu6{Uib%c?T_qzAEJT%rWt=? zFZwecz+c=@_IUPrzn!8VK6WRsn^kew8_Z^f+ev@wcC&hdagj2GT9&d;%5K(9D?g{K ml4pNG4Hft$Wc4lO{9Q)*Yxn!6`+b`*g0(Ji4et@k=>Gt`)Z4TG literal 0 HcmV?d00001 diff --git a/jcmd/target/test-classes/de/vimo/core/ParserTest.class b/jcmd/target/test-classes/de/vimo/core/ParserTest.class new file mode 100644 index 0000000000000000000000000000000000000000..48bb754771762eb4a2291ada7bae1bf62609322b GIT binary patch literal 2737 zcmb_eX>$}+6g_XU%u6y5ct9|U*lLu7FlqKJAre9mbOa=E5X7Z3)0uSW=^lD|0x05! z`@XNZ@DD7jAZnF<_XqgdZ~7}N&+DGaI#y{FsZ_uF?z`{ZbI*N!dVc%+r(XcZ6$PEGvky=QNo`PP~AOo z8M6xnyaC-w^rWy6z4dt;v-JTjA%`PgsY3fq_rlU+e*2eF^lzTI{EPAEYSRMJFm!pY zC1J95S7HkXOINu~m$+SEXC1EQ<*Tu`IDy1YHk*g{nUl8b`sR5*aPx*?NbD9^w!o{? z?bYe}1-j~_Tf(NqK3>omIgezH^OII6aUbt!%^nh185Fsg4h(bL@eI>1F=UuM3W^dV ztTT|fpRLxb5=XQZg*+(G#(g=Bwoe0oh~((OlvY zfoAQ%p22@fe4k#N!;8 z{YehCgvDV(GnUhgh{bwLu7EFr2&Vv0^(mqzMpq(y<#Hw|eW z6h8Z1qF{tZbl=j^eUmsxNReBDD$q7>trZnaCviT73%JP5OH_uUQLw{dzgV<9^1QnC zR!5px6(@;jcpFXzzE?1EairF!XH&S0=LAx*>WrMLST57=`M(6zBrvPNzL3I;T682) z9dfNgS>g&yijz-hhmLwBg;#Y{l2Jo}4tkx1#6cG4?8~s9w*}g@k{+!T$L(Ou8h7bY z89!&aSu1e#yy|QWCmn9;tS3cUviQ!nYR!tpi7#LzA*NF^`>)vIoqGjE+U*VW98y=uK$KLdmR z*KseWo9O6Mn`f|f*0m#wP`hTZCyp7IjZuTM&i(3uI>?ziqz-d;9QlCC@ECP;HtM)K zvCuK5vTCz>RGn65)D!Bd8I03mtAcW7a5g@~QzgA8h!2_LXAteIyBiX{l!#4Ok2HGF zhwa#cVQfVf+fd-_5_aHy?8G(xD*FMu@jC|aC-z0WcEsFOd6oDB?=e>31D>q;|Bz!s z|Hg>f#;5BrijD6&FRkO>j>4;Gq}{*sO{&~OWJPI_RH!u+8T00)Y1-i9oUZ+ z9KdRVG;ol>M