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

📄 menutree.java

📁 这是linux下ssl vpn的实现程序
💻 JAVA
字号:
/*
 *  SSL-Explorer
 *
 *  Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License
 *  as published by the Free Software Foundation; either version 2 of
 *  the License, or (at your option) any later version.
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public
 *  License along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
			
package com.sslexplorer.navigation;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionForward;

import com.sslexplorer.core.AvailableMenuItem;
import com.sslexplorer.core.CoreServlet;
import com.sslexplorer.core.CoreUtil;
import com.sslexplorer.core.MenuItem;
import com.sslexplorer.security.Constants;
import com.sslexplorer.security.SessionInfo;

public class MenuTree {

    /**
     * 
     */
    private List menus;
    private HashMap menuMap;
    String name;
    
    public MenuTree(String name) {
        this.name = name;
        menus = new ArrayList();
        menuMap = new HashMap();
    }
    
    /**
     * Get the name of this menu tree
     * 
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * Add a menu item to the menu tree.
     * 
     * @param parentId parent to add menu item to (or <code>null</code> for top level items)
     * @param menuItem menuItem object
     */
    public void addMenuItem(String parentId, MenuItem menuItem) {
        MenuItem parent = parentId == null ? null : (MenuItem) menuMap.get(parentId);
        if (parent != null) {
            menuItem.setParent(parent);
            parent.addChild(menuItem);
        } else {
            menus.add(menuItem);
        }
        menuMap.put(menuItem.getId(), menuItem);
    }


    /**
     * Remove a menu item from the menu tree
     * 
     * @param parentId parent to remove menu item from (or <code>null</code> for top level items)
     * @param itemId menu item ID
     */
    public void removeMenuItem(String parentId, String itemId) {
        MenuItem parent = parentId == null ? null : (MenuItem) menuMap.get(parentId);
        if (parent != null) {
            parent.removeChild(parent.getChild(itemId));
        }
        menuMap.remove(itemId);
    }


    /**
     * @param name
     * @return
     */
    public MenuItem getMenuItem(String id) {
        return (MenuItem) menuMap.get(id);
    }


    /**
     * Rebuild the navigation menu structure, checking each menu item to see if
     * is available for the current state.
     * 
     * @param menuItem root menu item
     * @param checkNavigationContext navigation context
     * @param info info
     * @param request request
     * @param referer referer
     * @param restarting restarting
     * @return available root menus
     */
    public List rebuildMenus(MenuItem menuItem, int checkNavigationContext, SessionInfo info, HttpServletRequest request, String referer) {
        List availableMenus = new ArrayList();
        for (Iterator i = menuItem == null ? menus.iterator() : menuItem.availableChildren(checkNavigationContext, info, request).iterator(); i.hasNext();) {
            MenuItem it = (MenuItem) i.next();
            if (it.isAvailable(checkNavigationContext, info, request)) {
                AvailableMenuItem nm = new AvailableMenuItem(it, null, request, referer, checkNavigationContext, info);
                if (it.isLeaf() || (!it.isLeaf() && !nm.isEmpty())) {
                    availableMenus.add(nm);
                }
            }
        }
        Collections.sort(availableMenus);
        return availableMenus;
    }



    /**
     * Rebuild the navigation menu structure, checking each menu item to see if
     * is available for the current state.
     *
     * @param checkNavigationContext navigation context
     * @param info info
     * @param request request
     * @param referer referer
     * @return available menus
     */
    public List rebuildMenus(int checkNavigationContext, SessionInfo info, HttpServletRequest request, String referer) {
        return rebuildMenus(null, checkNavigationContext, info, request, referer);
    }

    /**
     * Rebuild the navigation menu structure, checking each menu item to see if
     * is available for the current state.
     * 
     * @param request request
     * @return available root menus
     */
    public List rebuildMenus(HttpServletRequest request) {
        return rebuildMenus(null, request);
        
    }

    /**
     * Rebuild the navigation menu structure, checking each menu item to see if
     * is available for the current state.
     * 
     * @param menuItem root menu item
     * @param request request
     * @return available root menus
     */
    public List rebuildMenus(MenuItem menuItem, HttpServletRequest request) {
        SessionInfo info = CoreServlet.getServlet().getLogonController().getSessionInfo(request);
            return rebuildMenus(menuItem, info == null ? SessionInfo.SETUP_CONSOLE_CONTEXT : 
                info.getNavigationContext(), info, request,
                                CoreUtil.getReferer(request));
    }

    public ActionForward getFirstAvailableActionForward(List availableMenuItems) {
        for(Iterator i = availableMenuItems.iterator(); i.hasNext(); ) {
            AvailableMenuItem it = getFirstAvailableMenuLeaf((AvailableMenuItem)i.next());
            if(it != null) {
                return new ActionForward(it.getPath(), true);
            }            
        }
        return null;
    }

    AvailableMenuItem getFirstAvailableMenuLeaf(AvailableMenuItem item) {
        if(item.getMenuItem().isLeaf()) {
            return item;
        }
        else for(Iterator i = item.iterator(); i.hasNext(); ) {
            AvailableMenuItem it = getFirstAvailableMenuLeaf((AvailableMenuItem)i.next());
            if(it != null) {
                return it;
            }            
        }
        return null;
    }
}

⌨️ 快捷键说明

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