Example usage for com.google.common.collect RowSortedTable rowMap

List of usage examples for com.google.common.collect RowSortedTable rowMap

Introduction

In this page you can find the example usage for com.google.common.collect RowSortedTable rowMap.

Prototype

@Override
SortedMap<R, Map<C, V>> rowMap();

Source Link

Document

This method returns a SortedMap , instead of the Map specified in the Table interface.

Usage

From source file:com.google.cloud.dataflow.sdk.options.PipelineOptionsFactory.java

/**
 * Outputs the set of options available to be set for the passed in {@link PipelineOptions}
 * interface. The output is in a human readable format. The format is:
 * <pre>/*from   ww  w.j  av  a2s  .  c o  m*/
 * OptionGroup:
 *     ... option group description ...
 *
 *  --option1={@code <type>} or list of valid enum choices
 *     Default: value (if available, see {@link Default})
 *     ... option description ... (if available, see {@link Description})
 *     Required groups (if available, see {@link Required})
 *  --option2={@code <type>} or list of valid enum choices
 *     Default: value (if available, see {@link Default})
 *     ... option description ... (if available, see {@link Description})
 *     Required groups (if available, see {@link Required})
 * </pre>
 * This method will attempt to format its output to be compatible with a terminal window.
 */
public static void printHelp(PrintStream out, Class<? extends PipelineOptions> iface) {
    checkNotNull(out);
    checkNotNull(iface);
    validateWellFormed(iface, REGISTERED_OPTIONS);

    Set<PipelineOptionSpec> properties = PipelineOptionsReflector.getOptionSpecs(iface);

    RowSortedTable<Class<?>, String, Method> ifacePropGetterTable = TreeBasedTable
            .create(ClassNameComparator.INSTANCE, Ordering.natural());
    for (PipelineOptionSpec prop : properties) {
        ifacePropGetterTable.put(prop.getDefiningInterface(), prop.getName(), prop.getGetterMethod());
    }

    for (Map.Entry<Class<?>, Map<String, Method>> ifaceToPropertyMap : ifacePropGetterTable.rowMap()
            .entrySet()) {
        Class<?> currentIface = ifaceToPropertyMap.getKey();
        Map<String, Method> propertyNamesToGetters = ifaceToPropertyMap.getValue();

        SortedSetMultimap<String, String> requiredGroupNameToProperties = getRequiredGroupNamesToProperties(
                propertyNamesToGetters);

        out.format("%s:%n", currentIface.getName());
        prettyPrintDescription(out, currentIface.getAnnotation(Description.class));

        out.println();

        List<String> lists = Lists.newArrayList(propertyNamesToGetters.keySet());
        Collections.sort(lists, String.CASE_INSENSITIVE_ORDER);
        for (String propertyName : lists) {
            Method method = propertyNamesToGetters.get(propertyName);
            String printableType = method.getReturnType().getSimpleName();
            if (method.getReturnType().isEnum()) {
                printableType = Joiner.on(" | ").join(method.getReturnType().getEnumConstants());
            }
            out.format("  --%s=<%s>%n", propertyName, printableType);
            Optional<String> defaultValue = getDefaultValueFromAnnotation(method);
            if (defaultValue.isPresent()) {
                out.format("    Default: %s%n", defaultValue.get());
            }
            prettyPrintDescription(out, method.getAnnotation(Description.class));
            prettyPrintRequiredGroups(out, method.getAnnotation(Validation.Required.class),
                    requiredGroupNameToProperties);
        }
        out.println();
    }
}