diff --git a/Notes.md b/Notes.md
deleted file mode 100644
index faf35ae..0000000
--- a/Notes.md
+++ /dev/null
@@ -1,4 +0,0 @@
-### Этапы работы программы
-
-1. Проверка файла с базой данных
-2. Пользовательский ввод
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 31ccdfb..73f1f6f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,11 @@
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.6.3
+
diff --git a/src/main/java/me/zinch/App.java b/src/main/java/me/zinch/App.java
index 473bff5..80dfc13 100644
--- a/src/main/java/me/zinch/App.java
+++ b/src/main/java/me/zinch/App.java
@@ -6,6 +6,9 @@ import me.zinch.exceptions.ValidationException;
import java.io.IOException;
+/**
+ * Main class for running the application.
+ */
public class App {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new ShutdownHook());
diff --git a/src/main/java/me/zinch/commands/Add.java b/src/main/java/me/zinch/commands/Add.java
index 2a866bf..96b68e8 100644
--- a/src/main/java/me/zinch/commands/Add.java
+++ b/src/main/java/me/zinch/commands/Add.java
@@ -6,6 +6,10 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * The Add class represents a command to add a new element to a collection.
+ * It extends the Command class.
+ */
public class Add extends Command {
public Add() {
super("add {element}", "добавить новый элемент в коллекцию", Pattern.compile("^add"));
diff --git a/src/main/java/me/zinch/commands/AddIfMax.java b/src/main/java/me/zinch/commands/AddIfMax.java
index 40e3c65..e9976a8 100644
--- a/src/main/java/me/zinch/commands/AddIfMax.java
+++ b/src/main/java/me/zinch/commands/AddIfMax.java
@@ -5,6 +5,10 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * The AddIfMax class represents a command to add a new element to a collection if its price value exceeds the maximum price value in the collection.
+ * It extends the Command class.
+ */
public class AddIfMax extends Command {
public AddIfMax() {
super("add_if_max {element}", "добавить новый элемент в коллекцию, если его значение цены превышает значение наибольшей цены этой коллекции", Pattern.compile("^add_if_max \\d+"));
diff --git a/src/main/java/me/zinch/commands/AddIfMin.java b/src/main/java/me/zinch/commands/AddIfMin.java
index 6613c79..bd771ad 100644
--- a/src/main/java/me/zinch/commands/AddIfMin.java
+++ b/src/main/java/me/zinch/commands/AddIfMin.java
@@ -5,6 +5,10 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * The AddIfMin class represents a command to add a new element to a collection if its price is lower than the lowest price in the collection.
+ * It extends the Command class.
+ */
public class AddIfMin extends Command {
public AddIfMin() {
super("add_if_min {element}", "добавить новый элемент в коллекцию, если его значение цены меньше, чем у наименьшей цены этой коллекции", Pattern.compile("^add_if_min \\d+"));
diff --git a/src/main/java/me/zinch/commands/Clear.java b/src/main/java/me/zinch/commands/Clear.java
index 72f5cd0..a37d261 100644
--- a/src/main/java/me/zinch/commands/Clear.java
+++ b/src/main/java/me/zinch/commands/Clear.java
@@ -2,6 +2,10 @@ package me.zinch.commands;
import me.zinch.wrapper.ProductCollection;
+/**
+ * The Clear class represents a command to clear a collection.
+ * It extends the Command class.
+ */
public class Clear extends Command {
public Clear() {
super("clear", "очистить коллекцию");
diff --git a/src/main/java/me/zinch/commands/Command.java b/src/main/java/me/zinch/commands/Command.java
index b73b95d..7be2002 100644
--- a/src/main/java/me/zinch/commands/Command.java
+++ b/src/main/java/me/zinch/commands/Command.java
@@ -5,6 +5,9 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * Represents a command that can be executed.
+ */
public abstract class Command {
private final String name;
private final String description;
diff --git a/src/main/java/me/zinch/commands/CommandManager.java b/src/main/java/me/zinch/commands/CommandManager.java
index 90405b7..162591a 100644
--- a/src/main/java/me/zinch/commands/CommandManager.java
+++ b/src/main/java/me/zinch/commands/CommandManager.java
@@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+/**
+ * Manages the registration and retrieval of commands.
+ */
public class CommandManager {
private static final List commandList = new ArrayList<>();
diff --git a/src/main/java/me/zinch/commands/ExecuteScript.java b/src/main/java/me/zinch/commands/ExecuteScript.java
new file mode 100644
index 0000000..da2dca6
--- /dev/null
+++ b/src/main/java/me/zinch/commands/ExecuteScript.java
@@ -0,0 +1,61 @@
+package me.zinch.commands;
+
+import me.zinch.console.Console;
+import me.zinch.files.ScriptLoader;
+import me.zinch.wrapper.ProductCollection;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * A command to execute a script from a specified file.
+ */
+public class ExecuteScript extends Command {
+ private static final List executeStack = new ArrayList<>();
+
+ private void addFileToStack(String filePath) {
+ executeStack.add(filePath);
+ }
+
+ private void clearStack() {
+ executeStack.clear();
+ }
+
+ private boolean checkFileInStack(String filePath) {
+ return executeStack.contains(filePath);
+ }
+
+ public ExecuteScript() {
+ super("execute_script file_name", "считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме", Pattern.compile("^execute_script .+"));
+ }
+
+ @Override
+ public void action(ProductCollection productCollection) {
+ try {
+ var scriptFile = Console.getLastCommand().split(" ")[1];
+ addFileToStack(scriptFile);
+ var commandList = ScriptLoader.loadList(scriptFile);
+ for (var input: commandList) {
+ input = input.trim();
+ var command = CommandManager.getCommandByInput(input);
+ if (command.isPresent()) {
+ Console.appendHistory(input);
+ if (command.get() instanceof ExecuteScript) {
+ var nextFile = input.split(" ")[0];
+ if (checkFileInStack(nextFile)) continue;
+ addFileToStack(nextFile);
+ }
+ command.get().action(productCollection);
+ } else {
+ new UnknownCommand().action(productCollection);
+ }
+ }
+ clearStack();
+ System.out.format("Скрипт %s завершил работу.%n", scriptFile);
+ } catch (IOException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+}
diff --git a/src/main/java/me/zinch/commands/Exit.java b/src/main/java/me/zinch/commands/Exit.java
index 0dca810..eed702a 100644
--- a/src/main/java/me/zinch/commands/Exit.java
+++ b/src/main/java/me/zinch/commands/Exit.java
@@ -3,6 +3,9 @@ package me.zinch.commands;
import me.zinch.console.Console;
import me.zinch.wrapper.ProductCollection;
+/**
+ * A command to exit the program without saving to a file.
+ */
public class Exit extends Command {
public Exit() {
super("exit", "завершить программу (без сохранения в файл)");
diff --git a/src/main/java/me/zinch/commands/FilterContainsName.java b/src/main/java/me/zinch/commands/FilterContainsName.java
index 8176005..6a19abb 100644
--- a/src/main/java/me/zinch/commands/FilterContainsName.java
+++ b/src/main/java/me/zinch/commands/FilterContainsName.java
@@ -5,6 +5,9 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * A command to filter elements whose 'name' field contains the specified substring.
+ */
public class FilterContainsName extends Command {
public FilterContainsName() {
super("filter_contains_name name", "вывести элементы, значение поля name которых содержит заданную подстроку", Pattern.compile("^filter_contains_name \\w+"));
diff --git a/src/main/java/me/zinch/commands/Help.java b/src/main/java/me/zinch/commands/Help.java
index de5e820..1764564 100644
--- a/src/main/java/me/zinch/commands/Help.java
+++ b/src/main/java/me/zinch/commands/Help.java
@@ -2,6 +2,9 @@ package me.zinch.commands;
import me.zinch.wrapper.ProductCollection;
+/**
+ * A command to display help for available commands.
+ */
public class Help extends Command {
public Help() {
super("help", "вывести справку по доступным командам");
diff --git a/src/main/java/me/zinch/commands/Info.java b/src/main/java/me/zinch/commands/Info.java
index f8fda66..fee7d01 100644
--- a/src/main/java/me/zinch/commands/Info.java
+++ b/src/main/java/me/zinch/commands/Info.java
@@ -2,6 +2,9 @@ package me.zinch.commands;
import me.zinch.wrapper.ProductCollection;
+/**
+ * A command to display information about the collection (type, initialization date, number of elements, etc.) to the standard output stream.
+ */
public class Info extends Command {
public Info() {
super("info", "вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)");
diff --git a/src/main/java/me/zinch/commands/PrintAscending.java b/src/main/java/me/zinch/commands/PrintAscending.java
index b8db3ed..9f5c0f9 100644
--- a/src/main/java/me/zinch/commands/PrintAscending.java
+++ b/src/main/java/me/zinch/commands/PrintAscending.java
@@ -2,6 +2,9 @@ package me.zinch.commands;
import me.zinch.wrapper.ProductCollection;
+/**
+ * A command to print the elements of the collection in ascending order.
+ */
public class PrintAscending extends Command {
public PrintAscending() {
super("print_ascending", "вывести элементы коллекции в порядке возрастания");
diff --git a/src/main/java/me/zinch/commands/PrintUniqueManufactureCost.java b/src/main/java/me/zinch/commands/PrintUniqueManufactureCost.java
index 966606c..0156e5b 100644
--- a/src/main/java/me/zinch/commands/PrintUniqueManufactureCost.java
+++ b/src/main/java/me/zinch/commands/PrintUniqueManufactureCost.java
@@ -2,6 +2,9 @@ package me.zinch.commands;
import me.zinch.wrapper.ProductCollection;
+/**
+ * A command to print the unique values of the 'manufactureCost' field of all elements in the collection.
+ */
public class PrintUniqueManufactureCost extends Command {
public PrintUniqueManufactureCost() {
super("print_unique_manufacture_cost", "вывести уникальные значения поля manufactureCost всех элементов в коллекции");
diff --git a/src/main/java/me/zinch/commands/Remove.java b/src/main/java/me/zinch/commands/Remove.java
index 376da1a..c8ed072 100644
--- a/src/main/java/me/zinch/commands/Remove.java
+++ b/src/main/java/me/zinch/commands/Remove.java
@@ -5,6 +5,9 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * A command to remove an element from the collection by its id.
+ */
public class Remove extends Command {
public Remove() {
super("remove_by_id id", "удалить элемент из коллекции по его id", Pattern.compile("^remove_by_id \\d+"));
diff --git a/src/main/java/me/zinch/commands/RemoveLower.java b/src/main/java/me/zinch/commands/RemoveLower.java
index 9a7a2a6..bf06cc2 100644
--- a/src/main/java/me/zinch/commands/RemoveLower.java
+++ b/src/main/java/me/zinch/commands/RemoveLower.java
@@ -5,6 +5,9 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * A command to remove all elements from the collection that have ids lower than the specified id.
+ */
public class RemoveLower extends Command {
public RemoveLower() {
super("remove_lower id", "удалить из коллекции все элементы, меньшие, чем заданный по id", Pattern.compile("^remove_lower \\d+"));
diff --git a/src/main/java/me/zinch/commands/Save.java b/src/main/java/me/zinch/commands/Save.java
index 0ec205b..14c3c7f 100644
--- a/src/main/java/me/zinch/commands/Save.java
+++ b/src/main/java/me/zinch/commands/Save.java
@@ -6,6 +6,9 @@ import me.zinch.wrapper.ProductCollection;
import java.io.IOException;
+/**
+ * A command to save the collection to a file.
+ */
public class Save extends Command {
public Save() {
super("save", "сохранить коллекцию в файл");
diff --git a/src/main/java/me/zinch/commands/Show.java b/src/main/java/me/zinch/commands/Show.java
index 3460ccb..6223901 100644
--- a/src/main/java/me/zinch/commands/Show.java
+++ b/src/main/java/me/zinch/commands/Show.java
@@ -2,6 +2,9 @@ package me.zinch.commands;
import me.zinch.wrapper.ProductCollection;
+/**
+ * A command to display all elements of the collection in string representation to the standard output stream.
+ */
public class Show extends Command {
public Show() {
super("show", "вывести в стандартный поток вывода все элементы коллекции в строковом представлении");
diff --git a/src/main/java/me/zinch/commands/UnknownCommand.java b/src/main/java/me/zinch/commands/UnknownCommand.java
new file mode 100644
index 0000000..290e9be
--- /dev/null
+++ b/src/main/java/me/zinch/commands/UnknownCommand.java
@@ -0,0 +1,17 @@
+package me.zinch.commands;
+
+import me.zinch.wrapper.ProductCollection;
+
+/**
+ * Represents an unknown command.
+ */
+public class UnknownCommand extends Command {
+ public UnknownCommand() {
+ super("", "");
+ }
+
+ @Override
+ public void action(ProductCollection productCollection) {
+ System.out.println("Команда не распознана.");
+ }
+}
diff --git a/src/main/java/me/zinch/commands/Update.java b/src/main/java/me/zinch/commands/Update.java
index 8a4869c..3301089 100644
--- a/src/main/java/me/zinch/commands/Update.java
+++ b/src/main/java/me/zinch/commands/Update.java
@@ -5,6 +5,9 @@ import me.zinch.wrapper.ProductCollection;
import java.util.regex.Pattern;
+/**
+ * A command to update the value of an element in the collection, whose id is specified.
+ */
public class Update extends Command {
public Update() {
super("update id {element}", "обновить значение элемента коллекции, id которого равен заданному", Pattern.compile("^update \\d+"));
diff --git a/src/main/java/me/zinch/console/Console.java b/src/main/java/me/zinch/console/Console.java
index 6847dcd..127b18d 100644
--- a/src/main/java/me/zinch/console/Console.java
+++ b/src/main/java/me/zinch/console/Console.java
@@ -1,8 +1,10 @@
package me.zinch.console;
import me.zinch.commands.CommandManager;
+import me.zinch.exceptions.ColorFormatException;
import me.zinch.exceptions.CommandActionException;
import me.zinch.exceptions.IllegalProductDtoException;
+import me.zinch.exceptions.UnitOfMeasureFormatException;
import me.zinch.files.DbController;
import me.zinch.models.Color;
import me.zinch.models.Coordinates;
@@ -14,10 +16,15 @@ import me.zinch.wrapper.ProductCollection;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.IllegalFormatConversionException;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Scanner;
+/**
+ Console class provides methods for interacting with the console, reading user input, and managing application flow.
+ This class includes methods for appending input history, stopping the application, reading product DTO from the console, and running the application loop.
+ */
public class Console {
private static final Scanner scanner = new Scanner(System.in);
private static boolean isRunning = true;
@@ -36,50 +43,91 @@ public class Console {
return history.get(history.size() - 1);
}
+
+ private static String readString() {
+ var input = scanner.nextLine().trim();
+ return input.isEmpty() ? null : input;
+ }
+
+ private static Long readLong() {
+ var input = scanner.nextLine().trim();
+ try {
+ return Long.parseLong(input);
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ private static Color readColor() throws ColorFormatException {
+ System.out.format("Цвет волос(%s): ", Color.getColorsString());
+ var input = readString();
+ if (input == null || input.isEmpty()) return null;
+ try {
+ return Color.create(Integer.parseInt(input));
+ } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
+ try {
+ return Color.create(input);
+ } catch (IllegalArgumentException ex) {
+ throw new ColorFormatException(ex.getMessage());
+ }
+ }
+ }
+
+ private static UnitOfMeasure readUnitOfMeasure() throws UnitOfMeasureFormatException {
+ System.out.format("Единица измерения(%s): ", UnitOfMeasure.getUnitOfMeasuerString());
+ var input = readString();
+ try {
+ return UnitOfMeasure.create(Integer.parseInt(input));
+ } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
+ try {
+ return UnitOfMeasure.create(input);
+ } catch (IllegalArgumentException ex) {
+ throw new ColorFormatException(ex.getMessage());
+ }
+ }
+ }
+
+ private static Location readLocation() throws NumberFormatException {
+ System.out.print("Создать поле Location? (Y/n): ");
+ var input = readString();
+ if (input != null && input.equalsIgnoreCase("n")) return null;
+ System.out.print("Координата x локации: ");
+ var locationX = Float.parseFloat(readString());
+ System.out.print("Координата y локации: ");
+ var locationY = Integer.parseInt(readString());
+ System.out.print("Название: ");
+ var locationName = readString();
+ return new Location(locationX, locationY, locationName);
+ }
+
public static ProductDTO readProductDTO() throws IllegalProductDtoException {
try {
var productDTO = new ProductDTO();
System.out.println("Заполните следующие поля: ");
System.out.print("Название: ");
- productDTO.setName(scanner.nextLine().trim());
+ productDTO.setName(readString());
System.out.print("Координата x: ");
- long x = Long.parseLong(scanner.nextLine().trim());
+ long x = readLong();
System.out.print("Координата y: ");
- long y = Long.parseLong(scanner.nextLine().trim());
+ long y = readLong();
productDTO.setCoordinates(new Coordinates(x, y));
System.out.print("Цена: ");
- productDTO.setPrice(Long.parseLong(scanner.nextLine().trim()));
+ productDTO.setPrice(readLong());
System.out.print("Номер части: ");
- productDTO.setPartNumber(scanner.nextLine().trim());
+ productDTO.setPartNumber(readString());
System.out.print("Себестоимость: ");
- productDTO.setManufactureCost(Long.parseLong(scanner.nextLine().trim()));
- System.out.print("Единица измерения(Килограммы[0], Сантиметры[1], Граммы[2]): ");
- try {
- productDTO.setUnitOfMeasure(UnitOfMeasure.create(Integer.parseInt(scanner.nextLine().trim())));
- } catch (NumberFormatException e) {
- productDTO.setUnitOfMeasure(UnitOfMeasure.create(scanner.nextLine().trim()));
- }
+ productDTO.setManufactureCost(readLong());
+ productDTO.setUnitOfMeasure(readUnitOfMeasure());
System.out.print("Имя владельца: ");
- var ownerName = scanner.nextLine().trim();
+ var ownerName = readString();
System.out.print("Данные паспорта: ");
- var passportId = scanner.nextLine().trim();
- System.out.print("Цвет волос(Зелёный[0], Чёрный[1], Синий[2], Оранжевый[3], Белый[4]): ");
- Color color;
- try {
- color = Color.create(Integer.parseInt(scanner.nextLine().trim()));
- } catch (NumberFormatException e) {
- color = Color.create(scanner.nextLine().trim());
- }
- System.out.print("Координата x локации: ");
- var locationX = Float.parseFloat(scanner.nextLine().trim());
- System.out.print("Координата y локации: ");
- var locationY = Integer.parseInt(scanner.nextLine().trim());
- System.out.print("Название: ");
- var locationName = scanner.nextLine().trim();
-
- productDTO.setOwner(new Person(ownerName, passportId, color, new Location(locationX, locationY, locationName)));
+ var passportId = readString();
+ Color color = readColor();
+ productDTO.setOwner(new Person(ownerName, passportId, color, readLocation()));
return productDTO;
- } catch (NumberFormatException e) {
+ } catch (ColorFormatException | UnitOfMeasureFormatException e) {
+ throw new IllegalProductDtoException(e.getMessage());
+ } catch (NumberFormatException | NullPointerException | IllegalFormatConversionException e) {
throw new IllegalProductDtoException();
}
}
diff --git a/src/main/java/me/zinch/console/ShutdownHook.java b/src/main/java/me/zinch/console/ShutdownHook.java
index 91ca1fd..4f86ad0 100644
--- a/src/main/java/me/zinch/console/ShutdownHook.java
+++ b/src/main/java/me/zinch/console/ShutdownHook.java
@@ -1,5 +1,8 @@
package me.zinch.console;
+/**
+ * Represents a shutdown hook that is executed when the application is stopped.
+ */
public class ShutdownHook extends Thread {
public ShutdownHook() {
super(new Thread(Console::stopApp));
diff --git a/src/main/java/me/zinch/exceptions/ColorFormatException.java b/src/main/java/me/zinch/exceptions/ColorFormatException.java
new file mode 100644
index 0000000..8bdf898
--- /dev/null
+++ b/src/main/java/me/zinch/exceptions/ColorFormatException.java
@@ -0,0 +1,11 @@
+package me.zinch.exceptions;
+
+public class ColorFormatException extends IllegalArgumentException {
+ public ColorFormatException() {
+ super();
+ }
+
+ public ColorFormatException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/me/zinch/exceptions/CommandActionException.java b/src/main/java/me/zinch/exceptions/CommandActionException.java
index 9b780fb..35b98fa 100644
--- a/src/main/java/me/zinch/exceptions/CommandActionException.java
+++ b/src/main/java/me/zinch/exceptions/CommandActionException.java
@@ -1,5 +1,8 @@
package me.zinch.exceptions;
+/**
+ * Represents an exception that occurs during the execution of a command action.
+ */
public class CommandActionException extends RuntimeException {
public CommandActionException() {
super("Ошибка во время выполнения команды");
diff --git a/src/main/java/me/zinch/exceptions/DbInitializationException.java b/src/main/java/me/zinch/exceptions/DbInitializationException.java
index 1351143..2908270 100644
--- a/src/main/java/me/zinch/exceptions/DbInitializationException.java
+++ b/src/main/java/me/zinch/exceptions/DbInitializationException.java
@@ -2,6 +2,9 @@ package me.zinch.exceptions;
import java.io.IOException;
+/**
+ * Represents an exception that occurs when the database initialization fails.
+ */
public class DbInitializationException extends IOException {
public DbInitializationException() {
super("Ошибка! Не удалось инициализировать БД. Проверьте, что структура БД верна.");
diff --git a/src/main/java/me/zinch/exceptions/IllegalProductDtoException.java b/src/main/java/me/zinch/exceptions/IllegalProductDtoException.java
index e1c780a..e176b20 100644
--- a/src/main/java/me/zinch/exceptions/IllegalProductDtoException.java
+++ b/src/main/java/me/zinch/exceptions/IllegalProductDtoException.java
@@ -1,5 +1,8 @@
package me.zinch.exceptions;
+/**
+ * Represents an exception that occurs when an illegal product DTO is encountered during the creation or modification of a product.
+ */
public class IllegalProductDtoException extends CommandActionException {
public IllegalProductDtoException() {
super("Ошибка при создании или изменении продукта. Были введены некорректные значения.");
diff --git a/src/main/java/me/zinch/exceptions/UnitOfMeasureFormatException.java b/src/main/java/me/zinch/exceptions/UnitOfMeasureFormatException.java
new file mode 100644
index 0000000..9112345
--- /dev/null
+++ b/src/main/java/me/zinch/exceptions/UnitOfMeasureFormatException.java
@@ -0,0 +1,11 @@
+package me.zinch.exceptions;
+
+public class UnitOfMeasureFormatException extends IllegalArgumentException {
+ public UnitOfMeasureFormatException() {
+ super();
+ }
+
+ public UnitOfMeasureFormatException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/me/zinch/exceptions/ValidationException.java b/src/main/java/me/zinch/exceptions/ValidationException.java
index 00b6ab9..adddd6a 100644
--- a/src/main/java/me/zinch/exceptions/ValidationException.java
+++ b/src/main/java/me/zinch/exceptions/ValidationException.java
@@ -1,5 +1,8 @@
package me.zinch.exceptions;
+/**
+ * Represents an exception related to validation errors.
+ */
public class ValidationException extends jakarta.validation.ValidationException {
public ValidationException() {}
diff --git a/src/main/java/me/zinch/files/DbController.java b/src/main/java/me/zinch/files/DbController.java
index 0c18499..c739e07 100644
--- a/src/main/java/me/zinch/files/DbController.java
+++ b/src/main/java/me/zinch/files/DbController.java
@@ -18,6 +18,9 @@ import java.io.OutputStreamWriter;
import java.util.List;
import java.util.Map;
+/**
+ * The DbController class provides methods for loading and saving product data to a database file.
+ */
public class DbController {
private static final XmlMapper xmlMapper = XmlMapper.builder().addModule(new JavaTimeModule()).build();
private static final String path;
@@ -28,6 +31,9 @@ public class DbController {
xmlMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
}
+ /**
+ * Represents a collection of products.
+ */
private static class Products {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "Product")
diff --git a/src/main/java/me/zinch/files/ScriptLoader.java b/src/main/java/me/zinch/files/ScriptLoader.java
new file mode 100644
index 0000000..6de5445
--- /dev/null
+++ b/src/main/java/me/zinch/files/ScriptLoader.java
@@ -0,0 +1,32 @@
+package me.zinch.files;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ * The ScriptLoader class provides methods to load scripts from files.
+ */
+public class ScriptLoader {
+ public static List loadList(String path) throws IOException {
+ try {
+ BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(path));
+ Scanner scanner = new Scanner(bufferedInputStream);
+ List list = new ArrayList<>();
+ while (scanner.hasNextLine()) {
+ list.add(scanner.nextLine());
+ }
+ bufferedInputStream.close();
+ scanner.close();
+ return list;
+ } catch (FileNotFoundException e) {
+ throw new FileNotFoundException(String.format("Файл %s не найден.", path));
+ } catch (IOException e) {
+ throw new IOException("Произошла неожиданная ошибка во время работы с файлом!");
+ }
+ }
+}
diff --git a/src/main/java/me/zinch/models/Color.java b/src/main/java/me/zinch/models/Color.java
index c742d73..c615954 100644
--- a/src/main/java/me/zinch/models/Color.java
+++ b/src/main/java/me/zinch/models/Color.java
@@ -1,7 +1,12 @@
package me.zinch.models;
+import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+/**
+ * Represents a color enumeration.
+ */
public enum Color {
GREEN("Зелёный"),
BLACK("Чёрный"),
@@ -15,21 +20,28 @@ public enum Color {
this.color = color;
}
- public String getColor() {
+ private String getColor() {
return color;
}
- public static Color create(String input) {
+ public static Color create(String input) throws IllegalArgumentException {
for (var unit : List.of(Color.values())) {
- if (unit.getColor().toLowerCase() == input.toLowerCase()) return unit;
+ if (unit.getColor().equalsIgnoreCase(input)) return unit;
}
- return Color.BLUE;
+ throw new IllegalArgumentException("Не существует такого цвета");
}
- public static Color create(Integer num) {
+ public static Color create(Integer num) throws ArrayIndexOutOfBoundsException {
return Color.values()[num];
}
+ public static String getColorsString() {
+ AtomicInteger i = new AtomicInteger();
+ return String.join(", ", Arrays.stream(Color.values())
+ .map(color -> String.format("%s[%d]", color.getColor(), i.getAndIncrement()))
+ .toList());
+ }
+
@Override
public String toString() {
return "Color{" +
diff --git a/src/main/java/me/zinch/models/Coordinates.java b/src/main/java/me/zinch/models/Coordinates.java
index 16c3b6c..4cd2a61 100644
--- a/src/main/java/me/zinch/models/Coordinates.java
+++ b/src/main/java/me/zinch/models/Coordinates.java
@@ -7,6 +7,9 @@ import jakarta.validation.constraints.NotNull;
import java.util.Objects;
+/**
+ * Represents coordinates with x and y values.
+ */
public class Coordinates {
@Max(value = 883, message = "Coordinates: Максимальное значение координаты x: 883")
@JsonProperty("x")
diff --git a/src/main/java/me/zinch/models/Location.java b/src/main/java/me/zinch/models/Location.java
index d2f2ae4..27a78c9 100644
--- a/src/main/java/me/zinch/models/Location.java
+++ b/src/main/java/me/zinch/models/Location.java
@@ -6,6 +6,9 @@ import me.zinch.validator.NotEmpty;
import java.util.Objects;
+/**
+ * Represents a location with x and y coordinates and a name.
+ */
public class Location {
@JsonProperty("x")
private float x;
diff --git a/src/main/java/me/zinch/models/Person.java b/src/main/java/me/zinch/models/Person.java
index 8e55e34..78eb8f3 100644
--- a/src/main/java/me/zinch/models/Person.java
+++ b/src/main/java/me/zinch/models/Person.java
@@ -7,6 +7,9 @@ import jakarta.validation.constraints.Size;
import java.util.Objects;
+/**
+ * Represents a person with a name, passport ID, hair color, and location.
+ */
public class Person {
@NotBlank(message = "Person: Имя персоны не может быть пустым или null")
@JsonProperty("name")
diff --git a/src/main/java/me/zinch/models/Product.java b/src/main/java/me/zinch/models/Product.java
index 48d6fa0..7718e7a 100644
--- a/src/main/java/me/zinch/models/Product.java
+++ b/src/main/java/me/zinch/models/Product.java
@@ -10,6 +10,9 @@ import me.zinch.validator.NotEmpty;
import java.time.ZonedDateTime;
import java.util.Objects;
+/**
+ * Represents a product with various attributes such as ID, name, coordinates, creation date, price, part number, manufacture cost, unit of measure, and owner.
+ */
public class Product {
@NotNull(message = "Product: Поле id не может быть null")
@Min(value = 1, message = "Product: Значение поля id должно быть больше 0")
diff --git a/src/main/java/me/zinch/models/ProductDTO.java b/src/main/java/me/zinch/models/ProductDTO.java
index cbe9b1c..afd68b7 100644
--- a/src/main/java/me/zinch/models/ProductDTO.java
+++ b/src/main/java/me/zinch/models/ProductDTO.java
@@ -11,6 +11,9 @@ import me.zinch.validator.NotEmpty;
import java.time.ZonedDateTime;
+/**
+ * Represents a Data Transfer Object (DTO) for a product with attributes such as name, coordinates, price, part number, manufacture cost, unit of measure, and owner.
+ */
public class ProductDTO {
@NotBlank(message = "Строка name не может быть пустой или null")
@JsonProperty("name")
diff --git a/src/main/java/me/zinch/models/UnitOfMeasure.java b/src/main/java/me/zinch/models/UnitOfMeasure.java
index 43c6fb1..cb1238b 100644
--- a/src/main/java/me/zinch/models/UnitOfMeasure.java
+++ b/src/main/java/me/zinch/models/UnitOfMeasure.java
@@ -1,7 +1,12 @@
package me.zinch.models;
+import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+/**
+ * Represents a unit of measure enumeration.
+ */
public enum UnitOfMeasure {
KILOGRAMS("Килограммы"),
CENTIMETERS("Сантиметры"),
@@ -17,17 +22,24 @@ public enum UnitOfMeasure {
return unitOfMeasure;
}
- public static UnitOfMeasure create(String input) {
+ public static UnitOfMeasure create(String input) throws IllegalArgumentException {
for (var unit : List.of(UnitOfMeasure.values())) {
- if (unit.getUnitOfMeasure().toLowerCase() == input.toLowerCase()) return unit;
+ if (unit.getUnitOfMeasure().equalsIgnoreCase(input)) return unit;
}
- return UnitOfMeasure.KILOGRAMS;
+ throw new IllegalArgumentException("Не существует такой единицы измерения");
}
- public static UnitOfMeasure create(Integer num) {
+ public static UnitOfMeasure create(Integer num) throws ArrayIndexOutOfBoundsException {
return UnitOfMeasure.values()[num];
}
+ public static String getUnitOfMeasuerString() {
+ AtomicInteger i = new AtomicInteger();
+ return String.join(", ", Arrays.stream(UnitOfMeasure.values())
+ .map(unitOfMeasure -> String.format("%s[%d]", unitOfMeasure.getUnitOfMeasure(), i.getAndIncrement()))
+ .toList());
+ }
+
@Override
public String toString() {
diff --git a/src/main/java/me/zinch/validator/NotEmpty.java b/src/main/java/me/zinch/validator/NotEmpty.java
index 04bbb2a..24025ad 100644
--- a/src/main/java/me/zinch/validator/NotEmpty.java
+++ b/src/main/java/me/zinch/validator/NotEmpty.java
@@ -8,6 +8,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+/**
+ * Annotation indicating that the annotated element must not be empty.
+ */
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotEmptyValidator.class)
diff --git a/src/main/java/me/zinch/validator/NotEmptyValidator.java b/src/main/java/me/zinch/validator/NotEmptyValidator.java
index 21d22b2..b654006 100644
--- a/src/main/java/me/zinch/validator/NotEmptyValidator.java
+++ b/src/main/java/me/zinch/validator/NotEmptyValidator.java
@@ -3,6 +3,9 @@ package me.zinch.validator;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
+/**
+ * Validator implementation for the {@link NotEmpty} annotation, ensuring that the value is not empty.
+ */
public class NotEmptyValidator implements ConstraintValidator {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
diff --git a/src/main/java/me/zinch/validator/ValidateResult.java b/src/main/java/me/zinch/validator/ValidateResult.java
index b103d98..c508b11 100644
--- a/src/main/java/me/zinch/validator/ValidateResult.java
+++ b/src/main/java/me/zinch/validator/ValidateResult.java
@@ -5,6 +5,10 @@ import jakarta.validation.ValidationException;
import java.util.Set;
+/**
+ * Represents the result of a validation process.
+ * @param the type of object being validated
+ */
public class ValidateResult {
private final Set> violations;
private final boolean isValid;
diff --git a/src/main/java/me/zinch/validator/Validators.java b/src/main/java/me/zinch/validator/Validators.java
index 29e719a..cba1d7a 100644
--- a/src/main/java/me/zinch/validator/Validators.java
+++ b/src/main/java/me/zinch/validator/Validators.java
@@ -8,6 +8,9 @@ import org.hibernate.validator.HibernateValidator;
import java.util.List;
+/**
+ * Utility class for performing validation operations on products.
+ */
public class Validators {
private static final Validator validator;
diff --git a/src/main/java/me/zinch/wrapper/ProductCollection.java b/src/main/java/me/zinch/wrapper/ProductCollection.java
index 36da985..57d62ff 100644
--- a/src/main/java/me/zinch/wrapper/ProductCollection.java
+++ b/src/main/java/me/zinch/wrapper/ProductCollection.java
@@ -16,6 +16,9 @@ import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
+/**
+ * Represents a collection of products.
+ */
public class ProductCollection {
private final TreeSet productList;
private Long idIncrementor;