package org.nutz.lang.eject;
import java.lang.reflect.Method;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
public class EjectBySimpleEL implements Ejecting {
private String by;
private Method method;
public EjectBySimpleEL(String by) {
if (Strings.isBlank(by))
throw new IllegalArgumentException("MUST NOT Null/Blank");
if (by.indexOf('#') > 0) {
try {
method = Class.forName(by.substring(0, by.indexOf('#')))
.getMethod(by.substring(by.indexOf('#')+1), Object.class);
}
catch (Throwable e) {
throw Lang.wrapThrow(e);
}
}
this.by = by;
}
public Object eject(Object obj) {
try {
if (method != null)
return method.invoke(null, obj);
if (obj == null)
return null;
return obj.getClass().getMethod(by).invoke(obj);
}
catch (Throwable e) {
throw Lang.wrapThrow(e);
}
}
}