All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.jsignpdf.SignerOptionsFromCmdLine Maven / Gradle / Ivy

/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is 'JSignPdf, a free application for PDF signing'.
 *
 * The Initial Developer of the Original Code is Josef Cacek.
 * Portions created by Josef Cacek are Copyright (C) Josef Cacek. All Rights Reserved.
 *
 * Contributor(s): Josef Cacek.
 *
 * Alternatively, the contents of this file may be used under the terms
 * of the GNU Lesser General Public License, version 2.1 (the  "LGPL License"), in which case the
 * provisions of LGPL License are applicable instead of those
 * above. If you wish to allow use of your version of this file only
 * under the terms of the LGPL License and not to allow others to use
 * your version of this file under the MPL, indicate your decision by
 * deleting the provisions above and replace them with the notice and
 * other provisions required by the LGPL License. If you do not delete
 * the provisions above, a recipient may use your version of this file
 * under either the MPL or the LGPL License.
 */
package net.sf.jsignpdf;

import static net.sf.jsignpdf.Constants.*;

import java.net.Proxy;
import java.util.logging.Level;
import java.util.logging.Logger;

import net.sf.jsignpdf.types.CertificationLevel;
import net.sf.jsignpdf.types.HashAlgorithm;
import net.sf.jsignpdf.types.PDFEncryption;
import net.sf.jsignpdf.types.PrintRight;
import net.sf.jsignpdf.types.RenderMode;
import net.sf.jsignpdf.types.ServerAuthentication;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * This class parses and holds options from command line
 *
 * @author Josef Cacek
 */
@SuppressWarnings("static-access")
public class SignerOptionsFromCmdLine extends BasicSignerOptions {

    // private final static Logger LOGGER =
    // Logger.getLogger(SignerOptionsFromCmdLine.class);

    static final Options OPTS = new Options();

    private String outPrefix;
    private String outSuffix = Constants.DEFAULT_OUT_SUFFIX;
    private String outPath;

    private String[] files;

    private boolean printHelp = true;
    private boolean printVersion;
    private boolean listKeyStores;
    private boolean listKeys;

    private boolean gui;

