redis数据集插件。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

67 lines
1.8 KiB

package com.fr.plugin.db.redis.core.order.impl;
import com.fanruan.api.cal.FormulaKit;
import com.fanruan.api.cal.ParameterKit;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.util.GeneralKit;
import com.fanruan.api.util.StringKit;
import com.fr.base.BaseFormula;
import com.fr.plugin.db.redis.core.order.OrderValue;
import com.fr.stable.ParameterProvider;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.script.NameSpace;
import com.fr.stable.xml.XMLableReader;
public class FormulaOrderValue extends OrderValue {
private BaseFormula formula;
public FormulaOrderValue() {
}
public FormulaOrderValue(BaseFormula formula) {
this.formula = formula;
}
public void setValue(BaseFormula formula) {
this.formula = formula;
}
@Override
public BaseFormula getValue() {
return formula;
}
@Override
public int toIndex(CalculatorProvider cal, ParameterProvider[] ps) {
NameSpace nameSpace = ParameterKit.createParameterMapNameSpace(ps);
cal.pushNameSpace(nameSpace);
try {
return GeneralKit.objectToNumber(formula.eval(cal)).intValue();
} catch (Exception u) {
LogKit.error(u.getMessage(), u);
} finally {
cal.removeNameSpace(nameSpace);
}
return 0;
}
@Override
public ParameterProvider[] analyze4Parameters() {
if (formula == null) {
return new ParameterProvider[0];
}
return ParameterKit.analyze4ParametersFromFormula(formula.getContent());
}
@Override
public void readValue(XMLableReader reader) {
this.formula = FormulaKit.newFormula(reader.getAttrAsString("value", StringKit.EMPTY));
}
@Override
public String toString() {
return formula == null ? StringKit.EMPTY : formula.getPureContent();
}
}