13

I can create 2 mutually exclusive options using the following:

Option a = OptionBuilder.create("a");
Option b = OptionBuilder.create("b");

OptionGroup optgrp = new OptionGroup();
optgrp .setRequired(true);
optgrp .addOption(a);
optgrp .addOption(b);

The above will force the user to provide either option a or option b.

But if I have a third option, c:

Option c = OptionBuilder.create("c");

is it possible to create mutually exclusive options such that:

Either:

  1. Option a must be provided OR
  2. Both options b and c must be provided

I couldn't see a way to do it using OptionGroup?

Rory
  • 221
  • 2
  • 7

1 Answers1

8

As a workaround to this, I implemented the following, not ideal, but..

public static void validate(final CommandLine cmdLine) {
   final boolean aSupplied = cmdLine.hasOption(A);

   final boolean bAndCSupplied = cmdLine.hasOption(B) && cmdLine.hasOption(C);

   final boolean bOrCSupplied = !bAndCSupplied && (cmdLine.hasOption(B) || cmdLine.hasOption(C));

   if ((aSupplied && bAndCSupplied) || (!aSupplied && !bAndCSupplied)
      || (aSupplied && bOrCSupplied )) {
          throw new Exception(...);
   }
}
Rory
  • 221
  • 2
  • 7
  • 2
    Yes, I don't think functionality in commons-cli goes that far, but on the other hand it would add a lot of very complicated code for a few cases that can easily be dealt with outside of the library like you did. – centic Jan 08 '15 at 12:07