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

com.alibaba.cola.test.command.AbstractCommand Maven / Gradle / Ivy

package com.alibaba.cola.test.command;

import org.apache.commons.cli.*;
import org.springframework.util.ObjectUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * AbstractCommand
 *
 * @author Frank Zhang
 * @date 2020-11-17 4:33 PM
 */
public abstract class AbstractCommand {
    private static final CommandLineParser parser = new DefaultParser();
    protected static AbstractCommand curCmd;
    protected static AbstractCommand preCmd;

    protected String cmdRaw;
    private Map params;
    private Options options;
    private CommandLine commandLine;

    private final String SPACE = " ";
    private final String EMPTY = "";

    public AbstractCommand(String cmdRaw){
        this.cmdRaw = cmdRaw.replaceAll(" +", SPACE);
        params = new HashMap<>();
        options = new Options();
        initParser(options);
        commandLine = parse();
    }

    public void execute(){
        System.out.println("===Run start==== "+cmdRaw);
        action();
        System.out.println("===Run end====\n");
    }

    /**
     * 清理当前命令的上下文
     */
    protected void cleanContext(){}

    protected void initParser(Options options){};

    protected abstract void action();

    public CommandLine parse(){
        try {
            return parser.parse(options, cmdRaw.split(SPACE));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public boolean isEclipseMethod(String input) {
        return input.indexOf("(") > 0 ;
    }

    public boolean isIdeaMethod(String input) {
        return input.indexOf("#") > 0 ;
    }

    public CommandLine getCommandLine() {
        return commandLine;
    }

    public static AbstractCommand createCmd(String cmdRaw){
        if(ObjectUtils.isEmpty(cmdRaw)){
            return null;
        }

        AbstractCommand command = null;

         if(cmdRaw.matches(CommandEnum.TestMethodRunCmd.getDesc())){
            command = new TestMethodRunCmd(cmdRaw);
        } else if(cmdRaw.matches(CommandEnum.TestClassRunCmd.getDesc())){
            command = new TestClassRunCmd(cmdRaw);
        }else if(cmdRaw.matches(CommandEnum.GuideCmd.getDesc())){
            command = new GuideCmd(cmdRaw);
        }

        if(command != null){
            preCmd = curCmd;
            curCmd = command;
        }
        if(preCmd != null){
            preCmd.cleanContext();
        }

        return command;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy