package cri.sanity.ghost;
public class GhostObj
{
private Object obj;
private Class<?> cls;
private boolean err;
public GhostObj() {}
public GhostObj(Object obj) { init(obj); }
public final Object obj() { return obj; }
public final Class<?> cls() { return cls; }
public final boolean isValid() { return obj != null; }
public final boolean isErr() { return err; }
public final Object call(String method)
{
try {
final Object res = cls.getMethod(method).invoke(obj);
err = false;
return res;
} catch(Exception e) {
err = true;
return null;
}
}
public final boolean callBool(String method)
{
final Object res = call(method);
return !err && res!=null && res instanceof Boolean && (Boolean)res;
}
public final int callInt(String method)
{
final Object res = call(method);
return !err && res!=null && res instanceof Integer ? (Integer)res : -1;
}
public final String[] callStrArr(String method)
{
final Object res = call(method);
return !err && res!=null && res instanceof String[] ? (String[])res : null;
}
public final boolean callable(String method)
{
call(method);
return !err;
}
public final boolean callable(String ... methods)
{
for(final String m : methods) {
call(m);
if(err) return false;
}
return true;
}
public final void init(Object obj)
{
this.err = obj == null;
this.cls = err? null : obj.getClass();
this.obj = obj;
}
}