package org.nutz.ioc.val;
import java.util.Collection;
import org.nutz.ioc.IocMaking;
import org.nutz.ioc.ValueProxy;
import org.nutz.lang.ContinueLoop;
import org.nutz.lang.Each;
import org.nutz.lang.ExitLoop;
import org.nutz.lang.Lang;
import org.nutz.lang.LoopException;
public abstract class ListableValueProxy implements ValueProxy {
protected Object obj;
public ListableValueProxy(Object obj) {
this.obj = obj;
}
protected abstract Object getValue(String key);
public Object get(IocMaking ing) {
if (obj == null)
return null;
if (obj.getClass().isArray() || obj instanceof Collection) {} else {
obj = new Object[]{obj};
}
final StringBuilder sb = new StringBuilder();
Lang.each(obj, new Each<Object>() {
public void invoke(int index, Object ele, int length) throws ExitLoop, ContinueLoop, LoopException {
String key = String.valueOf(ele);
if (key.startsWith("!")) {
key = key.substring(1);
String dft = "";
if (key.contains(":")) {
dft = key.substring(key.indexOf(':') + 1);
key = key.substring(0, key.indexOf(':'));
}
Object val = getValue(key);
if (val != null) {
sb.append(val);
} else {
sb.append(dft);
}
return;
}
Object val = getValue(key);
if (val == null) {
sb.append(key);
} else {
sb.append(val);
}
}
});
return sb.toString();
}
}