1. Мы много работаем с консолью. Пора создать единую точку взаимодействия.
Создай класс ConsoleHelper с единственным BufferedReader, через который будем работать с консолью.
Запомни, этот класс не хранит никаких данных и состояний, поэтому все методы будут статическими.
Создай в нем три метода:
- writeMessage(String message) - для вывода message в консоль
- String readString() - для чтения строки с консоли
- List<Dish> getAllDishesForOrder() - просит пользователя выбрать блюдо и добавляет его в список.
Выведи список всех блюд и попроси пользователя ввести строку - название блюда.
Введенное 'exit' означает завершение заказа.
В случае, если введенное блюдо не представлено в меню, выведи сообщение о том, что такого блюда нет и продолжи формирование заказа.
Исключения ввода-вывода бросай выше, на этом уровне не понятно, что с ними делать.
2. Вернемся к классу Order: в нем есть ссылка на планшет, и еще есть список выбранных блюд.
Инициализируй список dishes в конструкторе, вызвав метод getAllDishesForOrder из ConsoleHelper.
3. Перепиши метод toString в классе Order. Пусть он возвращает пустую строку, если нет блюд в заказе, иначе результат должен быть таким, как в примере (используй toString объекта tablet):
Your order: [JUICE, FISH] of Tablet{number=5}
Для этого также измени метод toString в классе Tablet (внутри класса Tablet нажмите Alt+Insert -> toString()).
Пример возвращаемого значения:
Tablet{number=5}
4. У нас все завязано на работу с консолью. Однако, при возникновении исключений, наше приложение умрет.
Чтобы узнать причину - добавим в Tablet статическое поле logger типа java.util.logging.Logger, инициализированное именем класса (Logger.getLogger(Tablet.class.getName())).
5. В методе createOrder класса Tablet обработаем исключения ввода-вывода.
Запишем в лог "Console is unavailable.". Уровень лога - SEVERE - это самый серьезный уровень, мы не можем работать.
Также в методе createOrder класса Tablet должен быть создан новый заказ и выведен в консоль (используй ConsoleHelper).
6. Надо начинать тестировать наше приложение.
Добавьте в main создание планшета и создание четырех заказов.
- Метод writeMessage класса ConsoleHelper должен выводить полученную строку в консоль.
- Метод readString класса ConsoleHelper должен возвращать строку считанную с консоли.
- Метод getAllDishesForOrder класса ConsoleHelper должен возвращать список блюд выбранных пользователем.
- В конструкторе класса Order список dishes должен быть инициализирован результатом работы метода getAllDishesForOrder.
- Метод toString в классе Order должен возвращать содержимое заказа согласно условию задачи.
- Поле logger в классе Tablet должно быть инициализировано с помощью метода Logger.getLogger() с именем текущего класса в качестве параметра.
- В методе createOrder класса Tablet должен быть создан новый заказ, в качестве параметра передай текущий планшет.
- В случае возникновения IOException в процессе создания заказа - в лог должно быть записано сообщение "Console is unavailable.", уровень - SEVERE.
- В методе main класса Restaurant должен быть создан новый планшет и с его помощью созданы четыре новых заказа.
- Метод toString в классе Tablet должен возвращать информацию о планшете (смотри пример в задании).