package foundation.code;
|
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
import foundation.dao.bizlogic.ICodeProvider;
|
import foundation.data.entity.Entity;
|
import foundation.data.object.IParamProvider;
|
import foundation.data.rule.FieldDefaultValueCreator;
|
import foundation.data.rule.FieldDefaultValueType;
|
import foundation.variant.provider.DataEvent;
|
import foundation.variant.provider.IVariantsProvider;
|
import foundation.variant.provider.VariantProviderType;
|
|
public class CodeDefaultValueCreator extends FieldDefaultValueCreator implements IVariantsProvider {
|
|
public static String ProviderName = "code";
|
private DataEvent triggerEvent;
|
|
public CodeDefaultValueCreator() {
|
type = FieldDefaultValueType.Code;
|
}
|
|
@Override
|
public Object exec(DataEvent dataEvent, Entity entity, IParamProvider paramProvider) {
|
|
if (DataEvent.New == dataEvent) {
|
String dynamic = (paramProvider != null) ? paramProvider.getString(CodeRule.Param_DynamicSegment) : null;
|
String result = CodeEngine.tempval(rule, dynamic, entity);
|
entity.set(fieldName, result);
|
return result;
|
}
|
else if (triggerEvent == null && DataEvent.Insert == dataEvent) {
|
String dynamic = (paramProvider != null) ? paramProvider.getString(CodeRule.Param_DynamicSegment) : null;
|
String result = CodeEngine.nextval(rule, dynamic, entity);
|
entity.set(fieldName, result);
|
return result;
|
}
|
else if (triggerEvent != null && DataEvent.Insert == dataEvent ) {
|
String dynamic = (paramProvider != null) ? paramProvider.getString(CodeRule.Param_DynamicSegment) : null;
|
String result = CodeEngine.tempval(rule, dynamic, entity);
|
entity.set(fieldName, result);
|
return result;
|
}
|
else if (triggerEvent != null && triggerEvent == dataEvent) {
|
String dynamic = (paramProvider != null) ? paramProvider.getString(CodeRule.Param_DynamicSegment) : null;
|
String result = CodeEngine.nextval(rule, dynamic, entity);
|
entity.set(fieldName, result);
|
return result;
|
}
|
else if (DataEvent.Update == dataEvent) {
|
entity.set(fieldName, null);
|
return "不修改原值";
|
}
|
|
return null;
|
}
|
|
@Override
|
public Object getVariantValue(DataEvent dataEvent, String name) {
|
String result = null;
|
|
if (DataEvent.New == dataEvent) {
|
result = CodeEngine.tempval(name, null);
|
}
|
else if (DataEvent.Insert == dataEvent) {
|
result = CodeEngine.nextval(name, null);
|
}
|
|
return result;
|
}
|
|
@Override
|
public ICodeProvider getCodeProvider() {
|
return null;
|
}
|
|
@Override
|
public String getProviderName() {
|
return ProviderName;
|
}
|
|
@Override
|
public VariantProviderType getProviderType() {
|
return VariantProviderType.Persist;
|
}
|
|
@Override
|
public boolean containsVariant(String name) {
|
return CodeEngine.contains(name);
|
}
|
|
public Set<String> getVariantNames() {
|
Set<String> result = new HashSet<String>();
|
|
List<CodeRuleRuntime> ruleList = CodeEngine.getCodeRuleList();
|
|
for (CodeRuleRuntime ruleRuntime: ruleList) {
|
result.add(ruleRuntime.getCode());
|
}
|
|
return result;
|
}
|
|
@Override
|
public void setRule(String rule) {
|
this.rule = rule;
|
int pos = rule.indexOf(".");
|
|
if (pos > 0) {
|
this.triggerEvent = DataEvent.parse(rule.substring(0, pos));
|
this.rule = rule.substring(pos + 1);
|
}
|
}
|
|
}
|