kr.ac.kaist.wala.hybridroid.command.CommandArguments.java Source code

Java tutorial

Introduction

Here is the source code for kr.ac.kaist.wala.hybridroid.command.CommandArguments.java

Source

/*******************************************************************************
* Copyright (c) 2016 IBM Corporation and KAIST.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* KAIST - initial API and implementation
*******************************************************************************/
package kr.ac.kaist.wala.hybridroid.command;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
//import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CommandArguments {
    static private Options options;
    static final public String PROP_ARG = "p";
    static final public String PROP_LONG_ARG = "property";
    static final public String MODEL_ARG = "m";
    static final public String MODEL_LONG_ARG = "model";
    static final public String TARGET_ARG = "t";
    static final public String TARGET_LONG_ARG = "target";
    static final public String DROIDEL_ARG = "droidel";
    static final public String MANIFEST_ARG = "manifest";
    static final public String CFG_ARG = "cfg";
    static final public String CFG_LONG_ARG = "cfg";
    static final public String PRE_STRING_ARG = "prestr";
    static final public String ONLY_JS_ARG = "j";
    static final public String ONLY_JS_LONG_ARG = "jsonly";

    static {
        options = new Options();

        Option targetOp = Option.builder(TARGET_ARG).longOpt(TARGET_LONG_ARG).hasArg(true)
                .desc("target apk file of analysis").build();
        //      targetOp.setRequired(true);
        options.addOption(targetOp);

        Option propOp = Option.builder(PROP_ARG).longOpt(PROP_LONG_ARG).hasArg(true)
                .desc("set the wala property file").build();
        //      propOp.setRequired(true);
        options.addOption(propOp);

        // Option modelOp = OptionBuilder.withArgName(MODEL_ARG).withLongOpt(MODEL_LONG_ARG).withDescription("set the wala property file").create();

        // //     new Option(MODEL_ARG, MODEL_LONG_ARG, true, "set the wala property file");
        // options.addOption(modelOp);

        // Option jsOp = OptionBuilder.withArgName(ONLY_JS_ARG).withLongOpt(ONLY_JS_LONG_ARG).withDescription("set the wala property file").create();

        // //    new Option(ONLY_JS_ARG, ONLY_JS_LONG_ARG, false, "set the wala property file");
        // options.addOption(jsOp);

        //      OptionGroup functions = new OptionGroup();
        Option cfgOp = Option.builder(CFG_ARG).longOpt(CFG_LONG_ARG).hasArg(false)
                .desc("construct cfg for the android application").build();

        options.addOption(cfgOp);
        //      options.addOptionGroup(functions);
        ////      options.addOption(new Option(PRE_STRING_ARG, false, "pre-analysis for "), hasArg, description)
        //      options.addOption(new Option(DROIDEL_ARG, false, "enable pre transforming using DROIDEL"));
        //      options.addOption(new Option(MANIFEST_ARG, false, "enable the manifest analysis"));
    }

    private CommandLine cmd;

    public void usage() {
        HelpFormatter help = new HelpFormatter();
        help.printHelp("command line options", options);
    }

    public CommandArguments(String[] args) {
        CommandLineParser parser = new DefaultParser();
        try {
            cmd = parser.parse(options, args, false);

            if (!computeDependency()) {
                usage();
                System.exit(-1);
            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            System.out.println("parsing error: " + e);
            usage();
            System.exit(-1);
        }
    }

    private boolean computeDependency() {
        if (!cmd.hasOption(CFG_ARG) || !cmd.hasOption(PROP_ARG) || !cmd.hasOption(TARGET_ARG)) {
            return false;
        } else
            return true;
    }

    public boolean has(String op) {
        return cmd.hasOption(op);
    }

    public String get(String op) {
        return cmd.getOptionValue(op);
    }
}