org.apache.directory.server.tools.BaseCommand.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.server.tools.BaseCommand.java

Source

/*
 * 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.directory.server.tools;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.cli.AlreadySelectedException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.MissingArgumentException;
import org.apache.commons.cli.MissingOptionException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.commons.cli.UnrecognizedOptionException;

import org.apache.directory.server.tools.commands.importcmd.ImportCommandCL;
import org.apache.directory.server.tools.commands.exportcmd.ExportCommandCL;
import org.apache.directory.server.tools.request.BaseToolCommandCL;

/**
 * The primary command base class.
 * 
 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
 * @version $Rev: 491471 $
 */
public class BaseCommand {
    private Map commands = new HashMap();

    private List commandsOrdered = new ArrayList();

    private Options global = new Options();

    private String productCommand;

    private String productVersion;

    private String productDisplayName;

    private String productUrl;

    private String productBanner;

    public BaseCommand() {
        init();
    }

    protected void init() {
        BaseToolCommandCL command;

        command = new ImportCommandCL();
        commands.put(command.getName(), command);
        commandsOrdered.add(command.getName());

        command = new ExportCommandCL();
        commands.put(command.getName(), command);
        commandsOrdered.add(command.getName());

        Option op = new Option("i", "install-path", true, "path to installation directory");
        getGlobal().addOption(op);
        op = new Option("b", "banner", false, "suppress banner print outs");
        getGlobal().addOption(op);
        op = new Option("d", "debug", false, "toggle debug mode");
        getGlobal().addOption(op);
        op = new Option("v", "verbose", false, "toggle verbose debugging");
        getGlobal().addOption(op);
        op = new Option("q", "quiet", false, "keep the noise down to a minimum");
        getGlobal().addOption(op);
        op = new Option("c", "configuration", false, "force loading the server.xml (requires -i)");
        getGlobal().addOption(op);
        op = new Option("version", false, "print the version information and exit");
        getGlobal().addOption(op);
    }

    public static boolean hasBannerOption(String[] args) {
        for (int ii = 0; ii < args.length; ii++) {
            if (args[ii].equals("-b") || args[ii].equals("-banner")) {
                return true;
            }
        }
        return false;
    }

    public CommandLine getCommandLine(String command, String[] args) {
        Options all = allOptions(command);
        CommandLineParser parser = new PosixParser();
        CommandLine cmdline = null;
        try {
            cmdline = parser.parse(all, args);
        } catch (AlreadySelectedException ase) {
            System.err.println("Command line parsing failed for " + command + ".  Reason: already selected "
                    + ase.getMessage());
            System.exit(1);
        } catch (MissingArgumentException mae) {
            System.err.println("Command line parsing failed for " + command + ".  Reason: missing argument "
                    + mae.getMessage());
            System.exit(1);
        } catch (MissingOptionException moe) {
            System.err.println(
                    "Command line parsing failed for " + command + ".  Reason: missing option " + moe.getMessage());
            System.exit(1);
        } catch (UnrecognizedOptionException uoe) {
            System.err.println("Command line parsing failed for " + command + ".  Reason: unrecognized option"
                    + uoe.getMessage());
            System.exit(1);
        } catch (ParseException pe) {
            System.err.println("Command line parsing failed for " + command + ".  Reason: " + pe.getClass());
            System.exit(1);
        }

        return cmdline;
    }

    public Options allOptions(String command) {
        if (command.equals("help")) {
            return getGlobal();
        }

        Options all = new Options();
        BaseToolCommandCL cmd = (BaseToolCommandCL) getCommands().get(command);

        for (Iterator ii = getGlobal().getOptions().iterator(); ii.hasNext();) {
            all.addOption((Option) ii.next());
        }

        for (Iterator ii = cmd.getOptions().getOptions().iterator(); ii.hasNext();) {
            all.addOption((Option) ii.next());
        }
        return all;
    }

    public static void dumpArgs(String msg, String[] args) {
        if (args.length == 0) {
            System.out.println(msg);
            System.out.println("\t NONE");
            return;
        }

        StringBuffer buf = new StringBuffer();
        buf.append(msg).append("\n");

        for (int ii = 0; ii < args.length; ii++) {
            buf.append("\targs[" + ii + "] = ").append(args[ii]).append("\n");
        }
        System.out.println(buf);
    }

    public void helpOnCommand(String command) {
        if (command.equals("help")) {
            printUsage();
            System.exit(0);
        }

        if (getCommands().containsKey(command)) {
            BaseToolCommandCL cmd = (BaseToolCommandCL) getCommands().get(command);
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp(getProductCommand() + " " + cmd + " [options]", cmd.getOptions());
        } else {
            System.err.println(command + ": unknown command");
            System.exit(1);
        }
    }

    public void printUsage() {
        HelpFormatter formatter = new HelpFormatter();
        formatter.printHelp(getProductCommand() + " <command> [options]", "\nGlobal options:", getGlobal(),
                "\nType \"" + getProductCommand() + " help <command>\" for help on a command.");
        System.out.println("\nAvailable commands:");

        Iterator it = commandsOrdered.iterator();
        System.out.println("\thelp");

        while (it.hasNext()) {
            System.out.println("\t" + it.next());
        }

        System.out.println("\nThese tools are used to manage " + getProductDisplayName() + ".");
        System.out.println("For additional information, see " + getProductUrl());
    }

    static final String BANNER = "       _                     _          ____  ____    _____           _      \n"
            + "      / \\   _ __   __ _  ___| |__   ___|  _ \\/ ___|  |_   _|__   ___ | |___  \n"
            + "     / _ \\ | '_ \\ / _` |/ __| '_ \\ / _ \\ | | \\___ \\    | |/ _ \\ / _ \\| / __| \n"
            + "    / ___ \\| |_) | (_| | (__| | | |  __/ |_| |___) |   | | (_) | (_) | \\__ \\ \n"
            + "   /_/   \\_\\ .__/ \\__,_|\\___|_| |_|\\___|____/|____/    |_|\\___/ \\___/|_|___/ \n"
            + "           |_|                                                               \n";

    public void printBanner() {
        System.out.println(getProductBanner());
    }

    public void setProductCommand(String productCommand) {
        this.productCommand = productCommand;
    }

    public String getProductCommand() {
        return productCommand;
    }

    public void setProductVersion(String productVersion) {
        this.productVersion = productVersion;
    }

    public String getProductVersion() {
        return productVersion;
    }

    public void setProductDisplayName(String productDisplayName) {
        this.productDisplayName = productDisplayName;
    }

    public String getProductDisplayName() {
        return productDisplayName;
    }

    public void setProductUrl(String productUrl) {
        this.productUrl = productUrl;
    }

    public String getProductUrl() {
        return productUrl;
    }

    public void setProductBanner(String productBanner) {
        this.productBanner = productBanner;
    }

    public String getProductBanner() {
        return productBanner;
    }

    public void setCommands(Map commands) {
        this.commands = commands;
    }

    public Map getCommands() {
        return commands;
    }

    public void setGlobal(Options global) {
        this.global = global;
    }

    public Options getGlobal() {
        return global;
    }
}