Author: chetanm
Date: Thu May 18 12:01:24 2017
New Revision: 1795506

URL: http://svn.apache.org/viewvc?rev=1795506&view=rev
Log:
OAK-6236 - Improve the help output from oak-run commands

Added:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OakHelpFormatter.java
   (with props)
Modified:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/BlobStoreOptions.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/DocumentNodeStoreOptions.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/Options.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OptionsBean.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/RDBStoreOptions.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
 Thu May 18 12:01:24 2017
@@ -26,16 +26,20 @@ import java.nio.file.Path;
 import joptsimple.OptionParser;
 import org.apache.felix.inventory.Format;
 import org.apache.jackrabbit.oak.console.NodeStoreFixture;
+import org.apache.jackrabbit.oak.run.cli.CommonOptions;
 import org.apache.jackrabbit.oak.run.cli.NodeStoreFixtureProvider;
 import org.apache.jackrabbit.oak.run.cli.Options;
 import org.apache.jackrabbit.oak.run.commons.Command;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
 public class IndexCommand implements Command {
-
+    public static final String NAME = "index";
     public static final String INDEX_DEFINITIONS_JSON = 
"index-definitions.json";
     public static final String INDEX_INFO_TXT = "index-info.txt";
     public static final String INDEX_CONSISTENCY_CHECK_TXT = 
"index-consistency-check-report.txt";
+
+    private final String summary = "Provides index management related 
operations";
+
     private File info;
     private File definitions;
     private File consistencyCheckReport;
@@ -45,8 +49,10 @@ public class IndexCommand implements Com
         OptionParser parser = new OptionParser();
 
         Options opts = new Options();
+        opts.setCommandName(NAME);
+        opts.setSummary(summary);
+        opts.setConnectionString(CommonOptions.DEFAULT_CONNECTION_STRING);
         opts.registerOptionsFactory(IndexOptions.FACTORY);
-
         opts.parseAndConfigure(parser, args);
 
         IndexOptions indexOpts = opts.getOptionBean(IndexOptions.class);

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
 Thu May 18 12:01:24 2017
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -54,6 +55,7 @@ public class IndexOptions implements Opt
     private OptionSet options;
     private final Set<OptionSpec> actionOpts;
     private final OptionSpec<String> indexPaths;
+    private final Set<String> operationNames;
 
 
     public IndexOptions(OptionParser parser){
@@ -76,6 +78,7 @@ public class IndexOptions implements Opt
 
         //Set of options which define action
         actionOpts = ImmutableSet.of(stats, definitions, consistencyCheck, 
dumpIndex);
+        operationNames = collectionOperationNames(actionOpts);
     }
 
     @Override
@@ -83,6 +86,27 @@ public class IndexOptions implements Opt
         this.options = options;
     }
 
+    @Override
+    public String title() {
+        return "";
+    }
+
+    @Override
+    public String description() {
+        return "Index command supports following operations. Most operations 
are read only. For performing them " +
+                "BloStore related options must be provided as they would 
access the binaries stored there  ";
+    }
+
+    @Override
+    public int order() {
+        return 50;
+    }
+
+    @Override
+    public Set<String> operationNames() {
+        return operationNames;
+    }
+
     public File getWorkDir() throws IOException {
         File workDir = workDirOpt.value(options);
         FileUtils.forceMkdir(workDir);
@@ -136,4 +160,12 @@ public class IndexOptions implements Opt
         }
         return new ArrayList<>(paths);
     }
+
+    private static Set<String> collectionOperationNames(Set<OptionSpec> 
actionOpts){
+        Set<String> result = new HashSet<>();
+        for (OptionSpec spec : actionOpts){
+            result.addAll(spec.options());
+        }
+        return result;
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 Thu May 18 12:01:24 2017
@@ -53,6 +53,6 @@ public final class AvailableModes {
             .put("tika", new TikaCommand())
             .put("upgrade", new UpgradeCommand())
             .put("unlockupgrade", new UnlockUpgradeCommand())
-            .put("index", new IndexCommand())
+            .put(IndexCommand.NAME, new IndexCommand())
             .build());
 }

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/BlobStoreOptions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/BlobStoreOptions.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/BlobStoreOptions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/BlobStoreOptions.java
 Thu May 18 12:01:24 2017
@@ -19,6 +19,9 @@
 
 package org.apache.jackrabbit.oak.run.cli;
 
+import java.util.Collections;
+import java.util.Set;
+
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
@@ -49,6 +52,26 @@ public class BlobStoreOptions implements
         this.options = options;
     }
 
