Было реализованно консольное приложения, которое предоставляет управление коллекцией объектов в интерактивном режиме. В коллекции хранятся объекты класса Flat.
В интерактивном режиме программа должна поддерживать выполнение следующих команд:
help - вывести справку по доступным командам
info - вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)
show - вывести в стандартный поток вывода все элементы коллекции в строковом представлении
add {element} - добавить новый элемент в коллекцию
update id {element} - обновить значение элемента по id
remove by id {element} - удалить элемент из коллекции по id
clear - очистить коллекцию
execute_script filename - считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме
exit : завершить программу
add_if_min {element} : добавить новый элемент в коллекцию, если его значение меньше, чем у наименьшего элемента этой коллекции
remove_lower {element} : удалить из коллекции все элементы, меньшие, чем заданный
reorder : отсортировать коллекцию в порядке, обратном нынешнему
remove_all_by_house house : удалить из коллекции все элементы, значение поля house которого эквивалентно заданному
average_of_number_of_rooms : вывести среднее значение поля numberOfRooms для всех элементов коллекции
max_by_furniture : вывести любой объект из коллекции, значение поля furniture которого является максимальным
Серверная часть реализует:
- Приём подключений
- Чтение запроса
- Обработка полученных заказов
- Отправка ответа клименту
Клиент корректно обрабатывает временную недоступность сервера.
Обмен данными между клиентом и сервером осуществляется по протоколу TCP
Для обмена данными на сервере используется сетевой канал
Для обмена данными на клиенте используется потоки ввода-вывода
Для хранения данных используется реляционная СУБД (PostgresQL).
Организована возможность регистрации и авторизации пользователей.
У пользователя есть возможность указать пароль.
Пароли при хранении хэшируются алгоритмом SHA-256
Запрещено выполнение команд не авторизованным пользователям.
При хранении объектов сохраняется информация о пользователе, который создал этот объект.
Пользователи имеют возможность просмотра всех объектов коллекции, но модифицировать могут только принадлежащие им.
Для идентификации пользователя отправляется логин и пароль с каждым запросом.
- Для многопоточного чтения запросов использовано создание нового потока (java.lang.Thread)
- Для многопотчной обработки полученного запроса использован Cached thread pool
- Для многопоточной отправки ответа использовано создание нового потока (java.lang.Thread)
Данный репозиторий - это реализация серверной части
Клиентская часть находится в репозитории client