package net.sf.joafip;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import net.sf.joafip.reflect.HelperReflect;
import net.sf.joafip.reflect.ReflectException;
import net.sf.joafip.reflect.ReflectInvalidClassException;
import net.sf.joafip.service.ClassLoaderProvider;
import net.sf.joafip.store.entity.classinfo.ClassInfo;
import net.sf.joafip.store.entity.objectio.ObjectAndPersistInfo;
import net.sf.joafip.store.service.bytecode.ClassDefiner;
import net.sf.joafip.store.service.bytecode.EnhanceException;
import net.sf.joafip.store.service.classinfo.ClassInfoFactory;
import net.sf.joafip.store.service.objectio.ObjectIOClassNotFoundException;
import net.sf.joafip.store.service.objectio.ObjectIODataCorruptedException;
import net.sf.joafip.store.service.objectio.ObjectIODataRecordNotFoundException;
import net.sf.joafip.store.service.objectio.ObjectIOException;
import net.sf.joafip.store.service.objectio.ObjectIOInvalidClassException;
import net.sf.joafip.store.service.objectio.ObjectIONotSerializableException;
import net.sf.joafip.store.service.objectio.manager.IObjectIOManagerForProxyObjectIO;
import net.sf.joafip.store.service.proxy.IProxyCallBack;
import net.sf.joafip.store.service.proxy.IProxyCallBackToImplement;
public final class MainDefineClass implements IProxyCallBackToImplement {
private HelperReflect helperReflect = HelperReflect.getInstance();
public static void main(final String[] args) {
final MainDefineClass mainDefineClass = new MainDefineClass();
try {
mainDefineClass.test();
} catch (Exception e) {
e.printStackTrace();
}
}
private MainDefineClass() {
super();
}
private void test() throws EnhanceException, IOException,
InstantiationException, IllegalAccessException, ReflectException,
ReflectInvalidClassException {
final ClassDefiner classDefiner = new ClassDefiner(
new ClassLoaderProvider());
String className = "net.sf.joafip.java.util.PTreeMap$Joafip$";
InputStream inputStream = new FileInputStream(
"keil/net.sf.joafip.java.util.PTreeMap.class");
int read;
List<Byte> list = new LinkedList<Byte>();
while ((read = inputStream.read()) != -1) {
list.add((byte) read);
}
byte[] byteCode = new byte[list.size()];
int index = 0;
for (byte value : list) {
byteCode[index++] = value;
}
final Class<?> clazz = classDefiner.defineClass(className, byteCode);
// final Object object=clazz.newInstance();
final Object object = helperReflect.newInstanceNoConstruction(clazz);
// final IProxyCallBack proxyCallBack = (IProxyCallBack) object;
final IProxyCallBack proxyCallBack = IProxyCallBack.class.cast(object);
proxyCallBack.setProxyCallBack$JOAFIP$(this);
System.out.println(proxyCallBack.isLoaded$JOAFIP$());
}
@Override
public void forceLoad$JOAFIP$() throws ObjectIOException,
ObjectIODataRecordNotFoundException, ObjectIOInvalidClassException,
ObjectIOClassNotFoundException, ObjectIODataCorruptedException,
ObjectIONotSerializableException {
}
@Override
public long getMyFileAccessSessionIdentifier$JOAFIP$() {
return 0;
}
@Override
public ClassInfo getProxiedClass$JOAFIP$() {
return null;
}
@Override
public void intercept$JOAFIP$() {
}
@Override
public void methodEnd$JOAFIP$() {
}
@Override
public boolean isLoaded$JOAFIP$() {
return false;
}
@Override
public void setLoaded$JOAFIP$(boolean loaded) throws ObjectIOException {
}
@Override
public void unload$JOAFIP$() throws ObjectIOException,
ObjectIOInvalidClassException {
}
@Override
public ClassInfoFactory getClassInfoFactory$JOAFIP$() {
return null;
}
@Override
public void setInstance$JOAFIP$(ObjectAndPersistInfo objectAndPersistInfo) {
}
@Override
public IObjectIOManagerForProxyObjectIO getObjectIOManager$JOAFIP$() {
return null;
}
@Override
public void setLoading$JOAFIP$(boolean loading) {
}
}