package foundation.system;
|
|
import java.lang.reflect.Method;
|
|
import foundation.dao.preload.Bucket;
|
import foundation.engine.EngineState;
|
import foundation.util.MapList;
|
|
public class LoadMonitor {
|
|
private static Object lock;
|
private MapList<Class<?>, Bucket<?>> items;
|
private EngineState state;
|
|
static {
|
lock = new Object();
|
}
|
|
public LoadMonitor() {
|
items = new MapList<Class<?>, Bucket<?>>();
|
state = EngineState.Idle;
|
}
|
|
public boolean lock() {
|
if (state == EngineState.Idle) {
|
synchronized (lock) {
|
if (state != EngineState.Idle) {
|
return false;
|
}
|
|
state = EngineState.Working;
|
return true;
|
}
|
}
|
else {
|
return false;
|
}
|
}
|
|
public void release() {
|
if (state == EngineState.Idle) {
|
return;
|
}
|
|
state = EngineState.Idle;
|
}
|
|
public void activate() {
|
for (Bucket<?> item: items) {
|
item.activate();
|
}
|
}
|
|
@SuppressWarnings("unchecked")
|
public <T> T register(Class<?> clazz) throws Exception {
|
Method newInstance = null;
|
try {
|
newInstance = clazz.getDeclaredMethod("newInstance");
|
}
|
catch (NoSuchMethodException e) {
|
}
|
|
Bucket<?> bucket = (Bucket<?>)newInstance.invoke(null);
|
items.add(clazz, bucket);
|
|
return (T)bucket;
|
}
|
|
@SuppressWarnings("unchecked")
|
public <T> T get(Class<?> clazz) throws Exception {
|
Bucket<?> result = items.get(clazz);
|
|
if (result == null) {
|
Method getInstance = null;
|
try {
|
getInstance = clazz.getDeclaredMethod("getInstance");
|
}
|
catch (NoSuchMethodException e) {
|
}
|
|
if (getInstance != null) {
|
result = (Bucket<?>) getInstance.invoke(null);
|
}
|
}
|
|
return (T) result;
|
}
|
|
}
|