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

Java tutorial

Introduction

Here is the source code for nl.cyso.vcloud.client.config.Configuration.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.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import nl.cyso.vcloud.client.Formatter;
import nl.cyso.vcloud.client.types.ListType;
import nl.cyso.vcloud.client.types.ModeType;

import org.apache.commons.cli.AlreadySelectedException;
import org.apache.commons.cli.CommandLine;
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.UnrecognizedOptionException;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

public class Configuration {

    private static final String[] connection = new String[] { "server", "username", "password" };
    private static final String[] selectors = new String[] { "organization", "vdc", "vapp", "vm", "catalog" };
    private static final String[] input = new String[] { "fqdn", "description", "template", "network", "ip",
            "disk-name", "disk-size", "ip-address-allocation-mode" };

    private static Map<String, Object> configuration = new HashMap<String, Object>();

    protected static boolean has(String key) {
        return Configuration.configuration.containsKey(key);
    }

    protected static void set(String key, Object value) {
        Configuration.configuration.put(key, value);
    }

    protected static Object valueOrNull(String key) {
        if (Configuration.configuration.containsKey(key)) {
            return Configuration.configuration.get(key);
        } else {
            return null;
        }
    }

    public static boolean hasUsername() {
        return Configuration.has("username");
    }

    public static String getUsername() {
        return (String) Configuration.valueOrNull("username");
    }

    public static void setUsername(String username) {
        Configuration.set("username", username);
    }

    public static boolean hasPassword() {
        return Configuration.has("password");
    }

    public static String getPassword() {
        return (String) Configuration.valueOrNull("password");
    }

    public static void setPassword(String password) {
        Configuration.set("password", password);
    }

    public static boolean hasServer() {
        return Configuration.has("server");
    }

    public static String getServer() {
        return (String) Configuration.valueOrNull("server");
    }

    public static void setServer(String server) {
        Configuration.set("server", server);
    }

    public static boolean hasMode() {
        return Configuration.has("mode");
    }

    public static ModeType getMode() {
        return (ModeType) Configuration.valueOrNull("mode");
    }

    public static void setMode(ModeType mode) {
        Configuration.set("mode", mode);
    }

    public static boolean hasVDC() {
        return Configuration.has("vdc");
    }

    public static String getVDC() {
        return (String) Configuration.valueOrNull("vdc");
    }

    public static void setVDC(String vdc) {
        Configuration.set("vdc", vdc);
    }

    public static boolean hasVApp() {
        return Configuration.has("vapp");
    }

    public static String getVApp() {
        return (String) Configuration.valueOrNull("vapp");
    }

    public static void setVApp(String vapp) {
        Configuration.set("vapp", vapp);
    }

    public static boolean hasVM() {
        return Configuration.has("vm");
    }

    public static String getVM() {
        return (String) Configuration.valueOrNull("vm");
    }

    public static void setVM(String vm) {
        Configuration.set("vm", vm);
    }

    public static boolean hasCatalog() {
        return Configuration.has("catalog");
    }

    public static String getCatalog() {
        return (String) Configuration.valueOrNull("catalog");
    }

    public static void setCatalog(String catalog) {
        Configuration.set("catalog", catalog);
    }

    public static boolean hasOrganization() {
        return Configuration.has("organization");
    }

    public static String getOrganization() {
        return (String) Configuration.valueOrNull("organization");
    }

    public static void setOrganization(String organization) {
        Configuration.set("organization", organization);
    }

    public static boolean hasListType() {
        return Configuration.has("listType");
    }

    public static ListType getListType() {
        return (ListType) Configuration.valueOrNull("listType");
    }

    public static void setListType(ListType listType) {
        Configuration.set("listType", listType);
    }

    public static boolean hasHelpType() {
        return Configuration.has("help-type");
    }

    public static ModeType getHelpType() {
        return (ModeType) Configuration.valueOrNull("help-type");
    }

    public static void setHelpType(ModeType mode) {
        Configuration.set("help-type", mode);
    }

    public static boolean hasFqdn() {
        return Configuration.has("fqdn");
    }

    public static String getFqdn() {
        return (String) Configuration.valueOrNull("fqdn");
    }

    public static void setFqdn(String fqdn) {
        Configuration.set("fqdn", fqdn);
    }