    /**
     * Parses options provided as command line arguments.
     * @throws ParseException
     */
    @Override
    public void loadCmdLine() throws ParseException {
        String[] cmdLine = getCmdLine();
        if (cmdLine == null)
            return;

        // create the command line parser
        final CommandLineParser parser = new DefaultParser();
        // parse the command line arguments
        final CommandLine line = parser.parse(OPTS, cmdLine);

        if (line.hasOption(ARG_LOADPROPS_FILE)) {
            if (!line.hasOption(ARG_LOADPROPS)) {
                props.clear();
            }
            props.loadProperties(line.getOptionValue(ARG_LOADPROPS_FILE));
        }

        // use the advanced mode for the command line even if the properties file says "view.advanced=false"
        setAdvanced(true);

        if (line.hasOption(ARG_LOADPROPS) || line.hasOption(ARG_LOADPROPS_FILE)) {
            loadOptions();
        }

        if (line.hasOption(ARG_QUIET)) {
            // disable logging
            LOGGER.setLevel(Level.OFF);
            Logger.getGlobal().setLevel(Level.OFF);
        }

        // the arguments, which are not options or option-values should be the
        // files
        setFiles(line.getArgs());

        // commands
        setPrintHelp(line.hasOption(ARG_HELP));
        setPrintVersion(line.hasOption(ARG_VERSION));
        setListKeyStores(line.hasOption(ARG_LIST_KS_TYPES));
        setListKeys(line.hasOption(ARG_LIST_KEYS));

        // basic options
        if (line.hasOption(ARG_KS_TYPE))
            setKsType(line.getOptionValue(ARG_KS_TYPE));
        if (line.hasOption(ARG_KS_FILE))
            setKsFile(line.getOptionValue(ARG_KS_FILE));
        if (line.hasOption(ARG_KS_PWD))
            setKsPasswd(line.getOptionValue(ARG_KS_PWD));
        if (line.hasOption(ARG_KEY_ALIAS))
            setKeyAlias(line.getOptionValue(ARG_KEY_ALIAS));
        if (line.hasOption(ARG_KEY_INDEX))
            setKeyIndex(getInt(line.getParsedOptionValue(ARG_KEY_INDEX), getKeyIndex()));
        if (line.hasOption(ARG_KEY_PWD))
            setKeyPasswd(line.getOptionValue(ARG_KEY_PWD));
        if (line.hasOption(ARG_OUTPATH))
            setOutPath(line.getOptionValue(ARG_OUTPATH));
        if (line.hasOption(ARG_OPREFIX))
            setOutPrefix(line.getOptionValue(ARG_OPREFIX));
        if (line.hasOption(ARG_OSUFFIX))
            setOutSuffix(line.getOptionValue(ARG_OSUFFIX));
        if (line.hasOption(ARG_SIGNER_NAME))
            setSignerName(line.getOptionValue(ARG_SIGNER_NAME));
        if (line.hasOption(ARG_REASON))
            setReason(line.getOptionValue(ARG_REASON));
        if (line.hasOption(ARG_LOCATION))
            setLocation(line.getOptionValue(ARG_LOCATION));
        if (line.hasOption(ARG_CONTACT))
            setContact(line.getOptionValue(ARG_CONTACT));
        setAppend(line.hasOption(ARG_APPEND));
        if (line.hasOption(ARG_CERT_LEVEL))
            setCertLevel(line.getOptionValue(ARG_CERT_LEVEL));
        if (line.hasOption(ARG_HASH_ALGORITHM))
            setHashAlgorithm(line.getOptionValue(ARG_HASH_ALGORITHM));

        // encryption
        if (line.hasOption(ARG_ENCRYPTED))
            setPdfEncryption(PDFEncryption.PASSWORD);
        if (line.hasOption(ARG_ENCRYPTION))
            setPdfEncryption(line.getOptionValue(ARG_ENCRYPTION));
        if (line.hasOption(ARG_PWD_OWNER))
            setPdfOwnerPwd(line.getOptionValue(ARG_PWD_OWNER));
        if (line.hasOption(ARG_PWD_USER))
            setPdfUserPwd(line.getOptionValue(ARG_PWD_USER));
        if (line.hasOption(ARG_ENC_CERT))
            setPdfEncryptionCertFile(line.getOptionValue(ARG_ENC_CERT));
        if (line.hasOption(ARG_RIGHT_PRINT))
            setRightPrinting(line.getOptionValue(ARG_RIGHT_PRINT));
        setRightCopy(!line.hasOption(ARG_DISABLE_COPY_LONG));
        setRightAssembly(!line.hasOption(ARG_DISABLE_ASSEMBLY_LONG));
        setRightFillIn(!line.hasOption(ARG_DISABLE_FILL_LONG));
        setRightScreanReaders(!line.hasOption(ARG_DISABLE_SCREEN_READERS_LONG));
        setRightModifyAnnotations(!line.hasOption(ARG_DISABLE_MODIFY_ANNOT_LONG));
        setRightModifyContents(!line.hasOption(ARG_DISABLE_MODIFY_CONTENT_LONG));

        // visible signature
        if (line.hasOption(ARG_VISIBLE))
            setVisible(true);
        if (line.hasOption(ARG_PAGE))
            setPage(getInt(line.getParsedOptionValue(ARG_PAGE), getPage()));
        if (line.hasOption(ARG_POS_LLX))
            setPositionLLX(getFloat(line.getParsedOptionValue(ARG_POS_LLX), getPositionLLX()));
        if (line.hasOption(ARG_POS_LLY))
            setPositionLLY(getFloat(line.getParsedOptionValue(ARG_POS_LLY), getPositionLLY()));
        if (line.hasOption(ARG_POS_URX))
            setPositionURX(getFloat(line.getParsedOptionValue(ARG_POS_URX), getPositionURX()));
        if (line.hasOption(ARG_POS_URY))
            setPositionURY(getFloat(line.getParsedOptionValue(ARG_POS_URY), getPositionURY()));
        if (line.hasOption(ARG_BG_SCALE))
            setBgImgScale(getFloat(line.getParsedOptionValue(ARG_BG_SCALE), getBgImgScale()));
        if (line.hasOption(ARG_RENDER_MODE))
            setRenderMode(line.getOptionValue(ARG_RENDER_MODE));
        if (line.hasOption(ARG_L2_TEXT_LONG))
            setL2Text(line.getOptionValue(ARG_L2_TEXT_LONG));
        if (line.hasOption(ARG_L2TEXT_FONT_SIZE))
            setL2TextFontSize(getFloat(line.getParsedOptionValue(ARG_L2TEXT_FONT_SIZE), getL2TextFontSize()));
        if (line.hasOption(ARG_L4_TEXT_LONG))
            setL4Text(line.getOptionValue(ARG_L4_TEXT_LONG));
        if (line.hasOption(ARG_IMG_PATH))
            setImgPath(line.getOptionValue(ARG_IMG_PATH));
        if (line.hasOption(ARG_BG_PATH))
            setBgImgPath(line.getOptionValue(ARG_BG_PATH));
        setAcro6Layers(!line.hasOption(ARG_DISABLE_ACRO6LAYERS));

        // TSA & OCSP
        if (line.hasOption(ARG_TSA_URL)) {
            setTimestamp(true);
            setTsaUrl(line.getOptionValue(ARG_TSA_URL));
        }
        if (line.hasOption(ARG_TSA_AUTHN))
            setTsaServerAuthn(line.getOptionValue(ARG_TSA_AUTHN));
        if (line.hasOption(ARG_TSA_CERT_FILE_TYPE))
            setTsaCertFileType(line.getOptionValue(ARG_TSA_CERT_FILE_TYPE));
        if (line.hasOption(ARG_TSA_CERT_FILE))
            setTsaCertFile(line.getOptionValue(ARG_TSA_CERT_FILE));
        if (line.hasOption(ARG_TSA_CERT_PWD))
            setTsaCertFilePwd(line.getOptionValue(ARG_TSA_CERT_PWD));

        if (line.hasOption(ARG_TSA_USER))
            setTsaUser(line.getOptionValue(ARG_TSA_USER));
        if (line.hasOption(ARG_TSA_PWD))
            setTsaPasswd(line.getOptionValue(ARG_TSA_PWD));
        if (line.hasOption(ARG_TSA_POLICY_LONG))
            setTsaPolicy(line.getOptionValue(ARG_TSA_POLICY_LONG));
        if (line.hasOption(ARG_TSA_HASH_ALG))
            setTsaHashAlg(line.getOptionValue(ARG_TSA_HASH_ALG));
        if (line.hasOption(ARG_OCSP_LONG))
            setOcspEnabled(true);
        if (line.hasOption(ARG_OCSP_SERVER_LONG))
            setOcspServerUrl(line.getOptionValue(ARG_OCSP_SERVER_LONG));
        if (line.hasOption(ARG_CRL_LONG))
            setCrlEnabled(true);

        if (line.hasOption(ARG_PROXY_TYPE_LONG))
            setProxyType(line.getOptionValue(ARG_PROXY_TYPE_LONG));
        if (line.hasOption(ARG_PROXY_HOST_LONG))
            setProxyHost(line.getOptionValue(ARG_PROXY_HOST_LONG));
        if (line.hasOption(ARG_PROXY_PORT_LONG))
            setProxyPort(getInt(line.getParsedOptionValue(ARG_PROXY_PORT_LONG), getProxyPort()));

        setGui(line.hasOption(ARG_GUI));
        if (ArrayUtils.isNotEmpty(files)) {
            setInFile(files[0]);
        }

    }

