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

📄 strutsmenubuilderimpl.java

📁 ACEGI数据库保存 ACEGI数据库保存 ACEGI数据库保存
💻 JAVA
字号:
/*
 * Copyright 2004-2005 wangz.
 * Project shufe_newsroom
 */
package com.skyon.um.security.acegi.strutsmenu;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import net.sf.navigator.displayer.MenuDisplayerMapping;
import net.sf.navigator.menu.MenuComponent;
import net.sf.navigator.menu.MenuRepository;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.FastHashMap;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;

/**
 * @since 2005-8-4
 * @author 王政
 * @version $Id: StrutsMenuBuilderImpl.java,v 1.4 2005/10/26 04:13:02 wangzheng Exp $
 */
public class StrutsMenuBuilderImpl implements StrutsMenuBuilder, InitializingBean {

    private static final Log logger = LogFactory.getLog(StrutsMenuBuilderImpl.class);
    
    private MenuItemProvider menuItemProvider;
    
    private FastHashMap displayerMap = new FastHashMap();
    
    
    public StrutsMenuBuilderImpl() {
        initDisplayers();
    }
    
    
    private void initDisplayers() {
        MenuDisplayerMapping displayMapping = new MenuDisplayerMapping();
        displayMapping.setName("ListMenu");
        displayMapping.setType("net.sf.navigator.displayer.ListMenuDisplayer");
        displayerMap.put(displayMapping.getName(), displayMapping);
                
        displayMapping = new MenuDisplayerMapping();
        displayMapping.setName("Velocity");
        displayMapping.setType("net.sf.navigator.displayer.VelocityMenuDisplayer");
        displayMapping.setConfig("/templates/xtree.html");
        displayerMap.put(displayMapping.getName(), displayMapping);
        
        //TODO add other menu supports
    }


    public void setMenuItemProvider(MenuItemProvider menuItemProvider) {
        this.menuItemProvider = menuItemProvider;
    }

    /**
     * @return Returns the menuItemProvider.
     */
    public MenuItemProvider getMenuItemProvider() {
        return menuItemProvider;
    }


    public void registerDisplayer(String displayerName, MenuDisplayerMapping mapping) {
        displayerMap.put(displayerName, mapping);
    }
    
    /**
     * @return Returns the displayerMap.
     */
    public FastHashMap getDisplayerMap() {
        return displayerMap;
    }


    public String[] getAllSupportDisplayerNames() {
        List list = new LinkedList();        
        for (Iterator iter = displayerMap.keySet().iterator(); iter.hasNext(); ) {
            list.add((String) iter.next());
        }        
        return (String[]) list.toArray(new String[0]);
    }

    public MenuRepository getMenuRepository(String[] recipients) {
        MenuCompentWrapper[] items = getMenuItemProvider().getMenuItems(recipients);
        
        Arrays.sort(items, new Comparator() {
			public int compare(Object o1, Object o2) {
				Assert.isInstanceOf(MenuCompentWrapper.class, o1);
				Assert.isInstanceOf(MenuCompentWrapper.class, o1);
				
				MenuCompentWrapper wrapper1 = (MenuCompentWrapper) o1;
				MenuCompentWrapper wrapper2 = (MenuCompentWrapper) o2;
				
				String resourceName1 = wrapper1.getResourceName();
				String resourceName2 = wrapper2.getResourceName();
				return resourceName1.compareTo(resourceName2);
			}      	
        });
        
        String[] resourceNames = new String[items.length];
        for (int i = 0; i < items.length; i++) {
            resourceNames[i] = items[i].getResourceName();
        }
             
        MenuRepository repository = new MenuRepository();              
        repository.setDisplayers(getDisplayerMap());
        
        if (items == null || items.length ==0) {
            if (logger.isDebugEnabled()) {
                logger.debug("No corresponding menu for this user");
            }
            return repository;
        }
                
        for (int i = 0; i < items.length; i++) {
            MenuCompentWrapper wrapper = items[i];
            MenuComponent component = new MenuComponent();
            try {                
                BeanUtils.copyProperties(component, wrapper);                
            } catch (Exception e) {
                //Just simply skip it
            	logger.error("Menu Resoruce copy failled!");
            } finally {
                //Set the difference properties
                component.setName(wrapper.getResourceName());
            }            
            
            String parentName = wrapper.getParentName();
            if (! StringUtils.isBlank(parentName)) {
                int pos = searchInArray(resourceNames, parentName);
                
				if (pos >= 0) {
					MenuComponent parentMenu = repository.getMenu(parentName);
					if (parentMenu == null) {
						parentMenu = new MenuComponent();
						MenuCompentWrapper parent = items[pos];
						try {                
							BeanUtils.copyProperties(parentMenu, parent);                
						} catch (Exception e) {
							//Just simply skip it
						} finally {
							//Set the difference properties
							parentMenu.setName(parent.getResourceName());
						}
						repository.addMenu(parentMenu);
					}
					component.setParent(parentMenu);
				}  
				
				repository.addMenu(component);
			}
        }
        
        return repository;    
    }
    
    private static int searchInArray(Object[] array, Object o) {
    	Assert.notNull(array, " array must be specified. ");
    	for (int i = 0; i < array.length; i++) {
    		if (ObjectUtils.nullSafeEquals(array[i], o)) {
    			return i;
    		}
    	}
    	return -1;
    }
    

    public void afterPropertiesSet() throws Exception {
        Assert.notNull(getMenuItemProvider(), " Menu item provider is required . ");
    }
    
    
    

}



⌨️ 快捷键说明

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