ADS-Praktika/template/src/main/java/ch/zhaw/ads/ServerFactory.java
2020-10-04 20:38:36 +02:00

69 lines
1.7 KiB
Java

/**
* ServerFactory -- Praktikum Experimentierkasten --
*
* @author K. Rege
* @version 1.0 -- Factory zur Erstellung von Server Objekten
* @version 2.0 -- Dynamisches Nachladen
*/
package ch.zhaw.ads;
import java.io.*;
/* Classloader that handles file path of class
*/
class MyClassLoader extends ClassLoader {
private String path;
MyClassLoader(ClassLoader parent) {
super(parent);
}
private byte[] getBytes(String name) {
try {
RandomAccessFile file = new RandomAccessFile(name, "r");
byte data[] = new byte[(int) file.length()];
file.readFully(data);
file.close();
return data;
} catch (IOException e) {}
return null;
}
/**
* @name filename of class
*/
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
// System.out.println("load:" + name + " " + resolve);
Class<?> clazz;
byte[] classData = getBytes(name);
if (classData != null) {
clazz = defineClass(classData, 0, classData.length);
path = name.substring(0,
name.length() - clazz.getName().length() - ".class".length());
return clazz;
}
if (!resolve) {
classData = getBytes(path + name.replace(".", File.separator) + ".class");
if (classData != null) {
return defineClass(classData, 0, classData.length);
}
}
return findSystemClass(name);
}
}
public class ServerFactory {
public static Class<?> loadClass(String name) throws Exception {
MyClassLoader myClassLoader = new MyClassLoader(
MyClassLoader.class.getClassLoader());
Class<?> clazz = myClassLoader.loadClass(name, true);
return clazz;
}
public static CommandExecutor createServer(String name) throws Exception {
return (CommandExecutor) loadClass(name).newInstance();
}
}