Обработка аргументов с помощью JCommander #
Обработка аргументов с помощью JCommander #
Презентацию по теме можно посмотреть по ссылке
Видео-запись: Rutube
Классы для работы с датами в JVM #
Презентацию по теме можно посмотреть по ссылке
Уникальные идентификаторы UUID #
Презентацию по теме можно посмотреть по ссылке
Задание #
Доработайте приложение треугольника, чтобы оно соответствовало данной спецификации.
Данные #
Элемент списка: треугольник.
Название поля | Описание поля | Тип поля |
---|---|---|
Id | Уникальный идентификатор | UUID |
SideA | Длина стороны | Натуральное число |
SideB | Длина стороны | Натуральное число |
SideC | Длина стороны | Натуральное число |
RegistrationDateTime | Дата регистрации в системе | Дата и время в формате YYYY-MM-DDThh:mm:ss.sss |
BorderColor | Цвет границы | Из списка цветов |
FillColor | Цвет заливки | Из списка цветов |
Description | Описание | Текст |
Пример описания треугольника в формате JSON:
{
"borderColor": "BLUE",
"description": "обычный сине-красный треугольник",
"fillColor": "RED",
"id": "782418f0-86d3-4de0-8450-05e2e1083766",
"registrationDateTime": "2024-08-19T02:45:41.142977656",
"sideA": 395,
"sideB": 165,
"sideC": 408
}
Приложение должно считывать список треугольников из CSV-файла (разделитель – запятая). Пример данных:
Id,SideA,SideB,SideC,RegistrationDateTime,BorderColor,FillColor,Description
66ade672-2301-4408-9471-8a17aa883d65,1,2,5,2024-08-26T19:01:41.114511727,GREEN,RED,"странные данные, это неправильный треугольник"
a6be5e23-b8d4-4d78-8aa3-1c204d0befc8,2,3,5,2024-07-10T17:26:41.129567382,RED,GREEN,"точки расположены на отрезке"
baa30333-23d6-4eba-a8ed-7c235adf4228,2,3,4,2024-07-27T00:10:41.129642513,RED,GREEN,"обычный треугольник"
Имя файла с исходными данными должно передаваться приложению с ключом --triangles-file
... --triangles-file="../data/file.csv"
... --triangles-file="C:\Users\AM\data\app-3968942893870838401.csv"
Список цветов #
Цвет | Описание | RGB |
---|---|---|
BLACK | Чёрный | #000000 |
WHITE | Белый | #FFFFFF |
RED | Красный | #FF0000 |
GREEN | Зелёный | #00FF00 |
BLUE | Синий | #0000FF |
YELLOW | Желтый | #FFFF00 |
CYAN | Голубой | #00FFFF |
MAGENTA | Пурпурный | #FF00FF |
SILVER | Серебряный | #C0C0C0 |
GRAY | Серый | #808080 |
MAROON | Бордовый | #800000 |
OLIVE | Оливковый | #808000 |
DARKGREEN | Тёмно-зелёный | #008000 |
PURPLE | Фиолетовый | #800080 |
TEAL | Бирюзовый | #008080 |
Команды приложения #
Первый аргумент приложения определяет команду, которую приложение должно выпполнить.
В зависимости от аргументов вызова приложение должно выполнять следующие команды:
-
list
– получить список треугольников.
Выходные данные: список всех треугольников в формате JSON, упорядоченный по возрастанию даты регистрации и id (при равенстве даты регистрации).
Информация о треугольнике должна содержать только идентификатор, дату регистрации и описание.{ "triangles": [ { "description": "обычный треугольник", "id": "baa30333-23d6-4eba-a8ed-7c235adf4228", "registrationDateTime": "2024-07-27T00:10:41.129642513" }, { "description": "точки расположены на отрезке", "id": "a6be5e23-b8d4-4d78-8aa3-1c204d0befc8", "registrationDateTime": "2024-07-10T17:26:41.129567382" } ] }
{ "triangles": [] }
-
show
– получить один элемент списка по идентификатору.
--id=ID
– обязательный параметр. Корректное значение: идентификатор существующего в списке треугольника.
Выходные данные: полная информация о треугольнике в формате JSON.show --id=66ade672-2301-4408-9471-8a17aa883d65
{ "id": "66ade672-2301-4408-9471-8a17aa883d65", "triangle": { "borderColor": "GREEN", "fillColor": "RED", "description": "странные данные, это не треугольник", "id": "66ade672-2301-4408-9471-8a17aa883d65", "registrationDateTime": "2024-08-26T19:01:41.114511727", "sideA": 1, "sideB": 2, "sideC": 5, "area": null, "type": "некорректный" } }
-
list-color
– получить список треугольников, отфильтрованный по цвету границы.
--border-color=COLOR
– обязательный параметр. Корректное значение: цвет из списка цветов.
Выходные данные: информация о треугольниках (только идентификатор и размеры) в формате JSON, список треугольников упорядочен по возрастанию даты регистрации и id (при равенстве даты регистрации).list-color --border-color=RED
{ "BorderColor": "RED", "triangles": [ { "id": "a6be5e23-b8d4-4d78-8aa3-1c204d0befc8", "sideA": 2, "sideB": 3, "sideC": 5 }, { "id": "baa30333-23d6-4eba-a8ed-7c235adf4228", "sideA": 2, "sideB": 3, "sideC": 4 } ] }
{ "BorderColor": "BLUE", "triangles": [] }
-
list-area
– получить список треугольников, отфильтрованный по площади треугольника.
--area-min=FLOAT
– необязательный параметр нижней границы фильтрации. Корректное значение: вещественное число.
--area-max=FLOAT
– необязательный параметр верхней границы фильтрации. Корректное значение: вещественное число.
Обязательно должен быть передан хотя бы один из параметров.Выходные данные: информация о треугольниках (только идентификатор и размеры) в формате JSON, список треугольников упорядочен по возрастанию даты регистрации и id (при равенстве даты регистрации).
list-area --area-min=1 list-area --area-max=1 list-area --area-min=0 --area-max=3.0
{ "AreaMin": 0.0, "AreaMax": 3.0, "triangles": [ { "id": "a6be5e23-b8d4-4d78-8aa3-1c204d0befc8", "sideA": 2, "sideB": 3, "sideC": 5 }, { "id": "baa30333-23d6-4eba-a8ed-7c235adf4228", "sideA": 2, "sideB": 3, "sideC": 4 } ] }
{ "AreaMin": 1.0, "triangles": [ { "id": "baa30333-23d6-4eba-a8ed-7c235adf4228", "sideA": 2, "sideB": 3, "sideC": 4 } ] }
-
statistic
– получить статистическую информацию о списке треугольников.--by=[color/type]
– обязательный параметр типа отображаемой статистики. Возможные значения:color
– статистика по цвету заливкиtype
– статистика по типу треугольника:- некорректный (наибольшая сторона больше суммы двух других)
- отрезок (наибольшая сторона равна сумме двух других)
- остроугольный (квадрат наибольшей стороны меньше суммы квадратов двух других)
- прямоугольный (квадрат наибольшей стороны равен сумме квадратов двух других)
- тупоугольный (квадрат наибольшей стороны больше суммы квадратов двух других)
Выходные данные: статистика в формате JSON. В выдаче должны присутствовать только те цвета или типы треугольника, которые есть в списке данных. Списки упорядочены лексикографически по возрастанию color и type соответственно.
statistic --by=color statistic --by=type statistic --by=color,type
{ "statisticByColor": [ { "color": "GREEN", "count": 2 }, { "color": "RED", "count": 1 } ] }
{ "statisticByType": [ { "type": "некорректный", "count": 1 }, { "type": "остроугольный", "count": 1 }, { "type": "отрезок", "count": 1 } ] }
{ "statisticByColor": [ { "color": "GREEN", "count": 2 }, { "color": "RED", "count": 1 } ], "statisticByType": [ { "type": "некорректный", "count": 1 }, { "type": "остроугольный", "count": 1 }, { "type": "отрезок", "count": 1 } ] }
Выходные данные #
При корректных входных данных приложение должно завершать работу с кодом возврата 0 и возвращать данные в формате JSON.
При некорректных входных данных приложение должно завершать работу с ненулевым кодом возврата и возвращать сообщение об ошибке. Некорректными данными считается:
- отсутствие аргумента команды или некорректная команда.
- отсутствие обязательного параметра команды, его некорректное значение или несоответствие значения указанному типу данных.
- отсутствие аргумента
--triangles-file
или его некорректное значение.
Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.