package com.nominanuda.dataobject;
import static com.nominanuda.dataobject.DataStructHelper.STRUCT;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class WrappingFactory {
public static final WrappingFactory WF = new WrappingFactory();
@SuppressWarnings("unchecked")
public <T> T wrap(Obj o, Class<T> cl) {
InvocationHandler h = new WrapperInvocationHandler(o, cl);
return (T)Proxy.newProxyInstance(cl.getClassLoader(), new Class[] { cl }, h);
}
public <T> T wrap(Class<T> cl) {
return wrap(null, cl);
}
public <T extends ObjWrapper> T clone(T obj, Class<T> cl) {
return wrap(STRUCT.clone(obj.unwrap()), cl);
}
}