    public static boolean hasDescription() {
        return Configuration.has("description");
    }

    public static String getDescription() {
        return (String) Configuration.valueOrNull("description");
    }

    public static void setDescription(String description) {
        Configuration.set("description", description);
    }

    public static boolean hasTemplate() {
        return Configuration.has("template");
    }

    public static String getTemplate() {
        return (String) Configuration.valueOrNull("template");
    }

    public static void setTemplate(String template) {
        Configuration.set("template", template);
    }

    public static boolean hasIp() {
        return Configuration.has("ip");
    }

    public static InetAddress getIp() {
        return (InetAddress) Configuration.valueOrNull("ip");
    }

    public static void setIp(InetAddress ip) {
        Configuration.set("ip", ip);
    }

    public static void setIp(String ip) throws UnknownHostException {
        Configuration.set("ip", InetAddress.getByName(ip));
    }

    public static boolean hasNetwork() {
        return Configuration.has("network");
    }

    public static String getNetwork() {
        return (String) Configuration.valueOrNull("network");
    }

    public static void setNetwork(String network) {
        Configuration.set("network", network);
    }

    public static boolean hasDiskName() {
        return Configuration.has("disk-name");
    }

    public static String getDiskName() {
        return (String) Configuration.valueOrNull("disk-name");
    }

    public static void setDiskName(String diskname) {
        Configuration.set("disk-name", diskname);
    }

    public static boolean hasDiskSize() {
        return Configuration.has("disk-size");
    }

    public static BigInteger getDiskSize() {
        return (BigInteger) Configuration.valueOrNull("disk-size");
    }

    public static void setDiskSize(BigInteger disksize) {
        Configuration.set("disk-size", disksize);
    }

    public static void setDiskSize(String disksize) {
        Configuration.set("disk-size", new BigInteger(disksize));
    }

    public static boolean hasIpAddressAllocationMode() {
        return Configuration.has("ip-address-allocation-mode");
    }

    public static String getIpAddressAllocationMode() {
        return (String) Configuration.valueOrNull("ip-address-allocation-mode");
    }

    public static void setIpAddressAllocationMode(String ipAddressAllocationMode) {
        Configuration.set("ip-address-allocation-mode", ipAddressAllocationMode);
    }

    public static CommandLine parseCli(ModeType mode, String[] args) {
        CommandLine cli = null;
        Options opt = ConfigModes.getMode(mode);
        try {
            cli = new IgnorePosixParser(true).parse(opt, args);
        } catch (MissingArgumentException me) {
            Formatter.usageError(me.getLocalizedMessage(), mode);
            System.exit(-1);
        } catch (MissingOptionException mo) {
            Formatter.usageError(mo.getLocalizedMessage(), mode);
            System.exit(-1);
        } catch (AlreadySelectedException ase) {
            Formatter.usageError(ase.getLocalizedMessage(), mode);
        } catch (UnrecognizedOptionException uoe) {
            Formatter.usageError(uoe.getLocalizedMessage(), mode);
        } catch (ParseException e) {
            Formatter.printStackTrace(e);
            System.exit(-1);
        }

        return cli;
    }

    public static void load(ModeType mode, String[] args) {
        CommandLine cli = Configuration.parseCli(mode, args);
        Configuration.load(cli);
    }

