package com.fr.plugin.present.fun; import com.fr.base.BaseFormula; import com.fr.base.present.AbstractPresent; import com.fanruan.api.util.GeneralKit; import com.fr.intelli.record.Focus; import com.fr.intelli.record.Original; import com.fanruan.api.log.LogKit; import com.fr.record.analyzer.EnableMetrics; import com.fr.script.Calculator; import com.fanruan.api.util.AssistKit; import com.fr.stable.ColumnRow; import com.fanruan.api.util.StableKit; import com.fanruan.api.util.StringKit; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; /** * @author richie * @date 2015-05-24 * @since 8.0 */ @EnableMetrics public class StarPresent extends AbstractPresent { private String condition; public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } @Override @Focus(id = "com.fr.plugin.present.star", text = "", source = Original.PLUGIN) public Object present(Object value, Calculator calculator, ColumnRow cr) { Object result = null; if (StableKit.canBeFormula(condition)) { try { result = calculator.evalValue(BaseFormula.createFormulaBuilder().build(condition)); } catch (Exception e) { LogKit.error(e.getMessage(), e); } } else { result = condition; } Number num = GeneralKit.objectToNumber(result, true); if (num == null) { return value; } return new StarPainter(num.intValue()); } @Override public void readXML(XMLableReader reader) { if (reader.isChildNode()) { String tag = reader.getTagName(); if ("Condition".equals(tag)) { condition = reader.getElementValue(); } } } @Override public void writeXML(XMLPrintWriter writer) { if (StringKit.isNotEmpty(condition)) { writer.startTAG("Condition").textNode(condition).end(); } } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public boolean equals(Object o) { return o instanceof StarPresent && super.equals(o) && AssistKit.equals(((StarPresent) o).condition, condition); } @Override public int hashCode() { return AssistKit.hashCode(condition); } }