/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.core.internal.cli; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.seedstack.seed.cli.CliArgs; import org.seedstack.seed.cli.CliOption; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Set; class CliModel { private final Options options = new Options(); private final List<CliOption> optionAnnotations = new ArrayList<>(); private final List<Field> optionFields = new ArrayList<>(); private Field argsField; private int mandatoryArgsCount; CliModel(Set<Field> fields) { for (Field field : fields) { CliOption optionAnnotation = field.getAnnotation(CliOption.class); CliArgs argsAnnotation = field.getAnnotation(CliArgs.class); if (optionAnnotation != null) { Option option = new Option( optionAnnotation.name(), optionAnnotation.longName(), optionAnnotation.valueCount() > 0 || optionAnnotation.valueCount() == -1, optionAnnotation.description() ); if (optionAnnotation.valueCount() == -1) { option.setArgs(Option.UNLIMITED_VALUES); } else if (optionAnnotation.valueCount() > 0) { option.setArgs(optionAnnotation.valueCount()); } option.setValueSeparator(optionAnnotation.valueSeparator()); option.setRequired(optionAnnotation.mandatory()); option.setOptionalArg(!optionAnnotation.mandatoryValue()); optionAnnotations.add(optionAnnotation); optionFields.add(field); options.addOption(option); } else if (argsAnnotation != null) { mandatoryArgsCount = argsAnnotation.mandatoryCount(); argsField = field; } } optionFields.forEach(field -> field.setAccessible(true)); if (argsField != null) { argsField.setAccessible(true); } } Options getOptions() { return options; } List<CliOption> getOptionAnnotations() { return optionAnnotations; } List<Field> getOptionFields() { return optionFields; } Field getArgsField() { return argsField; } int getMandatoryArgsCount() { return mandatoryArgsCount; } }