    public static void load(CommandLine cli) {
        for (Option opt : cli.getOptions()) {
            if (cli.hasOption(opt.getLongOpt())) {
                if (opt.getLongOpt().equals("help")) {
                    Configuration.setMode(ModeType.HELP);
                    if (cli.getOptionValue(opt.getLongOpt()) != null) {
                        Configuration
                                .setHelpType(ModeType.valueOf(cli.getOptionValue(opt.getLongOpt()).toUpperCase()));
                    }
                } else if (opt.getLongOpt().equals("version")) {
                    Configuration.setMode(ModeType.VERSION);
                } else if (opt.getLongOpt().equals("list")) {
                    Configuration.setMode(ModeType.LIST);
                    Configuration.setListType(ListType.valueOf(cli.getOptionValue(opt.getLongOpt()).toUpperCase()));
                } else if (opt.getLongOpt().equals("add-vm")) {
                    Configuration.setMode(ModeType.ADDVM);
                } else if (opt.getLongOpt().equals("remove-vm")) {
                    Configuration.setMode(ModeType.REMOVEVM);
                } else if (opt.getLongOpt().equals("poweron-vm")) {
                    Configuration.setMode(ModeType.POWERONVM);
                } else if (opt.getLongOpt().equals("poweroff-vm")) {
                    Configuration.setMode(ModeType.POWEROFFVM);
                } else if (opt.getLongOpt().equals("shutdown-vm")) {
                    Configuration.setMode(ModeType.SHUTDOWNVM);
                } else if (opt.getLongOpt().equals("resize-disk")) {
                    Configuration.setMode(ModeType.RESIZEDISK);
                } else if (opt.getLongOpt().equals("consolidate-vm")) {
                    Configuration.setMode(ModeType.CONSOLIDATEVM);
                } else if (opt.getLongOpt().equals("ip")) {
                    try {
                        Configuration.setIp(cli.getOptionValue(opt.getLongOpt()));
                    } catch (UnknownHostException uhe) {
                        Configuration.setIp((InetAddress) null);
                    }
                } else if (opt.getLongOpt().equals("disk-size")) {
                    Configuration.setDiskSize(cli.getOptionValue(opt.getLongOpt()));
                } else if (opt.getLongOpt().equals("ip-address-allocation-mode")) {
                    Configuration.setIpAddressAllocationMode(cli.getOptionValue(opt.getLongOpt()));

                } else {
                    Configuration.set(opt.getLongOpt(), cli.getOptionValue(opt.getLongOpt()));
                }
            }
        }
    }

    public static void loadFile(String filename) {
        org.apache.commons.configuration.Configuration conf = null;
        try {
            conf = new PropertiesConfiguration(filename);
        } catch (ConfigurationException e) {
            Formatter.printErrorLine("Failed to load configuration file");
            Formatter.printErrorLine(e.getLocalizedMessage());
            return;
        }

        Iterator<String> i = conf.getKeys();
        while (i.hasNext()) {
            String key = i.next();

            if (key.equals("help")) {
                Configuration.setMode(ModeType.HELP);
            } else if (key.equals("version")) {
                Configuration.setMode(ModeType.VERSION);
            } else if (key.equals("list")) {
                Configuration.setMode(ModeType.LIST);
                Configuration.setListType(ListType.valueOf(conf.getString(key).toUpperCase()));
            } else if (key.equals("ip")) {
                try {
                    Configuration.setIp(conf.getString(key));
                } catch (UnknownHostException uhe) {
                    Configuration.setIp((InetAddress) null);
                }
            } else {
                Configuration.set(key, conf.getString(key));
            }
        }
    }

    public String toString() {
        return Configuration.dumpToString();
    }

    public static String dumpToString() {
        return Configuration.dumpToString(ConfigModes.getConsolidatedModes());
    }

    public static String dumpToString(ModeType mode) {
        return Configuration.dumpToString(ConfigModes.getMode(mode));
    }

    public static String dumpToString(ConfigMode mode) {
        StringBuilder dump = new StringBuilder();

        dump.append(String.format("Selected operation: %s\n", Configuration.getMode().toString()));
        if (Configuration.getMode() == ModeType.LIST) {
            dump.append(String.format("Selected mode: %s\n", Configuration.getListType().toString()));
        }

        dump.append("Connection configuration: \n");
        for (String in : Configuration.connection) {
            if (Configuration.has(in) && mode.hasOption(in)) {
                if (in.equals("password")) {
                    continue;
                }
                dump.append(String.format("\t %s: %s\n", in, Configuration.valueOrNull(in)));
            }
        }

        dump.append("Selector configuration: \n");
        for (String in : Configuration.selectors) {
            if (Configuration.has(in) && mode.hasOption(in)) {
                dump.append(String.format("\t %s: %s\n", in, Configuration.valueOrNull(in)));
            }
        }

        dump.append("User input: \n");
        for (String in : Configuration.input) {
            System.err.println(in);
            if (Configuration.has(in) && mode.hasOption(in)) {
                if (in.equals("ip")) {
                    dump.append(String.format("\t %s: %s\n", in,
                            ((InetAddress) Configuration.valueOrNull(in)).getHostAddress()));
                } else {
                    dump.append(String.format("\t %s: %s\n", in, Configuration.valueOrNull(in)));
                }
            }
        }

        return dump.toString();
    }
}