    /**
     * Returns int value from parsed option object
     *
     * @param aVal value returned by parser
     * @param aDefVal default value
     * @return
     */
    private int getInt(Object aVal, int aDefVal) {
        if (aVal instanceof Number) {
            return ((Number) aVal).intValue();
        }
        return aDefVal;
    }

    /**
     * Returns float value from parsed option object
     *
     * @param aVal value returned by parser
     * @param aDefVal default value
     * @return
     */
    private float getFloat(Object aVal, float aDefVal) {
        if (aVal instanceof Number) {
            return ((Number) aVal).floatValue();
        }
        return aDefVal;
    }

    static {
        // reset option builder
        OptionBuilder.withLongOpt(ARG_HELP_LONG).create();
        // commands
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_HELP_LONG).withDescription(RES.get("hlp.help")).create(ARG_HELP));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_VERSION_LONG).withDescription(RES.get("hlp.version")).create(ARG_VERSION));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_LOADPROPS_LONG).withDescription(RES.get("hlp.loadProperties"))
                .create(ARG_LOADPROPS));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_LOADPROPS_FILE_LONG).withDescription(RES.get("hlp.loadPropertiesFile"))
                .hasArg().withArgName("file").create(ARG_LOADPROPS_FILE));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_LIST_KS_TYPES_LONG).withDescription(RES.get("hlp.listKsTypes"))
                .create(ARG_LIST_KS_TYPES));
        OPTS.addOption(
                OptionBuilder.withLongOpt(ARG_LIST_KEYS_LONG).withDescription(RES.get("hlp.listKeys")).create(ARG_LIST_KEYS));

        // keystore and key configuration options
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_KS_TYPE_LONG).withDescription(RES.get("hlp.ksType")).hasArg()
                .withArgName("type").create(ARG_KS_TYPE));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_KS_FILE_LONG).withDescription(RES.get("hlp.ksFile")).hasArg()
                .withArgName("file").create(ARG_KS_FILE));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_KS_PWD_LONG).withDescription(RES.get("hlp.ksPwd")).hasArg()
                .withArgName("password").create(ARG_KS_PWD));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_KEY_ALIAS_LONG).withDescription(RES.get("hlp.keyAlias")).hasArg()
                .withArgName("alias").create(ARG_KEY_ALIAS));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_KEY_INDEX_LONG).withDescription(RES.get("hlp.keyIndex")).hasArg()
                .withType(Number.class).withArgName("index").create(ARG_KEY_INDEX));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_KEY_PWD_LONG).withDescription(RES.get("hlp.keyPwd")).hasArg()
                .withArgName("password").create(ARG_KEY_PWD));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_OUTPATH_LONG).withDescription(RES.get("hlp.outPath")).hasArg()
                .withArgName("path").create(ARG_OUTPATH));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_OPREFIX_LONG).withDescription(RES.get("hlp.outPrefix")).hasArg()
                .withArgName("prefix").create(ARG_OPREFIX));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_OSUFFIX_LONG).withDescription(RES.get("hlp.outSuffix")).hasArg()
                .withArgName("suffix").create(ARG_OSUFFIX));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_SIGNER_NAME_LONG).withDescription(RES.get("hlp.signerName")).hasArg()
                .withArgName("signer").create(ARG_SIGNER_NAME));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_REASON_LONG).withDescription(RES.get("hlp.reason")).hasArg()
                .withArgName("reason").create(ARG_REASON));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_LOCATION_LONG).withDescription(RES.get("hlp.location")).hasArg()
                .withArgName("location").create(ARG_LOCATION));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_CONTACT_LONG).withDescription(RES.get("hlp.contact")).hasArg()
                .withArgName("contact").create(ARG_CONTACT));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_APPEND_LONG).withDescription(RES.get("hlp.append")).create(ARG_APPEND));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_CERT_LEVEL_LONG)
                .withDescription(RES.get("hlp.certLevel", getEnumValues(CertificationLevel.values()))).hasArg()
                .withArgName("level").create(ARG_CERT_LEVEL));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_HASH_ALGORITHM_LONG)
                .withDescription(RES.get("hlp.hashAlgorithm", getEnumValues(HashAlgorithm.values()))).hasArg()
                .withArgName("algorithm").create(ARG_HASH_ALGORITHM));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_QUIET_LONG).withDescription(RES.get("hlp.quiet")).create(ARG_QUIET));

        // Encryption and rights
        OPTS.addOption(
                OptionBuilder.withLongOpt(ARG_ENCRYPTED_LONG).withDescription(RES.get("hlp.encrypted")).create(ARG_ENCRYPTED));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_ENCRYPTION_LONG)
                .withDescription(RES.get("hlp.encryption", getEnumValues(PDFEncryption.values()))).hasArg().withArgName("mode")
                .create(ARG_ENCRYPTION));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_PWD_OWNER_LONG).withDescription(RES.get("hlp.ownerpwd")).hasArg()
                .withArgName("password").create(ARG_PWD_OWNER));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_PWD_USER_LONG).withDescription(RES.get("hlp.userpwd")).hasArg()
                .withArgName("password").create(ARG_PWD_USER));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_ENC_CERT_LONG).withDescription(RES.get("hlp.encCert")).hasArg()
                .withArgName("file").create(ARG_ENC_CERT));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_RIGHT_PRINT_LONG)
                .withDescription(RES.get("hlp.printRight", getEnumValues(PrintRight.values()))).hasArg().withArgName("right")
                .create(ARG_RIGHT_PRINT));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_DISABLE_COPY_LONG).withDescription(RES.get("hlp.disableCopy")).create());
        OPTS.addOption(
                OptionBuilder.withLongOpt(ARG_DISABLE_ASSEMBLY_LONG).withDescription(RES.get("hlp.disableAssembly")).create());
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_DISABLE_FILL_LONG).withDescription(RES.get("hlp.disableFill")).create());
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_DISABLE_SCREEN_READERS_LONG).withDescription(RES.get("hlp.disableScrRead"))
                .create());
        OPTS.addOption(
                OptionBuilder.withLongOpt(ARG_DISABLE_MODIFY_ANNOT_LONG).withDescription(RES.get("hlp.disableAnnot")).create());
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_DISABLE_MODIFY_CONTENT_LONG).withDescription(RES.get("hlp.disableContent"))
                .create());

        // visible signature options
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_VISIBLE_LONG).withDescription(RES.get("hlp.visible")).create(ARG_VISIBLE));
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_PAGE_LONG).withDescription(RES.get("hlp.page")).hasArg()
                .withType(Number.class).withArgName("pageNumber").create(ARG_PAGE));
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.posLLX")).hasArg().withType(Number.class)
                .withArgName("position").create(ARG_POS_LLX));
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.posLLY")).hasArg().withType(Number.class)
                .withArgName("position").create(ARG_POS_LLY));
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.posURX")).hasArg().withType(Number.class)
                .withArgName("position").create(ARG_POS_URX));
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.posURY")).hasArg().withType(Number.class)
                .withArgName("position").create(ARG_POS_URY));
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.imgPath")).withLongOpt(ARG_IMG_PATH).hasArg()
                .withArgName("file").create());
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.bgPath")).withLongOpt(ARG_BG_PATH).hasArg()
                .withArgName("file").create());
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.bgScale")).withLongOpt(ARG_BG_SCALE).hasArg()
                .withType(Number.class).withArgName("scale").create());
        OPTS.addOption(
                OptionBuilder.withDescription(RES.get("hlp.disableAcro6Layers")).withLongOpt(ARG_DISABLE_ACRO6LAYERS).create());

        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.renderMode", getEnumValues(RenderMode.values())))
                .withLongOpt(ARG_RENDER_MODE).hasArg().withArgName("mode").create());
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.l2Text")).withLongOpt(ARG_L2_TEXT_LONG).hasArg()
                .withArgName("text").create());
        OPTS.addOption(
                OptionBuilder.withDescription(RES.get("hlp.l2TextFontSize", String.valueOf(Constants.DEFVAL_L2_FONT_SIZE)))
                        .withLongOpt(ARG_L2TEXT_FONT_SIZE_LONG).hasArg().withType(Number.class).withArgName("size")
                        .create(ARG_L2TEXT_FONT_SIZE));
        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.l4Text")).withLongOpt(ARG_L4_TEXT_LONG).hasArg()
                .withArgName("text").create());

        // TSA & OCSP
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_URL_LONG).withDescription(RES.get("hlp.tsaUrl")).hasArg()
                .withArgName("URL").create(ARG_TSA_URL));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_AUTHN_LONG)
                .withDescription(RES.get("hlp.tsaAuthn", getEnumValues(ServerAuthentication.values()))).hasArg()
                .withArgName("method").create(ARG_TSA_AUTHN));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_CERT_FILE_TYPE_LONG).withDescription(RES.get("hlp.tsaCertFileType"))
                .hasArg().withArgName("ks-type").create(ARG_TSA_CERT_FILE_TYPE));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_CERT_FILE_LONG).withDescription(RES.get("hlp.tsaCertFile")).hasArg()
                .withArgName("file").create(ARG_TSA_CERT_FILE));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_CERT_PWD_LONG).withDescription(RES.get("hlp.tsaCertPasswd")).hasArg()
                .withArgName("password").create(ARG_TSA_CERT_PWD));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_USER_LONG).withDescription(RES.get("hlp.tsaUser")).hasArg()
                .withArgName("username").create(ARG_TSA_USER));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_PWD_LONG).withDescription(RES.get("hlp.tsaPwd")).hasArg()
                .withArgName("password").create(ARG_TSA_PWD));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_POLICY_LONG).withDescription(RES.get("hlp.tsaPolicy")).hasArg()
                .withArgName("policyOID").create());
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_TSA_HASH_ALG_LONG)
                .withDescription(RES.get("hlp.tsaHashAlg", Constants.DEFVAL_TSA_HASH_ALG)).hasArg().withArgName("algorithm")
                .create(ARG_TSA_HASH_ALG));

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_OCSP_LONG).withDescription(RES.get("hlp.ocsp")).create());
        OPTS.addOption(OptionBuilder.withLongOpt(ARG_OCSP_SERVER_LONG).withDescription(RES.get("hlp.ocspServerUrl")).hasArg()
                .withArgName("responderUrl").create());

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_CRL_LONG).withDescription(RES.get("hlp.crl")).create());

        OPTS.addOption(OptionBuilder
                .withDescription(RES.get("hlp.proxyType", DEFVAL_PROXY_TYPE.name(), getEnumValues(Proxy.Type.values())))
                .withLongOpt(ARG_PROXY_TYPE_LONG).hasArg().withArgName("type").create());

        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.proxyHost")).withLongOpt(ARG_PROXY_HOST_LONG).hasArg()
                .withArgName("hostname").create());

        OPTS.addOption(OptionBuilder.withDescription(RES.get("hlp.proxyPort", String.valueOf(DEFVAL_PROXY_PORT)))
                .withLongOpt(ARG_PROXY_PORT_LONG).hasArg().withType(Number.class).withArgName("port").create());

        OPTS.addOption(OptionBuilder.withLongOpt(ARG_GUI).withDescription(RES.get("hlp.gui")).create());
    }

    /**
     * @return the outPrefix
     */
    public String getOutPrefix() {
        if (outPrefix == null)
            outPrefix = "";
        return outPrefix;
    }

    /**
     * Return comma separated names from enum values array.
     *
     * @param aEnumVals
     * @return
     */
    private static String getEnumValues(Enum[] aEnumVals) {
        final StringBuilder tmpResult = new StringBuilder();
        boolean tmpFirst = true;
        for (Enum tmpEnu : aEnumVals) {
            if (tmpFirst) {
                tmpFirst = false;
            } else {
                tmpResult.append(", ");
            }
            tmpResult.append(tmpEnu.name());
        }
        return tmpResult.toString();
    }

    /**
     * @param outPrefix the outPrefix to set
     */
    public void setOutPrefix(String outPrefix) {
        this.outPrefix = outPrefix;
    }

    /**
     * @return the outSuffix
     */
    public String getOutSuffix() {
        if (outSuffix == null)
            outSuffix = "";
        return outSuffix;
    }

    /**
     * @param outSuffix the outSuffix to set
     */
    public void setOutSuffix(String outSuffix) {
        this.outSuffix = outSuffix;
    }

    /**
     * @return the files
     */
    public String[] getFiles() {
        return files;
    }

    /**
     * @param files the files to set
     */
    public void setFiles(String[] files) {
        this.files = files;
    }

    /**
     * @return the printHelp
     */
    public boolean isPrintHelp() {
        return printHelp;
    }

    /**
     * @param printHelp the printHelp to set
     */
    public void setPrintHelp(boolean printHelp) {
        this.printHelp = printHelp;
    }

    /**
     * @return the printVersion
     */
    public boolean isPrintVersion() {
        return printVersion;
    }

    /**
     * @param printVersion the printVersion to set
     */
    public void setPrintVersion(boolean printVersion) {
        this.printVersion = printVersion;
    }

    /**
     * @return the listKeyStores
     */
    public boolean isListKeyStores() {
        return listKeyStores;
    }

    /**
     * @param listKeyStores the listKeyStores to set
     */
    public void setListKeyStores(boolean listKeyStores) {
        this.listKeyStores = listKeyStores;
    }

    /**
     * @return the listKeys
     */
    public boolean isListKeys() {
        return listKeys;
    }

    /**
     * @param listKeys the listKeys to set
     */
    public void setListKeys(boolean listKeys) {
        this.listKeys = listKeys;
    }

    /**
     * Returns output path including tailing slash character
     *
     * @return the outPath
     */
    public String getOutPath() {
        String tmpResult;
        if (StringUtils.isEmpty(outPath)) {
            tmpResult = "./";
        } else {
            tmpResult = outPath.replaceAll("\\\\", "/");
            if (!tmpResult.endsWith("/")) {
                tmpResult = tmpResult + "/";
            }
        }
        return tmpResult;
    }

    /**
     * @param outPath the outPath to set
     */
    public void setOutPath(String outPath) {
        this.outPath = outPath;
    }

    public boolean isGui() {
        return gui;
    }

    public void setGui(boolean gui) {
        this.gui = gui;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy