2015-01-07 7 views
6

kann ich zwei sich gegenseitig ausschließende Optionen erstellen die folgende Verwendung:Einander ausschließende Optionen mit Apache Commons CLI

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

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

Die oben wird der Benutzer gezwungen, entweder Option eine oder Option b zur Verfügung zu stellen.

Aber wenn ich eine dritte Option, c:

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

ist es möglich, sich gegenseitig ausschließende Optionen zu schaffen, so dass:

Entweder:

  1. Option a zur Verfügung gestellt werden müssen, OR
  2. Beide Optionen b und c müssen angegeben werden

Ich konnte keinen Weg sehen, es mit OptionGroup zu tun?

Antwort

4

dazu Als Abhilfe kann implementiert ich die folgenden, nicht ideal, aber ..

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(...); 
    } 
} 
+0

Ja, ich glaube nicht, Funktionalität in commons-cli so weit geht, aber auf der anderen Seite wäre es fügen Sie sehr viel komplizierten Code für ein paar Fälle hinzu, die leicht wie außerhalb der Bibliothek behandelt werden können. – centic

Verwandte Themen