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 getVariantNames() { Set result = new HashSet(); List 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); } } }