package frame.variant.expression; import java.util.ArrayList; import java.util.List; public abstract class VariantContext implements IVariantRequestListener { private List linkedContextList; public VariantContext() { linkedContextList = new ArrayList(); } public void setParametersTo(IExpression expression) throws Exception { doSetParametersTo(expression, true); } protected void doSetParametersTo(IExpression expression, boolean queryGlabal) throws Exception { VariantList paramList = expression.getVariantList(); //1. on local for (VariantSegment variant: paramList) { if (!variant.isEmpty()) { continue; } String name = variant.getName(); String value = getStringValue(name, null); if (value != null) { variant.setValue(value); } } //2. on linked for (VariantContext linked: linkedContextList) { linked.doSetParametersTo(expression, false); } //3. if (queryGlabal) { for (VariantSegment variant: paramList) { if (!variant.isEmpty()) { continue; } String name = variant.getName(); String value = GlobalVariant.getStringValue(name, null); if (value != null) { variant.setValue(value); } } } } @Override public List getVariantNames() { return null; } @Override public abstract String getStringValue(String name, VariantRequestParams params) throws Exception; public void linkContext(VariantContext context) { linkedContextList.add(context); } }