package org.nutz.lang.tmpl;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutBean;
import org.nutz.mapl.Mapl;
abstract class TmplDynamicEle implements TmplEle {
private String _type;
private String key;
private String _org_fmt;
private String _dft_val;
private String _dft_key;
protected String fmt;
protected TmplDynamicEle(String type, String key, String fmt, String dft_str) {
this._type = type;
this.key = key;
this._org_fmt = fmt;
// 默认值取 key @xxx
if (!Strings.isBlank(dft_str) && dft_str.startsWith("@")) {
this._dft_key = dft_str.substring(1);
}
// 默认值是静态的
else {
this._dft_val = dft_str;
}
}
public String toString() {
StringBuilder sb = new StringBuilder("${").append(key);
if (null != _type) {
sb.append('<').append(_type);
if (null != _org_fmt) {
sb.append(':').append(_org_fmt);
}
sb.append('>');
}
// 默认键
if (null != _dft_key) {
sb.append('?').append('@').append(_dft_val);
}
// 默认值
else if (null != _dft_val) {
sb.append('?').append(_dft_val);
}
return sb.append('}').toString();
}
public void join(StringBuilder sb, NutBean context, boolean showKey) {
Object val = Mapl.cell(context, key);
if (null == val) {
// 默认键
if (null != _dft_key) {
val = Mapl.cell(context, _dft_key);
}
// 默认值
else if (null != _dft_val) {
val = _dft_val;
}
}
String str = _val(val);
// 如果木值
if (null == str) {
if (showKey) {
sb.append("${").append(key).append('}');
}
}
// 否则填充
else {
sb.append(str);
}
}
protected abstract String _val(Object val);
}