Exemple #1
0
  public void testParameterInt() throws OptionParserException {
    ProcessedCommand processedCommand = new ProcessedCommand("foo", "");
    processedCommand.addOption(new OptionBuilder().name("foo1").type(String.class).create());
    processedCommand.addOption(new OptionBuilder().name("foo2").type(String.class).create());
    processedCommand.addOption(new OptionBuilder().name("foo3").type(String.class).create());

    assertEquals("f", processedCommand.getOptions().get(0).getShortName());
    assertEquals("o", processedCommand.getOptions().get(1).getShortName());
    assertEquals("3", processedCommand.getOptions().get(2).getShortName());
  }
  public static CommandLineParser generateCommandLineParser(Class clazz)
      throws CommandLineParserException {
    CommandDefinition command = (CommandDefinition) clazz.getAnnotation(CommandDefinition.class);
    if (command == null)
      throw new CommandLineParserException("Commands must be annotated with @CommandDefinition");

    ProcessedCommand processedCommand =
        new ProcessedCommand(
            command.name(), command.description(), command.validator(), command.resultHandler());

    for (Field field : clazz.getDeclaredFields()) {
      Option o;
      OptionGroup og;
      OptionList ol;
      Arguments a;
      if ((o = field.getAnnotation(Option.class)) != null) {
        OptionType optionType;
        if (o.hasValue()) optionType = OptionType.NORMAL;
        else optionType = OptionType.BOOLEAN;
        if (o.name() == null || o.name().length() < 1) {
          processedCommand.addOption(
              o.shortName(),
              field.getName(),
              o.description(),
              o.argument(),
              o.required(),
              ',',
              o.defaultValue(),
              field.getType(),
              field.getName(),
              optionType,
              o.converter(),
              o.completer(),
              o.validator(),
              o.activator(),
              o.renderer(),
              o.overrideRequired());
        } else {
          processedCommand.addOption(
              o.shortName(),
              o.name(),
              o.description(),
              o.argument(),
              o.required(),
              ',',
              o.defaultValue(),
              field.getType(),
              field.getName(),
              optionType,
              o.converter(),
              o.completer(),
              o.validator(),
              o.activator(),
              o.renderer(),
              o.overrideRequired());
        }

      } else if ((ol = field.getAnnotation(OptionList.class)) != null) {
        if (!Collection.class.isAssignableFrom(field.getType()))
          throw new CommandLineParserException("OptionGroup field must be instance of Collection");
        Class type = Object.class;
        if (field.getGenericType() != null) {
          ParameterizedType listType = (ParameterizedType) field.getGenericType();
          type = (Class) listType.getActualTypeArguments()[0];
        }
        if (ol.name() == null || ol.name().length() < 1) {
          processedCommand.addOption(
              ol.shortName(),
              field.getName(),
              ol.description(),
              "",
              ol.required(),
              ol.valueSeparator(),
              ol.defaultValue(),
              type,
              field.getName(),
              OptionType.LIST,
              ol.converter(),
              ol.completer(),
              ol.validator(),
              ol.activator(),
              ol.renderer());
        } else {
          processedCommand.addOption(
              ol.shortName(),
              ol.name(),
              ol.description(),
              "",
              ol.required(),
              ol.valueSeparator(),
              ol.defaultValue(),
              type,
              field.getName(),
              OptionType.LIST,
              ol.converter(),
              ol.completer(),
              ol.validator(),
              ol.activator(),
              ol.renderer());
        }
      } else if ((og = field.getAnnotation(OptionGroup.class)) != null) {
        if (!Map.class.isAssignableFrom(field.getType()))
          throw new CommandLineParserException("OptionGroup field must be instance of Map");
        Class type = Object.class;
        if (field.getGenericType() != null) {
          ParameterizedType listType = (ParameterizedType) field.getGenericType();
          type = (Class) listType.getActualTypeArguments()[1];
        }
        if (og.name() == null || og.name().length() < 1) {
          processedCommand.addOption(
              og.shortName(),
              field.getName(),
              og.description(),
              "",
              og.required(),
              ',',
              og.defaultValue(),
              type,
              field.getName(),
              OptionType.GROUP,
              og.converter(),
              og.completer(),
              og.validator(),
              og.activator(),
              og.renderer());
        } else {
          processedCommand.addOption(
              og.shortName(),
              og.name(),
              og.description(),
              "",
              og.required(),
              ',',
              og.defaultValue(),
              type,
              field.getName(),
              OptionType.GROUP,
              og.converter(),
              og.completer(),
              og.validator(),
              og.activator(),
              og.renderer());
        }
      } else if ((a = field.getAnnotation(Arguments.class)) != null) {
        if (!Collection.class.isAssignableFrom(field.getType()))
          throw new CommandLineParserException("Arguments field must be instance of Collection");
        Class type = Object.class;
        if (field.getGenericType() != null) {
          ParameterizedType listType = (ParameterizedType) field.getGenericType();
          type = (Class) listType.getActualTypeArguments()[0];
        }
        processedCommand.setArgument(
            new ProcessedOption(
                '\u0000',
                "",
                a.description(),
                "",
                false,
                a.valueSeparator(),
                a.defaultValue(),
                type,
                field.getName(),
                OptionType.ARGUMENT,
                a.converter(),
                a.completer(),
                a.validator(),
                null,
                null));
      }
    }

    return new CommandLineParserBuilder().parameter(processedCommand).generateParser();
  }