2015-01-07 15 views
6

posso creare 2 opzioni si escludono a vicenda usando la seguente:opzioni mutualmente esclusive che utilizzano 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); 

È possibile che questo costringerà l'utente a fornire entrambe le opzioni a o l'opzione b.

Ma se ho una terza opzione, c:

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

è possibile creare opzioni si escludono a vicenda in modo tale che:

O:

  1. Opzione a deve fornire o
  2. Devono essere fornite entrambe le opzioni b e c

Non riuscivo a vedere un modo per farlo usando OptionGroup?

risposta

4

Come soluzione a questo, ho implementato il seguente, non è l'ideale, ma ..

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

Sì, non credo funzionalità in commons-cli va così lontano, ma d'altra parte sarebbe aggiungi un sacco di codice molto complicato per alcuni casi che possono essere facilmente gestiti al di fuori della biblioteca come hai fatto tu. – centic

Problemi correlati