From 7f16e1e0bbf4f5c52d65e282d95280f3b7af1bb5 Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 22 Feb 2022 11:04:55 +0300 Subject: [PATCH 01/40] =?UTF-8?q?=D0=92=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {src/auxiliary => auxiliary}/Structure | 4 ++-- {src/auxiliary => auxiliary}/Tests | 0 src/commands/AddCommand.java | 2 +- src/commands/DeleteCommand.java | 2 +- src/commands/ReadCommand.java | 2 +- src/commands/UpdateCommand.java | 3 ++- src/dao/ArrayDequeDAO.java | 12 +++++------- src/dao/DAO.java | 2 +- src/handlers/ConsoleInputHandler.java | 4 ++-- src/service/FormedManager.java | 8 ++++---- src/service/GenerateID.java | 6 +++--- src/{human_being => source}/Car.java | 2 +- src/{human_being => source}/Coordinates.java | 2 +- src/{human_being => source}/HumanBeing.java | 8 +------- src/{human_being => source}/Mood.java | 2 +- 15 files changed, 26 insertions(+), 33 deletions(-) rename {src/auxiliary => auxiliary}/Structure (96%) rename {src/auxiliary => auxiliary}/Tests (100%) rename src/{human_being => source}/Car.java (96%) rename src/{human_being => source}/Coordinates.java (92%) rename src/{human_being => source}/HumanBeing.java (94%) rename src/{human_being => source}/Mood.java (76%) diff --git a/src/auxiliary/Structure b/auxiliary/Structure similarity index 96% rename from src/auxiliary/Structure rename to auxiliary/Structure index 6c9b89e..5201bdf 100644 --- a/src/auxiliary/Structure +++ b/auxiliary/Structure @@ -22,8 +22,8 @@ handlers: FileInputHandler - производит считывание из файла. Наследуется от InputHandler. InputHandler - абстрактный класс, хранящий в себе большую часть функционала для дочерних классов. -human_being - папка, хранящая в себе класс элементов коллекции. -human_being: +source - папка, хранящая в себе класс элементов коллекции. +source: Car - мини-класс, используемый в поле класса HumanBeing. Coordinates - мини-класс, используемый в поле класса HumanBeing. HumanBeing - класс, описывающий элемент коллекции humanCollection. diff --git a/src/auxiliary/Tests b/auxiliary/Tests similarity index 100% rename from src/auxiliary/Tests rename to auxiliary/Tests diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index 43bdc0b..f00a6a6 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -1,7 +1,7 @@ package commands; import dao.ArrayDequeDAO; -import human_being.HumanBeing; +import source.HumanBeing; import service.FormedManager; /** diff --git a/src/commands/DeleteCommand.java b/src/commands/DeleteCommand.java index f385ec9..9ece438 100644 --- a/src/commands/DeleteCommand.java +++ b/src/commands/DeleteCommand.java @@ -3,7 +3,7 @@ import dao.ArrayDequeDAO; public class DeleteCommand implements Command { - ArrayDequeDAO arrayDequeDAO; + private final ArrayDequeDAO arrayDequeDAO; public DeleteCommand(ArrayDequeDAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; diff --git a/src/commands/ReadCommand.java b/src/commands/ReadCommand.java index d9c9ec8..cd06ef9 100644 --- a/src/commands/ReadCommand.java +++ b/src/commands/ReadCommand.java @@ -3,7 +3,7 @@ import dao.ArrayDequeDAO; public class ReadCommand implements Command { - ArrayDequeDAO arrayDequeDAO; + private final ArrayDequeDAO arrayDequeDAO; public ReadCommand(ArrayDequeDAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index a034923..9725a7e 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -4,7 +4,7 @@ import service.FormedManager; public class UpdateCommand implements Command { - ArrayDequeDAO arrayDequeDAO; + private final ArrayDequeDAO arrayDequeDAO; public UpdateCommand(ArrayDequeDAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; @@ -12,6 +12,7 @@ public UpdateCommand(ArrayDequeDAO arrayDequeDAO) { @Override public void execute(String arguments) { + int existedId = Integer.parseInt(arguments.substring(0, arguments.indexOf(" "))); arguments = arguments.substring(arguments.indexOf(" ") + 1); FormedManager manager = new FormedManager(); diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 1cbcc05..8f76170 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -1,20 +1,18 @@ package dao; -import human_being.HumanBeing; +import source.HumanBeing; import service.GenerateID; import java.util.ArrayDeque; +import java.util.Deque; -public class ArrayDequeDAO implements DAO { +public final class ArrayDequeDAO implements DAO { /** * ЗДЕСЬ ВСЕ БУДЕТ ПРОСТО ВЫПОЛНЯТЬСЯ БЕЗ ПРОВЕРОК ИЛИ ОБРАБОТКИ КАК ЭТО ЕСТЬ У ЕГОШИНА */ private static int availableId = 1; - private final ArrayDeque humanCollection = new ArrayDeque<>(); + private final Deque humanCollection = new ArrayDeque<>(); - public void update() { - System.out.print("Update..."); - } public void read() { System.out.print("Select..."); } @@ -41,7 +39,7 @@ public int add(HumanBeing newHuman) { */ @Override public void update(int id, HumanBeing updatedHuman) { - HumanBeing existedHuman = get(updatedHuman.getId()); + HumanBeing existedHuman = get(id); if(existedHuman != null) { existedHuman.setName(updatedHuman.getName()); existedHuman.setSoundtrackName(updatedHuman.getSoundtrackName()); diff --git a/src/dao/DAO.java b/src/dao/DAO.java index af5ff90..e1cb216 100644 --- a/src/dao/DAO.java +++ b/src/dao/DAO.java @@ -1,6 +1,6 @@ package dao; -import human_being.HumanBeing; +import source.HumanBeing; public interface DAO { int add(HumanBeing human); diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index 8377997..bfd6852 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -3,6 +3,7 @@ import java.util.Scanner; public class ConsoleInputHandler extends InputHandler { + Scanner scanner = new Scanner(System.in); /** * Переопределённый метод для считывания с консоли * @return считанная строка без лишних пробелов @@ -10,8 +11,7 @@ public class ConsoleInputHandler extends InputHandler { */ @Override public String read() { - String input = new Scanner(System.in).nextLine(); - input = removeSpaces(input); + String input = removeSpaces(scanner.nextLine()); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); } diff --git a/src/service/FormedManager.java b/src/service/FormedManager.java index 947904e..36fa3a0 100644 --- a/src/service/FormedManager.java +++ b/src/service/FormedManager.java @@ -1,9 +1,9 @@ package service; -import human_being.Car; -import human_being.Coordinates; -import human_being.HumanBeing; -import human_being.Mood; +import source.Car; +import source.Coordinates; +import source.HumanBeing; +import source.Mood; public class FormedManager { diff --git a/src/service/GenerateID.java b/src/service/GenerateID.java index 11ae345..809b40d 100644 --- a/src/service/GenerateID.java +++ b/src/service/GenerateID.java @@ -1,11 +1,11 @@ package service; -import human_being.HumanBeing; +import source.HumanBeing; -import java.util.ArrayDeque; +import java.util.Deque; public class GenerateID { - public GenerateID(ArrayDeque humanCollection, HumanBeing human){ + public GenerateID(Deque humanCollection, HumanBeing human){ human.setId(humanCollection.size() + 1); } } \ No newline at end of file diff --git a/src/human_being/Car.java b/src/source/Car.java similarity index 96% rename from src/human_being/Car.java rename to src/source/Car.java index 5135ca4..24d962e 100644 --- a/src/human_being/Car.java +++ b/src/source/Car.java @@ -1,4 +1,4 @@ -package human_being; +package source; public class Car implements Comparable { private String name; //Поле может быть null diff --git a/src/human_being/Coordinates.java b/src/source/Coordinates.java similarity index 92% rename from src/human_being/Coordinates.java rename to src/source/Coordinates.java index ed788d5..0eb06e9 100644 --- a/src/human_being/Coordinates.java +++ b/src/source/Coordinates.java @@ -1,4 +1,4 @@ -package human_being; +package source; public class Coordinates { private final int x; diff --git a/src/human_being/HumanBeing.java b/src/source/HumanBeing.java similarity index 94% rename from src/human_being/HumanBeing.java rename to src/source/HumanBeing.java index e9bb545..4300f5f 100644 --- a/src/human_being/HumanBeing.java +++ b/src/source/HumanBeing.java @@ -1,4 +1,4 @@ -package human_being; +package source; import java.time.LocalDate; @@ -154,10 +154,4 @@ public int compareTo(Object o) { } return result; } - // TODO переопределить нормально - public String toString() { - System.out.print(name + soundtrackName + minutesOfWaiting + impactSpeed + realHero + hasToothpick + - coordinates+ mood + car); - return null; - } } diff --git a/src/human_being/Mood.java b/src/source/Mood.java similarity index 76% rename from src/human_being/Mood.java rename to src/source/Mood.java index d4120c7..01cb50f 100644 --- a/src/human_being/Mood.java +++ b/src/source/Mood.java @@ -1,4 +1,4 @@ -package human_being; +package source; public enum Mood { SADNESS, From 39490007a5be5ab9e7c29549ed4463730e6f4de6 Mon Sep 17 00:00:00 2001 From: Liza Date: Sat, 26 Feb 2022 12:27:44 +0300 Subject: [PATCH 02/40] =?UTF-8?q?=D0=A2=D0=B8=D0=BF=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85,=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?UTF-8?q?=D1=89=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B0=D0=BC=D0=B8-=D1=87=D0=B8=D1=82=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F=D0=BC=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=81=D0=BE=20String=20=D0=BD=D0=B0=20ArrayList.=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D0=BE=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D0=B8=D0=B7=20=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/ConsoleInputHandler.java | 13 ++++++--- src/handlers/FileInputHandler.java | 4 ++- src/handlers/InputHandler.java | 22 +++++++------- src/others/DataBaseRunner.java | 41 ++------------------------- 4 files changed, 27 insertions(+), 53 deletions(-) diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index bfd6852..d8867d2 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -1,20 +1,25 @@ package handlers; +import java.util.ArrayList; import java.util.Scanner; public class ConsoleInputHandler extends InputHandler { - Scanner scanner = new Scanner(System.in); + private final Scanner scanner = new Scanner(System.in); + private ArrayList data_in = new ArrayList<>(); /** * Переопределённый метод для считывания с консоли * @return считанная строка без лишних пробелов - * @exception RuntimeException */ @Override - public String read() { + public ArrayList read() { String input = removeSpaces(scanner.nextLine()); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); } - return input; + while (!input.isEmpty()) { + data_in.add(input); + input = removeSpaces(scanner.nextLine()); + } + return data_in; } } diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index e3ce55e..9a0baa8 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -1,8 +1,10 @@ package handlers; +import java.util.ArrayList; + public class FileInputHandler extends InputHandler { @Override - public String read() { + public ArrayList read() { return null; } } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index 9768871..804d4e7 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -1,10 +1,12 @@ package handlers; +import java.util.ArrayList; + public abstract class InputHandler { /** * Абстрактный метод read, переопределяемый для двух разных типов считывания - с консоли и с файла */ - public abstract String read(); + public abstract ArrayList read(); /** *Убирает лишние пробелы из полученной строки для дальнейшей обработки * @param input - только что введённая строка @@ -30,15 +32,15 @@ public static String getFirstWord(String input) { * Считывает оставшиеся элементы * @return */ - public String readAnotherElement() { - System.out.print("Введите координаты:\n"); - String coord = read(); - System.out.print("Введите состояние персонажа:\n"); - String mood = read(); - System.out.print("Введите машину персонажа:\n"); - String car = read(); - return " " + coord + " " + mood + " " + car; - } +// public String readAnotherElement() { +// System.out.print("Введите координаты:\n"); +// String coord = read(); +// System.out.print("Введите состояние персонажа:\n"); +// String mood = read(); +// System.out.print("Введите машину персонажа:\n"); +// String car = read(); +// return " " + coord + " " + mood + " " + car; +// } /** * Обрезка строки без первого слова для дальнейшей работы diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 21acdef..7c43974 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -1,54 +1,19 @@ package others; -import commands.*; -import dao.ArrayDequeDAO; import handlers.ConsoleInputHandler; import handlers.InputHandler; -import java.util.Objects; - enum CommandType { - ADD("1"), - UPDATE("2"); - private String title; - - CommandType(String type) { - this.title = type; - } - - public String getTitle() { - return title; - } - + ADD, + UPDATE; } -// TODO придумать что сделать с разными по параметрам командами + public class DataBaseRunner { public static void main(String [] args) { - ArrayDequeDAO database = new ArrayDequeDAO(); - - Command[] commands = { - new AddCommand(database), - new UpdateCommand(database), - new ReadCommand(database), - new DeleteCommand(database) - }; InputHandler reader = new ConsoleInputHandler(); - String input = reader.read(); - String command = InputHandler.getFirstWord(input); - String arguments = reader.getArguments(input); - int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); - String title = CommandType.valueOf(command.toUpperCase()).getTitle(); - if(Objects.equals(title, "1")) { - arguments += reader.readAnotherElement(); - } - else if(Objects.equals(title, "2")) { - arguments += " " + reader.read(); - arguments += reader.readAnotherElement(); - } - commands[commandIndex].execute(arguments); } } From 268a4e76b8b857a06fd7155a55056b7160e9fa1f Mon Sep 17 00:00:00 2001 From: Liza Date: Sat, 26 Feb 2022 12:41:56 +0300 Subject: [PATCH 03/40] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B0=D0=B1=D1=81=D1=82=D1=80=D0=B0=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B0,=20=D1=85=D1=80=D0=B0=D0=BD=D1=8F=D1=89?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/AddCommand.java | 5 +++-- src/commands/DeleteCommand.java | 7 ++++--- src/commands/ReadCommand.java | 7 ++++--- src/commands/UpdateCommand.java | 5 +++-- src/handlers/InputHandler.java | 35 +-------------------------------- 5 files changed, 15 insertions(+), 44 deletions(-) diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index f00a6a6..4a02e25 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -1,6 +1,7 @@ package commands; import dao.ArrayDequeDAO; +import dao.DAO; import source.HumanBeing; import service.FormedManager; @@ -8,9 +9,9 @@ * ЗДЕСЬ БУДЕТ ПОЛНАЯ ОБРАБОТКА ВХОДНЫХ ДАННЫХ С ФОРМИРОВАНИЕМ ЭЛЕМЕНТОВ */ public class AddCommand implements Command { - private final ArrayDequeDAO arrayDequeDAO; + private final DAO arrayDequeDAO; - public AddCommand(ArrayDequeDAO arrayDequeDAO) { + public AddCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; } diff --git a/src/commands/DeleteCommand.java b/src/commands/DeleteCommand.java index 9ece438..4bba5cd 100644 --- a/src/commands/DeleteCommand.java +++ b/src/commands/DeleteCommand.java @@ -1,18 +1,19 @@ package commands; import dao.ArrayDequeDAO; +import dao.DAO; public class DeleteCommand implements Command { - private final ArrayDequeDAO arrayDequeDAO; + private final DAO arrayDequeDAO; - public DeleteCommand(ArrayDequeDAO arrayDequeDAO) { + public DeleteCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(String arguments) { // если элемент есть то все ок - arrayDequeDAO.delete(); + //arrayDequeDAO.delete(); } } diff --git a/src/commands/ReadCommand.java b/src/commands/ReadCommand.java index cd06ef9..a2f8b07 100644 --- a/src/commands/ReadCommand.java +++ b/src/commands/ReadCommand.java @@ -1,17 +1,18 @@ package commands; import dao.ArrayDequeDAO; +import dao.DAO; public class ReadCommand implements Command { - private final ArrayDequeDAO arrayDequeDAO; + private final DAO arrayDequeDAO; - public ReadCommand(ArrayDequeDAO arrayDequeDAO) { + public ReadCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(String arguments) { // если айдишка есть то все ок - arrayDequeDAO.read(); + //arrayDequeDAO.read(); } } diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index 9725a7e..2c767c6 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -1,12 +1,13 @@ package commands; import dao.ArrayDequeDAO; +import dao.DAO; import service.FormedManager; public class UpdateCommand implements Command { - private final ArrayDequeDAO arrayDequeDAO; + private final DAO arrayDequeDAO; - public UpdateCommand(ArrayDequeDAO arrayDequeDAO) { + public UpdateCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index 804d4e7..51c2a06 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -12,6 +12,7 @@ public abstract class InputHandler { * @param input - только что введённая строка * @return - строка без лишних пробелов */ + // TODO заменить конструкцию на регулярные выржанеия public String removeSpaces(String input) { input = input.trim(); while(input.contains(" ")) { @@ -20,40 +21,6 @@ public String removeSpaces(String input) { return input; } - // вырезаем первое слово из общей строки - public static String getFirstWord(String input) { - if(input.contains(" ")) { - return input.substring(0, input.indexOf(" ")); - } - return input; - } - - /** - * Считывает оставшиеся элементы - * @return - */ -// public String readAnotherElement() { -// System.out.print("Введите координаты:\n"); -// String coord = read(); -// System.out.print("Введите состояние персонажа:\n"); -// String mood = read(); -// System.out.print("Введите машину персонажа:\n"); -// String car = read(); -// return " " + coord + " " + mood + " " + car; -// } - - /** - * Обрезка строки без первого слова для дальнейшей работы - * @param input - строка, подающаяся на вход - * @return обрезанная строка без первого слова - */ - public String getArguments(String input) { - return input.substring(input.indexOf(" ") + 1); - } - /** - * Определяет нужную команду, либо выбрасывает ошибку - * @param input - */ } From 0079174234724ae10edbf7e6858c49415a4dc098 Mon Sep 17 00:00:00 2001 From: Liza Date: Sat, 26 Feb 2022 19:06:54 +0300 Subject: [PATCH 04/40] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20Add?= =?UTF-8?q?Command.=20=D0=A2=D0=B5=D0=B5=D1=80=D1=8C=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B2=D1=85=D0=BE=D0=B4=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85,=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D1=8D=D0=BB=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=B5=D0=B3=D0=BE=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D1=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 27 ++++++++++++- src/commands/AddCommand.java | 54 ++++++++++++++++++++++---- src/commands/Command.java | 5 ++- src/commands/DeleteCommand.java | 9 ++++- src/commands/ReadCommand.java | 9 ++++- src/commands/UpdateCommand.java | 15 +++++--- src/handlers/ConsoleInputHandler.java | 2 +- src/others/DataBaseRunner.java | 11 ++---- src/service/CommandManager.java | 55 +++++++++++++++++++++++++++ src/source/HumanBeing.java | 3 +- 10 files changed, 163 insertions(+), 27 deletions(-) create mode 100644 src/service/CommandManager.java diff --git a/auxiliary/Tests b/auxiliary/Tests index 34886ce..72b1788 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -5,7 +5,13 @@ COMMAND Тест 1: -add cat nyan-cat 5 12 True True +add +cat +nyan-cat +5 +12 +True +True 4 5.123 sadness McQueen True @@ -15,4 +21,21 @@ update 1 dog piesek 2 15 True False 4 6.22 longing -BrokeCar False \ No newline at end of file +BrokeCar False + +Тест 3: +add +cat +nyan-cat +five +12 +True +True +4 5.123 +sadness +McQueen True + +Тест 4: +Тест 3 +Тест 1 + diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index 4a02e25..a722f46 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -2,8 +2,13 @@ import dao.ArrayDequeDAO; import dao.DAO; +import source.Car; +import source.Coordinates; import source.HumanBeing; import service.FormedManager; +import source.Mood; + +import java.util.ArrayList; /** * ЗДЕСЬ БУДЕТ ПОЛНАЯ ОБРАБОТКА ВХОДНЫХ ДАННЫХ С ФОРМИРОВАНИЕМ ЭЛЕМЕНТОВ @@ -20,12 +25,47 @@ public AddCommand(DAO arrayDequeDAO) { * @param arguments - все аргументы, нужные для формирования аргумента, в виде строки */ @Override - public void execute(String arguments) { - // Создаю экземпляр класса формирователя - FormedManager manager = new FormedManager(); - // Новый экземпляр класса human_being.HumanBeing - HumanBeing newHuman = manager.formed(arguments); - // Добавление экземпляра класса в коллекцию - arrayDequeDAO.add(newHuman); + public void execute(ArrayList arguments) { + formed(arguments); + } + + @Override + public boolean isCorrect(ArrayList arguments) { + return formed(arguments) != null; + } + + public HumanBeing formed(ArrayList arguments) { + if(arguments.size() < 9) { + System.out.print("Недостаточно введенных данных. Вызываю HumanAsker."); + // TODO здесь будет вызов нового класса HumanAsker который будет запрашивать пользовательский ввод + // и записывать его в массив аргументов, который у нас уже есть + return null; + } + try { + int first = Integer.parseInt(arguments.get(6).split(" ")[0]); + float second = Float.parseFloat(arguments.get(6).split(" ")[1]); + String carName = null; + boolean cool; + if(arguments.get(8).split(" ").length == 2) { + carName = arguments.get(8).split(" ")[0]; + cool = Boolean.parseBoolean(arguments.get(8).split(" ")[1]); + } else { + cool = Boolean.parseBoolean(arguments.get(8).split(" ")[0]); + } + return new HumanBeing( + arguments.get(0), + arguments.get(1), + Long.parseLong(arguments.get(2)), + Integer.parseInt(arguments.get(3)), + Boolean.parseBoolean(arguments.get(4)), + Boolean.parseBoolean(arguments.get(5)), + new Coordinates(first, second), + Mood.valueOf(arguments.get(7).toUpperCase()), + new Car(carName, cool) + ); + } catch (IllegalArgumentException e) { + System.err.print("Неверный ввод данных! Попробуйте ввести команду add с самого начала.\n"); + } + return null; } } diff --git a/src/commands/Command.java b/src/commands/Command.java index b87524e..8646b7c 100644 --- a/src/commands/Command.java +++ b/src/commands/Command.java @@ -1,5 +1,8 @@ package commands; +import java.util.ArrayList; + public interface Command { - void execute(String arguments); + void execute(ArrayList arguments); + boolean isCorrect(ArrayList arguments); } diff --git a/src/commands/DeleteCommand.java b/src/commands/DeleteCommand.java index 4bba5cd..cd0266e 100644 --- a/src/commands/DeleteCommand.java +++ b/src/commands/DeleteCommand.java @@ -3,6 +3,8 @@ import dao.ArrayDequeDAO; import dao.DAO; +import java.util.ArrayList; + public class DeleteCommand implements Command { private final DAO arrayDequeDAO; @@ -11,9 +13,14 @@ public DeleteCommand(DAO arrayDequeDAO) { } @Override - public void execute(String arguments) { + public void execute(ArrayList arguments) { // если элемент есть то все ок //arrayDequeDAO.delete(); } + + @Override + public boolean isCorrect(ArrayList arguments) { + return false; + } } diff --git a/src/commands/ReadCommand.java b/src/commands/ReadCommand.java index a2f8b07..2e3b50a 100644 --- a/src/commands/ReadCommand.java +++ b/src/commands/ReadCommand.java @@ -3,6 +3,8 @@ import dao.ArrayDequeDAO; import dao.DAO; +import java.util.ArrayList; + public class ReadCommand implements Command { private final DAO arrayDequeDAO; @@ -11,8 +13,13 @@ public ReadCommand(DAO arrayDequeDAO) { } @Override - public void execute(String arguments) { + public void execute(ArrayList arguments) { // если айдишка есть то все ок //arrayDequeDAO.read(); } + + @Override + public boolean isCorrect(ArrayList arguments) { + return false; + } } diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index 2c767c6..8ccfc1c 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -4,6 +4,8 @@ import dao.DAO; import service.FormedManager; +import java.util.ArrayList; + public class UpdateCommand implements Command { private final DAO arrayDequeDAO; @@ -12,11 +14,14 @@ public UpdateCommand(DAO arrayDequeDAO) { } @Override - public void execute(String arguments) { + public void execute(ArrayList arguments) { + +// + } - int existedId = Integer.parseInt(arguments.substring(0, arguments.indexOf(" "))); - arguments = arguments.substring(arguments.indexOf(" ") + 1); - FormedManager manager = new FormedManager(); - arrayDequeDAO.update(existedId, manager.formed(arguments)); + + @Override + public boolean isCorrect(ArrayList arguments) { + return false; } } diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index d8867d2..4d04485 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -11,7 +11,7 @@ public class ConsoleInputHandler extends InputHandler { * @return считанная строка без лишних пробелов */ @Override - public ArrayList read() { + public ArrayList read() { String input = removeSpaces(scanner.nextLine()); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 7c43974..2f7e15f 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -2,18 +2,15 @@ import handlers.ConsoleInputHandler; import handlers.InputHandler; - -enum CommandType { - ADD, - UPDATE; -} +import service.CommandManager; public class DataBaseRunner { public static void main(String [] args) { - + // начинаем со считывания с консоли InputHandler reader = new ConsoleInputHandler(); - + // запускаем менеджер-определитель команды + CommandManager.start(reader); } } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java new file mode 100644 index 0000000..245f03a --- /dev/null +++ b/src/service/CommandManager.java @@ -0,0 +1,55 @@ +package service; + +import commands.*; +import dao.*; +import handlers.ConsoleInputHandler; +import handlers.InputHandler; + +import java.util.ArrayList; +import java.util.Locale; + +/** + * Класс обработчик, определяющий команду и ее поведение по отношению к входным данным. + */ +public class CommandManager { + private static final DAO database = new ArrayDequeDAO(); + private static final InputHandler consoleReader = new ConsoleInputHandler(); + private static ArrayList data_in; + + private static final Command[] commands = { + new AddCommand(database), + new UpdateCommand(database), + new ReadCommand(database), + new DeleteCommand(database) + }; + + public static void start(InputHandler reader) { + System.out.print("Пожалуйста, введите команду.\n"); + data_in = reader.read(); + whichCommand(data_in); + } + private static void whichCommand(ArrayList data_in) { + String[] command = data_in.get(0).split(" "); + try { + if(command.length > 2) { + throw new IllegalArgumentException(); + } else if(command.length == 2) { + data_in.add(1, command[1]); + } + data_in.remove(0); + int commandIndex = CommandType.valueOf(command[0].toUpperCase()).ordinal(); + if(commands[commandIndex].isCorrect(data_in)) { + commands[commandIndex].execute(data_in); + } else { + start(consoleReader); + } + } catch(IllegalArgumentException e) { + System.err.print("Неверный ввод!\n"); + start(consoleReader); + } + } +} +enum CommandType { + ADD, + UPDATE; +} \ No newline at end of file diff --git a/src/source/HumanBeing.java b/src/source/HumanBeing.java index 4300f5f..028d2a3 100644 --- a/src/source/HumanBeing.java +++ b/src/source/HumanBeing.java @@ -19,8 +19,7 @@ public class HumanBeing implements Comparable { public HumanBeing(String name, String soundtrackName, Long minutesOfWaiting, int impactSpeed, - boolean realHero, boolean hasToothpick, Coordinates coordinates, - Mood mood, Car car) { + boolean realHero, boolean hasToothpick, Coordinates coordinates, Mood mood, Car car) { this.name = name; this.soundtrackName = soundtrackName; this.minutesOfWaiting = minutesOfWaiting; From 3040eb5459babcbb5e14f1cef1bc7ed2a06596c0 Mon Sep 17 00:00:00 2001 From: Liza Date: Fri, 4 Mar 2022 00:42:01 +0300 Subject: [PATCH 05/40] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D1=8B,=20=D0=BF=D0=BE=D0=B4=D0=B0=D0=B2=D0=B0=D0=B5=D0=BC?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D1=8B=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4.=20=D0=9F=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20=D1=83=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B0.=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=82=D0=B5=D1=85=D0=BD=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D0=BE=D0=BB=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/AddCommand.java | 51 ++------------------------- src/commands/Command.java | 5 +-- src/commands/DeleteCommand.java | 9 ++--- src/commands/ReadCommand.java | 8 ++--- src/commands/UpdateCommand.java | 10 ++---- src/handlers/ConsoleInputHandler.java | 14 ++++---- src/handlers/FileInputHandler.java | 2 +- src/handlers/InputHandler.java | 2 +- src/others/DataBaseRunner.java | 5 ++- src/service/CommandManager.java | 39 +++++++------------- 10 files changed, 35 insertions(+), 110 deletions(-) diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index a722f46..7cb21d7 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -1,14 +1,9 @@ package commands; -import dao.ArrayDequeDAO; import dao.DAO; -import source.Car; -import source.Coordinates; +import handlers.InputHandler; import source.HumanBeing; -import service.FormedManager; -import source.Mood; -import java.util.ArrayList; /** * ЗДЕСЬ БУДЕТ ПОЛНАЯ ОБРАБОТКА ВХОДНЫХ ДАННЫХ С ФОРМИРОВАНИЕМ ЭЛЕМЕНТОВ @@ -25,47 +20,7 @@ public AddCommand(DAO arrayDequeDAO) { * @param arguments - все аргументы, нужные для формирования аргумента, в виде строки */ @Override - public void execute(ArrayList arguments) { - formed(arguments); - } - - @Override - public boolean isCorrect(ArrayList arguments) { - return formed(arguments) != null; - } - - public HumanBeing formed(ArrayList arguments) { - if(arguments.size() < 9) { - System.out.print("Недостаточно введенных данных. Вызываю HumanAsker."); - // TODO здесь будет вызов нового класса HumanAsker который будет запрашивать пользовательский ввод - // и записывать его в массив аргументов, который у нас уже есть - return null; - } - try { - int first = Integer.parseInt(arguments.get(6).split(" ")[0]); - float second = Float.parseFloat(arguments.get(6).split(" ")[1]); - String carName = null; - boolean cool; - if(arguments.get(8).split(" ").length == 2) { - carName = arguments.get(8).split(" ")[0]; - cool = Boolean.parseBoolean(arguments.get(8).split(" ")[1]); - } else { - cool = Boolean.parseBoolean(arguments.get(8).split(" ")[0]); - } - return new HumanBeing( - arguments.get(0), - arguments.get(1), - Long.parseLong(arguments.get(2)), - Integer.parseInt(arguments.get(3)), - Boolean.parseBoolean(arguments.get(4)), - Boolean.parseBoolean(arguments.get(5)), - new Coordinates(first, second), - Mood.valueOf(arguments.get(7).toUpperCase()), - new Car(carName, cool) - ); - } catch (IllegalArgumentException e) { - System.err.print("Неверный ввод данных! Попробуйте ввести команду add с самого начала.\n"); - } - return null; + public void execute(InputHandler reader) { + // formed(arguments); } } diff --git a/src/commands/Command.java b/src/commands/Command.java index 8646b7c..681225f 100644 --- a/src/commands/Command.java +++ b/src/commands/Command.java @@ -1,8 +1,9 @@ package commands; +import handlers.InputHandler; + import java.util.ArrayList; public interface Command { - void execute(ArrayList arguments); - boolean isCorrect(ArrayList arguments); + void execute(InputHandler reader); } diff --git a/src/commands/DeleteCommand.java b/src/commands/DeleteCommand.java index cd0266e..3e9e19c 100644 --- a/src/commands/DeleteCommand.java +++ b/src/commands/DeleteCommand.java @@ -2,6 +2,7 @@ import dao.ArrayDequeDAO; import dao.DAO; +import handlers.InputHandler; import java.util.ArrayList; @@ -13,14 +14,8 @@ public DeleteCommand(DAO arrayDequeDAO) { } @Override - public void execute(ArrayList arguments) { + public void execute(InputHandler reader) { // если элемент есть то все ок //arrayDequeDAO.delete(); } - - - @Override - public boolean isCorrect(ArrayList arguments) { - return false; - } } diff --git a/src/commands/ReadCommand.java b/src/commands/ReadCommand.java index 2e3b50a..c678dc6 100644 --- a/src/commands/ReadCommand.java +++ b/src/commands/ReadCommand.java @@ -2,6 +2,7 @@ import dao.ArrayDequeDAO; import dao.DAO; +import handlers.InputHandler; import java.util.ArrayList; @@ -13,13 +14,8 @@ public ReadCommand(DAO arrayDequeDAO) { } @Override - public void execute(ArrayList arguments) { + public void execute(InputHandler reader) { // если айдишка есть то все ок //arrayDequeDAO.read(); } - - @Override - public boolean isCorrect(ArrayList arguments) { - return false; - } } diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index 8ccfc1c..7b09bf4 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -2,6 +2,7 @@ import dao.ArrayDequeDAO; import dao.DAO; +import handlers.InputHandler; import service.FormedManager; import java.util.ArrayList; @@ -14,14 +15,7 @@ public UpdateCommand(DAO arrayDequeDAO) { } @Override - public void execute(ArrayList arguments) { - + public void execute(InputHandler reader) { // } - - - @Override - public boolean isCorrect(ArrayList arguments) { - return false; - } } diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index 4d04485..c83c995 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -5,21 +5,19 @@ public class ConsoleInputHandler extends InputHandler { private final Scanner scanner = new Scanner(System.in); - private ArrayList data_in = new ArrayList<>(); /** * Переопределённый метод для считывания с консоли * @return считанная строка без лишних пробелов */ @Override - public ArrayList read() { - String input = removeSpaces(scanner.nextLine()); + public String read(boolean is) { + // ВНИМАНИЕ!!!! Считывает не строку целиколм, а просто следующее слово!!! + String input; + if(!is) scanner.nextLine(); + input = removeSpaces(scanner.next()); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); } - while (!input.isEmpty()) { - data_in.add(input); - input = removeSpaces(scanner.nextLine()); - } - return data_in; + return input; } } diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index 9a0baa8..fb61ef6 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -4,7 +4,7 @@ public class FileInputHandler extends InputHandler { @Override - public ArrayList read() { + public String read(boolean is) { return null; } } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index 51c2a06..a9afb84 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -6,7 +6,7 @@ public abstract class InputHandler { /** * Абстрактный метод read, переопределяемый для двух разных типов считывания - с консоли и с файла */ - public abstract ArrayList read(); + public abstract String read(boolean is); /** *Убирает лишние пробелы из полученной строки для дальнейшей обработки * @param input - только что введённая строка diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 2f7e15f..193a1f4 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -1,16 +1,15 @@ package others; import handlers.ConsoleInputHandler; -import handlers.InputHandler; import service.CommandManager; public class DataBaseRunner { public static void main(String [] args) { // начинаем со считывания с консоли - InputHandler reader = new ConsoleInputHandler(); + CommandManager manager = new CommandManager(new ConsoleInputHandler()); // запускаем менеджер-определитель команды - CommandManager.start(reader); + manager.start(true); } } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 245f03a..71793db 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -2,50 +2,37 @@ import commands.*; import dao.*; -import handlers.ConsoleInputHandler; import handlers.InputHandler; -import java.util.ArrayList; -import java.util.Locale; - /** * Класс обработчик, определяющий команду и ее поведение по отношению к входным данным. */ public class CommandManager { private static final DAO database = new ArrayDequeDAO(); - private static final InputHandler consoleReader = new ConsoleInputHandler(); - private static ArrayList data_in; + private final InputHandler reader; - private static final Command[] commands = { + private final Command[] commands = { new AddCommand(database), new UpdateCommand(database), new ReadCommand(database), new DeleteCommand(database) }; - public static void start(InputHandler reader) { + public CommandManager(InputHandler reader) { + this.reader = reader; + } + + public void start(boolean is) { System.out.print("Пожалуйста, введите команду.\n"); - data_in = reader.read(); - whichCommand(data_in); + whichCommand(reader.read(is)); } - private static void whichCommand(ArrayList data_in) { - String[] command = data_in.get(0).split(" "); + private void whichCommand(String command) { try { - if(command.length > 2) { - throw new IllegalArgumentException(); - } else if(command.length == 2) { - data_in.add(1, command[1]); - } - data_in.remove(0); - int commandIndex = CommandType.valueOf(command[0].toUpperCase()).ordinal(); - if(commands[commandIndex].isCorrect(data_in)) { - commands[commandIndex].execute(data_in); - } else { - start(consoleReader); - } + int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); + commands[commandIndex].execute(reader); } catch(IllegalArgumentException e) { - System.err.print("Неверный ввод!\n"); - start(consoleReader); + System.err.print("Команада введена неверно. Пожалуйста, повторите попытку.\n"); + start(false); } } } From 7d112114762fd027ef7dc65df2d2e0d514634602 Mon Sep 17 00:00:00 2001 From: Liza Date: Fri, 4 Mar 2022 14:51:38 +0300 Subject: [PATCH 06/40] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/ConsoleInputHandler.java | 5 ++--- src/service/CommandManager.java | 10 +++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index c83c995..c5a3463 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -1,6 +1,5 @@ package handlers; -import java.util.ArrayList; import java.util.Scanner; public class ConsoleInputHandler extends InputHandler { @@ -12,9 +11,9 @@ public class ConsoleInputHandler extends InputHandler { @Override public String read(boolean is) { // ВНИМАНИЕ!!!! Считывает не строку целиколм, а просто следующее слово!!! - String input; + // механизм пропускает остальную информацию введенною в строку, если подано false и переходит на след. строку if(!is) scanner.nextLine(); - input = removeSpaces(scanner.next()); + String input = removeSpaces(scanner.next()); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 71793db..0fd5065 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -9,7 +9,7 @@ */ public class CommandManager { private static final DAO database = new ArrayDequeDAO(); - private final InputHandler reader; + private InputHandler reader; private final Command[] commands = { new AddCommand(database), @@ -22,6 +22,14 @@ public CommandManager(InputHandler reader) { this.reader = reader; } + /** + * Если нам надо поменять тип считывания, то мы делаем это здесь + * @param reader + */ + public void setReader(InputHandler reader) { + this.reader = reader; + } + public void start(boolean is) { System.out.print("Пожалуйста, введите команду.\n"); whichCommand(reader.read(is)); From b04ff978ce382cf89b7080116152b910f164dfa2 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Fri, 25 Feb 2022 17:17:55 +0300 Subject: [PATCH 07/40] =?UTF-8?q?=D1=82=D1=80=D0=B8=20=D1=87=D0=B5=D1=82?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=20=D0=BF=D1=8F=D1=82=D1=8C=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=20=D0=B4=D0=B2=D0=B5=20=D1=83=D0=B0=20=D0=B0=20?= =?UTF-8?q?=D0=B0=20=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dao/ArrayDequeDAO.java | 2 +- src/service/GenerateID.java | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 8f76170..a54aac1 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -28,7 +28,7 @@ public void delete() { @Override public int add(HumanBeing newHuman) { humanCollection.add(newHuman); - new GenerateID(humanCollection, newHuman); + new GenerateID(newHuman); return availableId++; } diff --git a/src/service/GenerateID.java b/src/service/GenerateID.java index 809b40d..79f1f5c 100644 --- a/src/service/GenerateID.java +++ b/src/service/GenerateID.java @@ -1,11 +1,12 @@ package service; -import source.HumanBeing; +import human_being.HumanBeing; -import java.util.Deque; public class GenerateID { - public GenerateID(Deque humanCollection, HumanBeing human){ - human.setId(humanCollection.size() + 1); + private static int availableId = 1; + + public GenerateID(HumanBeing human){ + human.setId(availableId++); } } \ No newline at end of file From cc6b903ee33f17572133dd63fda31d9eb737ac43 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Mon, 7 Mar 2022 14:47:48 +0300 Subject: [PATCH 08/40] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/source/HumanBeing.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/source/HumanBeing.java b/src/source/HumanBeing.java index 028d2a3..33a1f62 100644 --- a/src/source/HumanBeing.java +++ b/src/source/HumanBeing.java @@ -120,7 +120,9 @@ public Car getCar() { return car; } - // переобределение метода compareTo для сортировки + /** + * переобределение метода compareTo для сортировки + */ @Override public int compareTo(Object o) { if (o == null){ From d7f6a47b238512a4477da4d318390baaa6b8042d Mon Sep 17 00:00:00 2001 From: apchhiv Date: Mon, 7 Mar 2022 14:48:33 +0300 Subject: [PATCH 09/40] =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=20AskInput=20+=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=BE=D1=87=D0=BA=D0=B0=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/AskInput.java | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/service/AskInput.java diff --git a/src/service/AskInput.java b/src/service/AskInput.java new file mode 100644 index 0000000..6934657 --- /dev/null +++ b/src/service/AskInput.java @@ -0,0 +1,63 @@ +package service; + +import handlers.ConsoleInputHandler; +import handlers.FileInputHandler; + + +public class AskInput { + private static boolean friendlyInterface; + ConsoleInputHandler consoleInput = new ConsoleInputHandler(); + FileInputHandler fileInput = new FileInputHandler(); + + public void turnOnFriendly() throws RuntimeException { + System.out.println("Включить дружелюбный интерфейс?"); + String input = consoleInput.read(); + input = input.toLowerCase(); + try { + if (input.equals("true") || input.equals("yes") || input.equals("да")) { + friendlyInterface = true; + } else if (input.equals("false") || input.equals("no") || input.equals("нет")) { + friendlyInterface = false; + } else { + throw new RuntimeException("Вы что-то не то ввели, пожалуйста, повторите попытку."); + } + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + turnOnFriendly(); + } + } + + public String askName() throws RuntimeException { + if (friendlyInterface) { + System.out.println("Введите имя: "); + } + String input = consoleInput.read(); + try { + if (input == null) { + throw new RuntimeException("Строка не может быть пустой"); + } + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + askName(); + } + return input; + } + + public String askCoordinates() throws RuntimeException { + if (friendlyInterface) { + System.out.println("Введите координаты: "); + } + String input = consoleInput.read(); + try { + if (input == null) { + throw new RuntimeException("Строка не может быть пустой"); + } + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + askName(); + } + return input; + } + + +} From 79f9a1ef40ddcf4830cccf3c0f6e5bc86bcba6ba Mon Sep 17 00:00:00 2001 From: apchhiv Date: Mon, 7 Mar 2022 19:48:22 +0300 Subject: [PATCH 10/40] =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=B1=D1=8B=D0=BB?= =?UTF-8?q?=D0=B0=20=D1=87=D1=82=D0=BE=20=D1=82=D0=B0=D0=BC=20=D0=B1=D1=8B?= =?UTF-8?q?=D0=BB=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/FileInputHandler.java | 3 + src/service/AskInput.java | 129 +++++++++++++++++++++++------ 2 files changed, 107 insertions(+), 25 deletions(-) diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index fb61ef6..abd26c0 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -3,6 +3,9 @@ import java.util.ArrayList; public class FileInputHandler extends InputHandler { + /** + * Переопределённый метод для считывания с файла + */ @Override public String read(boolean is) { return null; diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 6934657..69e24b9 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -1,17 +1,31 @@ package service; -import handlers.ConsoleInputHandler; -import handlers.FileInputHandler; - +import handlers.InputHandler; +import human_being.Coordinates; +/** + * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки + */ public class AskInput { private static boolean friendlyInterface; - ConsoleInputHandler consoleInput = new ConsoleInputHandler(); - FileInputHandler fileInput = new FileInputHandler(); + private InputHandler inputHandler; + private Boolean booleanInput; + + public AskInput(InputHandler inputHandler) { + this.inputHandler = inputHandler; + } + + public void setInputHandler(InputHandler inputHandler){ + this.inputHandler = inputHandler; + } + /** + * Метод, позволяющй включить дружелюбный интерфейс + * @throws RuntimeException + */ public void turnOnFriendly() throws RuntimeException { System.out.println("Включить дружелюбный интерфейс?"); - String input = consoleInput.read(); + String input = inputHandler.read(); input = input.toLowerCase(); try { if (input.equals("true") || input.equals("yes") || input.equals("да")) { @@ -27,37 +41,102 @@ public void turnOnFriendly() throws RuntimeException { } } - public String askName() throws RuntimeException { - if (friendlyInterface) { - System.out.println("Введите имя: "); - } - String input = consoleInput.read(); + /** + * Метод, позволяющий выключить дружелюбный интерфейс + */ + public void turnOffFriendly(){ + friendlyInterface = false; + } + + public String askName() { + printMessage("Введите имя: "); + return inputHandler.read(); + } + + /** + * Методы по полям класса HumanBeing для их считывания + * @return + * @throws RuntimeException + */ + public String askCoordinates() throws RuntimeException { + printMessage("Введите координаты: "); + String input = inputHandler.read(); try { - if (input == null) { - throw new RuntimeException("Строка не может быть пустой"); + if (!(input.contains(" "))) { + throw new RuntimeException("Пожалуйста, введите координаты через пробел."); } + int x = Integer.parseInt(input.substring(0, input.indexOf(" "))); + Float y = Float.parseFloat(input); } catch (RuntimeException e) { - System.out.println(e.getMessage()); - askName(); + if (friendlyInterface) { + System.out.println(e.getMessage()); + askCoordinates(); + } } return input; } - public String askCoordinates() throws RuntimeException { - if (friendlyInterface) { - System.out.println("Введите координаты: "); + public Boolean askRealHero() throws RuntimeException { + printMessage("Является ли этот человек настоящим героем?"); + String input = inputHandler.read(); + input = input.toLowerCase(); + try { + if (input.contains("true") || input.contains("yes") || input.contains("да")) { + booleanInput = true; + } else if (input.contains("false") || input.contains("no") || input.contains("нет") || input.equals("")) { + booleanInput = false; + } else { + throw new RuntimeException("Нераспознаваемые символы."); + } + } catch (RuntimeException e){ + if (friendlyInterface){ + System.out.println(e.getMessage()); + askRealHero(); + } } - String input = consoleInput.read(); + return booleanInput; + } + + @SuppressWarnings("DuplicatedCode") + public Boolean askHasToothpick() throws RuntimeException { + printMessage("Есть ли у человека зубная щётка?"); + String input = inputHandler.read(); + input = input.toLowerCase(); try { - if (input == null) { - throw new RuntimeException("Строка не может быть пустой"); + if (input.contains("true") || input.contains("yes") || input.contains("да")) { + booleanInput = true; + } else if (input.contains("false") || input.contains("no") || input.contains("нет") || input.equals("")) { + booleanInput = false; + } else { + throw new RuntimeException("Нераспознаваемые символы."); + } + } catch (RuntimeException e){ + if (friendlyInterface){ + System.out.println(e.getMessage()); + askRealHero(); } - } catch (RuntimeException e) { - System.out.println(e.getMessage()); - askName(); } - return input; + return booleanInput; + } + + public int askImpactSpeed() { + printMessage("Введите скорость:"); + String input = inputHandler.read(); + return Integer.parseInt(input); } + public String askSoundtrackName() throws RuntimeException { + printMessage("Введите название саундтрека:"); + return inputHandler.read(); + } + /** + * Внутренний метод для вывода сообщения относительно friendlyInterface + * @param message + */ + private void printMessage(String message){ + if (friendlyInterface) { + System.out.println(message); + } + } } From ca719e6ddd65d542354384b18817652a231b7a0a Mon Sep 17 00:00:00 2001 From: apchhiv Date: Mon, 7 Mar 2022 20:03:38 +0300 Subject: [PATCH 11/40] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D1=85?= =?UTF-8?q?=D0=B8=D1=85=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 11 +++++++---- src/service/AskInput.java | 1 - 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/auxiliary/Tests b/auxiliary/Tests index 72b1788..ad2b8ec 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -1,5 +1,11 @@ Формат ввода команд: -COMMAND +COMMAND + + + + + + @@ -36,6 +42,3 @@ sadness McQueen True Тест 4: -Тест 3 -Тест 1 - diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 69e24b9..0c48ce5 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -1,7 +1,6 @@ package service; import handlers.InputHandler; -import human_being.Coordinates; /** * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки From 5a7bda90531fbe462b95285ab696286eafc72c03 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Tue, 8 Mar 2022 01:58:04 +0300 Subject: [PATCH 12/40] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=20AskInput=20=D0=B8=20FileInputHandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 8 +-- src/dao/ArrayDequeDAO.java | 6 ++- src/handlers/ConsoleInputHandler.java | 2 +- src/handlers/FileInputHandler.java | 24 ++++++++- src/handlers/InputHandler.java | 1 + src/service/AskInput.java | 71 ++++++++++++++++++++------- src/service/GenerateID.java | 12 ----- src/service/Generator.java | 28 +++++++++++ src/source/Car.java | 18 ++++++- 9 files changed, 130 insertions(+), 40 deletions(-) delete mode 100644 src/service/GenerateID.java create mode 100644 src/service/Generator.java diff --git a/auxiliary/Tests b/auxiliary/Tests index ad2b8ec..e8422d6 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -4,11 +4,11 @@ COMMAND - - + //может быть null + //может быть null - - + //может быть null + //может быть null Тест 1: add diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index a54aac1..c164e0d 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -1,7 +1,7 @@ package dao; import source.HumanBeing; -import service.GenerateID; +import service.Generator; import java.util.ArrayDeque; import java.util.Deque; @@ -12,6 +12,7 @@ public final class ArrayDequeDAO implements DAO { */ private static int availableId = 1; private final Deque humanCollection = new ArrayDeque<>(); + private Generator generator = new Generator(); public void read() { System.out.print("Select..."); @@ -28,7 +29,8 @@ public void delete() { @Override public int add(HumanBeing newHuman) { humanCollection.add(newHuman); - new GenerateID(newHuman); + generator.generateID(newHuman); + generator.generateCreationDate(newHuman); return availableId++; } diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index c5a3463..3adfb52 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -10,7 +10,7 @@ public class ConsoleInputHandler extends InputHandler { */ @Override public String read(boolean is) { - // ВНИМАНИЕ!!!! Считывает не строку целиколм, а просто следующее слово!!! + // ВНИМАНИЕ!!!! Считывает не строку целиком, а просто следующее слово!!! // механизм пропускает остальную информацию введенною в строку, если подано false и переходит на след. строку if(!is) scanner.nextLine(); String input = removeSpaces(scanner.next()); diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index abd26c0..6937dc3 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -1,6 +1,6 @@ package handlers; -import java.util.ArrayList; +import java.io.*; public class FileInputHandler extends InputHandler { /** @@ -8,6 +8,26 @@ public class FileInputHandler extends InputHandler { */ @Override public String read(boolean is) { - return null; + StringBuilder string = new StringBuilder(); + try { + String link = this.toString(); + File file = new File(link); + FileReader fileReader = new FileReader(file); + //создаем BufferedReader с существующего FileReader для построчного считывания + BufferedReader reader = new BufferedReader(fileReader); + // считаем сначала первую строку + String line = reader.readLine(); + string.append(line); + while (line != null) { + // считываем остальные строки в цикле + line = reader.readLine(); + string.append(line); + } + } catch (FileNotFoundException e) { + System.out.println("Файл не найден, пожалуйста, проверьте указанный путь."); + } catch (IOException e) { + System.out.println("Возникла техническая шоколадка. Пожалуйста, повторите попытку."); + } + return string.toString(); } } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index a9afb84..42956c6 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -7,6 +7,7 @@ public abstract class InputHandler { * Абстрактный метод read, переопределяемый для двух разных типов считывания - с консоли и с файла */ public abstract String read(boolean is); + /** *Убирает лишние пробелы из полученной строки для дальнейшей обработки * @param input - только что введённая строка diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 0c48ce5..fe6be04 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -1,9 +1,12 @@ package service; import handlers.InputHandler; +import source.Car; +import source.Mood; /** * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки + * а также сразу обрабатывающий строку на наличие ошибок */ public class AskInput { private static boolean friendlyInterface; @@ -24,7 +27,7 @@ public void setInputHandler(InputHandler inputHandler){ */ public void turnOnFriendly() throws RuntimeException { System.out.println("Включить дружелюбный интерфейс?"); - String input = inputHandler.read(); + String input = inputHandler.read(true); input = input.toLowerCase(); try { if (input.equals("true") || input.equals("yes") || input.equals("да")) { @@ -49,17 +52,17 @@ public void turnOffFriendly(){ public String askName() { printMessage("Введите имя: "); - return inputHandler.read(); + return inputHandler.read(true); } /** * Методы по полям класса HumanBeing для их считывания - * @return - * @throws RuntimeException + * @return возвращает введенную строку + * @throws RuntimeException если неверно введены координаты */ public String askCoordinates() throws RuntimeException { printMessage("Введите координаты: "); - String input = inputHandler.read(); + String input = inputHandler.read(true); try { if (!(input.contains(" "))) { throw new RuntimeException("Пожалуйста, введите координаты через пробел."); @@ -77,7 +80,7 @@ public String askCoordinates() throws RuntimeException { public Boolean askRealHero() throws RuntimeException { printMessage("Является ли этот человек настоящим героем?"); - String input = inputHandler.read(); + String input = inputHandler.read(true); input = input.toLowerCase(); try { if (input.contains("true") || input.contains("yes") || input.contains("да")) { @@ -99,16 +102,9 @@ public Boolean askRealHero() throws RuntimeException { @SuppressWarnings("DuplicatedCode") public Boolean askHasToothpick() throws RuntimeException { printMessage("Есть ли у человека зубная щётка?"); - String input = inputHandler.read(); - input = input.toLowerCase(); + String input = inputHandler.read(true); try { - if (input.contains("true") || input.contains("yes") || input.contains("да")) { - booleanInput = true; - } else if (input.contains("false") || input.contains("no") || input.contains("нет") || input.equals("")) { - booleanInput = false; - } else { - throw new RuntimeException("Нераспознаваемые символы."); - } + booleanInput = getBooleanInput(input); } catch (RuntimeException e){ if (friendlyInterface){ System.out.println(e.getMessage()); @@ -120,18 +116,57 @@ public Boolean askHasToothpick() throws RuntimeException { public int askImpactSpeed() { printMessage("Введите скорость:"); - String input = inputHandler.read(); + String input = inputHandler.read(true); return Integer.parseInt(input); } public String askSoundtrackName() throws RuntimeException { printMessage("Введите название саундтрека:"); - return inputHandler.read(); + return inputHandler.read(true); + } + + public Long askMinutesOfWaiting(){ + printMessage("Введите минуты ожидания:"); + String input = inputHandler.read(true); + return Long.getLong(input); + } + + public Mood askMood(){ + printMessage("Введите состояние персонажа:"); + String string = inputHandler.read(true).toUpperCase(); + return Mood.valueOf(string); + } + + public Car askCar(){ + printMessage("Введите, какая машина будет у данного персонажа:"); + String input = inputHandler.read(true); + Car car = new Car(false); + if (input.contains(" ")) { + String name = input.substring(0, input.indexOf(" ")); + car.setCarName(name); + } else { + Boolean cool = getBooleanInput(input); + car.setCarCool(cool); + } + return car; } + /** + * Внутренний метод для более удобного преобразования String в Boolean + * @param input строка, которая будет преобразовываться в Boolean + * @return true (если в строке присутствует true, yes, да вне зависимости от регистра), false (если в строке присутствует false, no, нет или если строка пустая) + */ + private Boolean getBooleanInput(String input) { + input = input.toLowerCase(); + if (input.contains("true") || input.contains("yes") || input.contains("да")) { + return true; + } else if (input.contains("false") || input.contains("no") || input.contains("нет") || input.equals("")) { + return false; + } else throw new RuntimeException("Нераспознаваемые символы."); + } /** * Внутренний метод для вывода сообщения относительно friendlyInterface - * @param message + * @param message строка, которая будет напечатана, если дружественный интерфейс включен */ private void printMessage(String message){ if (friendlyInterface) { diff --git a/src/service/GenerateID.java b/src/service/GenerateID.java deleted file mode 100644 index 79f1f5c..0000000 --- a/src/service/GenerateID.java +++ /dev/null @@ -1,12 +0,0 @@ -package service; - -import human_being.HumanBeing; - - -public class GenerateID { - private static int availableId = 1; - - public GenerateID(HumanBeing human){ - human.setId(availableId++); - } -} \ No newline at end of file diff --git a/src/service/Generator.java b/src/service/Generator.java new file mode 100644 index 0000000..9d2be9a --- /dev/null +++ b/src/service/Generator.java @@ -0,0 +1,28 @@ +package service; + +import source.HumanBeing; + +import java.time.LocalDate; + +/** + * Класс для генерации айди и даты создания элемента + */ +public class Generator { + private static int availableId = 1; + + /** + * Автоматически генерирует айди + * @param human экземпляр класса, которому устанавливается данное айди + */ + public void generateID(HumanBeing human){ + human.setId(availableId++); + } + + /** + * Автоматически генерирует дату создания экземпляра + * @param humanBeing экземпляр класса, дата создания которого генерируется + */ + public void generateCreationDate(HumanBeing humanBeing){ + humanBeing.setCreationDate(LocalDate.now()); + } +} diff --git a/src/source/Car.java b/src/source/Car.java index 24d962e..e49e2c8 100644 --- a/src/source/Car.java +++ b/src/source/Car.java @@ -9,11 +9,27 @@ public Car(String name, boolean cool){ this.cool = cool; } - Car(boolean cool){ + public Car(boolean cool){ this.name = null; this.cool = cool; } + public void setCarName(String name) { + this.name = name; + } + + public void setCarCool(boolean cool) { + this.cool = cool; + } + + public String getCarName() { + return name; + } + + public Boolean getCarCool(){ + return cool; + } + @Override public int compareTo(Object o) { Car car = (Car) o; From a018137a7f2fd48eaccd9082e506875776abaae8 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Tue, 8 Mar 2022 02:33:23 +0300 Subject: [PATCH 13/40] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/FileInputHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index 6937dc3..d6a4f93 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -3,13 +3,15 @@ import java.io.*; public class FileInputHandler extends InputHandler { + StringBuilder string = new StringBuilder(); /** * Переопределённый метод для считывания с файла */ @Override public String read(boolean is) { - StringBuilder string = new StringBuilder(); try { + int length = string.length(); + string.delete(0, length); String link = this.toString(); File file = new File(link); FileReader fileReader = new FileReader(file); From 34a0c7b9a738068e0b8c4aa2a1ef3e5b9e571435 Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 8 Mar 2022 20:40:35 +0300 Subject: [PATCH 14/40] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=B5=20inputHandler?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20AskInput=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= =?UTF-8?q?=20=D0=B1=D1=83=D0=B4=D0=B5=D1=82=20consoleInputReader,=20?= =?UTF-8?q?=D1=8D=D1=82=D0=BE=20=D1=83=D0=BF=D1=80=D0=BE=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D1=82=20=D0=B5=D0=B3=D0=BE=20=D0=B2=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20=D0=BD=D0=B8=D0=BC.=20?= =?UTF-8?q?=D0=92=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=BC=D0=B5=D0=BB?= =?UTF-8?q?=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8,=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BC=D0=B5=D0=BD=D1=8F=D1=8E=D1=89=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=81=D1=83=D1=82=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BC=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/AddCommand.java | 2 +- src/others/DataBaseRunner.java | 4 ++++ src/service/AskInput.java | 15 +++++++-------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index 7cb21d7..01d18d4 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -17,7 +17,7 @@ public AddCommand(DAO arrayDequeDAO) { /** * Обработка поступивших паратемтров и добавление их в коллекцию - * @param arguments - все аргументы, нужные для формирования аргумента, в виде строки + * @param reader - экземпляр класса InputHandler который определяет тип считывания */ @Override public void execute(InputHandler reader) { diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 193a1f4..976896b 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -1,11 +1,15 @@ package others; import handlers.ConsoleInputHandler; +import service.AskInput; import service.CommandManager; public class DataBaseRunner { public static void main(String [] args) { + AskInput friendlyInterface = new AskInput(); + // определяем нужен ли нам дружественный интерфейс + friendlyInterface.turnOnFriendly(); // начинаем со считывания с консоли CommandManager manager = new CommandManager(new ConsoleInputHandler()); // запускаем менеджер-определитель команды diff --git a/src/service/AskInput.java b/src/service/AskInput.java index fe6be04..5bf0bd5 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -1,22 +1,21 @@ package service; +import handlers.ConsoleInputHandler; import handlers.InputHandler; import source.Car; import source.Mood; +import java.util.Locale; + /** * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки * а также сразу обрабатывающий строку на наличие ошибок */ public class AskInput { private static boolean friendlyInterface; - private InputHandler inputHandler; + private InputHandler inputHandler = new ConsoleInputHandler(); private Boolean booleanInput; - public AskInput(InputHandler inputHandler) { - this.inputHandler = inputHandler; - } - public void setInputHandler(InputHandler inputHandler){ this.inputHandler = inputHandler; } @@ -27,15 +26,15 @@ public void setInputHandler(InputHandler inputHandler){ */ public void turnOnFriendly() throws RuntimeException { System.out.println("Включить дружелюбный интерфейс?"); - String input = inputHandler.read(true); - input = input.toLowerCase(); + String input = inputHandler.read(true).toLowerCase(); try { if (input.equals("true") || input.equals("yes") || input.equals("да")) { friendlyInterface = true; } else if (input.equals("false") || input.equals("no") || input.equals("нет")) { friendlyInterface = false; } else { - throw new RuntimeException("Вы что-то не то ввели, пожалуйста, повторите попытку."); + throw new RuntimeException("Вы что-то не то ввели, пожалуйста, повторите попытку.\n" + + "Вы можете ввести следующее: \"да\" \"yes\" \"true\" \"нет\" \"no\" \"false\"\n\n"); } } catch (RuntimeException e) { System.out.println(e.getMessage()); From 8cc6c0182c80ea2a750f0b1f13043cdf438d9164 Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 8 Mar 2022 20:55:09 +0300 Subject: [PATCH 15/40] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=D0=BE=D0=B3=D0=BE=20=D1=82=D0=B8=D0=BF=D0=B0=20?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B5=20askCoordinates(?= =?UTF-8?q?).=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BD=D0=B5=20=D1=81=D1=82=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D1=83,=20=D0=B0=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20Coordinates.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/AskInput.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 5bf0bd5..ee6c486 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -3,6 +3,7 @@ import handlers.ConsoleInputHandler; import handlers.InputHandler; import source.Car; +import source.Coordinates; import source.Mood; import java.util.Locale; @@ -59,22 +60,24 @@ public String askName() { * @return возвращает введенную строку * @throws RuntimeException если неверно введены координаты */ - public String askCoordinates() throws RuntimeException { + public Coordinates askCoordinates() throws RuntimeException { printMessage("Введите координаты: "); String input = inputHandler.read(true); + int x = 0; + float y = 0; try { if (!(input.contains(" "))) { throw new RuntimeException("Пожалуйста, введите координаты через пробел."); } - int x = Integer.parseInt(input.substring(0, input.indexOf(" "))); - Float y = Float.parseFloat(input); + x = Integer.parseInt(input.substring(0, input.indexOf(" "))); + y = Float.parseFloat(input); } catch (RuntimeException e) { if (friendlyInterface) { System.out.println(e.getMessage()); askCoordinates(); } } - return input; + return new Coordinates(x, y); } public Boolean askRealHero() throws RuntimeException { From 1f9a46555f550155b65b2991a492c057aa6605d6 Mon Sep 17 00:00:00 2001 From: Liza Date: Thu, 10 Mar 2022 18:18:28 +0300 Subject: [PATCH 16/40] =?UTF-8?q?=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=BA=D1=80=D0=BE=D0=BC=D0=B5?= =?UTF-8?q?=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 22 ++++++++ src/commands/AddCommand.java | 8 +-- src/dao/ArrayDequeDAO.java | 1 + src/handlers/ConsoleInputHandler.java | 2 +- src/service/AskInput.java | 72 ++++++++++++--------------- src/service/CommandManager.java | 2 +- src/service/FormedManager.java | 29 +++++------ 7 files changed, 73 insertions(+), 63 deletions(-) diff --git a/auxiliary/Tests b/auxiliary/Tests index e8422d6..0b30c17 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -42,3 +42,25 @@ sadness McQueen True Тест 4: +add +cat ffkg dflkdf dflkvmf +nyan-cat +5 ffff fffff fffffff +12 55555 44444 3333 +True fvmdv +True vfkdmkmvffdfvfdvfdvdvdvfdvd +4 5.123 kdk mkmfkmdfmdm +sadness d iodjvodmvkmdmvk +McQueen True kvd + +Тест 5: +add rfrjtnj ufdyj c.lf ddtle ,e,e,e,e,e +cat ffkg dflkdf dflkvmf +nyan-cat +5 ffff fffff fffffff +12 55555 44444 3333 +True fvmdv +True vfkdmkmvffdfvfdvfdvdvdvfdvd +4 5.123 kdk mkmfkmdfmdm +sadness d iodjvodmvkmdmvk +McQueen True kvd \ No newline at end of file diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index 01d18d4..d1fcc76 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -2,14 +2,14 @@ import dao.DAO; import handlers.InputHandler; -import source.HumanBeing; - +import service.FormedManager; /** - * ЗДЕСЬ БУДЕТ ПОЛНАЯ ОБРАБОТКА ВХОДНЫХ ДАННЫХ С ФОРМИРОВАНИЕМ ЭЛЕМЕНТОВ + * Класс команды add. Добавляет новый элемент в коллекцию. */ public class AddCommand implements Command { private final DAO arrayDequeDAO; + private final FormedManager manager = new FormedManager(); public AddCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; @@ -21,6 +21,6 @@ public AddCommand(DAO arrayDequeDAO) { */ @Override public void execute(InputHandler reader) { - // formed(arguments); + arrayDequeDAO.add(manager.formed(reader)); } } diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index c164e0d..783d200 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -31,6 +31,7 @@ public int add(HumanBeing newHuman) { humanCollection.add(newHuman); generator.generateID(newHuman); generator.generateCreationDate(newHuman); + System.out.print("Ура Ура! Элемент добавлен в коллекцию!"); return availableId++; } diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index 3adfb52..2e69a6c 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -12,8 +12,8 @@ public class ConsoleInputHandler extends InputHandler { public String read(boolean is) { // ВНИМАНИЕ!!!! Считывает не строку целиком, а просто следующее слово!!! // механизм пропускает остальную информацию введенною в строку, если подано false и переходит на след. строку - if(!is) scanner.nextLine(); String input = removeSpaces(scanner.next()); + if(!is) if(scanner.hasNextLine()) scanner.nextLine(); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); } diff --git a/src/service/AskInput.java b/src/service/AskInput.java index ee6c486..8e0fb84 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -14,20 +14,21 @@ */ public class AskInput { private static boolean friendlyInterface; - private InputHandler inputHandler = new ConsoleInputHandler(); + //private InputHandler inputHandler = new ConsoleInputHandler(); private Boolean booleanInput; - public void setInputHandler(InputHandler inputHandler){ - this.inputHandler = inputHandler; - } +// public void setInputHandler(InputHandler inputHandler){ +// this.inputHandler = inputHandler; +// } /** * Метод, позволяющй включить дружелюбный интерфейс * @throws RuntimeException */ public void turnOnFriendly() throws RuntimeException { + InputHandler inputHandler = new ConsoleInputHandler(); System.out.println("Включить дружелюбный интерфейс?"); - String input = inputHandler.read(true).toLowerCase(); + String input = inputHandler.read(false).toLowerCase(); try { if (input.equals("true") || input.equals("yes") || input.equals("да")) { friendlyInterface = true; @@ -50,9 +51,9 @@ public void turnOffFriendly(){ friendlyInterface = false; } - public String askName() { + public String askName(InputHandler in) { printMessage("Введите имя: "); - return inputHandler.read(true); + return in.read(false); } /** @@ -60,29 +61,27 @@ public String askName() { * @return возвращает введенную строку * @throws RuntimeException если неверно введены координаты */ - public Coordinates askCoordinates() throws RuntimeException { + public Coordinates askCoordinates(InputHandler in) throws RuntimeException { printMessage("Введите координаты: "); - String input = inputHandler.read(true); + String input_x = in.read(true); + String input_y = in.read(false); int x = 0; float y = 0; try { - if (!(input.contains(" "))) { - throw new RuntimeException("Пожалуйста, введите координаты через пробел."); - } - x = Integer.parseInt(input.substring(0, input.indexOf(" "))); - y = Float.parseFloat(input); + x = Integer.parseInt(input_x); + y = Float.parseFloat(input_y); } catch (RuntimeException e) { if (friendlyInterface) { System.out.println(e.getMessage()); - askCoordinates(); + askCoordinates(in); } } return new Coordinates(x, y); } - public Boolean askRealHero() throws RuntimeException { + public Boolean askRealHero(InputHandler in) throws RuntimeException { printMessage("Является ли этот человек настоящим героем?"); - String input = inputHandler.read(true); + String input = in.read(false); input = input.toLowerCase(); try { if (input.contains("true") || input.contains("yes") || input.contains("да")) { @@ -95,62 +94,55 @@ public Boolean askRealHero() throws RuntimeException { } catch (RuntimeException e){ if (friendlyInterface){ System.out.println(e.getMessage()); - askRealHero(); + askRealHero(in); } } return booleanInput; } @SuppressWarnings("DuplicatedCode") - public Boolean askHasToothpick() throws RuntimeException { + public Boolean askHasToothpick(InputHandler in) throws RuntimeException { printMessage("Есть ли у человека зубная щётка?"); - String input = inputHandler.read(true); + String input = in.read(false); try { booleanInput = getBooleanInput(input); } catch (RuntimeException e){ if (friendlyInterface){ System.out.println(e.getMessage()); - askRealHero(); + askRealHero(in); } } return booleanInput; } - public int askImpactSpeed() { + public int askImpactSpeed(InputHandler in) { printMessage("Введите скорость:"); - String input = inputHandler.read(true); + String input = in.read(false); return Integer.parseInt(input); } - public String askSoundtrackName() throws RuntimeException { + public String askSoundtrackName(InputHandler in) throws RuntimeException { printMessage("Введите название саундтрека:"); - return inputHandler.read(true); + return in.read(false); } - public Long askMinutesOfWaiting(){ + public Long askMinutesOfWaiting(InputHandler in){ printMessage("Введите минуты ожидания:"); - String input = inputHandler.read(true); + String input = in.read(false); return Long.getLong(input); } - public Mood askMood(){ + public Mood askMood(InputHandler in){ printMessage("Введите состояние персонажа:"); - String string = inputHandler.read(true).toUpperCase(); + String string = in.read(false).toUpperCase(); return Mood.valueOf(string); } - public Car askCar(){ + public Car askCar(InputHandler in){ printMessage("Введите, какая машина будет у данного персонажа:"); - String input = inputHandler.read(true); - Car car = new Car(false); - if (input.contains(" ")) { - String name = input.substring(0, input.indexOf(" ")); - car.setCarName(name); - } else { - Boolean cool = getBooleanInput(input); - car.setCarCool(cool); - } - return car; + String input_name = in.read(true); + String input_cool = in.read(false); + return new Car(input_name, Boolean.parseBoolean(input_cool)); } /** diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 0fd5065..a31306e 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -39,7 +39,7 @@ private void whichCommand(String command) { int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); commands[commandIndex].execute(reader); } catch(IllegalArgumentException e) { - System.err.print("Команада введена неверно. Пожалуйста, повторите попытку.\n"); + System.err.print("Команада введена неверно. Повторите попытку.\n"); start(false); } } diff --git a/src/service/FormedManager.java b/src/service/FormedManager.java index 36fa3a0..64a961f 100644 --- a/src/service/FormedManager.java +++ b/src/service/FormedManager.java @@ -1,27 +1,22 @@ package service; -import source.Car; -import source.Coordinates; +import handlers.InputHandler; import source.HumanBeing; -import source.Mood; public class FormedManager { + private final AskInput request = new AskInput(); - public HumanBeing formed(String arguments) { - String[] fields = arguments.split(" "); - for (String field : fields) { - System.out.print(field + " "); - } + public HumanBeing formed(InputHandler reader) { return new HumanBeing( - fields[0], - fields[1], - Long.parseLong(fields[2]), - Integer.parseInt(fields[3]), - Boolean.parseBoolean(fields[4]), - Boolean.parseBoolean(fields[5]), - new Coordinates(Integer.parseInt(fields[6]), Float.parseFloat(fields[7])), - Mood.valueOf(fields[8].toUpperCase()), - new Car(fields[9], Boolean.parseBoolean(fields[10])) + request.askName(reader), + request.askSoundtrackName(reader), + request.askMinutesOfWaiting(reader), + request.askImpactSpeed(reader), + request.askRealHero(reader), + request.askHasToothpick(reader), + request.askCoordinates(reader), + request.askMood(reader), + request.askCar(reader) ); } From cdf23a39382413a2b5d2d6850dbde40f01d21443 Mon Sep 17 00:00:00 2001 From: Liza Date: Fri, 11 Mar 2022 12:07:45 +0300 Subject: [PATCH 17/40] =?UTF-8?q?=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20/=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B4=D1=80=D1=83=D0=B6=D0=B5=D1=81=D1=82=D0=B2=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D0=B0=20=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D0=B8=D1=82=20=D0=BE=D1=82=20=D1=8D=D0=BA=D0=B7?= =?UTF-8?q?=D0=B5=D0=BC=D0=BF=D0=BB=D1=8F=D1=80=D0=B0=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dao/ArrayDequeDAO.java | 2 +- src/others/DataBaseRunner.java | 3 +-- src/service/AskInput.java | 9 ++------- src/service/CommandManager.java | 2 +- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 783d200..09156c1 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -31,7 +31,7 @@ public int add(HumanBeing newHuman) { humanCollection.add(newHuman); generator.generateID(newHuman); generator.generateCreationDate(newHuman); - System.out.print("Ура Ура! Элемент добавлен в коллекцию!"); + System.out.print("Ура Ура! Элемент добавлен в коллекцию!\n"); return availableId++; } diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 976896b..029b648 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -7,9 +7,8 @@ public class DataBaseRunner { public static void main(String [] args) { - AskInput friendlyInterface = new AskInput(); // определяем нужен ли нам дружественный интерфейс - friendlyInterface.turnOnFriendly(); + AskInput.turnOnFriendly(); // начинаем со считывания с консоли CommandManager manager = new CommandManager(new ConsoleInputHandler()); // запускаем менеджер-определитель команды diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 8e0fb84..5afbe05 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -14,18 +14,13 @@ */ public class AskInput { private static boolean friendlyInterface; - //private InputHandler inputHandler = new ConsoleInputHandler(); private Boolean booleanInput; -// public void setInputHandler(InputHandler inputHandler){ -// this.inputHandler = inputHandler; -// } - /** * Метод, позволяющй включить дружелюбный интерфейс * @throws RuntimeException */ - public void turnOnFriendly() throws RuntimeException { + public static void turnOnFriendly() throws RuntimeException { InputHandler inputHandler = new ConsoleInputHandler(); System.out.println("Включить дружелюбный интерфейс?"); String input = inputHandler.read(false).toLowerCase(); @@ -47,7 +42,7 @@ public void turnOnFriendly() throws RuntimeException { /** * Метод, позволяющий выключить дружелюбный интерфейс */ - public void turnOffFriendly(){ + public static void turnOffFriendly(){ friendlyInterface = false; } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index a31306e..724b0b6 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -31,13 +31,13 @@ public void setReader(InputHandler reader) { } public void start(boolean is) { - System.out.print("Пожалуйста, введите команду.\n"); whichCommand(reader.read(is)); } private void whichCommand(String command) { try { int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); commands[commandIndex].execute(reader); + start(false); } catch(IllegalArgumentException e) { System.err.print("Команада введена неверно. Повторите попытку.\n"); start(false); From eb6ef1e63ee224cd1a2895eb89c00a9ddb500829 Mon Sep 17 00:00:00 2001 From: Liza Date: Fri, 11 Mar 2022 12:20:51 +0300 Subject: [PATCH 18/40] =?UTF-8?q?=D0=A2=D0=B8=D0=BF=20=D1=81=D1=87=D0=B8?= =?UTF-8?q?=D1=82=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BC=D0=B5=D0=BD=D1=8F=D1=82=D1=8C=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=B7=20=D1=8D=D0=BA=D0=B7=D0=B5=D0=BC=D0=BF=D0=BB=D1=8F?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/others/DataBaseRunner.java | 6 +++--- src/service/AskInput.java | 2 -- src/service/CommandManager.java | 23 ++++++++++++----------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 029b648..f5c9a9e 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -9,10 +9,10 @@ public class DataBaseRunner { public static void main(String [] args) { // определяем нужен ли нам дружественный интерфейс AskInput.turnOnFriendly(); - // начинаем со считывания с консоли - CommandManager manager = new CommandManager(new ConsoleInputHandler()); + // считывать начинаем с консоли + CommandManager.turnOnConsole(); // запускаем менеджер-определитель команды - manager.start(true); + CommandManager.start(true); } } diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 5afbe05..75817a4 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -6,8 +6,6 @@ import source.Coordinates; import source.Mood; -import java.util.Locale; - /** * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки * а также сразу обрабатывающий строку на наличие ошибок diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 724b0b6..84bdfdc 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -2,6 +2,7 @@ import commands.*; import dao.*; +import handlers.ConsoleInputHandler; import handlers.InputHandler; /** @@ -9,31 +10,31 @@ */ public class CommandManager { private static final DAO database = new ArrayDequeDAO(); - private InputHandler reader; + private static InputHandler reader; - private final Command[] commands = { + private static final Command[] commands = { new AddCommand(database), new UpdateCommand(database), new ReadCommand(database), new DeleteCommand(database) }; - public CommandManager(InputHandler reader) { - this.reader = reader; - } - /** * Если нам надо поменять тип считывания, то мы делаем это здесь - * @param reader */ - public void setReader(InputHandler reader) { - this.reader = reader; + public static void turnOnConsole() { + reader = new ConsoleInputHandler(); + } + + public static void turnOnFile() { + reader = new ConsoleInputHandler(); + AskInput.turnOffFriendly(); } - public void start(boolean is) { + public static void start(boolean is) { whichCommand(reader.read(is)); } - private void whichCommand(String command) { + private static void whichCommand(String command) { try { int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); commands[commandIndex].execute(reader); From d530f8983ecba2731ecde2169734445d0cfe72d8 Mon Sep 17 00:00:00 2001 From: Liza Date: Fri, 11 Mar 2022 15:22:47 +0300 Subject: [PATCH 19/40] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=BC=20(execute=5Fscri?= =?UTF-8?q?pt)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/ScriptCommand.java | 17 +++++++++++++++++ src/others/DataBaseRunner.java | 1 - src/service/AskInput.java | 23 +++++++++++++++++++++++ src/service/CommandManager.java | 4 +++- 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/commands/ScriptCommand.java diff --git a/src/commands/ScriptCommand.java b/src/commands/ScriptCommand.java new file mode 100644 index 0000000..c281c6f --- /dev/null +++ b/src/commands/ScriptCommand.java @@ -0,0 +1,17 @@ +package commands; + +import handlers.InputHandler; +import service.AskInput; +import service.CommandManager; + +public class ScriptCommand implements Command{ + private final AskInput request = new AskInput(); + + @Override + public void execute(InputHandler reader) { + // считываем имя файла + String usableFile = request.askFileName(reader); + // меняем тип считывания на файловый + CommandManager.turnOnFile(); + } +} diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index f5c9a9e..2a8e84a 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -1,6 +1,5 @@ package others; -import handlers.ConsoleInputHandler; import service.AskInput; import service.CommandManager; diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 75817a4..7d0da1e 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -6,6 +6,11 @@ import source.Coordinates; import source.Mood; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.NoSuchElementException; + /** * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки * а также сразу обрабатывающий строку на наличие ошибок @@ -44,6 +49,11 @@ public static void turnOffFriendly(){ friendlyInterface = false; } + /** + * Метод, запрашивающий ввод поля "name" + * @param in + * @return + */ public String askName(InputHandler in) { printMessage("Введите имя: "); return in.read(false); @@ -138,6 +148,19 @@ public Car askCar(InputHandler in){ return new Car(input_name, Boolean.parseBoolean(input_cool)); } + public String askFileName(InputHandler in) { + String fileName = in.read(false); + File file = new File(fileName); + try { + if(!file.exists()) throw new FileNotFoundException("Файл не найден.\n"); + if(file.length() == 0) throw new NoSuchElementException("Файл пуст.\n"); + if(!file.canRead()) throw new IOException("Нет прав на чтение.\n"); + } catch(NoSuchElementException | IOException e) { + System.err.print(e.getMessage()); + } + return fileName; + } + /** * Внутренний метод для более удобного преобразования String в Boolean * @param input строка, которая будет преобразовываться в Boolean diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 84bdfdc..877bcc6 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -15,6 +15,7 @@ public class CommandManager { private static final Command[] commands = { new AddCommand(database), new UpdateCommand(database), + new ScriptCommand(), new ReadCommand(database), new DeleteCommand(database) }; @@ -47,5 +48,6 @@ private static void whichCommand(String command) { } enum CommandType { ADD, - UPDATE; + UPDATE, + EXECUTE_SCRIPT; } \ No newline at end of file From a7fd79996450b336673a6572b170358cf9f2a31d Mon Sep 17 00:00:00 2001 From: Liza Date: Fri, 11 Mar 2022 16:35:35 +0300 Subject: [PATCH 20/40] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=B4=D0=B5=D0=BB=D0=B5=D0=B3=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D1=83=20AskInput=20=D0=B8=D0=B7=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B0=20CommandManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/others/DataBaseRunner.java | 2 +- src/service/AskInput.java | 16 +++++++++++++++- src/service/CommandManager.java | 15 +++++---------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 2a8e84a..38b72cf 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -11,7 +11,7 @@ public static void main(String [] args) { // считывать начинаем с консоли CommandManager.turnOnConsole(); // запускаем менеджер-определитель команды - CommandManager.start(true); + CommandManager.start(); } } diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 7d0da1e..153805a 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -49,6 +49,20 @@ public static void turnOffFriendly(){ friendlyInterface = false; } + public static String askCommand(InputHandler in) { + String command = null; + while(command == null) { + printMessage("Введите команду:\n"); + command = in.read(true); + try { + CommandType.valueOf(command.toUpperCase()).ordinal(); + } catch(IllegalArgumentException e) { + System.err.print("Команада введена неверно. Повторите попытку.\n"); + command = null; + } + } + return command; + } /** * Метод, запрашивающий ввод поля "name" * @param in @@ -178,7 +192,7 @@ private Boolean getBooleanInput(String input) { * Внутренний метод для вывода сообщения относительно friendlyInterface * @param message строка, которая будет напечатана, если дружественный интерфейс включен */ - private void printMessage(String message){ + private static void printMessage(String message){ if (friendlyInterface) { System.out.println(message); } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 877bcc6..01f3dc7 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -32,18 +32,13 @@ public static void turnOnFile() { AskInput.turnOffFriendly(); } - public static void start(boolean is) { - whichCommand(reader.read(is)); + public static void start() { + whichCommand(AskInput.askCommand(reader)); } private static void whichCommand(String command) { - try { - int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); - commands[commandIndex].execute(reader); - start(false); - } catch(IllegalArgumentException e) { - System.err.print("Команада введена неверно. Повторите попытку.\n"); - start(false); - } + int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); + commands[commandIndex].execute(reader); + start(); } } enum CommandType { From 20150faa544e1c2c1584e034148309a0a1fe9e31 Mon Sep 17 00:00:00 2001 From: Liza Date: Sat, 12 Mar 2022 15:22:44 +0300 Subject: [PATCH 21/40] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=D1=8E=20=D0=BF=D1=80=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B4=D0=B2=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D1=8B:=20add=20=D0=B8=20update.=20=D0=A1=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20=D1=83=D0=B6=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D0=B0=20=D1=81=20=D0=BA=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D0=BE=D0=BB=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 25 ++++++++++++++------ src/commands/AddCommand.java | 4 +++- src/commands/DeleteCommand.java | 3 --- src/commands/UpdateCommand.java | 10 ++++---- src/dao/ArrayDequeDAO.java | 11 +-------- src/handlers/ConsoleInputHandler.java | 5 ++-- src/handlers/FileInputHandler.java | 2 +- src/handlers/InputHandler.java | 2 +- src/others/DataBaseRunner.java | 4 ++++ src/service/AskInput.java | 33 +++++++++++++++------------ src/service/CommandManager.java | 20 ++++++++++++++-- 11 files changed, 73 insertions(+), 46 deletions(-) diff --git a/auxiliary/Tests b/auxiliary/Tests index 0b30c17..dc38906 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -18,16 +18,25 @@ nyan-cat 12 True True -4 5.123 +4 +5.123 sadness -McQueen True +McQueen +True Тест 2: -update 1 -dog piesek 2 15 True False +update +1 +dog +piesek +2 +15 +True +False 4 6.22 longing -BrokeCar False +BrokeCar +False Тест 3: add @@ -37,9 +46,11 @@ five 12 True True -4 5.123 +4 +5.123 sadness -McQueen True +McQueen +True Тест 4: add diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index d1fcc76..b9b5f3c 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -3,6 +3,7 @@ import dao.DAO; import handlers.InputHandler; import service.FormedManager; +import source.HumanBeing; /** * Класс команды add. Добавляет новый элемент в коллекцию. @@ -21,6 +22,7 @@ public AddCommand(DAO arrayDequeDAO) { */ @Override public void execute(InputHandler reader) { - arrayDequeDAO.add(manager.formed(reader)); + HumanBeing existedHuman = manager.formed(reader); + arrayDequeDAO.add(existedHuman); } } diff --git a/src/commands/DeleteCommand.java b/src/commands/DeleteCommand.java index 3e9e19c..824337d 100644 --- a/src/commands/DeleteCommand.java +++ b/src/commands/DeleteCommand.java @@ -1,11 +1,8 @@ package commands; -import dao.ArrayDequeDAO; import dao.DAO; import handlers.InputHandler; -import java.util.ArrayList; - public class DeleteCommand implements Command { private final DAO arrayDequeDAO; diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index 7b09bf4..cb34697 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -1,14 +1,14 @@ package commands; -import dao.ArrayDequeDAO; import dao.DAO; import handlers.InputHandler; +import service.AskInput; import service.FormedManager; - -import java.util.ArrayList; +import source.HumanBeing; public class UpdateCommand implements Command { private final DAO arrayDequeDAO; + private final FormedManager manager = new FormedManager(); public UpdateCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; @@ -16,6 +16,8 @@ public UpdateCommand(DAO arrayDequeDAO) { @Override public void execute(InputHandler reader) { -// + int id = AskInput.askId(reader); + HumanBeing existedHuman = manager.formed(reader); + arrayDequeDAO.update(id, existedHuman); } } diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 09156c1..47cf10d 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -7,20 +7,10 @@ import java.util.Deque; public final class ArrayDequeDAO implements DAO { - /** - * ЗДЕСЬ ВСЕ БУДЕТ ПРОСТО ВЫПОЛНЯТЬСЯ БЕЗ ПРОВЕРОК ИЛИ ОБРАБОТКИ КАК ЭТО ЕСТЬ У ЕГОШИНА - */ private static int availableId = 1; private final Deque humanCollection = new ArrayDeque<>(); private Generator generator = new Generator(); - public void read() { - System.out.print("Select..."); - } - public void delete() { - System.out.print("Delete..."); - } - /** * Добавление нового элемента у коллекцию * @param newHuman - новый элемент коллекции @@ -54,6 +44,7 @@ public void update(int id, HumanBeing updatedHuman) { existedHuman.setMood(updatedHuman.getMood()); existedHuman.setCar(updatedHuman.getCar()); } + System.out.print("Ура ура! Элемент обновлён!\n"); } /** diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index 2e69a6c..5d83595 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -9,11 +9,10 @@ public class ConsoleInputHandler extends InputHandler { * @return считанная строка без лишних пробелов */ @Override - public String read(boolean is) { + public String read() { // ВНИМАНИЕ!!!! Считывает не строку целиком, а просто следующее слово!!! // механизм пропускает остальную информацию введенною в строку, если подано false и переходит на след. строку - String input = removeSpaces(scanner.next()); - if(!is) if(scanner.hasNextLine()) scanner.nextLine(); + String input = removeSpaces(scanner.nextLine().split(" ")[0]); if(input.isEmpty()) { throw new RuntimeException("Пустой ввод!"); } diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index d6a4f93..2bc36b2 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -8,7 +8,7 @@ public class FileInputHandler extends InputHandler { * Переопределённый метод для считывания с файла */ @Override - public String read(boolean is) { + public String read() { try { int length = string.length(); string.delete(0, length); diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index 42956c6..542f7c5 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -6,7 +6,7 @@ public abstract class InputHandler { /** * Абстрактный метод read, переопределяемый для двух разных типов считывания - с консоли и с файла */ - public abstract String read(boolean is); + public abstract String read(); /** *Убирает лишние пробелы из полученной строки для дальнейшей обработки diff --git a/src/others/DataBaseRunner.java b/src/others/DataBaseRunner.java index 38b72cf..6df47e0 100644 --- a/src/others/DataBaseRunner.java +++ b/src/others/DataBaseRunner.java @@ -5,6 +5,10 @@ public class DataBaseRunner { + /** + * Главный класс + * @param args + */ public static void main(String [] args) { // определяем нужен ли нам дружественный интерфейс AskInput.turnOnFriendly(); diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 153805a..5e32300 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -26,7 +26,7 @@ public class AskInput { public static void turnOnFriendly() throws RuntimeException { InputHandler inputHandler = new ConsoleInputHandler(); System.out.println("Включить дружелюбный интерфейс?"); - String input = inputHandler.read(false).toLowerCase(); + String input = inputHandler.read().toLowerCase(); try { if (input.equals("true") || input.equals("yes") || input.equals("да")) { friendlyInterface = true; @@ -53,7 +53,7 @@ public static String askCommand(InputHandler in) { String command = null; while(command == null) { printMessage("Введите команду:\n"); - command = in.read(true); + command = in.read(); try { CommandType.valueOf(command.toUpperCase()).ordinal(); } catch(IllegalArgumentException e) { @@ -63,6 +63,11 @@ public static String askCommand(InputHandler in) { } return command; } + + public static int askId(InputHandler in) { + printMessage("Введите id: "); + return Integer.parseInt(in.read()); + } /** * Метод, запрашивающий ввод поля "name" * @param in @@ -70,7 +75,7 @@ public static String askCommand(InputHandler in) { */ public String askName(InputHandler in) { printMessage("Введите имя: "); - return in.read(false); + return in.read(); } /** @@ -80,8 +85,8 @@ public String askName(InputHandler in) { */ public Coordinates askCoordinates(InputHandler in) throws RuntimeException { printMessage("Введите координаты: "); - String input_x = in.read(true); - String input_y = in.read(false); + String input_x = in.read(); + String input_y = in.read(); int x = 0; float y = 0; try { @@ -98,7 +103,7 @@ public Coordinates askCoordinates(InputHandler in) throws RuntimeException { public Boolean askRealHero(InputHandler in) throws RuntimeException { printMessage("Является ли этот человек настоящим героем?"); - String input = in.read(false); + String input = in.read(); input = input.toLowerCase(); try { if (input.contains("true") || input.contains("yes") || input.contains("да")) { @@ -120,7 +125,7 @@ public Boolean askRealHero(InputHandler in) throws RuntimeException { @SuppressWarnings("DuplicatedCode") public Boolean askHasToothpick(InputHandler in) throws RuntimeException { printMessage("Есть ли у человека зубная щётка?"); - String input = in.read(false); + String input = in.read(); try { booleanInput = getBooleanInput(input); } catch (RuntimeException e){ @@ -134,36 +139,36 @@ public Boolean askHasToothpick(InputHandler in) throws RuntimeException { public int askImpactSpeed(InputHandler in) { printMessage("Введите скорость:"); - String input = in.read(false); + String input = in.read(); return Integer.parseInt(input); } public String askSoundtrackName(InputHandler in) throws RuntimeException { printMessage("Введите название саундтрека:"); - return in.read(false); + return in.read(); } public Long askMinutesOfWaiting(InputHandler in){ printMessage("Введите минуты ожидания:"); - String input = in.read(false); + String input = in.read(); return Long.getLong(input); } public Mood askMood(InputHandler in){ printMessage("Введите состояние персонажа:"); - String string = in.read(false).toUpperCase(); + String string = in.read().toUpperCase(); return Mood.valueOf(string); } public Car askCar(InputHandler in){ printMessage("Введите, какая машина будет у данного персонажа:"); - String input_name = in.read(true); - String input_cool = in.read(false); + String input_name = in.read(); + String input_cool = in.read(); return new Car(input_name, Boolean.parseBoolean(input_cool)); } public String askFileName(InputHandler in) { - String fileName = in.read(false); + String fileName = in.read(); File file = new File(fileName); try { if(!file.exists()) throw new FileNotFoundException("Файл не найден.\n"); diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 01f3dc7..13153c4 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -6,7 +6,7 @@ import handlers.InputHandler; /** - * Класс обработчик, определяющий команду и ее поведение по отношению к входным данным. + * Класс обработчик, определяющий команду и ее поведение по отношению к входным данным */ public class CommandManager { private static final DAO database = new ArrayDequeDAO(); @@ -21,26 +21,42 @@ public class CommandManager { }; /** - * Если нам надо поменять тип считывания, то мы делаем это здесь + * Меняет тип считывания на считывание с консоли */ public static void turnOnConsole() { reader = new ConsoleInputHandler(); } + /** + * Меняет тип считывания на считывание с файла + * Отключает дружетвенный интерфейс, если он включён + */ public static void turnOnFile() { reader = new ConsoleInputHandler(); AskInput.turnOffFriendly(); } + /** + * Начало работы определителя команд + */ public static void start() { whichCommand(AskInput.askCommand(reader)); } + + /** + * По полученной строке определяет команду и совершает её вызов + * @param command - уже прошедшая проверку строка, содержащая команду + */ private static void whichCommand(String command) { int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); commands[commandIndex].execute(reader); start(); } } + +/** + * Перечисление существующих команд + */ enum CommandType { ADD, UPDATE, From 3c9bfb81729a95262a753b6bd90914d2c7282778 Mon Sep 17 00:00:00 2001 From: Liza Date: Sat, 12 Mar 2022 15:54:46 +0300 Subject: [PATCH 22/40] =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20DeleteCommand=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B2=20RemoveCom?= =?UTF-8?q?mand;=20=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=8D=D0=BB=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=20=D0=BF=D1=80=D0=BE=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 3 ++- src/commands/{DeleteCommand.java => RemoveCommand.java} | 9 +++++---- src/dao/ArrayDequeDAO.java | 9 +++++++++ src/dao/DAO.java | 2 +- src/service/CommandManager.java | 7 ++++--- 5 files changed, 21 insertions(+), 9 deletions(-) rename src/commands/{DeleteCommand.java => RemoveCommand.java} (53%) diff --git a/auxiliary/Tests b/auxiliary/Tests index dc38906..6edc2cd 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -33,7 +33,8 @@ piesek 15 True False -4 6.22 +4 +6.22 longing BrokeCar False diff --git a/src/commands/DeleteCommand.java b/src/commands/RemoveCommand.java similarity index 53% rename from src/commands/DeleteCommand.java rename to src/commands/RemoveCommand.java index 824337d..f9614f5 100644 --- a/src/commands/DeleteCommand.java +++ b/src/commands/RemoveCommand.java @@ -2,17 +2,18 @@ import dao.DAO; import handlers.InputHandler; +import service.AskInput; -public class DeleteCommand implements Command { +public class RemoveCommand implements Command { private final DAO arrayDequeDAO; - public DeleteCommand(DAO arrayDequeDAO) { + public RemoveCommand(DAO arrayDequeDAO) { this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(InputHandler reader) { - // если элемент есть то все ок - //arrayDequeDAO.delete(); + int id = AskInput.askId(reader); + arrayDequeDAO.remove(id); } } diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 47cf10d..7c78acd 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -47,6 +47,15 @@ public void update(int id, HumanBeing updatedHuman) { System.out.print("Ура ура! Элемент обновлён!\n"); } + @Override + public void remove(int id) { + HumanBeing existedHuman = get(id); + if(existedHuman != null) { + humanCollection.remove(existedHuman); + } + System.out.print("Эхб элемент удалили...\n"); + } + /** * Нахождение элемента по id * @param id - айдишник нужного элемента diff --git a/src/dao/DAO.java b/src/dao/DAO.java index e1cb216..c74f98c 100644 --- a/src/dao/DAO.java +++ b/src/dao/DAO.java @@ -5,7 +5,7 @@ public interface DAO { int add(HumanBeing human); void update(int id, HumanBeing human); -// void delete(int id); + void remove(int id); HumanBeing get(int id); // Collection show(); } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 13153c4..64f93a7 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -15,9 +15,9 @@ public class CommandManager { private static final Command[] commands = { new AddCommand(database), new UpdateCommand(database), - new ScriptCommand(), - new ReadCommand(database), - new DeleteCommand(database) + // new ReadCommand(database), + new RemoveCommand(database), + new ScriptCommand() }; /** @@ -60,5 +60,6 @@ private static void whichCommand(String command) { enum CommandType { ADD, UPDATE, + REMOVE_BY_ID, EXECUTE_SCRIPT; } \ No newline at end of file From c8706db77211f18dcc38f680284e2d089d6c643c Mon Sep 17 00:00:00 2001 From: apchhiv Date: Tue, 15 Mar 2022 13:10:49 +0300 Subject: [PATCH 23/40] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=BE=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=81=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/FileInputHandler.java | 44 +++++++++++++++++------------- src/handlers/InputHandler.java | 4 +-- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index 2bc36b2..426faea 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -1,35 +1,41 @@ package handlers; import java.io.*; +import java.util.Scanner; public class FileInputHandler extends InputHandler { - StringBuilder string = new StringBuilder(); + private final Scanner scanner = new Scanner(System.in); + StringBuilder builder = new StringBuilder(); /** - * Переопределённый метод для считывания с файла + * Переопределённый метод для считывания с файла, проверяющий ошибки + * @return строки указанного файла */ @Override public String read() { + + builder.delete(0, builder.capacity()); + String input = removeSpaces(scanner.nextLine()); + if(input.isEmpty()) { + throw new RuntimeException("Необходимо указать путь к файлу."); + } + File file = new File(input); + try { - int length = string.length(); - string.delete(0, length); - String link = this.toString(); - File file = new File(link); - FileReader fileReader = new FileReader(file); - //создаем BufferedReader с существующего FileReader для построчного считывания - BufferedReader reader = new BufferedReader(fileReader); - // считаем сначала первую строку - String line = reader.readLine(); - string.append(line); - while (line != null) { - // считываем остальные строки в цикле - line = reader.readLine(); - string.append(line); + FileInputStream fileInput = new FileInputStream(file); + BufferedInputStream bufferedInput = new BufferedInputStream(fileInput); + + int i; + while ((i = bufferedInput.read()) != -1) { + builder.append((char) i); } + + bufferedInput.close(); } catch (FileNotFoundException e) { - System.out.println("Файл не найден, пожалуйста, проверьте указанный путь."); - } catch (IOException e) { + System.out.println("Нужного файла не обнаружено."); + } catch (IOException e){ System.out.println("Возникла техническая шоколадка. Пожалуйста, повторите попытку."); } - return string.toString(); + + return builder.toString(); } } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index 542f7c5..90b5798 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -10,8 +10,8 @@ public abstract class InputHandler { /** *Убирает лишние пробелы из полученной строки для дальнейшей обработки - * @param input - только что введённая строка - * @return - строка без лишних пробелов + * @param input только что введённая строка + * @return строка без лишних пробелов */ // TODO заменить конструкцию на регулярные выржанеия public String removeSpaces(String input) { From 2f97d824a951ee248664897b27058024a2b7f788 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Tue, 15 Mar 2022 13:15:47 +0300 Subject: [PATCH 24/40] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/FileInputHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index 426faea..1c3800e 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -13,7 +13,7 @@ public class FileInputHandler extends InputHandler { @Override public String read() { - builder.delete(0, builder.capacity()); + builder.delete(0, builder.length()); String input = removeSpaces(scanner.nextLine()); if(input.isEmpty()) { throw new RuntimeException("Необходимо указать путь к файлу."); From bf984c6c28e60c60b8285e9cd134608e471eff84 Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 15 Mar 2022 18:05:08 +0300 Subject: [PATCH 25/40] =?UTF-8?q?=D0=92=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B5=20AskInput=20=D0=BF=D1=80=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B2=D1=81=D0=B5=20=D0=B8=D1=81=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0=BA=D0=B0=D1=81?= =?UTF-8?q?=D0=B0=D1=8E=D1=89=D0=B8=D0=B5=D1=81=D1=8F=20=D0=BD=D0=B5=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=B2=D0=B2=D0=BE=D0=B4=D0=B0=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85,=20=D0=B0=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=BD=D0=BE:=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85;=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5,=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D1=8F=D1=89=D0=B8=D0=B5=20=D0=B7=D0=B0=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D1=8B=20=D0=BF=D0=BE=D0=B7=D0=B2=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=B8=D0=B0=D0=BF?= =?UTF-8?q?=D0=B0=D0=B7=D0=BE=D0=BD=D0=B0=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 2 +- src/service/AskInput.java | 274 +++++++++++++++++++++++++------------ src/source/HumanBeing.java | 4 +- 3 files changed, 193 insertions(+), 87 deletions(-) diff --git a/auxiliary/Tests b/auxiliary/Tests index 6edc2cd..9c1c564 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -43,7 +43,7 @@ False add cat nyan-cat -five +5 12 True True diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 5e32300..42f805a 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -12,15 +12,15 @@ import java.util.NoSuchElementException; /** - * Класс, позволяющий переключать дружелюбный интерфейс для быстрой отладки - * а также сразу обрабатывающий строку на наличие ошибок + * Класс, позволяющий переключать дружественный интерфейс для быстрой тестировки + * а также сразу обрабатывающий строку на наличие ошибок, связанных с типом данных */ public class AskInput { private static boolean friendlyInterface; private Boolean booleanInput; /** - * Метод, позволяющй включить дружелюбный интерфейс + * Метод, позволяющй включить дружественный интерфейс * @throws RuntimeException */ public static void turnOnFriendly() throws RuntimeException { @@ -43,128 +43,233 @@ public static void turnOnFriendly() throws RuntimeException { } /** - * Метод, позволяющий выключить дружелюбный интерфейс + * Метод, позволяющий выключить дружественный интерфейс */ public static void turnOffFriendly(){ friendlyInterface = false; } + /** + * Запрашивает ввод команды + * @param in + * @return + */ public static String askCommand(InputHandler in) { String command = null; while(command == null) { - printMessage("Введите команду:\n"); - command = in.read(); + printMessage("Введите команду:"); try { + command = in.read(); CommandType.valueOf(command.toUpperCase()).ordinal(); } catch(IllegalArgumentException e) { - System.err.print("Команада введена неверно. Повторите попытку.\n"); + if(!command.isEmpty()) System.err.print("Команада введена неверно. Повторите попытку.\n"); + else System.err.print("Вы ввели пустую строку. Повторите попытку\n"); command = null; } } return command; } - public static int askId(InputHandler in) { - printMessage("Введите id: "); - return Integer.parseInt(in.read()); - } /** - * Метод, запрашивающий ввод поля "name" - * @param in - * @return + * Метды запроса и обработки полей класса HumanBeing + * @param in - объект класса хендлеров, позволяющий считывать данные либо с консоли, либо с файла + * @return корректное запрошенное поле класса */ - public String askName(InputHandler in) { - printMessage("Введите имя: "); - return in.read(); + public static int askId(InputHandler in) { + String input = null; + while(input == null) { + printMessage("Введите id: "); + try { + input = in.read(); + if(Integer.parseInt(input) <= 0) throw new NumberFormatException(); + } catch(NumberFormatException e) { + if(!input.isEmpty()) System.err.print("Id введен неверно. Повторите попытку.\n"); + else System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; + } + } + return Integer.parseInt(input); } - /** - * Методы по полям класса HumanBeing для их считывания - * @return возвращает введенную строку - * @throws RuntimeException если неверно введены координаты - */ - public Coordinates askCoordinates(InputHandler in) throws RuntimeException { - printMessage("Введите координаты: "); - String input_x = in.read(); - String input_y = in.read(); - int x = 0; - float y = 0; - try { - x = Integer.parseInt(input_x); - y = Float.parseFloat(input_y); - } catch (RuntimeException e) { - if (friendlyInterface) { - System.out.println(e.getMessage()); - askCoordinates(in); + public String askName(InputHandler in) { + String input = null; + while(input == null) { + printMessage("Введите имя: "); + try { + input = in.read(); + if(input.isEmpty()) throw new IllegalArgumentException(); + } catch (IllegalArgumentException e) { + System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; } } - return new Coordinates(x, y); + return input; } - public Boolean askRealHero(InputHandler in) throws RuntimeException { - printMessage("Является ли этот человек настоящим героем?"); - String input = in.read(); - input = input.toLowerCase(); - try { - if (input.contains("true") || input.contains("yes") || input.contains("да")) { - booleanInput = true; - } else if (input.contains("false") || input.contains("no") || input.contains("нет") || input.equals("")) { - booleanInput = false; - } else { - throw new RuntimeException("Нераспознаваемые символы."); - } - } catch (RuntimeException e){ - if (friendlyInterface){ - System.out.println(e.getMessage()); - askRealHero(in); + public String askSoundtrackName(InputHandler in) { + String input = null; + while(input == null) { + printMessage("Введите название саундтрека:"); + try { + input = in.read(); + if(input.isEmpty()) throw new IllegalArgumentException(); + } catch (IllegalArgumentException e) { + System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; } } - return booleanInput; + return input; } - @SuppressWarnings("DuplicatedCode") - public Boolean askHasToothpick(InputHandler in) throws RuntimeException { - printMessage("Есть ли у человека зубная щётка?"); - String input = in.read(); - try { - booleanInput = getBooleanInput(input); - } catch (RuntimeException e){ - if (friendlyInterface){ - System.out.println(e.getMessage()); - askRealHero(in); + public Long askMinutesOfWaiting(InputHandler in){ + String input = null; + while(input == null) { + printMessage("Введите минуты ожидания: "); + try { + input = in.read(); + Long.parseLong(input); + } catch(NumberFormatException e) { + if(!input.isEmpty()) System.err.print("Поле minutesOfWaiting введено неверно. Повторите попытку.\n"); + else System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; } } - return booleanInput; + return Long.parseLong(input); } public int askImpactSpeed(InputHandler in) { - printMessage("Введите скорость:"); - String input = in.read(); + String input = null; + while(input == null) { + printMessage("Введите скорость: "); + try { + input = in.read(); + Integer.parseInt(input); + } catch(NumberFormatException e) { + if(!input.isEmpty()) System.err.print("Поле impactSpeed введено неверно. Повторите попытку.\n"); + else System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; + } + } return Integer.parseInt(input); } - public String askSoundtrackName(InputHandler in) throws RuntimeException { - printMessage("Введите название саундтрека:"); - return in.read(); + public Boolean askRealHero(InputHandler in) { + String input = null; + while(input == null) { + printMessage("Был героем?"); + try { + input = in.read(); + getBooleanInput(input); + } catch(NumberFormatException e) { + System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; + } catch (IllegalArgumentException e) { + System.err.print("Поле realHero введено неверно. Повторите попытку.\n"); + input = null; + } + } + return getBooleanInput(input); } - public Long askMinutesOfWaiting(InputHandler in){ - printMessage("Введите минуты ожидания:"); - String input = in.read(); - return Long.getLong(input); + public Boolean askHasToothpick(InputHandler in) { + String input = null; + while(input == null) { + printMessage("Пользовался зубочисткой?"); + try { + input = in.read(); + getBooleanInput(input); + } catch(NumberFormatException e) { + System.out.print("\u001B[33mВы ввели пустую строку. Поле примет значение null.\u001B[0m\n"); + return null; + } catch (IllegalArgumentException e) { + System.err.print("Поле realHero введено неверно. Повторите попытку.\n"); + input = null; + } + } + return getBooleanInput(input); + } + + public Coordinates askCoordinates(InputHandler in) { + printMessage("Для определения местоположения персонажа введите координаты."); + String input = null; + while(input == null) { + printMessage("Введите координату x: "); + try { + input = in.read(); + Integer.parseInt(input); + } catch(NumberFormatException e) { + if(!input.isEmpty()) System.err.print("Координата x введена неверно. Повторите попытку.\n"); + else System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; + } + } + int x = Integer.parseInt(input); + input = null; + while(input == null) { + printMessage("Введите координату y: "); + try { + input = in.read(); + if(Float.parseFloat(input) < -188) throw new NumberFormatException(); + } catch(NumberFormatException e) { + if(!input.isEmpty()) System.err.print("Координата y введена неверно. Повторите попытку.\n"); + else System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; + } + } + Float y = Float.parseFloat(input); + return new Coordinates(x, y); } public Mood askMood(InputHandler in){ - printMessage("Введите состояние персонажа:"); - String string = in.read().toUpperCase(); - return Mood.valueOf(string); + String input = null; + while(input == null) { + printMessage("Введите состояние персонажа: "); + try { + input = in.read(); + if(input.isEmpty()) throw new NumberFormatException(); + Mood.valueOf(input.toUpperCase()); + } catch(NumberFormatException e) { + System.out.print("\u001B[33mВы ввели пустую строку. Поле примет значение null.\u001B[0m\n"); + return null; + } catch (IllegalArgumentException e) { + System.err.print("Поле mood введено неверно. Повторите попытку.\n"); + input = null; + } + } + return Mood.valueOf(input.toUpperCase()); } public Car askCar(InputHandler in){ - printMessage("Введите, какая машина будет у данного персонажа:"); - String input_name = in.read(); - String input_cool = in.read(); - return new Car(input_name, Boolean.parseBoolean(input_cool)); + printMessage("Введите машину, принадлежащую персонажу."); + String input = null; + String name = null; + while(input == null) { + printMessage("Введите её название: "); + try { + input = in.read(); + name = input; + if(input.isEmpty()) throw new IllegalArgumentException(); + } catch(IllegalArgumentException e) { + System.out.print("\u001B[33mВы ввели пустую строку. Поле примет значение null.\u001B[0m\n"); + name = null; + } + } + input = null; + while(input == null) { + printMessage("Машина была крутой? "); + try { + input = in.read(); + getBooleanInput(input); + } catch(NumberFormatException e) { + System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + input = null; + } catch (IllegalArgumentException e) { + System.err.print("Поле cool введено неверно. Повторите попытку.\n"); + input = null; + } + } + boolean cool = getBooleanInput(input); + return new Car(name, cool); } public String askFileName(InputHandler in) { @@ -185,13 +290,14 @@ public String askFileName(InputHandler in) { * @param input строка, которая будет преобразовываться в Boolean * @return true (если в строке присутствует true, yes, да вне зависимости от регистра), false (если в строке присутствует false, no, нет или если строка пустая) */ - private Boolean getBooleanInput(String input) { + private static Boolean getBooleanInput(String input) { input = input.toLowerCase(); - if (input.contains("true") || input.contains("yes") || input.contains("да")) { + if (input.equals("true") || input.equals("yes") || input.equals("да")) { return true; - } else if (input.contains("false") || input.contains("no") || input.contains("нет") || input.equals("")) { + } else if (input.equals("false") || input.equals("no") || input.equals("нет")) { return false; - } else throw new RuntimeException("Нераспознаваемые символы."); + } else if (!input.isEmpty()) throw new IllegalArgumentException(); + else throw new NumberFormatException(); } /** * Внутренний метод для вывода сообщения относительно friendlyInterface diff --git a/src/source/HumanBeing.java b/src/source/HumanBeing.java index 33a1f62..8fd75b4 100644 --- a/src/source/HumanBeing.java +++ b/src/source/HumanBeing.java @@ -10,7 +10,7 @@ public class HumanBeing implements Comparable { private java.time.LocalDate creationDate; //Поле не может быть null, Значение этого поля должно // генерироваться автоматически private boolean realHero; - private boolean hasToothpick; //Поле может быть null + private Boolean hasToothpick; //Поле может быть null private int impactSpeed; private String soundtrackName; //Поле не может быть null private Long minutesOfWaiting; //Поле не может быть null @@ -19,7 +19,7 @@ public class HumanBeing implements Comparable { public HumanBeing(String name, String soundtrackName, Long minutesOfWaiting, int impactSpeed, - boolean realHero, boolean hasToothpick, Coordinates coordinates, Mood mood, Car car) { + boolean realHero, Boolean hasToothpick, Coordinates coordinates, Mood mood, Car car) { this.name = name; this.soundtrackName = soundtrackName; this.minutesOfWaiting = minutesOfWaiting; From e503f7249361ad705c496d55602e704ec8282dbd Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 15 Mar 2022 18:07:03 +0300 Subject: [PATCH 26/40] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=B0=20=D0=BF=D1=83=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B2=D0=B2=D0=BE=D0=B4=20=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20ConsoleInputHandler?= =?UTF-8?q?=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20AskInput.=20=D0=98?= =?UTF-8?q?=D0=B7=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20InputHandler=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BE=D1=82=20=D0=BF=D1=80=D0=BE=D0=B1=D0=B5?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2,=20=D1=82=D0=BA=20=D1=8D=D1=82=D0=BE=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BB=D0=BE=20=D0=B1=D0=B5=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=B5=D0=B7=D0=BD=D1=8B=D0=BC=20=D1=81=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=B2=D0=B2=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/handlers/ConsoleInputHandler.java | 8 ++------ src/handlers/InputHandler.java | 18 ------------------ 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index 5d83595..11627d9 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -10,12 +10,8 @@ public class ConsoleInputHandler extends InputHandler { */ @Override public String read() { - // ВНИМАНИЕ!!!! Считывает не строку целиком, а просто следующее слово!!! - // механизм пропускает остальную информацию введенною в строку, если подано false и переходит на след. строку - String input = removeSpaces(scanner.nextLine().split(" ")[0]); - if(input.isEmpty()) { - throw new RuntimeException("Пустой ввод!"); - } + // ВНИМАНИЕ!!!! Считывает только первое слово введённой строки. Остальные данные игнорируются. + String input = scanner.nextLine().trim().split(" ")[0]; return input; } } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index 542f7c5..7e053e2 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -1,27 +1,9 @@ package handlers; -import java.util.ArrayList; - public abstract class InputHandler { /** * Абстрактный метод read, переопределяемый для двух разных типов считывания - с консоли и с файла */ public abstract String read(); - /** - *Убирает лишние пробелы из полученной строки для дальнейшей обработки - * @param input - только что введённая строка - * @return - строка без лишних пробелов - */ - // TODO заменить конструкцию на регулярные выржанеия - public String removeSpaces(String input) { - input = input.trim(); - while(input.contains(" ")) { - input = input.replace(" ", " "); - } - return input; - } - - - } From ec13a6195a586a108c40965b36609e1333dfbe48 Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 15 Mar 2022 18:41:49 +0300 Subject: [PATCH 27/40] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20id.=20=D0=92=D1=8B=D0=B2=D0=BE=D0=B4=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1?= =?UTF-8?q?=20=D1=83=D1=81=D0=BF=D0=B5=D1=88=D0=BD=D0=BE=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=BD=D0=BE=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B5=20=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20=D0=B2=D1=8B=D1=88?= =?UTF-8?q?=D0=B5:=20=D0=B8=D0=B7=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0?= =?UTF-8?q?=20ArrayDequeDAO=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/AddCommand.java | 1 + src/commands/RemoveCommand.java | 7 ++++++- src/commands/UpdateCommand.java | 9 +++++++-- src/dao/ArrayDequeDAO.java | 3 --- src/service/AskInput.java | 19 +++++++------------ 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/commands/AddCommand.java b/src/commands/AddCommand.java index b9b5f3c..7099ba8 100644 --- a/src/commands/AddCommand.java +++ b/src/commands/AddCommand.java @@ -24,5 +24,6 @@ public AddCommand(DAO arrayDequeDAO) { public void execute(InputHandler reader) { HumanBeing existedHuman = manager.formed(reader); arrayDequeDAO.add(existedHuman); + System.out.print("add: Ура Ура! Элемент добавлен в коллекцию!\n"); } } diff --git a/src/commands/RemoveCommand.java b/src/commands/RemoveCommand.java index f9614f5..d4449ba 100644 --- a/src/commands/RemoveCommand.java +++ b/src/commands/RemoveCommand.java @@ -14,6 +14,11 @@ public RemoveCommand(DAO arrayDequeDAO) { @Override public void execute(InputHandler reader) { int id = AskInput.askId(reader); - arrayDequeDAO.remove(id); + if(arrayDequeDAO.get(id) != null) { + arrayDequeDAO.remove(id); + System.out.print("remove_by_id: Эхб, элемент удалили....\n"); + } else { + System.err.print("remove_by_id: Элемента с таким id не нашлось.\n"); + } } } diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index cb34697..6b6dbb0 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -17,7 +17,12 @@ public UpdateCommand(DAO arrayDequeDAO) { @Override public void execute(InputHandler reader) { int id = AskInput.askId(reader); - HumanBeing existedHuman = manager.formed(reader); - arrayDequeDAO.update(id, existedHuman); + if(arrayDequeDAO.get(id) != null) { + HumanBeing existedHuman = manager.formed(reader); + arrayDequeDAO.update(id, existedHuman); + System.out.print("update: Ура ура! Элемент обновлён!\n"); + } else { + System.err.print("update: Элемента с таким id не нашлось.\n"); + } } } diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 7c78acd..6bc4427 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -21,7 +21,6 @@ public int add(HumanBeing newHuman) { humanCollection.add(newHuman); generator.generateID(newHuman); generator.generateCreationDate(newHuman); - System.out.print("Ура Ура! Элемент добавлен в коллекцию!\n"); return availableId++; } @@ -44,7 +43,6 @@ public void update(int id, HumanBeing updatedHuman) { existedHuman.setMood(updatedHuman.getMood()); existedHuman.setCar(updatedHuman.getCar()); } - System.out.print("Ура ура! Элемент обновлён!\n"); } @Override @@ -53,7 +51,6 @@ public void remove(int id) { if(existedHuman != null) { humanCollection.remove(existedHuman); } - System.out.print("Эхб элемент удалили...\n"); } /** diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 42f805a..b02bbf4 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -17,7 +17,6 @@ */ public class AskInput { private static boolean friendlyInterface; - private Boolean booleanInput; /** * Метод, позволяющй включить дружественный интерфейс @@ -25,19 +24,15 @@ public class AskInput { */ public static void turnOnFriendly() throws RuntimeException { InputHandler inputHandler = new ConsoleInputHandler(); - System.out.println("Включить дружелюбный интерфейс?"); + System.out.println("Включить дружественный интерфейс?"); String input = inputHandler.read().toLowerCase(); try { - if (input.equals("true") || input.equals("yes") || input.equals("да")) { - friendlyInterface = true; - } else if (input.equals("false") || input.equals("no") || input.equals("нет")) { - friendlyInterface = false; - } else { - throw new RuntimeException("Вы что-то не то ввели, пожалуйста, повторите попытку.\n" + - "Вы можете ввести следующее: \"да\" \"yes\" \"true\" \"нет\" \"no\" \"false\"\n\n"); - } - } catch (RuntimeException e) { - System.out.println(e.getMessage()); + friendlyInterface = getBooleanInput(input); + } catch(NumberFormatException e) { + System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); + turnOnFriendly(); + } catch (IllegalArgumentException e) { + System.err.print("Программа не понимает вашего ответа. Повторите попытку.\n"); turnOnFriendly(); } } From 4b888b1416b4c6f04f0637ecec4aae6cb4abe595 Mon Sep 17 00:00:00 2001 From: Liza Date: Thu, 17 Mar 2022 00:37:09 +0300 Subject: [PATCH 28/40] =?UTF-8?q?=D0=91=D0=BE=D0=BB=D1=8C=D1=88=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=20=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B0=20FileInputHandler=20=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=D1=83=20AskInput.=20=D0=9A=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D1=8F=20=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Script | 26 +++++++++++++ src/commands/Command.java | 2 - src/commands/ScriptCommand.java | 8 +++- src/handlers/ConsoleInputHandler.java | 2 +- src/handlers/FileInputHandler.java | 48 ++++++++++------------- src/handlers/InputHandler.java | 4 +- src/service/AskInput.java | 56 +++++++++++++-------------- src/service/CommandManager.java | 7 +++- 8 files changed, 88 insertions(+), 65 deletions(-) create mode 100644 auxiliary/Script diff --git a/auxiliary/Script b/auxiliary/Script new file mode 100644 index 0000000..345b22c --- /dev/null +++ b/auxiliary/Script @@ -0,0 +1,26 @@ +add +cat +nyan-cat +5 +12 +True +True +4 +5.123 +sadness +McQueen +True +update +1 +dog +piesek +2 +15 +True +False +4 +6.22 +longing +BrokeCar +False +remove_by_id 1 \ No newline at end of file diff --git a/src/commands/Command.java b/src/commands/Command.java index 681225f..47b13e2 100644 --- a/src/commands/Command.java +++ b/src/commands/Command.java @@ -2,8 +2,6 @@ import handlers.InputHandler; -import java.util.ArrayList; - public interface Command { void execute(InputHandler reader); } diff --git a/src/commands/ScriptCommand.java b/src/commands/ScriptCommand.java index c281c6f..8e2e3c1 100644 --- a/src/commands/ScriptCommand.java +++ b/src/commands/ScriptCommand.java @@ -4,14 +4,18 @@ import service.AskInput; import service.CommandManager; +import java.io.BufferedInputStream; +import java.io.FileInputStream; + public class ScriptCommand implements Command{ private final AskInput request = new AskInput(); @Override public void execute(InputHandler reader) { // считываем имя файла - String usableFile = request.askFileName(reader); + FileInputStream usableFile = request.askFileName(reader); + BufferedInputStream bufferedInput = new BufferedInputStream(usableFile); // меняем тип считывания на файловый - CommandManager.turnOnFile(); + CommandManager.turnOnFile(bufferedInput); } } diff --git a/src/handlers/ConsoleInputHandler.java b/src/handlers/ConsoleInputHandler.java index 11627d9..553ff2a 100644 --- a/src/handlers/ConsoleInputHandler.java +++ b/src/handlers/ConsoleInputHandler.java @@ -9,7 +9,7 @@ public class ConsoleInputHandler extends InputHandler { * @return считанная строка без лишних пробелов */ @Override - public String read() { + public String readInput() { // ВНИМАНИЕ!!!! Считывает только первое слово введённой строки. Остальные данные игнорируются. String input = scanner.nextLine().trim().split(" ")[0]; return input; diff --git a/src/handlers/FileInputHandler.java b/src/handlers/FileInputHandler.java index 1c3800e..a130e26 100644 --- a/src/handlers/FileInputHandler.java +++ b/src/handlers/FileInputHandler.java @@ -1,41 +1,33 @@ package handlers; import java.io.*; -import java.util.Scanner; public class FileInputHandler extends InputHandler { - private final Scanner scanner = new Scanner(System.in); - StringBuilder builder = new StringBuilder(); + private final BufferedInputStream bufferedInput; + private String word = ""; + + public FileInputHandler(BufferedInputStream bufferedInput) { + this.bufferedInput = bufferedInput; + } + /** - * Переопределённый метод для считывания с файла, проверяющий ошибки - * @return строки указанного файла + * Переопределённый метод для считывания с файла + * @return одно слово указанного файла */ @Override - public String read() { - - builder.delete(0, builder.length()); - String input = removeSpaces(scanner.nextLine()); - if(input.isEmpty()) { - throw new RuntimeException("Необходимо указать путь к файлу."); - } - File file = new File(input); - + public String readInput() { + int i; try { - FileInputStream fileInput = new FileInputStream(file); - BufferedInputStream bufferedInput = new BufferedInputStream(fileInput); - - int i; - while ((i = bufferedInput.read()) != -1) { - builder.append((char) i); + i = bufferedInput.read(); + while(i != -1) { + if(i == ' ' || i == '\n') break; + word += (char)i; + i = bufferedInput.read(); } - - bufferedInput.close(); - } catch (FileNotFoundException e) { - System.out.println("Нужного файла не обнаружено."); - } catch (IOException e){ - System.out.println("Возникла техническая шоколадка. Пожалуйста, повторите попытку."); + } catch (IOException e) { + System.err.print("Произошла ошибка.\n"); + return null; } - - return builder.toString(); + return word; } } diff --git a/src/handlers/InputHandler.java b/src/handlers/InputHandler.java index a7ea059..c0c8447 100644 --- a/src/handlers/InputHandler.java +++ b/src/handlers/InputHandler.java @@ -1,11 +1,11 @@ package handlers; -import java.util.ArrayList; +import java.io.IOException; public abstract class InputHandler { /** * Абстрактный метод read, переопределяемый для двух разных типов считывания - с консоли и с файла */ - public abstract String read(); + public abstract String readInput(); } diff --git a/src/service/AskInput.java b/src/service/AskInput.java index b02bbf4..ca38546 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -6,10 +6,8 @@ import source.Coordinates; import source.Mood; -import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.NoSuchElementException; /** * Класс, позволяющий переключать дружественный интерфейс для быстрой тестировки @@ -25,7 +23,7 @@ public class AskInput { public static void turnOnFriendly() throws RuntimeException { InputHandler inputHandler = new ConsoleInputHandler(); System.out.println("Включить дружественный интерфейс?"); - String input = inputHandler.read().toLowerCase(); + String input = inputHandler.readInput().toLowerCase(); try { friendlyInterface = getBooleanInput(input); } catch(NumberFormatException e) { @@ -40,7 +38,7 @@ public static void turnOnFriendly() throws RuntimeException { /** * Метод, позволяющий выключить дружественный интерфейс */ - public static void turnOffFriendly(){ + public static void turnOffFriendly() { friendlyInterface = false; } @@ -54,7 +52,7 @@ public static String askCommand(InputHandler in) { while(command == null) { printMessage("Введите команду:"); try { - command = in.read(); + command = in.readInput(); CommandType.valueOf(command.toUpperCase()).ordinal(); } catch(IllegalArgumentException e) { if(!command.isEmpty()) System.err.print("Команада введена неверно. Повторите попытку.\n"); @@ -75,7 +73,7 @@ public static int askId(InputHandler in) { while(input == null) { printMessage("Введите id: "); try { - input = in.read(); + input = in.readInput(); if(Integer.parseInt(input) <= 0) throw new NumberFormatException(); } catch(NumberFormatException e) { if(!input.isEmpty()) System.err.print("Id введен неверно. Повторите попытку.\n"); @@ -91,7 +89,7 @@ public String askName(InputHandler in) { while(input == null) { printMessage("Введите имя: "); try { - input = in.read(); + input = in.readInput(); if(input.isEmpty()) throw new IllegalArgumentException(); } catch (IllegalArgumentException e) { System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); @@ -106,7 +104,7 @@ public String askSoundtrackName(InputHandler in) { while(input == null) { printMessage("Введите название саундтрека:"); try { - input = in.read(); + input = in.readInput(); if(input.isEmpty()) throw new IllegalArgumentException(); } catch (IllegalArgumentException e) { System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); @@ -121,7 +119,7 @@ public Long askMinutesOfWaiting(InputHandler in){ while(input == null) { printMessage("Введите минуты ожидания: "); try { - input = in.read(); + input = in.readInput(); Long.parseLong(input); } catch(NumberFormatException e) { if(!input.isEmpty()) System.err.print("Поле minutesOfWaiting введено неверно. Повторите попытку.\n"); @@ -137,7 +135,7 @@ public int askImpactSpeed(InputHandler in) { while(input == null) { printMessage("Введите скорость: "); try { - input = in.read(); + input = in.readInput(); Integer.parseInt(input); } catch(NumberFormatException e) { if(!input.isEmpty()) System.err.print("Поле impactSpeed введено неверно. Повторите попытку.\n"); @@ -153,7 +151,7 @@ public Boolean askRealHero(InputHandler in) { while(input == null) { printMessage("Был героем?"); try { - input = in.read(); + input = in.readInput(); getBooleanInput(input); } catch(NumberFormatException e) { System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); @@ -171,7 +169,7 @@ public Boolean askHasToothpick(InputHandler in) { while(input == null) { printMessage("Пользовался зубочисткой?"); try { - input = in.read(); + input = in.readInput(); getBooleanInput(input); } catch(NumberFormatException e) { System.out.print("\u001B[33mВы ввели пустую строку. Поле примет значение null.\u001B[0m\n"); @@ -190,7 +188,7 @@ public Coordinates askCoordinates(InputHandler in) { while(input == null) { printMessage("Введите координату x: "); try { - input = in.read(); + input = in.readInput(); Integer.parseInt(input); } catch(NumberFormatException e) { if(!input.isEmpty()) System.err.print("Координата x введена неверно. Повторите попытку.\n"); @@ -203,7 +201,7 @@ public Coordinates askCoordinates(InputHandler in) { while(input == null) { printMessage("Введите координату y: "); try { - input = in.read(); + input = in.readInput(); if(Float.parseFloat(input) < -188) throw new NumberFormatException(); } catch(NumberFormatException e) { if(!input.isEmpty()) System.err.print("Координата y введена неверно. Повторите попытку.\n"); @@ -220,7 +218,7 @@ public Mood askMood(InputHandler in){ while(input == null) { printMessage("Введите состояние персонажа: "); try { - input = in.read(); + input = in.readInput(); if(input.isEmpty()) throw new NumberFormatException(); Mood.valueOf(input.toUpperCase()); } catch(NumberFormatException e) { @@ -241,7 +239,7 @@ public Car askCar(InputHandler in){ while(input == null) { printMessage("Введите её название: "); try { - input = in.read(); + input = in.readInput(); name = input; if(input.isEmpty()) throw new IllegalArgumentException(); } catch(IllegalArgumentException e) { @@ -253,7 +251,7 @@ public Car askCar(InputHandler in){ while(input == null) { printMessage("Машина была крутой? "); try { - input = in.read(); + input = in.readInput(); getBooleanInput(input); } catch(NumberFormatException e) { System.err.print("Вы ввели пустую строку. Повторите попытку.\n"); @@ -267,17 +265,19 @@ public Car askCar(InputHandler in){ return new Car(name, cool); } - public String askFileName(InputHandler in) { - String fileName = in.read(); - File file = new File(fileName); - try { - if(!file.exists()) throw new FileNotFoundException("Файл не найден.\n"); - if(file.length() == 0) throw new NoSuchElementException("Файл пуст.\n"); - if(!file.canRead()) throw new IOException("Нет прав на чтение.\n"); - } catch(NoSuchElementException | IOException e) { - System.err.print(e.getMessage()); + public FileInputStream askFileName(InputHandler in) { + FileInputStream fileInput = null; + while(fileInput == null) { + printMessage("Введите путь до файла, который хотите прочесть.\n"); + String fileName = in.readInput(); + try { + fileInput = new FileInputStream(fileName); + } catch (FileNotFoundException e) { + printMessage("Файл не найден. Проверьте корректность указанного пути.\n"); + fileInput = null; + } } - return fileName; + return fileInput; } /** diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 64f93a7..470374e 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -3,8 +3,11 @@ import commands.*; import dao.*; import handlers.ConsoleInputHandler; +import handlers.FileInputHandler; import handlers.InputHandler; +import java.io.BufferedInputStream; + /** * Класс обработчик, определяющий команду и ее поведение по отношению к входным данным */ @@ -31,8 +34,8 @@ public static void turnOnConsole() { * Меняет тип считывания на считывание с файла * Отключает дружетвенный интерфейс, если он включён */ - public static void turnOnFile() { - reader = new ConsoleInputHandler(); + public static void turnOnFile(BufferedInputStream bufferedInput) { + reader = new FileInputHandler(bufferedInput); AskInput.turnOffFriendly(); } From 78dafe125a11394820ef0087659aafb0b7ce52a4 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 18:48:21 +0300 Subject: [PATCH 29/40] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dao/ArrayDequeDAO.java | 5 +++-- src/service/CommandManager.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 6bc4427..0855fb2 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -9,10 +9,10 @@ public final class ArrayDequeDAO implements DAO { private static int availableId = 1; private final Deque humanCollection = new ArrayDeque<>(); - private Generator generator = new Generator(); + private final Generator generator = new Generator(); /** - * Добавление нового элемента у коллекцию + * Добавление нового элемента в коллекцию * @param newHuman - новый элемент коллекции * @return - id нового элемента коллекции */ @@ -21,6 +21,7 @@ public int add(HumanBeing newHuman) { humanCollection.add(newHuman); generator.generateID(newHuman); generator.generateCreationDate(newHuman); + return availableId++; } diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 470374e..f1b70d5 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -31,8 +31,8 @@ public static void turnOnConsole() { } /** - * Меняет тип считывания на считывание с файла - * Отключает дружетвенный интерфейс, если он включён + * Меняет тип считывания на считывание с файла. + * Отключает дружественный интерфейс, если он включён */ public static void turnOnFile(BufferedInputStream bufferedInput) { reader = new FileInputHandler(bufferedInput); From 2adf7bc8d80fde691a91758f904aab4cd6dc6d3e Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 18:49:04 +0300 Subject: [PATCH 30/40] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=20help?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/HelpCommand.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/commands/HelpCommand.java diff --git a/src/commands/HelpCommand.java b/src/commands/HelpCommand.java new file mode 100644 index 0000000..bfd08e2 --- /dev/null +++ b/src/commands/HelpCommand.java @@ -0,0 +1,30 @@ +package commands; + +import handlers.InputHandler; + +public class HelpCommand implements Command{ + + @Override + public void execute(InputHandler reader) { + System.out.print(""" + Доступные команды: + help - вывести справку по доступным командам + info - вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.) + show - вывести в стандартный поток вывода все элементы коллекции в строковом представлении + add {element} - добавить новый элемент в коллекцию + update id {element} - обновить значение элемента коллекции, id которого равен заданному + remove_by_id id - удалить элемент из коллекции по его id + clear - очистить коллекцию + save - сохранить коллекцию в файл + execute_script file_name - считать и исполнить скрипт из указанного файла + exit - завершить программу (без сохранения в файл) + head - вывести первый элемент коллекции + remove_head - вывести первый элемент коллекции и удалить его + remove_greater {element} - удалить из коллекции все элементы, превышающие заданный + filter_by_minutes_of_waiting minutesOfWaiting - вывести элементы, значение поля minutesOfWaiting которых равно заданному + filter_greater_than_impact_speed impactSpeed - вывести элементы, значение поля impactSpeed которых больше заданного + print_unique_impact_speed - вывести уникальные значения поля impactSpeed всех элементов в коллекции + + """); + } +} From 625977db719c6a5517aa3ade8300bbe61e23c8a3 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 18:55:43 +0300 Subject: [PATCH 31/40] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B8=20javadoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/HelpCommand.java | 4 ++++ src/commands/ReadCommand.java | 4 ++++ src/commands/RemoveCommand.java | 4 ++++ src/commands/ScriptCommand.java | 4 ++++ src/commands/UpdateCommand.java | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/src/commands/HelpCommand.java b/src/commands/HelpCommand.java index bfd08e2..b4e2a7a 100644 --- a/src/commands/HelpCommand.java +++ b/src/commands/HelpCommand.java @@ -2,6 +2,10 @@ import handlers.InputHandler; +/** + * Класс команды help + * Выводит справку по доступным командам + */ public class HelpCommand implements Command{ @Override diff --git a/src/commands/ReadCommand.java b/src/commands/ReadCommand.java index c678dc6..1f6997e 100644 --- a/src/commands/ReadCommand.java +++ b/src/commands/ReadCommand.java @@ -6,6 +6,10 @@ import java.util.ArrayList; +/** + * Класс команды help + * Выводит первый элемент коллекции + */ public class ReadCommand implements Command { private final DAO arrayDequeDAO; diff --git a/src/commands/RemoveCommand.java b/src/commands/RemoveCommand.java index d4449ba..8f2c1b4 100644 --- a/src/commands/RemoveCommand.java +++ b/src/commands/RemoveCommand.java @@ -4,6 +4,10 @@ import handlers.InputHandler; import service.AskInput; +/** + * Класс команды remove_by_id + * Удаляет элемент из коллекции по его id + */ public class RemoveCommand implements Command { private final DAO arrayDequeDAO; diff --git a/src/commands/ScriptCommand.java b/src/commands/ScriptCommand.java index 8e2e3c1..6127b2c 100644 --- a/src/commands/ScriptCommand.java +++ b/src/commands/ScriptCommand.java @@ -7,6 +7,10 @@ import java.io.BufferedInputStream; import java.io.FileInputStream; +/** + * Класс команды execute_script file_name + * Считывает и исполняет скрипт из указанного файла + */ public class ScriptCommand implements Command{ private final AskInput request = new AskInput(); diff --git a/src/commands/UpdateCommand.java b/src/commands/UpdateCommand.java index 6b6dbb0..926d715 100644 --- a/src/commands/UpdateCommand.java +++ b/src/commands/UpdateCommand.java @@ -6,6 +6,10 @@ import service.FormedManager; import source.HumanBeing; +/** + * Класс команды update id {element} + * Обновляет значение элемента коллекции, id которого равен заданному + */ public class UpdateCommand implements Command { private final DAO arrayDequeDAO; private final FormedManager manager = new FormedManager(); From 7d76d45160cc4ddf1149d90a348d8fffab2615d3 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 21:15:39 +0300 Subject: [PATCH 32/40] =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D1=87=D0=BA?= =?UTF-8?q?=D1=83=20=D0=BF=D1=83=D1=81=D1=82=D1=83=D1=8E=20=D1=83=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dao/ArrayDequeDAO.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index 0855fb2..e8fe84b 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -21,7 +21,6 @@ public int add(HumanBeing newHuman) { humanCollection.add(newHuman); generator.generateID(newHuman); generator.generateCreationDate(newHuman); - return availableId++; } From 3379c5858086509fc4fede5f8a755ae36536a253 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 21:17:51 +0300 Subject: [PATCH 33/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20head?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/HeadCommand.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/commands/HeadCommand.java diff --git a/src/commands/HeadCommand.java b/src/commands/HeadCommand.java new file mode 100644 index 0000000..f962f80 --- /dev/null +++ b/src/commands/HeadCommand.java @@ -0,0 +1,28 @@ +package commands; + +import handlers.InputHandler; +import source.HumanBeing; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * Класс команды head + * Выводит первый элемент коллекции + */ +public class HeadCommand implements Command{ + private Deque humanCollection = new ArrayDeque<>(); + + HeadCommand(Deque humanCollection){ + this.humanCollection = humanCollection; + } + + @Override + public void execute(InputHandler reader) { + if (!(humanCollection.isEmpty())){ + System.out.print("head: Первый элемент коллекции - " + humanCollection.getFirst()); + } else { + System.err.print("head: Sorry, коллекция пуста.\n"); + } + } +} From 71b73e1ad7589ecc15f7ee82284d8723fe9b528e Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 21:18:02 +0300 Subject: [PATCH 34/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20show?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/ShowCommand.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/commands/ShowCommand.java diff --git a/src/commands/ShowCommand.java b/src/commands/ShowCommand.java new file mode 100644 index 0000000..1af7005 --- /dev/null +++ b/src/commands/ShowCommand.java @@ -0,0 +1,32 @@ +package commands; + +import dao.DAO; +import handlers.InputHandler; +import source.HumanBeing; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * Класс команды show + * Выводит в стандартный поток вывода все элементы коллекции в строковом представлении + */ +public class ShowCommand implements Command{ + private Deque humanCollection = new ArrayDeque<>(); + private final DAO arrayDequeDAO; + + ShowCommand(Deque humanCollection, DAO arrayDequeDAO){ + this.humanCollection = humanCollection; + this.arrayDequeDAO = arrayDequeDAO; + } + + @Override + public void execute(InputHandler reader) { + int id = humanCollection.getLast().getId(); + for (int i=0; i Date: Thu, 17 Mar 2022 21:35:34 +0300 Subject: [PATCH 35/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20remove=5Fhead?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/RemoveHeadCommand.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/commands/RemoveHeadCommand.java diff --git a/src/commands/RemoveHeadCommand.java b/src/commands/RemoveHeadCommand.java new file mode 100644 index 0000000..76b6c78 --- /dev/null +++ b/src/commands/RemoveHeadCommand.java @@ -0,0 +1,28 @@ +package commands; + +import handlers.InputHandler; +import source.HumanBeing; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * Класс команды help + * Выводит первый элемент коллекции и удалить его + */ +public class RemoveHeadCommand implements Command{ + private Deque humanCollection = new ArrayDeque<>(); + + RemoveHeadCommand(Deque humanCollection){ + this.humanCollection = humanCollection; + } + + @Override + public void execute(InputHandler reader) { + if (!(humanCollection.isEmpty())){ + System.out.print("remove_head: Первый элемент коллекции - " + humanCollection.removeFirst()); + } else { + System.err.print("remove_head: Sorry, коллекция пуста.\n"); + } + } +} From eb1229125729bf82520e49e4c723e8667472a5f5 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 21:44:36 +0300 Subject: [PATCH 36/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20clear?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/ClearCommand.java | 29 +++++++++++++++++++++++++++++ src/commands/HeadCommand.java | 2 +- src/commands/RemoveHeadCommand.java | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/commands/ClearCommand.java diff --git a/src/commands/ClearCommand.java b/src/commands/ClearCommand.java new file mode 100644 index 0000000..d5646ff --- /dev/null +++ b/src/commands/ClearCommand.java @@ -0,0 +1,29 @@ +package commands; + +import handlers.InputHandler; +import source.HumanBeing; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * Класс команды clear + * Очищает коллекцию + */ +public class ClearCommand implements Command{ + private Deque humanCollection = new ArrayDeque<>(); + + public ClearCommand(Deque humanCollection){ + this.humanCollection = humanCollection; + } + + @Override + public void execute(InputHandler reader) { + if (!(humanCollection.isEmpty())){ + humanCollection.clear(); + System.out.print("clear: Коллекция очищена!\n"); + } else { + System.err.print("clear: Коллекция и так пуста.\n"); + } + } +} diff --git a/src/commands/HeadCommand.java b/src/commands/HeadCommand.java index f962f80..3621a2e 100644 --- a/src/commands/HeadCommand.java +++ b/src/commands/HeadCommand.java @@ -20,7 +20,7 @@ public class HeadCommand implements Command{ @Override public void execute(InputHandler reader) { if (!(humanCollection.isEmpty())){ - System.out.print("head: Первый элемент коллекции - " + humanCollection.getFirst()); + System.out.print("head: Первый элемент коллекции - " + humanCollection.getFirst() + "\n"); } else { System.err.print("head: Sorry, коллекция пуста.\n"); } diff --git a/src/commands/RemoveHeadCommand.java b/src/commands/RemoveHeadCommand.java index 76b6c78..c277d22 100644 --- a/src/commands/RemoveHeadCommand.java +++ b/src/commands/RemoveHeadCommand.java @@ -20,7 +20,7 @@ public class RemoveHeadCommand implements Command{ @Override public void execute(InputHandler reader) { if (!(humanCollection.isEmpty())){ - System.out.print("remove_head: Первый элемент коллекции - " + humanCollection.removeFirst()); + System.out.print("remove_head: Первый элемент коллекции - " + humanCollection.removeFirst() + "\n"); } else { System.err.print("remove_head: Sorry, коллекция пуста.\n"); } From de303f28dffa9aa5ed792536cbfc84d74da46663 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Thu, 17 Mar 2022 23:19:41 +0300 Subject: [PATCH 37/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/InfoCommand.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/commands/InfoCommand.java diff --git a/src/commands/InfoCommand.java b/src/commands/InfoCommand.java new file mode 100644 index 0000000..7249830 --- /dev/null +++ b/src/commands/InfoCommand.java @@ -0,0 +1,24 @@ +package commands; + +import handlers.InputHandler; +import source.HumanBeing; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * Класс команды info + * Вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.) + */ +public class InfoCommand implements Command { + private Deque humanCollection = new ArrayDeque<>(); + + InfoCommand(Deque humanCollection){ + this.humanCollection = humanCollection; + } + + @Override + public void execute(InputHandler reader) { + System.out.print("info: Коллекция ArrayDeque, создана:" + "..." + "\n" + "Количество элементов: " + humanCollection.size() + "\n"); + } +} From 1ea1aa806409bbe46d6dc3b3da7127228f06fb2f Mon Sep 17 00:00:00 2001 From: apchhiv Date: Fri, 18 Mar 2022 00:09:16 +0300 Subject: [PATCH 38/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D0=BC=D0=B5=D0=B9=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/HeadCommand.java | 2 +- src/commands/HelpCommand.java | 37 +++++++++++++---------------- src/commands/InfoCommand.java | 4 ++-- src/commands/RemoveHeadCommand.java | 2 +- src/commands/ShowCommand.java | 12 ++++++---- src/service/CommandManager.java | 18 +++++++++++--- 6 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/commands/HeadCommand.java b/src/commands/HeadCommand.java index 3621a2e..123d0fb 100644 --- a/src/commands/HeadCommand.java +++ b/src/commands/HeadCommand.java @@ -13,7 +13,7 @@ public class HeadCommand implements Command{ private Deque humanCollection = new ArrayDeque<>(); - HeadCommand(Deque humanCollection){ + public HeadCommand(Deque humanCollection){ this.humanCollection = humanCollection; } diff --git a/src/commands/HelpCommand.java b/src/commands/HelpCommand.java index b4e2a7a..3a1c364 100644 --- a/src/commands/HelpCommand.java +++ b/src/commands/HelpCommand.java @@ -10,25 +10,22 @@ public class HelpCommand implements Command{ @Override public void execute(InputHandler reader) { - System.out.print(""" - Доступные команды: - help - вывести справку по доступным командам - info - вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.) - show - вывести в стандартный поток вывода все элементы коллекции в строковом представлении - add {element} - добавить новый элемент в коллекцию - update id {element} - обновить значение элемента коллекции, id которого равен заданному - remove_by_id id - удалить элемент из коллекции по его id - clear - очистить коллекцию - save - сохранить коллекцию в файл - execute_script file_name - считать и исполнить скрипт из указанного файла - exit - завершить программу (без сохранения в файл) - head - вывести первый элемент коллекции - remove_head - вывести первый элемент коллекции и удалить его - remove_greater {element} - удалить из коллекции все элементы, превышающие заданный - filter_by_minutes_of_waiting minutesOfWaiting - вывести элементы, значение поля minutesOfWaiting которых равно заданному - filter_greater_than_impact_speed impactSpeed - вывести элементы, значение поля impactSpeed которых больше заданного - print_unique_impact_speed - вывести уникальные значения поля impactSpeed всех элементов в коллекции - - """); + System.out.print("Доступные команды: \n" + + "help - вывести справку по доступным командам \n" + + "info - вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.) \n" + + "show - вывести в стандартный поток вывода все элементы коллекции в строковом представлении \n" + + "add {element} - добавить новый элемент в коллекцию \n" + + "update id {element} - обновить значение элемента коллекции, id которого равен заданному \n" + + "remove_by_id id - удалить элемент из коллекции по его id \n" + + "clear - очистить коллекцию \n" + + "save - сохранить коллекцию в файл \n" + + "execute_script file_name - считать и исполнить скрипт из указанного файла \n" + + "exit - завершить программу (без сохранения в файл) \n" + + "head - вывести первый элемент коллекции \n" + + "remove_head - вывести первый элемент коллекции и удалить его \n" + + "remove_greater {element} - удалить из коллекции все элементы, превышающие заданный \n" + + "filter_by_minutes_of_waiting minutesOfWaiting - вывести элементы, значение поля minutesOfWaiting которых равно заданному \n" + + "filter_greater_than_impact_speed impactSpeed - вывести элементы, значение поля impactSpeed которых больше заданного \n" + + "print_unique_impact_speed - вывести уникальные значения поля impactSpeed всех элементов в коллекции \n"); } } diff --git a/src/commands/InfoCommand.java b/src/commands/InfoCommand.java index 7249830..44a6576 100644 --- a/src/commands/InfoCommand.java +++ b/src/commands/InfoCommand.java @@ -13,12 +13,12 @@ public class InfoCommand implements Command { private Deque humanCollection = new ArrayDeque<>(); - InfoCommand(Deque humanCollection){ + public InfoCommand(Deque humanCollection){ this.humanCollection = humanCollection; } @Override public void execute(InputHandler reader) { - System.out.print("info: Коллекция ArrayDeque, создана:" + "..." + "\n" + "Количество элементов: " + humanCollection.size() + "\n"); + System.out.print("info: Коллекция ArrayDeque, создана: " + "..." + "\n" + "Количество элементов: " + humanCollection.size() + "\n"); } } diff --git a/src/commands/RemoveHeadCommand.java b/src/commands/RemoveHeadCommand.java index c277d22..392f926 100644 --- a/src/commands/RemoveHeadCommand.java +++ b/src/commands/RemoveHeadCommand.java @@ -13,7 +13,7 @@ public class RemoveHeadCommand implements Command{ private Deque humanCollection = new ArrayDeque<>(); - RemoveHeadCommand(Deque humanCollection){ + public RemoveHeadCommand(Deque humanCollection){ this.humanCollection = humanCollection; } diff --git a/src/commands/ShowCommand.java b/src/commands/ShowCommand.java index 1af7005..89bf2fb 100644 --- a/src/commands/ShowCommand.java +++ b/src/commands/ShowCommand.java @@ -15,7 +15,7 @@ public class ShowCommand implements Command{ private Deque humanCollection = new ArrayDeque<>(); private final DAO arrayDequeDAO; - ShowCommand(Deque humanCollection, DAO arrayDequeDAO){ + public ShowCommand(Deque humanCollection, DAO arrayDequeDAO){ this.humanCollection = humanCollection; this.arrayDequeDAO = arrayDequeDAO; } @@ -23,10 +23,14 @@ public class ShowCommand implements Command{ @Override public void execute(InputHandler reader) { int id = humanCollection.getLast().getId(); - for (int i=0; i humanCollection = new ArrayDeque<>(); private static final DAO database = new ArrayDequeDAO(); private static InputHandler reader; @@ -20,7 +24,11 @@ public class CommandManager { new UpdateCommand(database), // new ReadCommand(database), new RemoveCommand(database), - new ScriptCommand() + new ScriptCommand(), + new HelpCommand(), + new ShowCommand(humanCollection, database), + new ClearCommand(humanCollection), + new InfoCommand(humanCollection) }; /** @@ -48,7 +56,7 @@ public static void start() { /** * По полученной строке определяет команду и совершает её вызов - * @param command - уже прошедшая проверку строка, содержащая команду + * @param command уже прошедшая проверку строка, содержащая команду */ private static void whichCommand(String command) { int commandIndex = CommandType.valueOf(command.toUpperCase()).ordinal(); @@ -64,5 +72,9 @@ enum CommandType { ADD, UPDATE, REMOVE_BY_ID, - EXECUTE_SCRIPT; + EXECUTE_SCRIPT, + HELP, + SHOW, + CLEAR, + INFO; } \ No newline at end of file From 162220a6e120343022534c82651d79b1cc12cc95 Mon Sep 17 00:00:00 2001 From: apchhiv Date: Sun, 20 Mar 2022 00:34:43 +0300 Subject: [PATCH 39/40] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B8=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D1=83=20+=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=B0=D1=80=D0=BE?= =?UTF-8?q?=D1=87=D0=BA=D0=B0=20=D0=B2=20=D0=B4=D0=B0=D0=BE=20+=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20toString=20?= =?UTF-8?q?=D0=B2=20source=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=D1=85=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 3 ++- src/commands/ClearCommand.java | 21 +++++++++++---------- src/commands/HeadCommand.java | 14 ++++++-------- src/commands/InfoCommand.java | 13 +++++-------- src/commands/RemoveHeadCommand.java | 16 +++++++--------- src/commands/ShowCommand.java | 20 +++++++------------- src/dao/ArrayDequeDAO.java | 15 +++++++++++++++ src/dao/DAO.java | 4 +++- src/service/AskInput.java | 2 +- src/service/CommandManager.java | 25 ++++++++++++++----------- src/source/Car.java | 12 ++++++++++++ src/source/Coordinates.java | 7 ++++++- src/source/HumanBeing.java | 7 +++++++ 13 files changed, 96 insertions(+), 63 deletions(-) diff --git a/auxiliary/Tests b/auxiliary/Tests index 9c1c564..c83bc0a 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -8,7 +8,8 @@ COMMAND //может быть null //может быть null - //может быть null + //может быть null + Тест 1: add diff --git a/src/commands/ClearCommand.java b/src/commands/ClearCommand.java index d5646ff..9417ca9 100644 --- a/src/commands/ClearCommand.java +++ b/src/commands/ClearCommand.java @@ -1,27 +1,28 @@ package commands; +import dao.DAO; import handlers.InputHandler; -import source.HumanBeing; - -import java.util.ArrayDeque; -import java.util.Deque; /** * Класс команды clear * Очищает коллекцию */ public class ClearCommand implements Command{ - private Deque humanCollection = new ArrayDeque<>(); + private final DAO arrayDequeDAO; - public ClearCommand(Deque humanCollection){ - this.humanCollection = humanCollection; + public ClearCommand(DAO arrayDequeDAO){ + this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(InputHandler reader) { - if (!(humanCollection.isEmpty())){ - humanCollection.clear(); - System.out.print("clear: Коллекция очищена!\n"); + if (arrayDequeDAO.size() != 0) { + for (int i=0; i < arrayDequeDAO.getAvailableId(); i++){ + if (arrayDequeDAO.get(i) != null){ + arrayDequeDAO.remove(i); + } + } + System.out.print("clear: Коллекция успешно очищена.\n"); } else { System.err.print("clear: Коллекция и так пуста.\n"); } diff --git a/src/commands/HeadCommand.java b/src/commands/HeadCommand.java index 123d0fb..84e6c93 100644 --- a/src/commands/HeadCommand.java +++ b/src/commands/HeadCommand.java @@ -1,26 +1,24 @@ package commands; +import dao.DAO; import handlers.InputHandler; -import source.HumanBeing; -import java.util.ArrayDeque; -import java.util.Deque; /** * Класс команды head * Выводит первый элемент коллекции */ public class HeadCommand implements Command{ - private Deque humanCollection = new ArrayDeque<>(); + private final DAO arrayDequeDAO; - public HeadCommand(Deque humanCollection){ - this.humanCollection = humanCollection; + public HeadCommand(DAO arrayDequeDAO){ + this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(InputHandler reader) { - if (!(humanCollection.isEmpty())){ - System.out.print("head: Первый элемент коллекции - " + humanCollection.getFirst() + "\n"); + if (arrayDequeDAO.size() != 0) { + System.out.print("head: " + arrayDequeDAO.show() +"\n"); } else { System.err.print("head: Sorry, коллекция пуста.\n"); } diff --git a/src/commands/InfoCommand.java b/src/commands/InfoCommand.java index 44a6576..9e77107 100644 --- a/src/commands/InfoCommand.java +++ b/src/commands/InfoCommand.java @@ -1,24 +1,21 @@ package commands; +import dao.DAO; import handlers.InputHandler; -import source.HumanBeing; - -import java.util.ArrayDeque; -import java.util.Deque; /** * Класс команды info * Вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.) */ public class InfoCommand implements Command { - private Deque humanCollection = new ArrayDeque<>(); + private final DAO arrayDequeDAO; - public InfoCommand(Deque humanCollection){ - this.humanCollection = humanCollection; + public InfoCommand(DAO arrayDequeDAO){ + this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(InputHandler reader) { - System.out.print("info: Коллекция ArrayDeque, создана: " + "..." + "\n" + "Количество элементов: " + humanCollection.size() + "\n"); + System.out.print("info: Коллекция ArrayDeque, создана: " + "..." + "\n" + "Количество элементов: " + arrayDequeDAO.size() + "\n"); } } diff --git a/src/commands/RemoveHeadCommand.java b/src/commands/RemoveHeadCommand.java index 392f926..d714474 100644 --- a/src/commands/RemoveHeadCommand.java +++ b/src/commands/RemoveHeadCommand.java @@ -1,26 +1,24 @@ package commands; +import dao.DAO; import handlers.InputHandler; -import source.HumanBeing; - -import java.util.ArrayDeque; -import java.util.Deque; /** * Класс команды help * Выводит первый элемент коллекции и удалить его */ public class RemoveHeadCommand implements Command{ - private Deque humanCollection = new ArrayDeque<>(); + private final DAO arrayDequeDAO; - public RemoveHeadCommand(Deque humanCollection){ - this.humanCollection = humanCollection; + public RemoveHeadCommand(DAO arrayDequeDAO){ + this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(InputHandler reader) { - if (!(humanCollection.isEmpty())){ - System.out.print("remove_head: Первый элемент коллекции - " + humanCollection.removeFirst() + "\n"); + if (arrayDequeDAO.size() != 0) { + System.out.print("remove_head: элемент " + arrayDequeDAO.show() + " успешно удалён!\n"); + arrayDequeDAO.remove(arrayDequeDAO.show().getId()); } else { System.err.print("remove_head: Sorry, коллекция пуста.\n"); } diff --git a/src/commands/ShowCommand.java b/src/commands/ShowCommand.java index 89bf2fb..60155b1 100644 --- a/src/commands/ShowCommand.java +++ b/src/commands/ShowCommand.java @@ -2,35 +2,29 @@ import dao.DAO; import handlers.InputHandler; -import source.HumanBeing; - -import java.util.ArrayDeque; -import java.util.Deque; /** * Класс команды show * Выводит в стандартный поток вывода все элементы коллекции в строковом представлении */ public class ShowCommand implements Command{ - private Deque humanCollection = new ArrayDeque<>(); private final DAO arrayDequeDAO; - public ShowCommand(Deque humanCollection, DAO arrayDequeDAO){ - this.humanCollection = humanCollection; + public ShowCommand(DAO arrayDequeDAO){ this.arrayDequeDAO = arrayDequeDAO; } @Override public void execute(InputHandler reader) { - int id = humanCollection.getLast().getId(); - if (!(humanCollection.isEmpty())) { - for (int i = 0; i < id; i++) { + if (arrayDequeDAO.size() == 0) { + System.err.print("show: Коллекция пустая!\n"); + } else { + System.out.print("show: \n"); + for (int i = 0; i < arrayDequeDAO.getAvailableId(); i++) { if (arrayDequeDAO.get(i) != null) { - System.out.print(arrayDequeDAO.get(i)); + System.out.print(arrayDequeDAO.get(i).toString() + "\n"); } } - } else { - System.err.print("show: Коллекция пустая!\n"); } } } diff --git a/src/dao/ArrayDequeDAO.java b/src/dao/ArrayDequeDAO.java index e8fe84b..6407ff8 100644 --- a/src/dao/ArrayDequeDAO.java +++ b/src/dao/ArrayDequeDAO.java @@ -67,4 +67,19 @@ public HumanBeing get(int id) { } return null; } + + @Override + public HumanBeing show() { + return humanCollection.peek(); + } + + @Override + public int size(){ + return humanCollection.size(); + } + + @Override + public int getAvailableId(){ + return availableId; + } } diff --git a/src/dao/DAO.java b/src/dao/DAO.java index c74f98c..bf80e63 100644 --- a/src/dao/DAO.java +++ b/src/dao/DAO.java @@ -7,5 +7,7 @@ public interface DAO { void update(int id, HumanBeing human); void remove(int id); HumanBeing get(int id); -// Collection show(); + HumanBeing show(); + int size(); + int getAvailableId(); } diff --git a/src/service/AskInput.java b/src/service/AskInput.java index ca38546..907ca60 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -249,7 +249,7 @@ public Car askCar(InputHandler in){ } input = null; while(input == null) { - printMessage("Машина была крутой? "); + printMessage("Машина крутая? "); try { input = in.readInput(); getBooleanInput(input); diff --git a/src/service/CommandManager.java b/src/service/CommandManager.java index 3b9f5fd..596889e 100644 --- a/src/service/CommandManager.java +++ b/src/service/CommandManager.java @@ -15,20 +15,21 @@ * Класс обработчик, определяющий команду и ее поведение по отношению к входным данным */ public class CommandManager { - private static final Deque humanCollection = new ArrayDeque<>(); private static final DAO database = new ArrayDequeDAO(); private static InputHandler reader; private static final Command[] commands = { new AddCommand(database), - new UpdateCommand(database), + new ClearCommand(database), + new HeadCommand(database), + new HelpCommand(), + new InfoCommand(database), // new ReadCommand(database), new RemoveCommand(database), + new RemoveHeadCommand(database), new ScriptCommand(), - new HelpCommand(), - new ShowCommand(humanCollection, database), - new ClearCommand(humanCollection), - new InfoCommand(humanCollection) + new ShowCommand(database), + new UpdateCommand(database) }; /** @@ -70,11 +71,13 @@ private static void whichCommand(String command) { */ enum CommandType { ADD, - UPDATE, + CLEAR, + HEAD, + HELP, + INFO, REMOVE_BY_ID, + REMOVE_HEAD, EXECUTE_SCRIPT, - HELP, SHOW, - CLEAR, - INFO; -} \ No newline at end of file + UPDATE; +} diff --git a/src/source/Car.java b/src/source/Car.java index e49e2c8..0869bc3 100644 --- a/src/source/Car.java +++ b/src/source/Car.java @@ -39,4 +39,16 @@ public int compareTo(Object o) { } return result; } + + @Override + public String toString(){ + if (getCarName() != null){ + return getCarName() + ", "; + } + if (getCarCool()){ + return "крутая тачка"; + } else { + return "среднячок"; + } + } } diff --git a/src/source/Coordinates.java b/src/source/Coordinates.java index 0eb06e9..77c8415 100644 --- a/src/source/Coordinates.java +++ b/src/source/Coordinates.java @@ -8,4 +8,9 @@ public Coordinates(int x, Float y){ this.x = x; this.y = y; } -} \ No newline at end of file + + @Override + public String toString(){ + return "(" + x + ", " + y + ")"; + } +} diff --git a/src/source/HumanBeing.java b/src/source/HumanBeing.java index 8fd75b4..e42426c 100644 --- a/src/source/HumanBeing.java +++ b/src/source/HumanBeing.java @@ -155,4 +155,11 @@ public int compareTo(Object o) { } return result; } + + @Override + public String toString(){ + return "Имя - " + getName() + ", саундтрек - " + getSoundtrackName() + ", настроение - " + getMood().toString() + + ", машина - " + getCar().toString() + ", координаты - " + getCoordinates().toString() + ", статус героя - " + isRealHero() + + ", статус зубочистки - " + isHasToothpick() + ", ждёт " + getMinutesOfWaiting().toString() + " минут."; + } } From 58331f95ee3e552277e8bfef10318f7fa155928b Mon Sep 17 00:00:00 2001 From: apchhiv Date: Sun, 20 Mar 2022 18:08:58 +0300 Subject: [PATCH 40/40] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D1=8B=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B?= =?UTF-8?q?=20toString=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D1=8B=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auxiliary/Tests | 2 +- src/service/AskInput.java | 2 +- src/source/Car.java | 13 +++++++++---- src/source/HumanBeing.java | 20 ++++++++++++++++++-- src/source/Mood.java | 4 +++- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/auxiliary/Tests b/auxiliary/Tests index c83bc0a..bfd4c81 100644 --- a/auxiliary/Tests +++ b/auxiliary/Tests @@ -4,7 +4,7 @@ COMMAND - //может быть null + //может быть null //может быть null diff --git a/src/service/AskInput.java b/src/service/AskInput.java index 907ca60..79e8171 100644 --- a/src/service/AskInput.java +++ b/src/service/AskInput.java @@ -216,7 +216,7 @@ public Coordinates askCoordinates(InputHandler in) { public Mood askMood(InputHandler in){ String input = null; while(input == null) { - printMessage("Введите состояние персонажа: "); + printMessage("Введите состояние персонажа (sadness, longing, gloom or rage): "); try { input = in.readInput(); if(input.isEmpty()) throw new NumberFormatException(); diff --git a/src/source/Car.java b/src/source/Car.java index 0869bc3..5b2e27d 100644 --- a/src/source/Car.java +++ b/src/source/Car.java @@ -40,15 +40,20 @@ public int compareTo(Object o) { return result; } - @Override - public String toString(){ + private String getStringName(){ if (getCarName() != null){ return getCarName() + ", "; + } else { + return ""; } + } + + @Override + public String toString(){ if (getCarCool()){ - return "крутая тачка"; + return getStringName() + "крутая тачка"; } else { - return "среднячок"; + return getStringName() + "среднячок"; } } } diff --git a/src/source/HumanBeing.java b/src/source/HumanBeing.java index e42426c..db1267b 100644 --- a/src/source/HumanBeing.java +++ b/src/source/HumanBeing.java @@ -156,10 +156,26 @@ public int compareTo(Object o) { return result; } + private String getStringMood(){ + if (getMood() == null) { + return "нет"; + } else { + return getMood().toString(); + } + } + + private String getStringToothpick(){ + if (hasToothpick == null){ + return "нет"; + } else { + return String.valueOf(isHasToothpick()); + } + } + @Override public String toString(){ - return "Имя - " + getName() + ", саундтрек - " + getSoundtrackName() + ", настроение - " + getMood().toString() + return "Имя - " + getName() + ", саундтрек - " + getSoundtrackName() + ", настроение - " + getStringMood() + ", машина - " + getCar().toString() + ", координаты - " + getCoordinates().toString() + ", статус героя - " + isRealHero() - + ", статус зубочистки - " + isHasToothpick() + ", ждёт " + getMinutesOfWaiting().toString() + " минут."; + + ", статус зубочистки - " + getStringToothpick() + ", ждёт " + getMinutesOfWaiting().toString() + " минут(ы)."; } } diff --git a/src/source/Mood.java b/src/source/Mood.java index 01cb50f..1096b7d 100644 --- a/src/source/Mood.java +++ b/src/source/Mood.java @@ -4,5 +4,7 @@ public enum Mood { SADNESS, LONGING, GLOOM, - RAGE + RAGE; + + }