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
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(); |
|
} |
|
}
|
|
|