Author: chetanm
Date: Mon May 15 08:35:23 2017
New Revision: 1795147

URL: http://svn.apache.org/viewvc?rev=1795147&view=rev
Log:
OAK-6210 - Provide a consistent and extensible way to handle oak-run options 
while creating NodeStore

Implicitly handle the help and checking for NodeStore config support

Modified:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/Options.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/Options.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/Options.java?rev=1795147&r1=1795146&r2=1795147&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/Options.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/Options.java
 Mon May 15 08:35:23 2017
@@ -19,6 +19,7 @@
 
 package org.apache.jackrabbit.oak.run.cli;
 
+import java.io.IOException;
 import java.util.EnumSet;
 import java.util.Set;
 
@@ -46,13 +47,30 @@ public class Options {
         this.oakRunOptions = Sets.newEnumSet(asList(options), 
OptionBeans.class);
     }
 
-    public OptionSet parseAndConfigure(OptionParser parser, String[] args){
+    public OptionSet parseAndConfigure(OptionParser parser, String[] args) 
throws IOException {
+        return parseAndConfigure(parser, args, true);
+    }
+
+    /**
+     * Parses the arguments and configures the OptionBeans
+     *
+     * @param parser option parser instance
+     * @param args command line arguments
+     * @param checkNonOptions if true then it checks that non options are 
specified i.e. some NodeStore is
+     *                        selected
+     * @return optionSet returned from OptionParser
+     */
+    public OptionSet parseAndConfigure(OptionParser parser, String[] args, 
boolean checkNonOptions) throws IOException {
         for (OptionsBeanFactory o : Iterables.concat(oakRunOptions, 
beanFactories)){
             OptionsBean bean = o.newInstance(parser);
             optionBeans.put(bean.getClass(), bean);
         }
         optionSet = parser.parse(args);
         configure(optionSet);
+        checkForHelp(parser);
+        if (checkNonOptions) {
+            checkNonOptions(parser);
+        }
         return optionSet;
     }
 
@@ -60,6 +78,7 @@ public class Options {
         return optionSet;
     }
 
+    @SuppressWarnings("unchecked")
     public <T extends OptionsBean> T getOptionBean(Class<T> clazz){
         Object o = optionBeans.get(clazz);
         checkNotNull(o, "No [%s] found in [%s]",
@@ -80,4 +99,22 @@ public class Options {
             bean.configure(optionSet);
         }
     }
+
+    private void checkForHelp(OptionParser parser) throws IOException {
+        if (optionBeans.containsKey(CommonOptions.class)
+                && getCommonOpts().isHelpRequested()){
+            parser.printHelpOn(System.out);
+            System.exit(0);
+        }
+    }
+
+    private void checkNonOptions(OptionParser parser) throws IOException {
+        //Some non option should be provided to enable
+        if (optionBeans.containsKey(CommonOptions.class)
+                && getCommonOpts().getNonOptions().isEmpty()){
+            parser.printHelpOn(System.out);
+            System.exit(1);
+        }
+    }
+
 }


Reply via email to