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"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.javadoc {
|
||||||
|
options.encoding = "UTF-8"
|
||||||
|
}
|
||||||
|
|
||||||
tasks.jar {
|
tasks.jar {
|
||||||
manifest {
|
manifest {
|
||||||
attributes(
|
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.Database;
|
||||||
import ru.erius.lab5.collection.PeopleDatabase;
|
import ru.erius.lab5.collection.PeopleDatabase;
|
||||||
import ru.erius.lab5.commandline.CommandLine;
|
import ru.erius.lab5.commandline.CommandLineHandler;
|
||||||
import ru.erius.lab5.commandline.PeopleDatabaseCommands;
|
import ru.erius.lab5.commandline.PeopleDatabaseCommands;
|
||||||
|
|
||||||
public class Lab5 {
|
public class Lab5 {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
CommandLine cmd = CommandLine.getInstance();
|
CommandLineHandler cmd = CommandLineHandler.getInstance();
|
||||||
|
|
||||||
PeopleDatabaseCommands.registerDatabaseCommands();
|
PeopleDatabaseCommands.registerDatabaseCommands();
|
||||||
PeopleDatabase peopleDatabase = new PeopleDatabase();
|
PeopleDatabase peopleDatabase = new PeopleDatabase();
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package ru.erius.lab5.collection;
|
package ru.erius.lab5.collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Интерфейс баз данных с методами {@link #load()} и {@link #save()}
|
||||||
|
*/
|
||||||
public interface Database {
|
public interface Database {
|
||||||
|
|
||||||
void load() throws DatabaseLoadFailedException;
|
void load() throws DatabaseLoadFailedException;
|
||||||
|
|
|
@ -17,6 +17,10 @@ import java.io.IOException;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс базы данных людей, реализующий интерфейс Database
|
||||||
|
* @see ru.erius.lab5.collection.Database
|
||||||
|
*/
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
public class PeopleDatabase implements Database {
|
public class PeopleDatabase implements Database {
|
||||||
|
|
||||||
|
@ -49,6 +53,13 @@ public class PeopleDatabase implements Database {
|
||||||
TYPE, this.initDate, this.collection.size());
|
TYPE, this.initDate, this.collection.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод, инициализирующий базу данных из файла, находящемся по пути, указанном в
|
||||||
|
* переменной окружения {@link #ENV_VAR}
|
||||||
|
*
|
||||||
|
* @throws Database.DatabaseLoadFailedException если переменная окружения {@link #ENV_VAR} не задана,
|
||||||
|
* файла не существует, либо отсутствуют права на запись или чтение
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void load() throws Database.DatabaseLoadFailedException {
|
public void load() throws Database.DatabaseLoadFailedException {
|
||||||
System.out.println("Инициализация коллекции из файла...");
|
System.out.println("Инициализация коллекции из файла...");
|
||||||
|
@ -80,6 +91,14 @@ public class PeopleDatabase implements Database {
|
||||||
System.out.println("Инициализация успешно выполнена");
|
System.out.println("Инициализация успешно выполнена");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод, сохраняющий базу данных в файл, находящемся по пути, указанном в
|
||||||
|
* переменной окружения {@link #ENV_VAR}
|
||||||
|
*
|
||||||
|
* @throws Database.DatabaseSaveFailedException если переменная окружения {@link #ENV_VAR} не задана,
|
||||||
|
* файла не существует, либо отсутствуют права на запись или чтение, или если структура xml файла
|
||||||
|
* была каким-либо образом нарушена
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void save() throws Database.DatabaseSaveFailedException {
|
public void save() throws Database.DatabaseSaveFailedException {
|
||||||
if (file == null || context == null)
|
if (file == null || context == null)
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
package ru.erius.lab5.commandline;
|
package ru.erius.lab5.commandline;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Функциональный интерфейс с одним методом {@link #execute(String[])},
|
||||||
|
* используется для реализации шаблон проектирования Command
|
||||||
|
*/
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface Command {
|
public interface Command {
|
||||||
void execute(String[] args);
|
void execute(String[] args);
|
||||||
|
|
|
@ -7,23 +7,30 @@ import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
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 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 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||||
private boolean isActive = false;
|
private boolean isActive = false;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
clearScreen();
|
clearScreen();
|
||||||
CommandLine.registerBasicCommands();
|
CommandLineHandler.registerBasicCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
private CommandLine() {}
|
private CommandLineHandler() {}
|
||||||
|
|
||||||
public static CommandLine getInstance() {
|
public static CommandLineHandler getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +43,9 @@ public class CommandLine {
|
||||||
"execute_script {file_name} : считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме.");
|
"execute_script {file_name} : считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод, запускающий обработчик командной строки, для остановки требуется ввести команду "exit"
|
||||||
|
*/
|
||||||
public void start() {
|
public void start() {
|
||||||
System.out.println(LongStrings.GREETINGS.getValue());
|
System.out.println(LongStrings.GREETINGS.getValue());
|
||||||
this.isActive = true;
|
this.isActive = true;
|
||||||
|
@ -73,6 +83,9 @@ public class CommandLine {
|
||||||
updateHistory(alias);
|
updateHistory(alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод, останавливающий работу обработчика командной строки
|
||||||
|
*/
|
||||||
public void exit() {
|
public void exit() {
|
||||||
this.isActive = false;
|
this.isActive = false;
|
||||||
System.out.println("Выход из программы...");
|
System.out.println("Выход из программы...");
|
|
@ -6,7 +6,10 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class CommandRegistry {
|
/**
|
||||||
|
* Класс регистра команд, используемый для добавления, переопределения или удаления команд
|
||||||
|
*/
|
||||||
|
public final class CommandRegistry {
|
||||||
|
|
||||||
private static final Map<String, DescriptiveCommand> COMMANDS = new HashMap<>();
|
private static final Map<String, DescriptiveCommand> COMMANDS = new HashMap<>();
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,9 @@ import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс команд с описанием, оболочка для обычных команд, используются для корректной работы команды help
|
||||||
|
*/
|
||||||
@Data @AllArgsConstructor
|
@Data @AllArgsConstructor
|
||||||
public class DescriptiveCommand {
|
public class DescriptiveCommand {
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
|
@ -12,15 +12,24 @@ import java.util.Optional;
|
||||||
|
|
||||||
import static ru.erius.lab5.commandline.CommandRegistry.*;
|
import static ru.erius.lab5.commandline.CommandRegistry.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс объявления всех команд, связанных с манипуляциями над объектом класса PeopleDatabase
|
||||||
|
*
|
||||||
|
* @see PeopleDatabase
|
||||||
|
*/
|
||||||
public final class PeopleDatabaseCommands {
|
public final class PeopleDatabaseCommands {
|
||||||
|
|
||||||
private static PeopleDatabase peopleDatabase;
|
private static PeopleDatabase peopleDatabase;
|
||||||
private static final String COLORS = Arrays.toString(Color.values()),
|
private static final String COLORS = Arrays.toString(Color.values()),
|
||||||
COUNTRIES = Arrays.toString(Country.values());
|
COUNTRIES = Arrays.toString(Country.values());
|
||||||
private static final CommandLine CMD = CommandLine.getInstance();
|
private static final CommandLineHandler CMD = CommandLineHandler.getInstance();
|
||||||
|
|
||||||
private PeopleDatabaseCommands() {}
|
private PeopleDatabaseCommands() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе,
|
||||||
|
* если вам требуются данные команды
|
||||||
|
*/
|
||||||
public static void registerDatabaseCommands() {
|
public static void registerDatabaseCommands() {
|
||||||
registerCommand("info", args -> info(peopleDatabase),
|
registerCommand("info", args -> info(peopleDatabase),
|
||||||
"info : вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)");
|
"info : вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)");
|
||||||
|
|
|
@ -66,6 +66,9 @@ public class Person implements Comparable<Person> {
|
||||||
*/
|
*/
|
||||||
private Location location;
|
private Location location;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор для корректного преобразования человека из xml в объект
|
||||||
|
*/
|
||||||
private Person() {
|
private Person() {
|
||||||
this.id = ++existingPeople;
|
this.id = ++existingPeople;
|
||||||
}
|
}
|
||||||
|
@ -101,6 +104,12 @@ public class Person implements Comparable<Person> {
|
||||||
this.setPassportID(passportID);
|
this.setPassportID(passportID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод, меняющий все значения полей человека (кроме {@link #id} и {@link #creationDate}) в соответствии
|
||||||
|
* со значениями полей другого
|
||||||
|
*
|
||||||
|
* @param newPerson человек, чьи поля будут присвоены текущему
|
||||||
|
*/
|
||||||
public void update(Person newPerson) {
|
public void update(Person newPerson) {
|
||||||
this.location = newPerson.location;
|
this.location = newPerson.location;
|
||||||
this.coordinates = newPerson.coordinates;
|
this.coordinates = newPerson.coordinates;
|
||||||
|
@ -154,7 +163,7 @@ public class Person implements Comparable<Person> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Переопределенный метод сравнения двух людей,
|
* Переопределенный метод сравнения двух людей,
|
||||||
* сравнение производится по имени, номеру пасспорта,
|
* сравнение производится по имени, номеру паспорта,
|
||||||
* росту, национальности, местоположению и цвету глаз
|
* росту, национальности, местоположению и цвету глаз
|
||||||
*
|
*
|
||||||
* @param other Объект для сравнения
|
* @param other Объект для сравнения
|
||||||
|
|
|
@ -4,6 +4,9 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс парсера для корректного преобразования объекта LocalDate в xml формат и наоборот
|
||||||
|
*/
|
||||||
public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
|
public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
|
||||||
@Override
|
@Override
|
||||||
public LocalDate unmarshal(String v) throws Exception {
|
public LocalDate unmarshal(String v) throws Exception {
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package ru.erius.lab5.util;
|
package ru.erius.lab5.util;
|
||||||
|
|
||||||
public class UtilFunctions {
|
/**
|
||||||
|
* Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования
|
||||||
|
*/
|
||||||
|
public final class UtilFunctions {
|
||||||
|
|
||||||
private UtilFunctions() {}
|
private UtilFunctions() {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue