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<String, Class<? extends FieldDefaultValueCreator>> items;
|
protected String fieldName;
|
protected String category;
|
protected String rule;
|
protected FieldDefaultValueType type;
|
|
static {
|
items = new MapList<String, Class<? extends FieldDefaultValueCreator>>();
|
}
|
|
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<? extends FieldDefaultValueCreator> 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<? extends FieldDefaultValueCreator> 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;
|
}
|
|
}
|