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("Значение константы не распознано, повторите ввод");