⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layoutmanager.java

📁 欢迎使用 FastJsp 开发框架! 编译说明: * 若要生成Api Javadoc文档
💻 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();
    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -