扩展形态示例。
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.

90 lines
2.5 KiB

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