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

com.panayotis.xray.sys.CommandArgs Maven / Gradle / Ivy

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.panayotis.xray.sys;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author teras
 */
public class CommandArgs {

    private String classpath;
    private String[] classpathArr;
    private String jar;
    private final List givenArgs = new ArrayList<>();
    private String mainClass = "";

    public CommandArgs(String[] args) {
        if (args == null || args.length < 0)
            return;

        for (int i = 0; i < args.length; i++) {
            String arg = args[i];
            if (arg.equals("-help"))
                showHelp();
            else if (mainClass.isEmpty() && (arg.equals("-classpath") | arg.equals("-cp"))) {
                if ((i + 1) >= args.length)
                    parseError("Class path requires an argument");
                if (classpath != null)
                    parseError("Class path already defined");
                i++;
                classpath = args[i];
            } else if (mainClass.isEmpty() && (arg.equals("-jar"))) {
                if ((i + 1) >= args.length)
                    parseError("JAR file requires an argument");
                if (jar != null)
                    parseError("JAR file already defined");
                i++;
                jar = args[i];
                MainResolver.getMainFromJar(jar, this);
                if (mainClass.isEmpty())
                    parseError("Unable to retrieve main class from JAR file " + jar);
            } else if (!mainClass.isEmpty())
                givenArgs.add(arg);
            else {
                if (classpath == null && jar == null)
                    parseError("Please provide either class path or jar file before defining other arguments");
                mainClass = arg;
            }
        }
        if (classpath != null && mainClass.isEmpty())
            parseError("Missing definition of main class, when defining class path");
    }

    void setMain(String main) {
        this.mainClass = main == null ? "" : main;
    }

    void appendClasspath(String classpath) {
        this.classpath = this.classpath == null || this.classpath.isEmpty() ? classpath : this.classpath + ":" + classpath;
    }

    private void parseError(String error) {
        System.err.println();
        System.err.println(error);
        System.err.println();
        showHelp();
    }

    private void showHelp() {
        System.err.println("Usage: java JAVA_OPTIONS -jar xray.jar -cp|-classpath CLASSPATH Main.Class ARGS...\n"
            + "       java JAVA_OPTIONS -jar xray.jar [-cp|-classpath CLASSPATH] -jar APP.jar ARGS...\n"
            + "       java -help\n"
            + "Where\n"
            + "  JAVA_OPTIONS : the required by the application Java options\n"
            + "  CLASSPATH    : the classpath of the application to examine\n"
            + "  Main.Class   : the main class of the application to execute\n"
            + "  APP.jar      : the application JAR\n"
            + "  ARGS...      : The possible application arguments\n");
        System.exit(-1);
    }

    public String getMainClass() {
        return mainClass;
    }

    public String[] getClasspath() {
        if (classpathArr == null)
            if (jar == null)
                classpathArr = classpath.split(File.pathSeparator);
            else {
                File base = new File(jar).getParentFile().getAbsoluteFile();
                List cpArray = new ArrayList<>();
                if (classpath != null && !classpath.isEmpty())
                    for (String pathname : classpath.split(File.pathSeparator))
                        cpArray.add(new File(base, pathname).getAbsolutePath());
                cpArray.add(jar);
                classpathArr = cpArray.toArray(new String[cpArray.size()]);
            }
        return classpathArr;
    }

    public String getJar() {
        return jar;
    }

    public String[] getArguments() {
        return givenArgs.toArray(new String[givenArgs.size()]);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy