nl.cyso.vcloud.client.config.ConfigModes.java Source code

Java tutorial

Introduction

Here is the source code for nl.cyso.vcloud.client.config.ConfigModes.java

Source

/*
 * Copyright (c) 2013 Cyso < development [at] cyso . nl >
 *
 * This file is part of vcloud-client.
 *
 * vcloud-client is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * vcloud-client is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with vcloud-client. If not, see <http://www.gnu.org/licenses/>.
 */
package nl.cyso.vcloud.client.config;

import java.util.HashMap;
import java.util.Map;

import nl.cyso.vcloud.client.Version;
import nl.cyso.vcloud.client.types.ModeType;

import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.OptionGroup;

public class ConfigModes {

    private static Map<ModeType, ConfigMode> modeMap;

    static {
        ConfigModes.modeMap = new HashMap<ModeType, ConfigMode>(ModeType.values().length);

        // Configuration file
        ConfigParameter config = new ConfigParameter("c", "config", true, "FILE", "Use a configuration file");

        // Connection information
        ConfigParameter username = new ConfigParameter("u", "username", true, "USER", "vCloud Director username");
        ConfigParameter password = new ConfigParameter("p", "password", true, "PASSWORD",
                "vCloud Director password");
        ConfigParameter server = new ConfigParameter("s", "server", true, "SERVER", "vCloud Director server URI");

        // Modes
        ConfigParameter helpmode = new ConfigParameter("h", "help", true, "COMMAND", "Show help and examples");
        helpmode.setOptionalArg(true);
        ConfigParameter versionmode = new ConfigParameter("v", "version", false, "Show version information");
        ConfigParameter listmode = new ConfigParameter("l", "list", true, "TYPE",
                "List vCloud objects (org|vdc|vapp|catalog|vm)");
        ConfigParameter addmode = new ConfigParameter("a", "add-vm", false,
                "Add a new VM from a vApp Template to an existing vApp");
        ConfigParameter removemode = new ConfigParameter("r", "remove-vm", false,
                "Remove a VM from an existing vApp");
        ConfigParameter poweronmode = new ConfigParameter("y", "poweron-vm", false, "Start an existing VM");
        ConfigParameter poweroffmode = new ConfigParameter("t", "poweroff-vm", false,
                "Stop an existing VM (hard shutdown)");
        ConfigParameter shutdownmode = new ConfigParameter("z", "shutdown-vm", false,
                "Shutdown an existing VM (soft shutdown)");
        ConfigParameter resizediskmode = new ConfigParameter("w", "resize-disk", false,
                "Resize the disk of an existing VM");
        ConfigParameter consolidatemode = new ConfigParameter("x", "consolidate-vm", false,
                "Consolidate all disks of an existing VM");

        // Selectors
        ConfigParameter organization = new ConfigParameter("organization", true, "ORG", "Select this Organization");
        ConfigParameter vdc = new ConfigParameter("vdc", true, "VDC", "Select this Virtual Data Center");
        ConfigParameter vapp = new ConfigParameter("vapp", true, "VAPP", "Select this vApp");
        ConfigParameter vm = new ConfigParameter("vm", true, "VM", "Select this VM");

        ConfigParameter catalog = new ConfigParameter("catalog", true, "CATALOG", "Select this catalog");
        ConfigParameter template = new ConfigParameter("template", true, "TEMPLATE", "Select this template");

        // User input
        ConfigParameter fqdn = new ConfigParameter("fqdn", true, "FQDN", "Name of object to create");
        ConfigParameter description = new ConfigParameter("description", true, "DESC",
                "Description of object to create");
        ConfigParameter ip = new ConfigParameter("ip", true, "IP", "IP of the object to create");
        ConfigParameter network = new ConfigParameter("network", true, "NETWORK",
                "Network of the object to create");

        ConfigParameter diskname = new ConfigParameter("disk-name", true, "DISK", "Name of disk to resize");
        ConfigParameter disksize = new ConfigParameter("disk-size", true, "SIZE", "New size of disk in MB");

        OptionGroup modes = new OptionGroup();
        modes.addOption(listmode);
        modes.addOption(helpmode);
        modes.addOption(versionmode);
        modes.addOption(addmode);
        modes.addOption(removemode);
        modes.addOption(poweronmode);
        modes.addOption(poweroffmode);
        modes.addOption(shutdownmode);
        modes.addOption(resizediskmode);
        modes.addOption(consolidatemode);
        modes.setRequired(true);

        // Options for root
        ConfigMode root = new ConfigMode();
        root.addOptionGroup(modes);
        root.addOption(config);
        root.addOption(username);
        root.addOption(password);
        root.addOption(server);

        // Options for list
        ConfigMode list = new ConfigMode();
        list.addRequiredOption(listmode);
        list.addOption(server);
        list.addOption(username);
        list.addOption(password);
        list.addOption(config);

        // Options for add-vm
        ConfigMode add = new ConfigMode();
        add.addRequiredOption(addmode);
        add.addOption(server);
        add.addOption(username);
        add.addOption(password);
        add.addOption(config);

        add.addRequiredOption(organization);
        add.addRequiredOption(vdc);
        add.addRequiredOption(vapp);
        add.addRequiredOption(catalog);
        add.addRequiredOption(template);

        add.addRequiredOption(fqdn);
        add.addRequiredOption(description);
        add.addRequiredOption(network);
        add.addRequiredOption(ip);

        // Options for remove-vm
        ConfigMode remove = new ConfigMode();
        remove.addRequiredOption(removemode);
        remove.addOption(server);
        remove.addOption(username);
        remove.addOption(password);
        remove.addOption(config);

        remove.addRequiredOption(organization);
        remove.addRequiredOption(vdc);
        remove.addRequiredOption(vapp);
        remove.addRequiredOption(vm);

        // Options for poweron-vm
        ConfigMode poweron = new ConfigMode();
        poweron.addRequiredOption(poweronmode);
        poweron.addOption(server);
        poweron.addOption(username);
        poweron.addOption(password);
        poweron.addOption(config);

        poweron.addRequiredOption(organization);
        poweron.addRequiredOption(vdc);
        poweron.addRequiredOption(vapp);
        poweron.addRequiredOption(vm);

        // Options for poweroff-vm
        ConfigMode poweroff = new ConfigMode();
        poweroff.addRequiredOption(poweroffmode);
        poweroff.addOption(server);
        poweroff.addOption(username);
        poweroff.addOption(password);
        poweroff.addOption(config);

        poweroff.addRequiredOption(organization);
        poweroff.addRequiredOption(vdc);
        poweroff.addRequiredOption(vapp);
        poweroff.addRequiredOption(vm);

        // Options for shutdown-vm
        ConfigMode shutdown = new ConfigMode();
        shutdown.addRequiredOption(shutdownmode);
        shutdown.addOption(server);
        shutdown.addOption(username);
        shutdown.addOption(password);
        shutdown.addOption(config);

        shutdown.addRequiredOption(organization);
        shutdown.addRequiredOption(vdc);
        shutdown.addRequiredOption(vapp);
        shutdown.addRequiredOption(vm);

        // Options for resize-disk
        ConfigMode resizedisk = new ConfigMode();
        resizedisk.addRequiredOption(resizediskmode);
        resizedisk.addOption(server);
        resizedisk.addOption(username);
        resizedisk.addOption(password);
        resizedisk.addOption(config);

        resizedisk.addRequiredOption(organization);
        resizedisk.addRequiredOption(vdc);
        resizedisk.addRequiredOption(vapp);
        resizedisk.addRequiredOption(vm);
        resizedisk.addRequiredOption(diskname);
        resizedisk.addRequiredOption(disksize);

        // Options for consolidate-vm
        ConfigMode consolidate = new ConfigMode();
        consolidate.addRequiredOption(consolidatemode);
        consolidate.addOption(server);
        consolidate.addOption(username);
        consolidate.addOption(password);
        consolidate.addOption(config);

        consolidate.addRequiredOption(organization);
        consolidate.addRequiredOption(vdc);
        consolidate.addRequiredOption(vapp);
        consolidate.addRequiredOption(vm);

        // Options for help
        ConfigMode help = new ConfigMode();
        help.addRequiredOption(helpmode);

        // Options for version
        ConfigMode version = new ConfigMode();
        version.addRequiredOption(versionmode);

        ConfigModes.addMode(ModeType.ROOT, root);
        ConfigModes.addMode(ModeType.HELP, help);
        ConfigModes.addMode(ModeType.VERSION, version);
        ConfigModes.addMode(ModeType.LIST, list);
        ConfigModes.addMode(ModeType.ADDVM, add);
        ConfigModes.addMode(ModeType.REMOVEVM, remove);
        ConfigModes.addMode(ModeType.POWERONVM, poweron);
        ConfigModes.addMode(ModeType.POWEROFFVM, poweroff);
        ConfigModes.addMode(ModeType.SHUTDOWNVM, shutdown);
        ConfigModes.addMode(ModeType.RESIZEDISK, resizedisk);
        ConfigModes.addMode(ModeType.CONSOLIDATEVM, consolidate);
    }

