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

com.moon.runner.RunnerSetting Maven / Gradle / Ivy

package com.moon.runner;

import com.moon.core.lang.ParseSupportUtil;
import com.moon.core.util.IteratorUtil;
import com.moon.core.util.ValidateUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

/**
 * @author moonsky
 */
public final class RunnerSetting implements IRunnerSetting {

    protected Supplier arrCreator;
    protected Supplier objCreator;

    private final Map callers = new HashMap<>();
    private final Map functions = new HashMap<>();

    public RunnerSetting() { this(ArrayList::new, HashMap::new); }

    public RunnerSetting(Supplier arrCreator, Supplier objCreator) {
        this.arrCreator = arrCreator;
        this.objCreator = objCreator;
    }

    /**
     * 获取静态方法执行类
     *
     * @param name
     *
     * @return
     */
    @Override
    public final Class getCaller(String name) { return callers.get(name); }

    @Override
    public RunnerFunction getFunction(String name) { return functions.get(name); }

    @Override
    public final Supplier getArrCreator() { return arrCreator; }

    @Override
    public final Supplier getObjCreator() { return objCreator; }

    public RunnerSetting setArrCreator(Supplier arrCreator) {
        this.arrCreator = arrCreator;
        return this;
    }

    public RunnerSetting setObjCreator(Supplier objCreator) {
        this.objCreator = objCreator;
        return this;
    }

    public RunnerSetting addFunction(RunnerFunction runner) {
        this.functions.put(checkName(runner.functionName()), runner);
        return this;
    }

    public RunnerSetting addFunctions(List runners) {
        IteratorUtil.forEach(runners, runner -> addFunction(runner));
        return this;
    }

    public RunnerSetting addFunction(String namespace, RunnerFunction fun) {
        this.functions.put(toNsName(namespace, fun.functionName()), fun);
        return this;
    }

    public RunnerSetting addFunctions(String namespace, List runners) {
        IteratorUtil.forEach(runners, fun -> addFunction(namespace, fun));
        return this;
    }

    public RunnerSetting addCaller(Class clazz) { return addCaller(clazz.getSimpleName(), clazz); }

    public RunnerSetting addCallers(Class... classes) {
        for (Class type : classes) {
            addCaller(type);
        }
        return this;
    }

    public RunnerSetting addCaller(String name, Class staticCallerClass) {
        this.callers.put(name, staticCallerClass);
        return this;
    }

    public RunnerSetting addCallers(Map callers) {
        this.callers.putAll(callers);
        return this;
    }

    public RunnerSetting removeCaller(String name) {
        this.callers.remove(name);
        return this;
    }

    public RunnerSetting removeCallers(String... names) {
        for (String name : names) {
            this.callers.remove(name);
        }
        return this;
    }

    public final static RunnerSetting of() { return new RunnerSetting(); }

    static String toNsName(String ns, String name) { return checkName(ns) + '.' + checkName(name); }

    static String checkName(String name) {
        char curr = name.charAt(0);
        ValidateUtil.requireTrue(ParseSupportUtil.isVar(curr), name);
        for (int i = 1, len = name.length(); i < len; i++) {
            ValidateUtil.requireTrue(ParseSupportUtil.isVar(curr = name.charAt(i)) || ParseSupportUtil.isNum(curr), name);
        }
        return name;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy