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

kg.apc.cmdtools.PluginsCMD Maven / Gradle / Ivy

The newest version!
package kg.apc.cmdtools;

import java.io.PrintStream;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

/**
 * This class used to handle all command-line stuff
 * like parameter processing etc. All real work
 * made by PluginsCMDWorker
 */
public class PluginsCMD extends AbstractCMDTool {

    public int processParams(String[] args) {
        if (args == null) {
            args = new String[]{"--help"};
        }

        return processParams(argsArrayToListIterator(args));
    }

    public static ListIterator argsArrayToListIterator(String[] args) {
        List arrayArgs = Arrays.asList(args);
        return new LinkedList(arrayArgs).listIterator();
    }

    protected int processParams(ListIterator args) throws UnsupportedOperationException, IllegalArgumentException {
        AbstractCMDTool tool = null;

        while (args.hasNext()) {
            String arg = (String) args.next();
            if (arg.equals("-?") || arg.equals("--help")) {
                showHelp(System.out);
                // FIXME: how to show help for the tool?
                return 0;
            } else if (arg.equals("--version")) {
                showVersion(System.out);
                return 0;
            } else if (arg.equals("")) {
                args.remove();

            } else if (arg.equals("--tool")) {
                args.remove();
                if (!args.hasNext()) {
                    throw new IllegalArgumentException("No tool name passed");
                }
                arg = (String) args.next();
                tool = getToolInstance(arg);
                args.remove();
            }
        }

        if (tool == null) {
            throw new IllegalArgumentException("No suitable tool class provided in params");
        }

        while (args.hasPrevious()) {
            args.previous();
        }
        return tool.processParams(args);
    }

    private void showVersion(PrintStream os) {
        os.println("JP@GC Tools v2.0"); // TODO: keep in sync automatically
    }

    protected void showHelp(PrintStream os) {
        os.println("JMeter Plugins at jmeter-plugins.org Code Command-Line Tools");
        os.println("For help and support please visit http://jmeter-plugins.org/wiki/JMeterPluginsCMD");
        os.println("Usage:\n JMeterPluginsCMD "
                + "--tool < Reporter | PerfMonAgent | TestPlanCheck | FilterResults > [--help]");

        AbstractCMDTool tool;
        try {
            tool = getToolInstance("Reporter");
            os.println();
            tool.showHelp(os);
        } catch (RuntimeException e) {
            os.println(e.getMessage());
        }

        try {
            tool = getToolInstance("PerfMonAgent");
            os.println();
            tool.showHelp(os);
        } catch (RuntimeException e) {
            os.println(e.getMessage());
        }

        try {
            tool = getToolInstance("TestPlanCheck");
            os.println();
            tool.showHelp(os);
        } catch (RuntimeException e) {
            os.println(e.getMessage());
        }

        try {
            tool = getToolInstance("FilterResults");
            os.println();
            tool.showHelp(os);
        } catch (RuntimeException e) {
            os.println(e.getMessage());
        }
    }

    private AbstractCMDTool getToolInstance(String arg) {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        Class toolClass;

        try {
            toolClass = loader.loadClass("kg.apc.cmdtools." + arg + "Tool");
        } catch (ClassNotFoundException e) {
            try {
                toolClass = loader.loadClass(arg);
            } catch (ClassNotFoundException ex) {
                throw new IllegalArgumentException("Tool class " + arg + " not found");
            }
        }

        if (!AbstractCMDTool.class.isAssignableFrom(toolClass)) {
            throw new IllegalArgumentException("Tool class " + arg + " not extends AbstractCMDTool");
        }

        try {
            return (AbstractCMDTool) toolClass.newInstance();
        } catch (InstantiationException ex) {
            throw new RuntimeException("Cannot instantiate tool class: " + arg, ex);
        } catch (IllegalAccessException ex) {
            throw new RuntimeException("Cannot instantiate tool class: " + arg, ex);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy