co.cask.cdap.docgen.cli.GenerateCLIDocsTableCommand.java Source code

Java tutorial

Introduction

Here is the source code for co.cask.cdap.docgen.cli.GenerateCLIDocsTableCommand.java

Source

/*
 * Copyright  2012-2014 Cask Data, Inc.
 *
 * Licensed 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 co.cask.cdap.docgen.cli;

import co.cask.cdap.cli.CommandCategory;
import co.cask.cdap.cli.command.system.HelpCommand;
import co.cask.cdap.cli.util.table.TableRendererConfig;
import co.cask.common.cli.Arguments;
import co.cask.common.cli.Command;
import co.cask.common.cli.CommandSet;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicates;
import com.google.common.base.Splitter;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;

import java.io.PrintStream;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nullable;

/**
 * Generates data for the table in cdap-docs/reference-manual/source/cli-api.rst.
 */
public class GenerateCLIDocsTableCommand extends HelpCommand {

    public GenerateCLIDocsTableCommand(CommandSet commands, TableRendererConfig tableRendererConfig) {
        super(Suppliers.<Iterable<CommandSet<Command>>>ofInstance(ImmutableList.<CommandSet<Command>>of(commands)),
                tableRendererConfig);
    }

    @Override
    public void execute(Arguments arguments, PrintStream output) throws Exception {
        Multimap<String, Command> categorizedCommands = categorizeCommands(commands.get(), CommandCategory.GENERAL,
                Predicates.<Command>alwaysTrue());
        for (CommandCategory category : CommandCategory.values()) {
            output.printf("   **%s**\n", category.getOriginalName());
            List<Command> commandList = Lists.newArrayList(categorizedCommands.get(category.getName()));
            Collections.sort(commandList, new Comparator<Command>() {
                @Override
                public int compare(Command command, Command command2) {
                    return command.getPattern().compareTo(command2.getPattern());
                }
            });
            for (Command command : commandList) {
                output.printf("   ``%s``,\"%s\"\n", command.getPattern(),
                        command.getDescription().replace("\"", "\"\""));
            }
        }
    }

    private String simpleTitleCase(String sentence) {
        Iterator<String> transformedWords = Iterators.transform(Splitter.on(" ").split(sentence).iterator(),
                new Function<String, String>() {
                    @Nullable
                    @Override
                    public String apply(@Nullable String input) {
                        if (input == null) {
                            return null;
                        } else if (input.length() <= 1) {
                            return input.toUpperCase();
                        } else {
                            return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
                        }
                    }
                });
        return Joiner.on(" ").join(transformedWords);
    }

    @Override
    public String getPattern() {
        return "null";
    }

    @Override
    public String getDescription() {
        return "null";
    }
}