package foundation.data.rule; import foundation.dao.bizlogic.ICodeProvider; import foundation.data.entity.Entity; import foundation.data.object.IParamProvider; import foundation.util.MapList; import foundation.variant.provider.DataEvent; public abstract class FieldDefaultValueCreator { private static MapList> items; protected String fieldName; protected String category; protected String rule; protected FieldDefaultValueType type; static { items = new MapList>(); } public static FieldDefaultValueCreator getInstance(String fieldName, String expression) throws Exception { String rule = expression; int pos = expression.indexOf("."); FieldDefaultValueCreator result = null; //1. 形如@{user.id}、@{newDate}这样的规则 if (expression.startsWith("@{")) { result = new VariantDefaultValueCreator(); } //2. 形如Code.OrderCode这样的规则 else if (pos > 0) { String category = expression.substring(0, pos); rule = expression.substring(pos + 1); Class clazz = items.get(category); if (clazz != null) { result = clazz.newInstance(); } } else { result = new SimpleDefaultValueCreator(); } if (result == null) { result = new SimpleDefaultValueCreator(); } result.setFieldName(fieldName); result.setRule(rule); return result; } public abstract Object exec(DataEvent saveEvent, Entity entity, IParamProvider paramProvider); public static void registerOne(String category, Class clazz) { if (category == null) { return; } items.add(category, clazz); } protected void setRule(String rule) { this.rule = rule; } public String getFieldName() { return fieldName; } public void setFieldName(String fieldName) { this.fieldName = fieldName; } public FieldDefaultValueType getType() { return type; } public ICodeProvider getCodeProvider() { return null; } }