javadoc updates, renamed CommandLine.java to CommandLineHandler.java

This commit is contained in:
Egor 2022-02-20 17:12:58 +03:00
parent b7037e0a10
commit 27a164aa19
12 changed files with 85 additions and 16 deletions

View file

@ -25,6 +25,10 @@ tasks.compileJava {
options.encoding = "UTF-8"
}
tasks.javadoc {
options.encoding = "UTF-8"
}
tasks.jar {
manifest {
attributes(
@ -33,7 +37,3 @@ tasks.jar {
)
}
}
tasks.javadoc {
options.encoding = "UTF-8"
}

View file

@ -2,13 +2,13 @@ package ru.erius.lab5;
import ru.erius.lab5.collection.Database;
import ru.erius.lab5.collection.PeopleDatabase;
import ru.erius.lab5.commandline.CommandLine;
import ru.erius.lab5.commandline.CommandLineHandler;
import ru.erius.lab5.commandline.PeopleDatabaseCommands;
public class Lab5 {
public static void main(String[] args) {
CommandLine cmd = CommandLine.getInstance();
CommandLineHandler cmd = CommandLineHandler.getInstance();
PeopleDatabaseCommands.registerDatabaseCommands();
PeopleDatabase peopleDatabase = new PeopleDatabase();

View file

@ -1,5 +1,8 @@
package ru.erius.lab5.collection;
/**
* Интерфейс баз данных с методами {@link #load()} и {@link #save()}
*/
public interface Database {
void load() throws DatabaseLoadFailedException;

View file

@ -17,6 +17,10 @@ import java.io.IOException;
import java.time.LocalDate;
import java.util.TreeSet;
/**
* Класс базы данных людей, реализующий интерфейс Database
* @see ru.erius.lab5.collection.Database
*/
@XmlRootElement
public class PeopleDatabase implements Database {
@ -49,6 +53,13 @@ public class PeopleDatabase implements Database {
TYPE, this.initDate, this.collection.size());
}
/**
* Метод, инициализирующий базу данных из файла, находящемся по пути, указанном в
* переменной окружения {@link #ENV_VAR}
*
* @throws Database.DatabaseLoadFailedException если переменная окружения {@link #ENV_VAR} не задана,
* файла не существует, либо отсутствуют права на запись или чтение
*/
@Override
public void load() throws Database.DatabaseLoadFailedException {
System.out.println("Инициализация коллекции из файла...");
@ -80,6 +91,14 @@ public class PeopleDatabase implements Database {
System.out.println("Инициализация успешно выполнена");
}
/**
* Метод, сохраняющий базу данных в файл, находящемся по пути, указанном в
* переменной окружения {@link #ENV_VAR}
*
* @throws Database.DatabaseSaveFailedException если переменная окружения {@link #ENV_VAR} не задана,
* файла не существует, либо отсутствуют права на запись или чтение, или если структура xml файла
* была каким-либо образом нарушена
*/
@Override
public void save() throws Database.DatabaseSaveFailedException {
if (file == null || context == null)

View file

@ -1,5 +1,9 @@
package ru.erius.lab5.commandline;
/**
* Функциональный интерфейс с одним методом {@link #execute(String[])},
* используется для реализации шаблон проектирования Command
*/
@FunctionalInterface
public interface Command {
void execute(String[] args);

View file

@ -7,23 +7,30 @@ import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
public class CommandLine {
/**
* Класс обработчика командной строки, реализует шаблон проектирования Singleton,
* читает ввод с командной строки, обрабатывает его и вызывает соответствующую команду
* на выполнение из регистра команд, используйте метод {@link #start()} для его запуска
*
* @see CommandRegistry
*/
public final class CommandLineHandler {
private final static CommandLine instance = new CommandLine();
private final static CommandLineHandler instance = new CommandLineHandler();
private final Deque<Reader> inputs = new LinkedList<>();
private final ArrayList<String> history = new ArrayList<>();
private final List<String> history = new LinkedList<>();
private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
private boolean isActive = false;
static {
clearScreen();
CommandLine.registerBasicCommands();
CommandLineHandler.registerBasicCommands();
}
private CommandLine() {}
private CommandLineHandler() {}
public static CommandLine getInstance() {
public static CommandLineHandler getInstance() {
return instance;
}
@ -36,6 +43,9 @@ public class CommandLine {
"execute_script {file_name} : считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме.");
}
/**
* Метод, запускающий обработчик командной строки, для остановки требуется ввести команду "exit"
*/
public void start() {
System.out.println(LongStrings.GREETINGS.getValue());
this.isActive = true;
@ -73,6 +83,9 @@ public class CommandLine {
updateHistory(alias);
}
/**
* Метод, останавливающий работу обработчика командной строки
*/
public void exit() {
this.isActive = false;
System.out.println("Выход из программы...");

View file

@ -6,7 +6,10 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class CommandRegistry {
/**
* Класс регистра команд, используемый для добавления, переопределения или удаления команд
*/
public final class CommandRegistry {
private static final Map<String, DescriptiveCommand> COMMANDS = new HashMap<>();

View file

@ -4,6 +4,9 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NonNull;
/**
* Класс команд с описанием, оболочка для обычных команд, используются для корректной работы команды help
*/
@Data @AllArgsConstructor
public class DescriptiveCommand {
@NonNull

View file

@ -12,15 +12,24 @@ import java.util.Optional;
import static ru.erius.lab5.commandline.CommandRegistry.*;
/**
* Класс объявления всех команд, связанных с манипуляциями над объектом класса PeopleDatabase
*
* @see PeopleDatabase
*/
public final class PeopleDatabaseCommands {
private static PeopleDatabase peopleDatabase;
private static final String COLORS = Arrays.toString(Color.values()),
COUNTRIES = Arrays.toString(Country.values());
private static final CommandLine CMD = CommandLine.getInstance();
private static final CommandLineHandler CMD = CommandLineHandler.getInstance();
private PeopleDatabaseCommands() {}
/**
* Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе,
* если вам требуются данные команды
*/
public static void registerDatabaseCommands() {
registerCommand("info", args -> info(peopleDatabase),
"info : вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)");

View file

@ -66,6 +66,9 @@ public class Person implements Comparable<Person> {
*/
private Location location;
/**
* Конструктор для корректного преобразования человека из xml в объект
*/
private Person() {
this.id = ++existingPeople;
}
@ -101,6 +104,12 @@ public class Person implements Comparable<Person> {
this.setPassportID(passportID);
}
/**
* Метод, меняющий все значения полей человека (кроме {@link #id} и {@link #creationDate}) в соответствии
* со значениями полей другого
*
* @param newPerson человек, чьи поля будут присвоены текущему
*/
public void update(Person newPerson) {
this.location = newPerson.location;
this.coordinates = newPerson.coordinates;
@ -154,7 +163,7 @@ public class Person implements Comparable<Person> {
/**
* Переопределенный метод сравнения двух людей,
* сравнение производится по имени, номеру пасспорта,
* сравнение производится по имени, номеру паспорта,
* росту, национальности, местоположению и цвету глаз
*
* @param other Объект для сравнения

View file

@ -4,6 +4,9 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* Класс парсера для корректного преобразования объекта LocalDate в xml формат и наоборот
*/
public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
@Override
public LocalDate unmarshal(String v) throws Exception {

View file

@ -1,6 +1,9 @@
package ru.erius.lab5.util;
public class UtilFunctions {
/**
* Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования
*/
public final class UtilFunctions {
private UtilFunctions() {}