Search in sources :

Example 1 with ConfigWriter

use of com.zimbra.common.localconfig.ConfigWriter in project zm-mailbox by Zimbra.

the class LocalConfigCLI method exec.

private void exec(String[] args) {
    CommandLine cl = null;
    CommandLineParser parser = new GnuParser();
    try {
        cl = parser.parse(mOptions, args);
    } catch (ParseException pe) {
        Logging.error("Failed to parse command line: " + pe);
        System.exit(1);
    }
    if (cl.hasOption("q")) {
        Logging.setQuietMode(true);
    }
    if (cl.hasOption("h")) {
        usage();
    }
    // Load known keys from BackupLC if available
    loadExtensionLC("com.zimbra.cs.backup.BackupLC");
    // Load known keys from ZimbraOpenOfficeExt if available
    loadExtensionLC("com.zimbra.openoffice.config.OpenOfficeLC");
    // Load known keys from ZimbraVoice if available
    loadExtensionLC("com.zimbra.cs.voice.VoiceLC");
    // info/docs for supported keys
    if (cl.hasOption("i")) {
        checkCompatibleOptions("i", "q", cl);
        LocalConfig.printDoc(System.out, cl.getArgs(), false);
        return;
    }
    // info/docs for all keys (hidden option)
    if (cl.hasOption("all")) {
        checkCompatibleOptions("all", "q", cl);
        LocalConfig.printDoc(System.out, cl.getArgs(), true);
        return;
    }
    LocalConfig lc = null;
    try {
        lc = new LocalConfig(cl.getOptionValue("c"));
    } catch (DocumentException de) {
        error("failed when reading config file", de);
    } catch (ConfigException ce) {
        error("failed with error in config file", ce);
    }
    // edit
    if (cl.hasOption("e")) {
        checkNotRoot("-e");
        checkCompatibleOptions("e", "qfrc", cl);
        String[] av = cl.getArgs();
        if (av == null || av.length == 0) {
            error("insufficient arguments", null);
        }
        for (int i = 0; i < av.length; i++) {
            String key = null;
            String value = null;
            if (cl.hasOption("r")) {
                key = av[i];
                value = RandomPassword.generate();
            } else {
                int eqidx = av[i].indexOf("=");
                if (eqidx <= 0) {
                    // <= 0 also catches first char being =, ie no key specified
                    error("argument '" + av[i] + "' not in key=value form", null);
                }
                key = av[i].substring(0, eqidx);
                value = av[i].substring(eqidx + 1, av[i].length());
            }
            if (KnownKey.needForceToEdit(key) && !cl.hasOption("f")) {
                error("can not edit key " + key, null);
            }
            lc.set(key, value);
        }
        try {
            lc.save();
        } catch (Exception e) {
            error("save to " + lc.getConfigFile() + " failed", e);
        }
        return;
    }
    // unset
    if (cl.hasOption("u")) {
        checkNotRoot("-u");
        checkCompatibleOptions("u", "qfc", cl);
        String[] av = cl.getArgs();
        if (av == null || av.length == 0) {
            error("insufficient arguments", null);
        }
        for (int i = 0; i < av.length; i++) {
            String key = av[i];
            if (!lc.isSet(key)) {
                error("key " + key + " is not set", null);
            }
            lc.remove(key);
        }
        try {
            lc.save();
        } catch (Exception e) {
            error("save to " + lc.getConfigFile() + " failed", e);
        }
        return;
    }
    // show path
    if (cl.hasOption("p")) {
        checkCompatibleOptions("p", "qc", cl);
        System.out.println(lc.getConfigFile());
        return;
    }
    if (cl.hasOption("l")) {
        // reset logging and run native lib load
        CliUtil.toolSetup("WARN");
        try {
            reload();
        } catch (ServiceException e) {
            if (e.getCause() instanceof ConnectException) {
                error("'" + Provisioning.SERVICE_MAILBOX + "' service is not running", null);
            } else {
                error(e.getMessage(), e);
            }
        }
        return;
    }
    // print values
    String format = cl.getOptionValue("m");
    ConfigWriter cwriter = null;
    try {
        cwriter = ConfigWriter.getInstance(format, cl.hasOption("x"), !cl.hasOption("s"));
    } catch (ConfigException iae) {
        error("failed to create writer " + format, iae);
    }
    try {
        // changed
        if (cl.hasOption("n")) {
            checkCompatibleOptions("n", "qscmx", cl);
            lc.printChanged(System.out, cwriter, cl.getArgs());
            return;
        }
        // default
        if (cl.hasOption("d")) {
            checkCompatibleOptions("d", "qscmx", cl);
            lc.printDefaults(System.out, cwriter, cl.getArgs());
            return;
        }
        // current
        checkCompatibleOptions("", "qscmx", cl);
        lc.print(System.out, cwriter, cl.getArgs());
    } catch (Exception e) {
        error("exception occurred when printing", e);
    }
}
Also used : LocalConfig(com.zimbra.common.localconfig.LocalConfig) GnuParser(org.apache.commons.cli.GnuParser) ConfigException(com.zimbra.common.localconfig.ConfigException) ServiceException(com.zimbra.common.service.ServiceException) DocumentException(org.dom4j.DocumentException) ConnectException(java.net.ConnectException) IOException(java.io.IOException) ParseException(org.apache.commons.cli.ParseException) ConfigException(com.zimbra.common.localconfig.ConfigException) ZClientException(com.zimbra.common.zclient.ZClientException) ConfigWriter(com.zimbra.common.localconfig.ConfigWriter) CommandLine(org.apache.commons.cli.CommandLine) ServiceException(com.zimbra.common.service.ServiceException) DocumentException(org.dom4j.DocumentException) CommandLineParser(org.apache.commons.cli.CommandLineParser) ParseException(org.apache.commons.cli.ParseException) ConnectException(java.net.ConnectException)

Aggregations

ConfigException (com.zimbra.common.localconfig.ConfigException)1 ConfigWriter (com.zimbra.common.localconfig.ConfigWriter)1 LocalConfig (com.zimbra.common.localconfig.LocalConfig)1 ServiceException (com.zimbra.common.service.ServiceException)1 ZClientException (com.zimbra.common.zclient.ZClientException)1 IOException (java.io.IOException)1 ConnectException (java.net.ConnectException)1 CommandLine (org.apache.commons.cli.CommandLine)1 CommandLineParser (org.apache.commons.cli.CommandLineParser)1 GnuParser (org.apache.commons.cli.GnuParser)1 ParseException (org.apache.commons.cli.ParseException)1 DocumentException (org.dom4j.DocumentException)1