?? layoutmanager.java
字號:
package com.onetsoft.fastjsp;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
/**
* 布局管理
* 每個布局下依次有頁面類組、組件類組、Action類組
*
* @see PageParamsImpl
* @since 3.0
*/
final class LayoutManager {
private Map componentsPool = new IdentityHashMap(4); //key:pageClass , value:Component[]
private Map actionManagersPool = new IdentityHashMap(4); //key:pageClass , value:ActionsManager
public LayoutManager() {
}
/**
* 取得頁面組件管理
*
* @param pageClass
* @return
*/
public ComponentsManager getComponentsManager(Class pageClass) {
Object o = componentsPool.get(pageClass);
if (o == null) {
synchronized (pageClass) {
o = componentsPool.get(pageClass);
if (o == null) {
o = loadComponents(pageClass);
synchronized (componentsPool) {
componentsPool.put(pageClass, o);
}
}
}
}
return new ComponentsManager((Class[]) o);
}
/**
* 取得頁面action管理
*
* @param pageClass
* @return
*/
public ActionsManager getActionsManager(Class pageClass) {
Object o = actionManagersPool.get(pageClass);
if (o == null) {
synchronized (pageClass) {
o = actionManagersPool.get(pageClass);
if (o == null) {
o = new ActionsManager(pageClass);
synchronized (actionManagersPool) {
actionManagersPool.put(pageClass, o);
}
}
}
}
return (ActionsManager) o;
}
private static Class[] loadComponents(Class pageClass) {
try {
List list = new ArrayList(4);
retrieveComponents(getInitComponentInstance(pageClass), list);
return (Class[]) list.toArray(new Class[list.size()]);
} catch (InstantiationException e) {
throw new ApplicationRuntimeException(e);
} catch (IllegalAccessException e) {
throw new ApplicationRuntimeException(e);
} catch (NoSuchMethodException e) {
throw new ApplicationRuntimeException(e);
} catch (InvocationTargetException e) {
throw new ApplicationRuntimeException(e);
}
}
/**
* 搜尋頁面所有組件類
*
* @param component
* @throws IllegalAccessException
* @throws InstantiationException
*/
private static void retrieveComponents(AbstractComponent component, List list) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
list.add(component.getClass());
Class[] a = component.getComponents();
if (a == null)
return;
for (int i = 0; i < a.length; i++) {
retrieveComponents(getInitComponentInstance(a[i]), list);
}
}
private static AbstractComponent getInitComponentInstance(Class pageClass) throws IllegalAccessException, InstantiationException {
return (AbstractComponent) pageClass.newInstance();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -