package com.fr.plugin.present.fun; import com.fr.base.BaseFormula; import com.fr.base.present.AbstractPresent; import com.fr.general.GeneralUtils; import com.fr.intelli.record.Focus; import com.fr.intelli.record.Original; import com.fr.log.FineLoggerFactory; import com.fr.record.analyzer.EnableMetrics; import com.fr.script.Calculator; import com.fr.stable.AssistUtils; import com.fr.stable.ColumnRow; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.UtilEvalError; 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 (StableUtils.canBeFormula(condition)) { try { result = calculator.evalValue(BaseFormula.createFormulaBuilder().build(condition)); } catch (UtilEvalError e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } else { result = condition; } Number num = GeneralUtils.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 (StringUtils.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) && AssistUtils.equals(((StarPresent) o).condition, condition); } @Override public int hashCode() { return AssistUtils.hashCode(condition); } }