package com.fanruan.api.function; import com.fanruan.api.function.shell.FineFunc; import com.fr.design.formula.FunctionDefNAD; import com.fr.design.formula.NameAndDescription; import com.fr.file.FunctionManager; import com.fr.file.FunctionManagerProvider; import com.fr.script.Calculator; import com.fr.stable.StringUtils; import com.fr.stable.fun.FunctionHelper; import com.fr.stable.script.FunctionDef; import java.util.ArrayList; import java.util.List; /** * @author zack * @since 2019/8/23 * @version 10.0 * 函数相关工具类 */ public class FunctionKit { /** * 新增一个自定义函数 * * @param fineFunc 自定义函数对象 */ public static void addFunc(FineFunc fineFunc) { if (fineFunc == null) { return; } if (Calculator.createCalculator().resolveMethod(fineFunc.getName()) == null) { FunctionManager.getInstance().addFunctionDef(new FunctionDef(fineFunc.getName(), fineFunc.getDescription(), fineFunc.getClassName())); } } /** * 根据自定义函数类路径移除一个自定义函数 * * @param className 自定义函数类路径 */ public static void removeFunc(String className) { if (StringUtils.isEmpty(className)) { return; } int count = FunctionManager.getInstance().getFunctionDefCount(); List functionDefList = new ArrayList(count); for (int i = 0; i < count; i++) { FunctionDef functionDef = FunctionManager.getInstance().getFunctionDef(i); if (!className.equalsIgnoreCase(functionDef.getClassName())) { functionDefList.add(functionDef); } } if (functionDefList.size() == count) { return; } FunctionManager.getInstance().clearAllFunctionDef(); for (FunctionDef fun : functionDefList) { FunctionManager.getInstance().addFunctionDef(fun); } } /** * 得到描述函数管理器中所有的函数的名称描述 * @return 函数的名称描述数组 */ public static NameAndDescription[] getDescription() { FunctionManagerProvider funtionManager = FunctionKit.getInstance(); if (funtionManager != null) { int functionDefCount = funtionManager.getFunctionDefCount(); FunctionDefNAD[] nads = new FunctionDefNAD[functionDefCount]; for (int i = 0; i < functionDefCount; i++) { nads[i] = new FunctionDefNAD(funtionManager.getFunctionDef(i)); } return nads; } return new NameAndDescription[0]; } /** * 得到函数管理器实例 * @return 函数管理器 */ public static com.fr.file.FunctionManager getInstance() { return com.fr.file.FunctionManager.getInstance(); } /** * 根据插件ID生成整数类型的标识符 * @param stringID * @return */ public static int generateFunctionID(String stringID) { return FunctionHelper.generateFunctionID(stringID); } }