javadoc updates, renamed CommandLine.java to CommandLineHandler.java
This commit is contained in:
parent
b7037e0a10
commit
27a164aa19
12 changed files with 85 additions and 16 deletions
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
package ru.erius.lab5.collection;
|
||||
|
||||
/**
|
||||
* Интерфейс баз данных с методами {@link #load()} и {@link #save()}
|
||||
*/
|
||||
public interface Database {
|
||||
|
||||
void load() throws DatabaseLoadFailedException;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package ru.erius.lab5.commandline;
|
||||
|
||||
/**
|
||||
* Функциональный интерфейс с одним методом {@link #execute(String[])},
|
||||
* используется для реализации шаблон проектирования Command
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface Command {
|
||||
void execute(String[] args);
|
||||
|
|
|
@ -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("Выход из программы...");
|
|
@ -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<>();
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Data;
|
||||
import lombok.NonNull;
|
||||
|
||||
/**
|
||||
* Класс команд с описанием, оболочка для обычных команд, используются для корректной работы команды help
|
||||
*/
|
||||
@Data @AllArgsConstructor
|
||||
public class DescriptiveCommand {
|
||||
@NonNull
|
||||
|
|
|
@ -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 : вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)");
|
||||
|
|
|
@ -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 Объект для сравнения
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package ru.erius.lab5.util;
|
||||
|
||||
public class UtilFunctions {
|
||||
/**
|
||||
* Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования
|
||||
*/
|
||||
public final class UtilFunctions {
|
||||
|
||||
private UtilFunctions() {}
|
||||
|
||||
|
|
Loading…
Reference in a new issue