concept250805
This commit is contained in:
parent
2c0ba72e17
commit
eebe96077d
@ -4,11 +4,11 @@ import java.util.List;
|
|||||||
|
|
||||||
public class Line {
|
public class Line {
|
||||||
|
|
||||||
private final String command;
|
private String command;
|
||||||
|
|
||||||
private final List<String> flags;
|
private List<String> flags;
|
||||||
|
|
||||||
private final List<String> args;
|
private List<String> args;
|
||||||
|
|
||||||
public Line(String command, List<String> flags, List<String> args) {
|
public Line(String command, List<String> flags, List<String> args) {
|
||||||
this.command = command;
|
this.command = command;
|
||||||
@ -28,46 +28,4 @@ public class Line {
|
|||||||
return args;
|
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<Flag> flags;
|
|
||||||
//
|
|
||||||
// private final List<Argument> args;
|
|
||||||
//
|
|
||||||
// public Line(Command command, List<Flag> flags, List<Argument> args) {
|
|
||||||
// this.command = command;
|
|
||||||
// this.flags = flags;
|
|
||||||
// this.args = args;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public Command getCommand() {
|
|
||||||
// return command;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public List<Flag> getFlags() {
|
|
||||||
// return flags;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public List<Argument> getArgs() {
|
|
||||||
// return args;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,97 +1,117 @@
|
|||||||
package de.vimo.core;
|
package de.vimo.core;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ParserVivi implements Parser {
|
public class ParserVivi implements Parser {
|
||||||
|
|
||||||
private int positionFlag;
|
List<String> flags = new ArrayList<>(List.of());
|
||||||
private String regex = "\\s";
|
List<String> args = new ArrayList<>(List.of());
|
||||||
private List<String> flagsS;
|
|
||||||
private String command = null;
|
|
||||||
private String[] splitFlag;
|
|
||||||
private String result;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Line parse(String raw) {
|
public Line parse(String raw) {
|
||||||
|
|
||||||
List<String> flagAll = new ArrayList<>(List.of());
|
flags = new ArrayList<>(List.of());
|
||||||
List<String> argsS = 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;
|
Line resultLine = null;
|
||||||
|
|
||||||
String[] myArray = raw.split(regex);
|
if (arrayWords.length > 0) {
|
||||||
|
if (commandCheck) {
|
||||||
for (int i = 0; i < myArray.length; i++) {
|
command = arrayWords[0];
|
||||||
|
if (arrayWords.length == 1) {
|
||||||
if (!myArray[i].isEmpty()) {
|
resultLine = new Line(command, flags, args);
|
||||||
|
} else if (flagsCheck && !argsCheck) {
|
||||||
if (myArray[0].equals("-")) {
|
resultLine = new Line(command, flags, args);
|
||||||
|
} else if (!flagsCheck && argsCheck) {
|
||||||
resultLine = null;
|
resultLine = new Line(command, flags, args);
|
||||||
|
} else if (flagsCheck && argsCheck) {
|
||||||
} else if (myArray[i].contains("./") || myArray[i].contains("/") ||
|
resultLine = new Line(command, flags, args);
|
||||||
myArray[i].contains(".")) {
|
|
||||||
|
|
||||||
argsS.add(myArray[i]);
|
|
||||||
resultLine = new Line(command, flagAll, argsS);
|
|
||||||
|
|
||||||
} else if (myArray.length == 1 && myArray[0].equals("ls")) {
|
|
||||||
|
|
||||||
resultLine = new Line(myArray[0], flagAll, argsS);
|
|
||||||
|
|
||||||
} else if (myArray[0].equals("ls") && myArray[1].equals("-")) {
|
|
||||||
|
|
||||||
resultLine = null;
|
|
||||||
|
|
||||||
} else if (myArray[0].equals("ls") && myArray[1].equals("--")) {
|
|
||||||
|
|
||||||
resultLine = null;
|
|
||||||
|
|
||||||
} else if (myArray[i].equals("super") && !myArray[i].contains("-") &&
|
|
||||||
positionFlag == 0) {
|
|
||||||
|
|
||||||
command = myArray[i];
|
|
||||||
resultLine = new Line(command, flagAll, argsS);
|
|
||||||
|
|
||||||
} else if (myArray[i].equals("ls") || myArray[i].equals("rm") ||
|
|
||||||
myArray[i].equals("cd") || myArray[i].equals("mkdir")) {
|
|
||||||
|
|
||||||
command = myArray[i];
|
|
||||||
resultLine = new Line(command, flagAll, argsS);
|
|
||||||
|
|
||||||
} else if (myArray[i].contains("-")) {
|
|
||||||
positionFlag = i;
|
|
||||||
|
|
||||||
splitFlag = myArray[i].split("-");
|
|
||||||
|
|
||||||
if (splitFlag[0].isEmpty()) {
|
|
||||||
result = myArray[i].replace("-", "");
|
|
||||||
|
|
||||||
flagsS = List.of(result.split(""));
|
|
||||||
flagAll.addAll(flagsS);
|
|
||||||
|
|
||||||
resultLine = new Line(command, flagAll, argsS);
|
|
||||||
} else {
|
|
||||||
argsS.add(myArray[i]);
|
|
||||||
resultLine = new Line(command, flagAll, argsS);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (!myArray[i].contains("-") && i > positionFlag && i != 0) {
|
|
||||||
|
|
||||||
argsS.add(myArray[i]);
|
|
||||||
resultLine = new Line(command, flagAll, argsS);
|
|
||||||
} else {
|
|
||||||
command = myArray[i];
|
|
||||||
resultLine = null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (myArray.length == 1) {
|
|
||||||
resultLine = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return resultLine;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,28 +14,7 @@ public class ParserTest
|
|||||||
{
|
{
|
||||||
@Test
|
@Test
|
||||||
public void testParser() {
|
public void testParser() {
|
||||||
// Parser parser = new Parser() {
|
// <-- Your implementation goes here
|
||||||
// @Override
|
|
||||||
// public Line parse(String raw) {
|
|
||||||
// String regex = "[\\s]";
|
|
||||||
// List<String> flagsS = new ArrayList<>(List.of());
|
|
||||||
// List<String> flagAll = new ArrayList<>(List.of());
|
|
||||||
// String result = "";
|
|
||||||
// List<String> argsS = new ArrayList<>(List.of());
|
|
||||||
// String[] myArray = raw.split(regex);
|
|
||||||
//
|
|
||||||
// for (int i = 1; i < myArray.length; i++) {
|
|
||||||
// if (myArray[i].contains("-")) {
|
|
||||||
// result = myArray[i].replace("-","");
|
|
||||||
// flagsS = List.of(result.split(""));
|
|
||||||
// flagAll.addAll(flagsS);
|
|
||||||
// } else {
|
|
||||||
// argsS.add(myArray[i]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return new Line(myArray[0], flagAll, argsS);
|
|
||||||
// }
|
|
||||||
// }; // <-- Your implementation goes here
|
|
||||||
|
|
||||||
Parser parser = new ParserVivi(); // <-- Your implementation goes here
|
Parser parser = new ParserVivi(); // <-- Your implementation goes here
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user