/*
* JavaXYQ Source Code
* by kylixs
* at 2010-5-29
* please visit http://javaxyq.googlecode.com
* or mail to kylixs@qq.com
*/
package com.javaxyq.ui;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;
import org.apache.commons.jexl2.UnifiedJEXL;
import org.apache.commons.jexl2.UnifiedJEXL.Expression;
import com.javaxyq.core.ApplicationHelper;
import com.javaxyq.core.Context;
import com.javaxyq.widget.Player;
/**
* @author gongdewei
* @date 2010-5-29 create
*/
public class JEXLTooltipTemplate implements TooltipTemplate {
private Context context;
private Map<String,Expression> expressions;
public JEXLTooltipTemplate(Context context) {
super();
this.context = context;
expressions = new HashMap<String, Expression>();
}
@Override
public String getTooltipText(String tpl) {
Expression expression = expressions.get(tpl);
if (expression == null) {
try {
JexlEngine jexl = new JexlEngine();
UnifiedJEXL ujexl = new UnifiedJEXL(jexl);
expression = ujexl.parse(tpl);
expressions.put(tpl, expression);
} catch (Exception e) {
e.printStackTrace();
}
}
if (expression != null) {
Map<String, Object> properties = null;
Player player = context.getPlayer();
if(player != null) {
properties = ApplicationHelper.getApplication().getDataManager().getProperties(player);
}else {
properties = new HashMap<String, Object>();
}
JexlContext jexlcontext = new MapContext(properties);
String result = expression.evaluate(jexlcontext).toString();
return result;
}
return null;
}
}