diff --git a/.idea/misc.xml b/.idea/misc.xml
index 82dbec8..c3f3b0a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+
diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index bfd2d11..7270a65 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -6,6 +6,17 @@
1.0-SNAPSHOT
+
+ maven-jar-plugin
+ 2.4
+
+
+
+ org.example.Main
+
+
+
+
maven-shade-plugin
3.2.3
@@ -22,9 +33,7 @@
maven-javadoc-plugin
3.6.2
- 1.8
- 1.8
- private
+ src
diff --git a/pom.xml b/pom.xml
index b733ae8..352741d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,9 +13,20 @@
17
UTF-8
-
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.4
+
+
+
+ org.example.Main
+
+
+
+
maven-shade-plugin
3.2.3
@@ -33,24 +44,31 @@
maven-javadoc-plugin
3.6.2
- 1.8
- private
+ src
-
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.16.1
+
com.fasterxml.jackson.core
jackson-databind
- 2.13.3
+ 2.16.1
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.16.1
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
- 2.13.3
+ 2.16.1
-
\ No newline at end of file
diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java
index b37ee11..0986800 100644
--- a/src/main/java/org/example/Main.java
+++ b/src/main/java/org/example/Main.java
@@ -12,18 +12,33 @@
*/
public class Main {
- //C:\\Users\\Кот\\IdeaProjects\\ProgLab5\\src\\details\\CommandScript.txt
- //"C:\\Users\\Кот\\IdeaProjects\\ProgLab5\\src\\details\\Data.json");
+ //C:\Temp\Programming5Lab\src\main\java\org\example\details\CommandScript.txt
+ //"C:\Temp\Programming5Lab\src\main\java\org\example\details\Data.json";
public static void main(String[] args) {
+ String fileName = "";
+ try{
+ fileName = args[0];
+ }catch(ArrayIndexOutOfBoundsException e){
+ System.out.println("Кажется, вы забыли передать имя файла");
+ }
+ //Журнал КОД от яндекс, почитать
+ System.out.println(fileName);
Storage st = new Storage();
FileSystem file = new FileSystem();
UserInterface user = new UserInterface();
CommandsManager manage = new CommandsManager();
CollectionManager collection = new CollectionManager();
StorageOfManagers storageOfManagers = new StorageOfManagers(collection, user, file, manage, st);
- LinkedHashMap map = user.readFile("Перед началом работы введите имя файла для инициализации коллекции: ");
+ LinkedHashMap map;
+ if(!fileName.isEmpty()){
+ map = user.readFile("Желаете инициализировать коллекцию из файла? \"Enter\" - Да; Another - Нет: ", fileName);
+ }
+ else{
+ System.out.println("Будет использована пустая коллекция");
+ map = new LinkedHashMap<>();
+ }
StorageOfManagers.storage.mapInit(map);
- user.writeln("Файл обработан, коллекция инициализирована. Программа готова к работе");
+ user.writeln("Программа готова к работе");
while(user.hasNextLine()){
try {
manage.executeCommand(user.readWithMessage(""));
diff --git a/src/main/java/org/example/classes/Basket.java b/src/main/java/org/example/classes/Basket.java
new file mode 100644
index 0000000..011bc90
--- /dev/null
+++ b/src/main/java/org/example/classes/Basket.java
@@ -0,0 +1 @@
+{"name":"Basket.java","path":"src/Things/Basket.java","sha":"d6300749525629cad11240918f656ecb62bc9a94","size":200,"url":"https://api.github.com/repos/blizzard-jr/Lab3/contents/src/Things/Basket.java?ref=master","html_url":"https://github.com/blizzard-jr/Lab3/blob/master/src/Things/Basket.java","git_url":"https://api.github.com/repos/blizzard-jr/Lab3/git/blobs/d6300749525629cad11240918f656ecb62bc9a94","download_url":"https://raw.githubusercontent.com/blizzard-jr/Lab3/master/src/Things/Basket.java","type":"file","content":"cGFja2FnZSBUaGluZ3M7CgppbXBvcnQgVGhpbmdzLkluYW5pbWF0ZTsKaW1w\nb3J0IFRoaW5ncy5UaGluZzsKCnB1YmxpYyBjbGFzcyBCYXNrZXQgZXh0ZW5k\ncyBJbmFuaW1hdGUgaW1wbGVtZW50cyBUaGluZyB7CiAgICBwdWJsaWMgQmFz\na2V0KGludCB3LCBTdHJpbmcgYywgU3RyaW5nIG4pIHsKICAgICAgICBzdXBl\ncih3LCBjLCBuKTsKICAgIH0KfQo=\n","encoding":"base64","_links":{"self":"https://api.github.com/repos/blizzard-jr/Lab3/contents/src/Things/Basket.java?ref=master","git":"https://api.github.com/repos/blizzard-jr/Lab3/git/blobs/d6300749525629cad11240918f656ecb62bc9a94","html":"https://github.com/blizzard-jr/Lab3/blob/master/src/Things/Basket.java"}}
\ No newline at end of file
diff --git a/src/main/java/org/example/classes/Coordinates.java b/src/main/java/org/example/classes/Coordinates.java
index 73ee5cf..a3048f1 100644
--- a/src/main/java/org/example/classes/Coordinates.java
+++ b/src/main/java/org/example/classes/Coordinates.java
@@ -11,8 +11,8 @@ public class Coordinates {
private double y; //Значение поля должно быть больше -574
public Coordinates(float x, double y){
- this.x = x;
- this.y = y;
+ setX(x);
+ setY(y);
}
public Coordinates(){}
public float getX(){
diff --git a/src/main/java/org/example/classes/Friend.java b/src/main/java/org/example/classes/Friend.java
new file mode 100644
index 0000000..b9ac467
--- /dev/null
+++ b/src/main/java/org/example/classes/Friend.java
@@ -0,0 +1,37 @@
+package mumiytroll;
+
+import Things.Jar;
+import Things.ThingStatus;
+
+public class Friend extends Trolls implements Minor_characters{
+ protected static TrollsEmotion generalEmotion;
+
+ @Override
+ public void initiatorOfScream(){
+ System.out.println(this.getName() + " закричал и все подхватили");
+ }
+
+ @Override
+ public void initiatorOfFill(Jar jar) {
+ System.out.println(this.getName() + " схватил банку из под варенья и они наполнили её волшебной водой");
+ jar.setJarStat(ThingStatus.FILLED);
+ }
+
+ @Override
+ public void initiatorOfBreak(Jar jar) {
+ System.out.println(this.getName() + " свитснул и они разбили её об нос лодки");
+ jar.setJarStat(ThingStatus.BROKEN);
+ }
+
+ public Friend(int x, int y, String name){
+ super(x, y, name);
+ }
+
+
+ @Override
+ public void goTravel() {
+ System.out.println(this.getName() + " отправился в путешествие");
+ }
+
+
+}
diff --git a/src/main/java/org/example/classes/Location.java b/src/main/java/org/example/classes/Location.java
index 0be9deb..7febb0e 100644
--- a/src/main/java/org/example/classes/Location.java
+++ b/src/main/java/org/example/classes/Location.java
@@ -12,8 +12,8 @@ public class Location {
public Location(Long x, long y, int z, String name){
setName(name);
setX(x);
- this.y = y;
- this.z = z;
+ setY(y);
+ setZ(z);
}
public Location(){}
public void setX(Long x) {
diff --git a/src/main/java/org/example/classes/StudyGroup.java b/src/main/java/org/example/classes/StudyGroup.java
index 92191b6..221870b 100644
--- a/src/main/java/org/example/classes/StudyGroup.java
+++ b/src/main/java/org/example/classes/StudyGroup.java
@@ -14,7 +14,9 @@
import java.util.Objects;
import static org.example.details.StorageOfManagers.*;
-
+/**
+ * Класс - объект коллекции
+ */
public class StudyGroup implements Comparable {
private String name; //Поле не может быть null, Строка не может быть пустой
private long studentsCount; //Значение поля должно быть больше 0
@@ -24,12 +26,17 @@ public class StudyGroup implements Comparable {
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy-HH:mm:ss")
private java.time.LocalDateTime creationDate; //Поле не может быть null, Значение этого поля должно генерироваться автоматически
- private final Long id; //Поле не может быть null, Значение поля должно быть больше 0, Значение этого поля должно быть уникальным, Значение этого поля должно генерироваться автоматически
+
+ public void setId(int id) {
+ this.id = (long) id;
+ }
+
+ private Long id; //Поле не может быть null, Значение поля должно быть больше 0, Значение этого поля должно быть уникальным, Значение этого поля должно генерироваться автоматически
private FormOfEducation formOfEducation; //Поле не может быть null
private Semester semesterEnum; //Поле не может быть null
private Person groupAdmin; //Поле может быть null
-
+ @JsonCreator
public StudyGroup(String name, long studentsCount, long shouldBeExpelled, Coordinates coordinates, FormOfEducation formOfEducation, Semester semesterEnum, Person groupAdmin) {
setName(name);
setStudentsCount(studentsCount);
@@ -51,7 +58,7 @@ public void setCreationDate(LocalDateTime creationDate) {
public void setName(String name) {
if(!collectionManager.validate(name, false)){
- throw new IllegalValueException("Поле name не может быть пустым или равняться нулю");
+ throw new IllegalValueException("Поле name не может быть пустым");
}
else {
this.name = name;
@@ -156,7 +163,7 @@ public int compareTo(StudyGroup group){
}
@Override
public int hashCode(){
- return Objects.hash(this.name, this.groupAdmin);
+ return Objects.hash(this.name, this.creationDate, this.id);
}
diff --git a/src/main/java/org/example/commands/CommandsManager.java b/src/main/java/org/example/commands/CommandsManager.java
index ae3d550..4b1ecc0 100644
--- a/src/main/java/org/example/commands/CommandsManager.java
+++ b/src/main/java/org/example/commands/CommandsManager.java
@@ -65,11 +65,15 @@ public Command getCommand(String s) throws NoSuchCommandException {
*/
public void executeCommand(String s) throws NoSuchCommandException {
String[] str = parseCommand(s);
- Command command = getCommand(str[0]);
+ Command command = getCommand(str[0].toLowerCase());
commandList.add(str[0]);
String[] args = Arrays.copyOfRange(str, 1, str.length);
command.execute(args);
}
+ public void executeFullInsert(String[] data){
+ String[] str = parseCommand(data[0]);
+
+ }
public ArrayList getCommandList() {
return commandList;
diff --git a/src/main/java/org/example/commands/Execute_script.java b/src/main/java/org/example/commands/Execute_script.java
index 54db95e..cc90148 100644
--- a/src/main/java/org/example/commands/Execute_script.java
+++ b/src/main/java/org/example/commands/Execute_script.java
@@ -4,8 +4,12 @@
import exception.NoSuchCommandException;
import java.io.*;
+import java.util.HashSet;
+import java.util.Set;
public class Execute_script extends Command{
+ Set files = new HashSet();
+
public Execute_script(){
super("execute_script", "Считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме");
argumentCount = 1;
@@ -20,7 +24,13 @@ public void execute(String[] args) throws NoSuchCommandException {
} catch (FileNotFoundException e) {
throw new NoSuchCommandException("Ошибка в имени файла");
}
- StorageOfManagers.collectionManager.execute_script(stream);
- System.out.println("Выполнение скрипта завершено");
+ if(!files.contains(args[0])){
+ files.add(args[0]);
+ StorageOfManagers.collectionManager.execute_script(stream);
+ System.out.println("Выполнение скрипта завершено");
+ }
+ else{
+ throw new exception.IllegalValueException("Не не не, слишком бесконечно");
+ }
}
}
diff --git a/src/main/java/org/example/commands/Remove_key.java b/src/main/java/org/example/commands/Remove_key.java
index 3838405..fafc3fa 100644
--- a/src/main/java/org/example/commands/Remove_key.java
+++ b/src/main/java/org/example/commands/Remove_key.java
@@ -19,6 +19,5 @@ public void execute(String[] args) throws NoSuchCommandException {
throw new IllegalValueException("Ошибка в аргументе команды");
}
StorageOfManagers.collectionManager.remove(key);
- System.out.println("Объект удалён успешно");
}
}
diff --git a/src/main/java/org/example/details/AnotherOneScript.txt b/src/main/java/org/example/details/AnotherOneScript.txt
new file mode 100644
index 0000000..ebfc966
--- /dev/null
+++ b/src/main/java/org/example/details/AnotherOneScript.txt
@@ -0,0 +1,29 @@
+update 785 P444 44 4
+дистанционное
+первый
+0
+-141
+Валера
+45
+264
+белый
+90
+Ломо
+52
+-643
+insert 476 J324 21 6
+вечернее
+четвёртый
+-5
+-2
+Коля
+76
+52
+чёрный
+876
+Кронва
+1
+-443
+show
+filter_less_than_form_of_education вечернее
+save
\ No newline at end of file
diff --git a/src/main/java/org/example/details/CollectionManager.java b/src/main/java/org/example/details/CollectionManager.java
index eabd439..cf527b7 100644
--- a/src/main/java/org/example/details/CollectionManager.java
+++ b/src/main/java/org/example/details/CollectionManager.java
@@ -19,6 +19,30 @@ public class CollectionManager {
public void execute_script(FileInputStream f) {
fileSystem.parseScript(f);
}
+ public void insertFormScript(ArrayList args){
+ try{
+ int key = Integer.parseInt(args.get(0));
+ long studentsCount = Long.parseLong(args.get(2));
+ long shouldBeExpelled = Long.parseLong(args.get(3));
+ FormOfEducation form = FormOfEducation.getForm(args.get(4));
+ Semester sem = Semester.getSem(args.get(5));
+ float coordinatesX = Float.parseFloat(args.get(6));
+ double coordinatesY = Double.parseDouble(args.get(7));
+ Float height = Float.parseFloat(args.get(9));
+ double weight = Double.parseDouble(args.get(10));
+ Color color = Color.getColor(args.get(11));
+ Long x = Long.parseLong(args.get(12));
+ long y = Long.parseLong(args.get(14));
+ int z = Integer.parseInt(args.get(15));
+ Location loc = new Location(x, y, z, args.get(13));
+ Person admin = new Person(args.get(8), height, weight, color, loc);
+ Coordinates coord = new Coordinates(coordinatesX, coordinatesY);
+ StudyGroup el = new StudyGroup(args.get(1), studentsCount, shouldBeExpelled, coord, form, sem, admin);
+ storage.putWithKey(key, el);
+ }catch(NumberFormatException | IllegalValueException e){
+ throw new IllegalValueException("Значения команды insert в скрипте не валидны");
+ }
+ }
/**
* Метод для исполнения команды show
@@ -88,12 +112,38 @@ public int keyInit(){
}
*/
+ public void updateFromScript(ArrayList args){
+ try{
+ int id = Integer.parseInt(args.get(0));
+ long studentsCount = Long.parseLong(args.get(2));
+ long shouldBeExpelled = Long.parseLong(args.get(3));
+ FormOfEducation form = FormOfEducation.getForm(args.get(4));
+ Semester sem = Semester.getSem(args.get(5));
+ float coordinatesX = Float.parseFloat(args.get(6));
+ double coordinatesY = Double.parseDouble(args.get(7));
+ Float height = Float.parseFloat(args.get(9));
+ double weight = Double.parseDouble(args.get(10));
+ Color color = Color.getColor(args.get(11));
+ Long x = Long.parseLong(args.get(12));
+ long y = Long.parseLong(args.get(14));
+ int z = Integer.parseInt(args.get(15));
+ Location loc = new Location(x, y, z, args.get(13));
+ Person admin = new Person(args.get(8), height, weight, color, loc);
+ Coordinates coord = new Coordinates(coordinatesX, coordinatesY);
+ StudyGroup el = new StudyGroup(args.get(1), studentsCount, shouldBeExpelled, coord, form, sem, admin);
+ el.setId(id);
+ storage.replaceElement(id, el);
+ }catch(NumberFormatException | IllegalValueException e){
+ throw new IllegalValueException("Значения команды update в скрипте не валидны");
+ }
+ }
/**
* Метод, используя методы Storage добавляет новый элемент с заданным ключом в коллекцию, а также добавляет его в коллекцию ключей
* @param element
* @param arg
*/
+
public void insertWithKey(StudyGroup element, String arg){
Integer key;
try{
@@ -115,6 +165,7 @@ public void insertWithKey(StudyGroup element, String arg){
*/
public void update(Integer id, String name, long studentsCount, long shouldBeExpelled){
StudyGroup element = userInterface.studyGroupInit(name, studentsCount, shouldBeExpelled);
+ element.setId(id);
storage.replaceElement(id, element);
}
@@ -161,7 +212,7 @@ public void save() {
* @param acceptEmpty Разрешено ли значение пустой строки
*/
public boolean validate(Object obj, boolean acceptEmpty){
- return !(!acceptEmpty & obj == "");
+ return !(!acceptEmpty & (obj.equals("") || obj == null));
}
/**
diff --git a/src/main/java/org/example/details/CommandScript.txt b/src/main/java/org/example/details/CommandScript.txt
index 1945329..7fc4fed 100644
--- a/src/main/java/org/example/details/CommandScript.txt
+++ b/src/main/java/org/example/details/CommandScript.txt
@@ -1,3 +1,17 @@
show
insert 676 P676 19 9
-save
\ No newline at end of file
+очное
+четвёртый
+-234
+-1
+Дарья
+89
+52
+оранжевый
+13
+Кронва
+11
+-645
+show
+execute_script C:\Users\Кот\IdeaProjects\Programming5Lab\Programming5Lab\src\main\java\org\example\details\AnotherOneScript.txt
+help
\ No newline at end of file
diff --git a/src/main/java/org/example/details/Data.json b/src/main/java/org/example/details/Data.json
index 8f02989..6f31cf5 100644
--- a/src/main/java/org/example/details/Data.json
+++ b/src/main/java/org/example/details/Data.json
@@ -1,102 +1 @@
-{
- "194152" : {
- "name" : "P000",
- "studentsCount" : 2,
- "shouldBeExpelled" : 7,
- "coordinates" : {
- "x" : 12.0,
- "y" : 4.0
- },
- "creationDate" : "12-08-2005-21:01:56",
- "id" : 204,
- "formOfEducation" : "FULL_TIME_EDUCATION",
- "semesterEnum" : "FIRST",
- "groupAdmin" : {
- "name" : "Leonard",
- "height" : 182.0,
- "weight" : 67.0,
- "hairColor" : "WHITE",
- "location" : {
- "x" : 12,
- "y" : 12,
- "z" : 12,
- "name" : "Kronva"
- }
- }
- },
- "210030" : {
- "name" : "P111",
- "studentsCount" : 11,
- "shouldBeExpelled" : 1,
- "coordinates" : {
- "x" : 11.0,
- "y" : 11.0
- },
- "creationDate" : "17-09-1991-12:17:08",
- "id" : 951,
- "formOfEducation" : "FULL_TIME_EDUCATION",
- "semesterEnum" : "FIRST",
- "groupAdmin" : {
- "name" : "11",
- "height" : 1.0,
- "weight" : 11.0,
- "hairColor" : "WHITE",
- "location" : {
- "x" : 11,
- "y" : 11,
- "z" : 11,
- "name" : "11"
- }
- }
- },
- "21134" : {
- "name" : "P111",
- "studentsCount" : 23,
- "shouldBeExpelled" : 6,
- "coordinates" : {
- "x" : 123.0,
- "y" : -321.0
- },
- "creationDate" : "24-02-2024-18:43:22",
- "id" : 435,
- "formOfEducation" : "FULL_TIME_EDUCATION",
- "semesterEnum" : "FIRST",
- "groupAdmin" : {
- "name" : "Костя",
- "height" : 176.0,
- "weight" : 63.0,
- "hairColor" : "BLACK",
- "location" : {
- "x" : 0,
- "y" : 34,
- "z" : -10,
- "name" : "Ломо"
- }
- }
- },
- "676" : {
- "name" : "P676",
- "studentsCount" : 19,
- "shouldBeExpelled" : 9,
- "coordinates" : {
- "x" : 33.0,
- "y" : 33.0
- },
- "creationDate" : "24-02-2024-21:35:39",
- "id" : 239,
- "formOfEducation" : "FULL_TIME_EDUCATION",
- "semesterEnum" : "FIRST",
- "groupAdmin" : {
- "name" : "33",
- "height" : 33.0,
- "weight" : 33.0,
- "hairColor" : "WHITE",
- "location" : {
- "x" : 33,
- "y" : 33,
- "z" : 33,
- "name" : "33"
- }
- }
- }
-}
\ No newline at end of file
+{ }
\ No newline at end of file
diff --git a/src/main/java/org/example/details/FileSystem.java b/src/main/java/org/example/details/FileSystem.java
index 5691564..99e0b67 100644
--- a/src/main/java/org/example/details/FileSystem.java
+++ b/src/main/java/org/example/details/FileSystem.java
@@ -10,12 +10,15 @@
import java.io.*;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Класс отвечает за работу с файлами
*/
public class FileSystem {
private String fileName;
+ private Scanner scanner = new Scanner(System.in);
/**
* Метод десериализует информацию из файла в Map POJO
@@ -38,6 +41,10 @@ public LinkedHashMap parseToList(String file) throws IOExce
return map_one;
}
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
/**
* Метод для запоминания пути к файлу с которым работает коллекция
* @param s
@@ -52,10 +59,20 @@ public void fileInit(String s){
*/
public void parseToFile(LinkedHashMap map) {
FileOutputStream f = null;
- try{
- f = new FileOutputStream(fileName);
- }catch(FileNotFoundException e){
- throw new IllegalValueException("Проблема с файлом");
+ while(true) {
+ try {
+ f = new FileOutputStream(fileName);
+ } catch (FileNotFoundException | NullPointerException e) {
+ System.out.println("Выполнение команды невозможно, передайте новое имя файла или \"Enter\" - для пропуска");
+ String s = scanner.nextLine();
+ if (s.isEmpty()) {
+ throw new IllegalValueException("");
+ } else {
+ fileName = s;
+ continue;
+ }
+ }
+ break;
}
OutputStreamWriter writer = new OutputStreamWriter(f);
ObjectMapper o = new ObjectMapper();
@@ -75,9 +92,31 @@ public void parseToFile(LinkedHashMap map) {
*/
public void parseScript(FileInputStream stream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
+ //Pattern p = Pattern.compile("insert");
try {
+ //Matcher match = p.matcher(reader.readLine());
while (reader.ready()) {
- StorageOfManagers.commandsManager.executeCommand(reader.readLine());
+ String string = reader.readLine();
+ if(string.split(" ")[0].equals("insert") || string.split(" ")[0].equals("update")){
+ String[] str = Arrays.copyOfRange(string.split(" "), 1, string.split(" ").length);
+ ArrayList data = new ArrayList<>(Arrays.asList(str));
+ for (int i = 0; i < 12; i++) {
+ data.add(reader.readLine());
+ }
+ if(string.split(" ")[0].equals("insert")){
+ StorageOfManagers.collectionManager.insertFormScript(data);
+ }
+ else if(string.split(" ")[0].equals("update")){
+ StorageOfManagers.collectionManager.updateFromScript(data);
+ }
+
+ }
+ else if(string.isEmpty()){
+ break;
+ }
+ else{
+ StorageOfManagers.commandsManager.executeCommand(string);
+ }
}
}catch(IOException | NoSuchCommandException e){
throw new IllegalValueException("Проблема с парсингом файла или команда не найдена");
diff --git a/src/main/java/org/example/details/Storage.java b/src/main/java/org/example/details/Storage.java
index 376c727..54215c3 100644
--- a/src/main/java/org/example/details/Storage.java
+++ b/src/main/java/org/example/details/Storage.java
@@ -22,10 +22,22 @@ public Storage(){
* @param map
*/
public void mapInit(LinkedHashMap map){
- this.map = map;
+ List list = new ArrayList<>(map.values());
+ Collections.sort(list);
for(Integer key : map.keySet()){
this.mapKey.put(map.get(key).getId(), key);
}
+ for(StudyGroup el : list){
+ this.map.put(findKey(el.getId()), el);
+ }
+ }
+ public void sort(){
+ List list = new ArrayList<>(map.values());
+ Collections.sort(list);
+ map.clear();
+ for(StudyGroup el : list){
+ this.map.put(findKey(el.getId()), el);
+ }
}
/**
@@ -68,11 +80,16 @@ public void remove_lower(int key){
* @param form
*/
public void filterForm(FormOfEducation form){
+ boolean flag = false;
for(StudyGroup group : map.values()){
if(group.getFormOfEducation().compareTo(form) < 0){
System.out.println(group);
+ flag = true;
}
}
+ if(!flag){
+ System.out.println("Элементов, у которых значение поля FormOfEducation меньше заданного вами значения не нашлось");
+ }
}
/**
* Взаимодействие команды count_less_than_form_of_education с коллекцией
@@ -81,7 +98,7 @@ public void filterForm(FormOfEducation form){
public void countForm(FormOfEducation form){
int count = 0;
for(StudyGroup group : map.values()){
- if(group.getFormOfEducation().compareTo(form) > 0){
+ if(group.getFormOfEducation().compareTo(form) < 0){
count+=1;
}
}
@@ -141,6 +158,7 @@ public void putMapKeys(int key, long id){
public void replaceElement(long id, StudyGroup el){
if(map.replace(mapKey.get(id), getObj(id), el)){
System.out.println("замена прошла успешно, " + map.get(mapKey.get(id)));
+ sort();
}
else{
System.out.println("Замена не удалась, что-то пошло не так");
@@ -174,7 +192,15 @@ public void clear(){
* @param key
*/
public void removeElement(int key){
- map.remove(key);
+ if(map.containsKey(key)){
+ map.remove(key);
+ System.out.println("Объект удалён успешно");
+ }
+ else{
+ System.out.println("Элемент в коллекции отсутствует");
+ }
+
+
}
/**
@@ -195,6 +221,8 @@ public Collection getValue(){
}
public void putWithKey(int key, StudyGroup group){
map.put(key, group);
+ mapKey.put(group.getId(), key);
+ sort();
}
@Override
public String toString(){
diff --git a/src/main/java/org/example/details/UserInterface.java b/src/main/java/org/example/details/UserInterface.java
index 2d5cd26..6b6a1d1 100644
--- a/src/main/java/org/example/details/UserInterface.java
+++ b/src/main/java/org/example/details/UserInterface.java
@@ -27,23 +27,41 @@ public void writeln(Object o){
* @param s Имя файла
* @return map
*/
- public LinkedHashMap readFile(String s) {
- LinkedHashMap map;
- while (true) {
- String data = readWithMessage(s);
- try {
- map = fileSystem.parseToList(data);
- } catch(IOException e) {
- writeErr("Проблема с файлом, повторите ввод: ");
- continue;
+ public LinkedHashMap readFile(String s, String fileName) {
+ writeln(s);
+ String answer = scanner.nextLine();
+ while(true){
+ if(answer.isEmpty()){
+ try{
+ return fileSystem.parseToList(fileName);
+ }
+ catch(IOException e){
+ if(e.getClass() == com.fasterxml.jackson.databind.exc.InvalidDefinitionException.class){
+ System.out.println("Значения в файле не валидны или нарушен формат json, введите новое имя, \\\"Enter\\\" - для использования пустой коллекции или 1 для выхода: \"");
+ }
+ else{
+ System.out.println("Не удалось получить данные из указанного файла, введите новое имя, \"Enter\" - для использования пустой коллекции или 1 для выхода: ");
+ }
+ String ans = scanner.nextLine();
+ if(ans.equals("1")){
+ System.out.println("Всего доброго");
+ System.exit(0);
+ }
+ else if(ans.isEmpty()){
+ System.out.println("Будет использована пустая коллекция");
+ return new LinkedHashMap<>();
+ }
+ else {
+ fileName = ans;
+ }
+ }
+ }
+ else {
+ fileSystem.setFileName(fileName);
+ return new LinkedHashMap<>();
+ }
}
- break;
}
- return map;
- }
- public boolean hasNextLine(){
- return scanner.hasNextLine();
- }
/**
* Метод читает ввод пользователя с предварительным выводом сообщения, внутри используется валидация для строк
@@ -107,6 +125,10 @@ public String readWithMessage(String message, boolean acceptCompare, int compare
}
public Color colorInit(String message){
writeln(message);
+ writeln("Допустимые значения: ");
+ for(Color color : Color.values()){
+ System.out.println(color.getRus());
+ }
String s = scanner.nextLine();
while(!Color.findColor(s) || s.isEmpty()){
writeErr("Значение константы не распознано, повторите ввод");
@@ -122,6 +144,10 @@ public Color colorInit(String message){
*/
public FormOfEducation formInit(String message){
writeln(message);
+ writeln("Допустимые значения: ");
+ for(FormOfEducation form : FormOfEducation.values()){
+ System.out.println(form.getRus());
+ }
String s = scanner.nextLine();
while(!FormOfEducation.findForm(s) || s.isEmpty()){
writeErr("Значение константы не распознано, повторите ввод");
@@ -129,13 +155,21 @@ public FormOfEducation formInit(String message){
}
return FormOfEducation.getForm(s);
}
+ public boolean hasNextLine(){
+ return scanner.hasNextLine();
+ }
/**
* Метод инициализирует enum Semester - поле элемента коллекции
* @param message
* @return FormOfEducation
*/
+
public Semester semInit(String message){
writeln(message);
+ writeln("Допустимые значения: ");
+ for(Semester sem : Semester.values()){
+ System.out.println(sem.getRus());
+ }
String s = scanner.nextLine();
while(!Semester.findSem(s) || s.isEmpty()){
writeErr("Значение константы не распознано, повторите ввод");