org.zend.sdkcli.internal.commands.UsageCommand.java Source code

Java tutorial

Introduction

Here is the source code for org.zend.sdkcli.internal.commands.UsageCommand.java

Source

/*******************************************************************************
 * Copyright (c) May 29, 2011 Zend Technologies Ltd. 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html  
 *******************************************************************************/
package org.zend.sdkcli.internal.commands;

import java.util.Collection;

import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.zend.sdkcli.CommandFactory;
import org.zend.sdkcli.CommandType;
import org.zend.sdkcli.ICommand;
import org.zend.sdkcli.internal.options.DetectOptionUtility;

/**
 *
 */
public class UsageCommand implements ICommand {

    @Override
    public boolean execute(CommandLine cmdLine) {

        String verb;
        String dirObj;
        if ("help".equals(cmdLine.getArgument(0))) {
            verb = cmdLine.getArgument(1);
            dirObj = cmdLine.getArgument(2);
        } else {
            verb = cmdLine.getArgument(0);
            dirObj = cmdLine.getArgument(1);
        }
        CommandLine helpCmd = null;
        ICommand cmd = null;

        helpCmd = new CommandLine(new String[] { verb, dirObj });
        cmd = CommandFactory.createCommand(helpCmd);

        printCommandUsage();

        if (helpCmd != null && cmd != null && (!(cmd instanceof UsageCommand))) {
            CommandType type = CommandType.byCommandLine(helpCmd);
            printCommandUsage(type);
            printCommandOptions(type);
            return true;
        }

        printAvailableCommands();

        System.out.println();
        return true;
    }

    private void printCommandUsage() {
        System.out.println("Usage:");
        System.out.println("  zend action [action options] [global options]");
        System.out.println();
        System.out.println("Global options:");

        final Options options = new Options();
        DetectOptionUtility.addOption(AbstractCommand.class, options, false);

        for (Object obj : options.getOptions()) {
            Option o = (Option) obj;
            System.out.printf("  -%-3s %s\n", o.getOpt(), o.getDescription());
        }
        System.out.println();
        System.out.println("Valid actions are composed of a verb and an optional direct object:");
    }

    private void printAvailableCommands() {
        for (CommandType type : CommandType.values()) {
            ICommand cmd = CommandFactory.createCommand(type);

            printCommandUsage(type);
        }
    }

    private void printCommandUsage(CommandType type) {
        String dirObj = type.getDirectObject();
        if (dirObj == null) {
            dirObj = "";
        }
        System.out.printf("- %-10s %-15s : %s", type.getVerb(), dirObj, type.getInfo());
        System.out.println();

    }

    private void printCommandOptions(CommandType type) {
        Options opts = new Options();
        System.out.println();

        // get command specific options
        DetectOptionUtility.addOption(CommandFactory.createCommand(type).getClass(), opts, true);

        if (opts.getOptions().size() > 0) {
            System.out.println("Options:");
            Collection collection = opts.getOptions();
            for (Object o : collection) {
                Option opt = (Option) o;
                System.out.printf("  -%-3s %s%s\n", opt.getOpt(), opt.getDescription(),
                        opt.isRequired() ? " [required]" : "");
            }
        } else {
            System.out.println("  No options");
        }

        System.out.println();
    }

    public Options getOptions() {
        return null;
    }
}