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, Bucket> items; private EngineState state; static { lock = new Object(); } public LoadMonitor() { items = new MapList, 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 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 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; } }