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<String, CodeRuleRuntime> rules;
|
|
static {
|
logger = LogManager.getLogger(CodeEngine.class);
|
createInstance();
|
}
|
|
|
private CodeEngine() {
|
rules = new MapList<String, CodeRuleRuntime>();
|
}
|
|
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<CodeRuleRuntime> getCodeRuleList() {
|
return rules.getItemList();
|
}
|
}
|