package com.javarush.test.level09.lesson08.task03;


import java.io.CharConversionException;
import java.io.IOException;
import java.nio.file.FileSystemException;

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args)
    {
        try
        {
            processExceptions();
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
        }
    }

    public static void processExceptions() throws FileSystemException
    {
        try
        {
            BEAN.methodThrowExceptions();
        }
        catch (CharConversionException e)
        {
            BEAN.log(e);
        }
        catch (FileSystemException e)
        {
            BEAN.log(e);
            throw e;
        }
        catch (IOException e)
        {
            BEAN.log(e);
        }

    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}