Базы данных SQL-DDL и SQL-DML. Изучение транзакций. Программирование на языке SQL. Консольное приложение (Цикл лабораторных работ). Вариант № 2, страница 13

            } else {

                // Добавляем аргумент командной строки к значениям опции

                final List<String> values = options.get(current);

                assert values != null;

                values.add(option);

            }

            optind++;

        }

        // Если для ошибочной опции найдено значение или найдено слишком мало

        if (!options.get(ERROR_OPTION).isEmpty() || options.size() == 1) {

            // выводим справку и выходим

            printHelp();

        }

        // Удаляем ошибочную опцию, так как она неважна

        options.remove(ERROR_OPTION);

        return options;

    }

   /**

     * Проверяет число строк - значений для заданной опции.

     * В случае несовпадения ожидаемого и фактического количества значений

     * выводит справку и завершает работу.

     * @param option        опция

     * @param values        значения

     * @param expectedSize  ожидаемое количество значений

     */

    private static void checkOptionValues(

            final String option,

            final Collection<String> values,

            final int expectedSize) {

        assert values != null;

        if (values.size() != expectedSize) {

            // Выводим сообщение об ошибке, справку и завершаем работу

            System.out.println("Недопустимое значение для опции " + option);

            printHelp();

        }

    }

    /**

     * @param args the command line arguments

     */

    public static void main(String [] args) {

      // Разбираем параметры командной строки

        final Map<String, List<String>> options = parseOptions(args);

//        Class dr = Class.forName("org.firebirdsql.jdbc.FBDriver");

//        Connection c = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/G:/Tanya/BD/FILMBASE.FDB",

//                 "sysdba", "masterkey");

        // Для каждой опции выполняем нужные операции

        for (String option: options.keySet()) {

            final Collection<String> values = options.get(option);

            if (LIST_PERSONS.equals(option)) {

                // Обработка команды вывода списка киноперсон

                checkOptionValues(LIST_PERSONS, values, 0);

                listPersons();

            } else if (LIST_FILMS.equals(option)) {

                // Обработка команды вывода списка фильмов

                // Команда может иметь ноль или один аргумент

                if (values.isEmpty()) {

                    // Команда не имеет аргументов:

                    listFilms();

                } else if (values.size() == 1) {

                    // Команда имеет один аргумент

                    // -o_films <genre>

                    final Iterator<String> iterator = values.iterator();

                    final String genre = iterator.next();

                    listFilmsForGenre(genre);

                } else {

                    // Недопустимое число аргументов для команды.

                    // Выводим справку и выходим.

                    System.out.println("Недопустимое значение для опции " + option);

                    printHelp();

                }

            } else if (ADD_FILMS.equals(option)) {

                // Обработка команды добавления фильмов

                // Команда имеет один аргумент - имя xml-файла с фильмами

                checkOptionValues(option, values, 1);