Обработка аргументов с помощью 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": "a6be5e23-b8d4-4d78-8aa3-1c204d0befc8", "registrationDateTime": "2024-07-10T17:26:41.129567382" }, { "description": "обычный треугольник", "id": "baa30333-23d6-4eba-a8ed-7c235adf4228", "registrationDateTime": "2024-07-27T00:10:41.129642513" } ] }{ "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или его некорректное значение.
Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.