    private static void addMode(ModeType type, ConfigMode mode) {
        ConfigModes.getModes().put(type, mode);
    }

    public static ConfigMode getMode(ModeType mode) {
        return ConfigModes.modeMap.get(mode);
    }

    public static Map<ModeType, ConfigMode> getModes() {
        return ConfigModes.modeMap;
    }

    public static ConfigMode getConsolidatedModes() {
        ConfigMode all = new ConfigMode();

        for (ConfigMode mode : ConfigModes.modeMap.values()) {
            for (ConfigParameter opt : mode.getAllOptions()) {
                opt.setRequired(false);
                all.addOption(opt);
            }
        }

        return all;
    }

    public static void printAllHelp() {
        HelpFormatter format = new HelpFormatter();

        for (ModeType mode : ConfigModes.getModes().keySet()) {
            format.setSyntaxPrefix(String.format("%s mode: ", mode.toString()));
            format.printHelp(Version.PROJECT_NAME, ConfigModes.getMode(mode), true);
        }
    }

    public static void printConfigModeHelp(ModeType mode) {
        HelpFormatter format = new HelpFormatter();
        if (mode != ModeType.ROOT) {
            format.setSyntaxPrefix(String.format("Usage for %s mode: ", mode.toString()));
        }
        format.printHelp(Version.PROJECT_NAME, ConfigModes.getMode(mode), true);
    }
}