com.jaspersoft.jasperserver.export.util.CommandUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.jaspersoft.jasperserver.export.util.CommandUtils.java

Source

/*
 * Copyright (C) 2005 - 2014 TIBCO Software Inc. All rights reserved.
 * http://www.jaspersoft.com.
 *
 * Unless you have purchased  a commercial license agreement from Jaspersoft,
 * the following license terms  apply:
 *
 * This program is free software: you can redistribute it and/or  modify
 * it under the terms of the GNU Affero General Public License  as
 * published by the Free Software Foundation, either version 3 of  the
 * License, or (at your option) any later version.
 *
 * This program 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 Affero  General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public  License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

package com.jaspersoft.jasperserver.export.util;

import java.util.StringTokenizer;
import java.util.ArrayList;
import java.util.Iterator;

import com.jaspersoft.jasperserver.export.BaseExportImportCommand;
import com.jaspersoft.jasperserver.export.Parameters;
import com.jaspersoft.jasperserver.export.ParametersImpl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Lucian Chirita (lucianc@users.sourceforge.net)
 * @version $Id: CommandUtils.java 47331 2014-07-18 09:13:06Z kklein $
 */
public class CommandUtils {

    public static final String ARG_PREFIX = "--";
    public static final int ARG_PREFIX_LEGTH = ARG_PREFIX.length();

    public static final char ARG_VALUE_SEPARATOR = '=';
    public static final String VALUES_SEPARATORS = System.getProperty("path.separator") + ",";

    public static final String SPRING_CONFIG_ARG = "--configResources";
    public static final String SPRING_CONFIG_FILE = "ApplicationContext";

    protected static final Log log = LogFactory.getLog(CommandUtils.class);

    public static Parameters parse(String[] inArgs) {
        ParametersImpl params = new ParametersImpl();

        String[] args = preParse(inArgs);

        for (int i = 1; i < args.length; i++) {
            String arg = args[i];
            if (arg.startsWith(ARG_PREFIX) && arg.length() > ARG_PREFIX_LEGTH) {
                String param;
                String value;
                int sepIdx = arg.indexOf(ARG_VALUE_SEPARATOR);

                if (sepIdx >= 0) {
                    param = arg.substring(ARG_PREFIX_LEGTH, sepIdx);
                    value = arg.substring(sepIdx + 1);
                } else {
                    param = arg.substring(ARG_PREFIX_LEGTH);
                    value = null;
                }

                params.addParameter(param);
                if (value != null) {
                    addParameterValues(params, param, value);
                }

                int j;
                for (j = i + 1; j < args.length; ++j) {
                    String argn = args[j];
                    if (argn.startsWith(ARG_PREFIX)) {
                        break;
                    }
                    addParameterValues(params, param, argn);
                }
                i = j - 1;
            }
        }
        return params;
    }

    /* 
     * Extra processing to support ant
     */
    protected static String[] preParse(String[] args) {

        return breakParms(checkSpringConfigs(args));
    }

    /*
     * To support executing import-export from ant, the --configResources
     * option will support: 
     *       explicitly specify spring xml files
     *       specify a directory that contains the spring files
     * 
     * In the latter case we need to go and get the spring config files in the
     * directory.
     */
    protected static String[] checkSpringConfigs(String[] args) {

        ArrayList list = new ArrayList();

        for (int i = 0; i < args.length; i++) {

            if (args[i].indexOf(SPRING_CONFIG_ARG) >= 0) {

                // we have the spring resource option, does the option point 
                // to a dir or the actual files

                if (args[i].indexOf(SPRING_CONFIG_FILE) < 0) {

                    list.add(getSpringFiles(args[i]));

                } else {
                    list.add(args[i]);
                }
            } else {
                list.add(args[i]);
            }
        }
        return (String[]) list.toArray(new String[list.size()]);
    }

    protected static String getSpringFiles(String arg) {
        // TODO: add this to support JS Pro
        return arg;
    }

    /* 
     * To support executing import-export from ant, the input options  
     * need to be further broken up in order to get handled properly.
     * So args like this:
     *       "--output-dir=foo --uris=/images"   or
     *       "--output-dir foo --uris /images"
     * are broken into this:
     *       "--output-dir=foo"  "--uris=/images"         and
     *       "--output-dir"  "foo"  "--uris"  "/images"
     */
    protected static String[] breakParms(String[] args) {

        ArrayList list = new ArrayList();

        for (int i = 0; i < args.length; i++) {

            int first = args[i].indexOf(ARG_PREFIX);
            int last = args[i].lastIndexOf(ARG_PREFIX);

            if (first < last) {
                // param string has more than one ARG_PREFIX so break it up
                for (StringTokenizer tok = new StringTokenizer(args[i]); tok.hasMoreTokens();) {
                    String token = tok.nextToken();
                    list.add((String) token);
                }
            } else if (first == last) {
                list.add((String) args[i]);
            } else {
                log.error("ERROR: an argument string should always have an ARG_PREFIX (--) arg=" + args[i]);
            }
        }
        return (String[]) list.toArray(new String[list.size()]);
    }

    protected static void addParameterValues(ParametersImpl params, String param, String argn) {
        for (StringTokenizer tok = new StringTokenizer(argn, VALUES_SEPARATORS); tok.hasMoreTokens();) {
            String value = tok.nextToken();
            params.addParameterValue(param, value);
        }
    }

}