package foundation.code; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import foundation.dao.bizlogic.ICodeProviderCreator; import foundation.data.meta.field.Field; import foundation.util.MapList; import foundation.variant.provider.IVariantsProvider; public class CodeEngine implements ICodeProviderCreator { private static Logger logger; private static CodeEngine instance; private static MapList rules; static { logger = LogManager.getLogger(CodeEngine.class); createInstance(); } private CodeEngine() { rules = new MapList(); } public static synchronized CodeEngine getInstance() { return instance; } public static synchronized CodeEngine createInstance() { return new CodeEngine(); } public void active() { instance = this; } public static String currval(String name, String dynamic, IVariantsProvider... entity) { if (name == null) { logger.error("code engine error: empty code name"); return null; } name = name.toLowerCase(); CodeRuleRuntime rule = rules.get(name); if (rule == null) { logger.error("code engine error: rule [" + name + "] is not exists"); return null; } return rule.currval(dynamic, entity); } public static String tempval(String name, String dynamic, IVariantsProvider... entity) { if (name == null) { logger.error("code engine error: empty code name"); return null; } name = name.toLowerCase(); CodeRuleRuntime rule = rules.get(name); if (rule == null) { logger.error("code engine error: rule [" + name + "] is not exists"); return null; } String result = rule.tempval(dynamic, entity); return result; } public static String nextval(String name, String dynamic, IVariantsProvider... entity) { if (name == null) { logger.error("code engine error: empty code name"); return null; } name = name.toLowerCase(); CodeRuleRuntime rule = rules.get(name); if (rule == null) { logger.error("code engine error: rule [" + name + "] is not exists"); return null; } String result = rule.nextval(dynamic, entity); return result; } public CodeProvider createCodeProvider(Field field, String codeRule) { if (codeRule == null) { logger.error("code engine error: empty code name"); return null; } codeRule = codeRule.toLowerCase(); CodeRuleRuntime rule = rules.get(codeRule); if (rule == null) { logger.error("code engine error: rule [" + codeRule + "] is not exists"); return null; } return new CodeProvider(field, rule); } public void addOneRule(String code, CodeRuleRuntime rule) { if (code == null) { return; } code = code.toLowerCase(); rules.add(code, rule); } public static boolean contains(String ruleCode) { return rules.contains(ruleCode); } public static List getCodeRuleList() { return rules.getItemList(); } }