+    @Override
+    public String title() {
+        return "BlobStore Options";
+    }
+
+    @Override
+    public String description() {
+        return "Options related to configuring a BlobStore";
+    }
+
+    @Override
+    public int order() {
+        return 10;
+    }
+
+    @Override
+    public Set<String> operationNames() {
+        return Collections.emptySet();
+    }
+
     public String getFDSConfigPath(){
         return fdsOption.value(options);
     }

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java
 Thu May 18 12:01:24 2017
@@ -19,7 +19,9 @@
 
 package org.apache.jackrabbit.oak.run.cli;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
@@ -28,6 +30,7 @@ import joptsimple.OptionSpec;
 import static java.util.Arrays.asList;
 
 public class CommonOptions implements OptionsBean {
+    public static final String DEFAULT_CONNECTION_STRING = 
"{<path-to-repository> | <mongodb-uri>} | <rdb-uri>}";
     private final OptionSpec<Void> help;
     private final OptionSpec<Void> readWriteOption;
     private final OptionSpec<String> nonOption;
@@ -36,7 +39,7 @@ public class CommonOptions implements Op
     public CommonOptions(OptionParser parser){
         help = parser.acceptsAll(asList("h", "?", "help"), "show 
help").forHelp();
         readWriteOption = parser.accepts("read-write", "connect to repository 
in read-write mode");
-        nonOption = parser.nonOptions("{<path-to-repository> | 
<mongodb-uri>}");
+        nonOption = parser.nonOptions(DEFAULT_CONNECTION_STRING);
     }
 
     @Override
@@ -72,4 +75,24 @@ public class CommonOptions implements Op
         List<String> nonOptions = nonOption.values(options);
         return nonOptions.size() > 0 ? nonOptions.get(0) : "";
     }
+
+    @Override
+    public String title() {
+        return null;
+    }
+
+    @Override
+    public String description() {
+        return null;
+    }
+
+    @Override
+    public int order() {
+        return 0;
+    }
+
+    @Override
+    public Set<String> operationNames() {
+        return Collections.emptySet();
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/DocumentNodeStoreOptions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/DocumentNodeStoreOptions.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/DocumentNodeStoreOptions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/DocumentNodeStoreOptions.java
 Thu May 18 12:01:24 2017
@@ -19,6 +19,9 @@
 
 package org.apache.jackrabbit.oak.run.cli;
 
+import java.util.Collections;
+import java.util.Set;
+
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
@@ -44,6 +47,26 @@ public class DocumentNodeStoreOptions im
         this.options = options;
     }
 
+    @Override
+    public String title() {
+        return "DocumentNodeStore Options";
+    }
+
+    @Override
+    public String description() {
+        return "Options related to constructing DocumentNodeStore";
+    }
+
+    @Override
+    public int order() {
+        return 20;
+    }
+
+    @Override
+    public Set<String> operationNames() {
+        return Collections.emptySet();
+    }
+
     public int getClusterId(){
         return clusterId.value(options);
     }

Added: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OakHelpFormatter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OakHelpFormatter.java?rev=1795506&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OakHelpFormatter.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OakHelpFormatter.java
 Thu May 18 12:01:24 2017
@@ -0,0 +1,228 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.run.cli;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.primitives.Ints;
+import joptsimple.BuiltinHelpFormatter;
+import joptsimple.HelpFormatter;
+import joptsimple.OptionDescriptor;
+import joptsimple.OptionSpec;
+import joptsimple.internal.Strings;
+
+import static com.google.common.base.StandardSystemProperty.LINE_SEPARATOR;
+
+public class OakHelpFormatter implements HelpFormatter {
+    private static final int COL_WIDTH = 120;
+    private final List<OptionsBean> optionBeans;
+    private final String commandName;
+    private final String connectionString;
+    private final String summary;
+
+    public OakHelpFormatter(Iterable<OptionsBean> optionBeans, @Nullable 
String commandName,
+                            @Nullable String summary,@Nullable String 
connectionString) {
+        this.optionBeans = Lists.newArrayList(optionBeans);
+        this.commandName = commandName;
+        this.summary = summary;
+        this.connectionString = connectionString;
+    }
+
+    @Override
+    public String format(Map<String, ? extends OptionDescriptor> options) {
+        Map<String, ? extends OptionDescriptor> clonedOptions = 
Maps.newHashMap(options);
+        List<OptionCategory> optionCategories = categorise(clonedOptions);
+        //TODO Take care of left over options
+
+        StringBuilder builder = new StringBuilder();
+        builder.append(new 
MainSectionFormatter().format(options)).append(LINE_SEPARATOR.value());
+
+        for (OptionCategory c : optionCategories){
+            builder.append(c.format()).append(LINE_SEPARATOR.value());
+        }
+
+        return builder.toString();
+    }
+
+    private List<OptionCategory> categorise(Map<String, ? extends 
OptionDescriptor> options) {
+        List<OptionCategory> result = new ArrayList<>();
+
+        for (OptionsBean bean : optionBeans) {
+            Map<String, OptionDescriptor> optsForThisBean = new HashMap<>();
+            Map<String, OptionDescriptor> operationsForThisBean = new 
HashMap<>();
+            for (String name : getOptionNames(bean)) {
+                OptionDescriptor desc = options.remove(name);
+                if (desc != null) {
+                    if (bean.operationNames().contains(name)){
+                        operationsForThisBean.put(name, desc);
+                    } else {
+                        optsForThisBean.put(name, desc);
+                    }
+                }
+            }
+            result.add(new OptionCategory(bean, optsForThisBean, 
operationsForThisBean));
+        }
+        Collections.sort(result, Collections.reverseOrder());
+        return result;
+    }
+
+    private static int getColWidth() {
+        return COL_WIDTH;
+    }
+
+    private static Set<String> getOptionNames(OptionsBean bean) {
+        Set<String> names = new HashSet<>();
+        try {
+            for (Field field : bean.getClass().getDeclaredFields()) {
+                if (OptionSpec.class.isAssignableFrom(field.getType())) {
+                    field.setAccessible(true);
+                    OptionSpec spec = (OptionSpec) field.get(bean);
+                    names.addAll(spec.options());
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return names;
+    }
+
+
+    private static class OptionCategory implements Comparable<OptionCategory> {
+        final OptionsBean bean;
+        final Map<String, ? extends OptionDescriptor> options;
+        final Map<String, ? extends OptionDescriptor> operations;
+
+        public OptionCategory(OptionsBean bean, Map<String, ? extends 
OptionDescriptor> options,
+                              Map<String, OptionDescriptor> operations) {
+            this.bean = bean;
+            this.options = options;
+            this.operations = operations;
+        }
+
+        public String format() {
+            StringBuilder builder = new StringBuilder();
+            builder.append(new CategoryFormatter(bean).format(options));
+            if (!operations.isEmpty()) {
+                builder.append(LINE_SEPARATOR.value());
+                builder.append(new OperationsFormatter().format(operations));
+            }
+            return builder.toString();
+        }
+
+        @Override
+        public int compareTo(OptionCategory that) {
+            return Ints.compare(this.bean.order(), that.bean.order());
+        }
+    }
+
+    private static class CategoryFormatter extends BuiltinHelpFormatter {
+        final OptionsBean bean;
+
+        public CategoryFormatter(OptionsBean bean) {
+            super(getColWidth(), 2);
+            this.bean = bean;
+        }
+
+        @Override
+        protected void addRows(Collection<? extends OptionDescriptor> options) 
{
+            addHeader();
+            super.addRows(options);
+        }
+
+        @Override
+        protected void addNonOptionsDescription(Collection<? extends 
OptionDescriptor> options) {
+            //Noop call as category options do not specify non options
+        }
+
+        private void addHeader() {
+            String title = bean.title();
+            if (title != null) {
+                addNonOptionRow(title);
+                addNonOptionRow(Strings.repeat('=', title.length()));
+            }
+
+            if (bean.description() != null) {
+                addNonOptionRow(bean.description());
+            }
+        }
+    }
+
+    /**
+     * Used for rending options which are "operations"
+     */
+    private static class OperationsFormatter extends BuiltinHelpFormatter {
+
+        public static final String OPERATIONS = "Operations";
+
+        public OperationsFormatter() {
+            super(getColWidth(), 2);
+        }
+
+        @Override
+        protected void addHeaders(Collection<? extends OptionDescriptor> 
options) {
+            addOptionRow(OPERATIONS, message( "description.header" ) );
+            addOptionRow( Strings.repeat('-', OPERATIONS.length()), message( 
"description.divider" ) );
+        }
+
+        @Override
+        protected void addNonOptionsDescription(Collection<? extends 
OptionDescriptor> options) {
+            //Noop call as category options do not specify non options
+        }
+    }
+
+    /**
+     * Formatter for the first section of the help. It dumps the connection 
string, command
+     * and summary only. No options are handled by this formatter
+     */
+    private class MainSectionFormatter extends BuiltinHelpFormatter {
+
+        public MainSectionFormatter(){
+            super(getColWidth(), 2);
+        }
+
+        @Override
+        protected void addRows(Collection<? extends OptionDescriptor> options) 
{
+            String firstLine = commandName != null ? commandName + " " : "";
+            if (connectionString != null) {
+                firstLine += connectionString;
+            }
+
+            addNonOptionRow(firstLine);
+
+            if (summary != null) {
+                addNonOptionRow(summary);
+            }
+
+            fitRowsToWidth();
+        }
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OakHelpFormatter.java
------------------------------------------------------------------------------
    svn:eol-style = native

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=1795506&r1=1795505&r2=1795506&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
 Thu May 18 12:01:24 2017
@@ -27,7 +27,6 @@ import com.google.common.collect.ClassTo
 import com.google.common.collect.Iterables;
 import com.google.common.collect.MutableClassToInstanceMap;
 import com.google.common.collect.Sets;
-import joptsimple.BuiltinHelpFormatter;
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 
@@ -40,6 +39,9 @@ public class Options {
     private final ClassToInstanceMap<OptionsBean> optionBeans = 
MutableClassToInstanceMap.create();
     private OptionSet optionSet;
     private boolean disableSystemExit;
+    private String commandName;
+    private String summary;
+    private String connectionString;
 
     public Options(){
         this.oakRunOptions = EnumSet.allOf(OptionBeans.class);
@@ -67,7 +69,7 @@ public class Options {
             OptionsBean bean = o.newInstance(parser);
             optionBeans.put(bean.getClass(), bean);
         }
-        parser.formatHelpWith(new BuiltinHelpFormatter(120, 2));
+        parser.formatHelpWith(new OakHelpFormatter(optionBeans.values(), 
commandName, summary, connectionString));
         optionSet = parser.parse(args);
         configure(optionSet);
         checkForHelp(parser);
@@ -93,6 +95,26 @@ public class Options {
         beanFactories.add(factory);
     }
 
+    public Options withDisableSystemExit() {
+        this.disableSystemExit = true;
+        return this;
+    }
+
+    public Options setCommandName(String commandName) {
+        this.commandName = commandName;
+        return this;
+    }
+
+    public Options setSummary(String summary) {
+        this.summary = summary;
+        return this;
+    }
+
+    public Options setConnectionString(String connectionString) {
+        this.connectionString = connectionString;
+        return this;
+    }
+
     public CommonOptions getCommonOpts(){
         return getOptionBean(CommonOptions.class);
     }
@@ -125,9 +147,4 @@ public class Options {
             System.exit(code);
         }
     }
-
-    public Options withDisableSystemExit() {
-        this.disableSystemExit = true;
-        return this;
-    }
 }

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OptionsBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OptionsBean.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OptionsBean.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/OptionsBean.java
 Thu May 18 12:01:24 2017
@@ -19,9 +19,32 @@
 
 package org.apache.jackrabbit.oak.run.cli;
 
+import java.util.Set;
+
 import joptsimple.OptionSet;
 
 public interface OptionsBean {
 
     void configure(OptionSet options);
+
+    /**
+     * Title string for this set of options
+     */
+    String title();
+
+    /**
+     * Description string for this set of options
+     */
+    String description();
+
+    /**
+     * Used to sort the help output. Help for OptionsBean in descending order 
i.e.
+     * bean having highest order would be rendered first
+     */
+    int order();
+
+    /**
+     * Option names which are actually performing operation
+     */
+    Set<String> operationNames();
 }

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/RDBStoreOptions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/RDBStoreOptions.java?rev=1795506&r1=1795505&r2=1795506&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/RDBStoreOptions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/RDBStoreOptions.java
 Thu May 18 12:01:24 2017
@@ -19,6 +19,9 @@
 
 package org.apache.jackrabbit.oak.run.cli;
 
+import java.util.Collections;
+import java.util.Set;
+
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
@@ -38,6 +41,26 @@ public class RDBStoreOptions implements
         this.options = options;
     }
 
+    @Override
+    public String title() {
+        return "RDBDocumentStore Options";
+    }
+
+    @Override
+    public int order() {
+        return 15;
+    }
+
+    @Override
+    public String description() {
+        return "Options related to configuring RDBDocumentStore for 
DocumentNodeStore based setups";
+    }
+
+    @Override
+    public Set<String> operationNames() {
+        return Collections.emptySet();
+    }
+
     public String getUser(){
         return rdbjdbcuser.value(options);
     }


Reply via email to