All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.frameworkset.platform.framework.MenuHelper Maven / Gradle / Ivy

package com.frameworkset.platform.framework;

import java.security.Principal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.frameworkset.security.AccessControlInf;
import org.frameworkset.spi.BaseApplicationContext;

import com.frameworkset.platform.security.AccessControl;
import com.frameworkset.util.StringUtil;



/**
 * 

* Title: MenuHelper *

* *

* Description: 提供生成权限菜单的功能,以及栏目框架地址的功能 *

* *

* Copyright: Copyright (c) 2006 *

* *

* Company: bbossgroups *

* * @author biaoping.yin * @version 1.0 */ public class MenuHelper { private Item firstItem; private Map permissionIndexs; private Principal principal; private Map permissionMenuIndex; private AccessControlInf control; private ModuleQueue modules; private MenuQueue menus; private ItemQueue items; private List menuQueue; private String subsystem; private AuthMenuItemQueue menuitemQueue; public static final int VISIBLE_PERMISSION = 1; public static final int SUB_VISIBLE_PERMISSION = 1; public static final int UNVISIBLE_PERMISSION = 0; Framework framework; public MenuHelper(List menuQueue, Principal principal, Map permissionIndexs, String subsystem) { this.subsystem = subsystem; framework = Framework.getInstance(subsystem); this.menuQueue = menuQueue; if (permissionIndexs == null) this.permissionIndexs = new HashMap(); else this.permissionIndexs = permissionIndexs; this.principal = principal; menuitemQueue = new AuthMenuItemQueue(menuQueue); permissionMenuIndex = new HashMap(); } public MenuHelper(List menuQueue, Principal principal, Map permissionIndexs) { this(menuQueue, principal, permissionIndexs, ""); } public MenuHelper(String subsystem, Principal principal) { this.subsystem = subsystem; framework = Framework.getInstance(subsystem); this.permissionIndexs = new HashMap(); this.principal = principal; menuitemQueue = new AuthMenuItemQueue(null); permissionMenuIndex = new HashMap(); } public MenuHelper(Principal principal) { this("", principal); } public static void main(String[] args) { Principal principal = new com.frameworkset.platform.security.authorization.AuthPrincipal("userName",null,null); MenuHelper menuHelper = new MenuHelper("5", principal); } public MenuHelper(List menuQueue, AccessControlInf control, Map permissionIndexs, String subsystem) { this.subsystem = subsystem; framework = Framework.getInstance(subsystem); this.menuQueue = menuQueue; if (permissionIndexs == null) this.permissionIndexs = new HashMap(); else this.permissionIndexs = permissionIndexs; this.control = control; menuitemQueue = new AuthMenuItemQueue(menuQueue); permissionMenuIndex = new HashMap(); } public MenuHelper(List menuQueue, AccessControlInf control, Map permissionIndexs) { this(menuQueue, control, permissionIndexs, ""); } public MenuHelper(String subsystem, AccessControlInf control) { this.subsystem = subsystem; framework = Framework.getInstance(subsystem); this.permissionIndexs = new HashMap(); this.control = control; menuitemQueue = new AuthMenuItemQueue(null); permissionMenuIndex = new HashMap(); } public MenuHelper(AccessControlInf control) { this("", control); } /** * 根据hash表中外部参数构造url的参数查询串 * * @param externalparams * @return */ public static String getExternalQueryString(Map externalparams) { if (externalparams == null) return ""; StringBuffer external_params = new StringBuffer(); Set keys = externalparams.keySet(); Iterator iterator = keys.iterator(); boolean flag = false; while (iterator.hasNext()) { String key = (String)iterator.next(); if (!flag) { external_params.append(key).append("=").append(externalparams.get(key)); flag = true; } else { external_params.append("&").append(key).append("=").append(externalparams.get(key)); } } if (flag) { return Framework.EXTERNAL_PARAMS_KEY + "=" + StringUtil.encode(external_params.toString()); } else { return ""; } } public static String getRootUrl(String context, String menuPath, Map externalparams) { return getRootUrl(context, menuPath, externalparams, ""); } /** * 获取菜单的根url地址,通过本地址将生成包含整个栏目所配置的块的系统框架 * * @param context * @param menu * @param params * @return */ public static String getRootUrl(String context, String menuPath, Map externalparams, String subsystem) { StringBuffer url = new StringBuffer(); if (context != null && !"".equals(context)) { url.append(context).append("/"); } url.append("main.frame?").append(Framework.MENU_TYPE).append("=").append(Framework.ROOT_CONTAINER); url.append("&").append(Framework.MENU_PATH).append("=").append(menuPath); String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static MenuItem getMenu(String path) { int idx = path.indexOf("::"); String subsystem = path.substring(0, idx); return Framework.getInstance(subsystem).getMenu(path); } public MenuItem getCurrentSystemMenu(String modulePath) { MenuItem module = (MenuItem)permissionMenuIndex.get(modulePath); if (module == null) { module = framework.getCurrentSystemMenu(modulePath); if (module == null) { //System.out.println("modulePath=[" + modulePath + "]的菜单项是不存在。"); return null; } else if (module instanceof Item) { //System.out.println("modulePath=[" + modulePath + "]的菜单项是一个item,不能再包含item"); AuthorItem am = new AuthorItem((Item)module); permissionMenuIndex.put(am.getPath(), am); // 可能会有问题 return am; } else if (module instanceof Module) { AuthorModule am = new AuthorModule((Module)module); permissionMenuIndex.put(am.getPath(), am); // 可能会有问题 return am; } else return module; } else { return module; } } public MenuItem getCurrentSystemMenu(MenuItem menu) { //System.out.println("menu----------------------" + menu); //System.out.println("permissionMenuIndex----------------------" + permissionMenuIndex); MenuItem module = (MenuItem)permissionMenuIndex.get(menu.getPath()); if (module == null) { module = menu; if (module == null) { //System.out.println("modulePath=[" + modulePath + "]的菜单项是不存在。"); return null; } else if (module instanceof Item) { //System.out.println("modulePath=[" + modulePath + "]的菜单项是一个item,不能再包含item"); AuthorItem am = new AuthorItem((Item)module); permissionMenuIndex.put(am.getPath(), am); // 可能会有问题 return am; } else if (module instanceof Module) { AuthorModule am = new AuthorModule((Module)module); permissionMenuIndex.put(am.getPath(), am); // 可能会有问题 return am; } else return module; } else { return module; } } public static String getMainUrl(String context, String menuPath, Map externalparams) { return getMainUrl(context, menuPath, externalparams, ""); } /** * 获取主框架url地址,通过本地址生成的系统框架包含leftside menu、navigaitor、workspace以及status块的系统框架 * * @param context * @param menu * @param externalparams * @return */ public static String getMainUrl(String context, String menuPath, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.MAIN_CONTAINER_URL)).append( // Framework.MENU_PATH).append("=") // .append(StringUtil.encode(menuPath)) // .append("&") // .append(Framework.MENU_TYPE) // .append("=") // .append(Framework.MAIN_CONTAINER); // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } return getMainUrl(context, menuPath, externalparams, subsystem, null); } public static String getMainUrl(String context, String menuPath, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.MAIN_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.MAIN_CONTAINER); String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getPerspectiveContentUrl(String context, String menuPath, Map externalparams) { return getPerspectiveContentUrl(context, menuPath, externalparams, ""); } /** * 获取主工作区的url地址,通过本地址生成的系统框架包含navigator,workspace和status块的系统框架 * * @param context * @param menu * @param params * @return */ public static String getPerspectiveContentUrl(String context, String menuPath, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.CONTENT_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.CONTENT_CONTAINER); // // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getPerspectiveContentUrl(context, menuPath, externalparams, subsystem, null); } public static String getPerspectiveContentUrl(String context, String menuPath, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.CONTENT_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.CONTENT_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getActionContainerUrl(String context, String menuPath, Map externalparams) { return getActionContainerUrl(context, menuPath, externalparams, ""); } /** * 获取actioncontainer地址,通过本地址将生成包含workspace和status块的系统框架 * * @param context * @param menu * @param externalparams * @return */ public static String getActionContainerUrl(String context, String menuPath, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.ACTION_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.ACTION_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getActionContainerUrl(context, menuPath, externalparams, subsystem, null); } public static String getActionContainerUrl(String context, String menuPath, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.ACTION_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.ACTION_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getWorkspaceUrl(String context, String menuPath, Map externalparams) { return getWorkspaceUrl(context, menuPath, externalparams, ""); } /** * 获取工作区页面地址,通过该地址可以方便地 * * @param context * @param menu * @param externalparams * @return */ public static String getWorkspaceUrl(String context, String menuPath, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.PROPERTIES_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append(Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.PROPERTIES_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getWorkspaceUrl(context, menuPath, externalparams, subsystem, null); } public static String getWorkspaceUrl(String context, String menuPath, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.PROPERTIES_CONTAINER_URL, sessionid),true); url.append(murl) .append(Framework.MENU_PATH).append("=").append(StringUtil.encode(menuPath)).append("&") .append(Framework.MENU_TYPE).append("=").append(Framework.PROPERTIES_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getStatusUrl(String context, String menuPath, Map externalparams) { return getStatusUrl(context, menuPath, externalparams, ""); } /** * 获取工作区页面地址,通过该地址可以方便地 * * @param context * @param menu * @param externalparams * @return */ public static String getStatusUrl(String context, String menuPath, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append( Framework.getUrl(Framework.STATUS_CONTAINER_URL)) // .append( Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append( Framework.STATUS_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getStatusUrl(context, menuPath, externalparams, subsystem, null); } public static String getStatusUrl(String context, String menuPath, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.STATUS_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.STATUS_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getRootUrl(String context, String menuPath, String externalparams) { return getRootUrl(context, menuPath, externalparams, ""); } /** * 获取菜单的根url地址,通过本地址将生成包含整个栏目所配置的块的系统框架 * * @param context * @param menu * @param params * @return */ public static String getRootUrl(String context, String menuPath, String externalparams, String subsystem) { StringBuffer url = new StringBuffer(); if (context != null && !"".equals(context)) { url.append(context).append("/"); } url.append("main.frame?" + Framework.MENU_TYPE + "=" + Framework.ROOT_CONTAINER); url.append("&").append(Framework.MENU_PATH).append("=").append(menuPath); if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getMainUrl(String context, String menuPath, String externalparams) { return getMainUrl(context, menuPath, externalparams, ""); } /** * 获取主框架url地址,通过本地址生成的系统框架包含leftside menu、navigaitor、workspace以及status块的系统框架 * * @param context * @param menu * @param externalparams * @return */ public static String getMainUrl(String context, String menuPath, String externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.MAIN_CONTAINER_URL)).append( // Framework.MENU_PATH).append("=") // .append(StringUtil.encode(menuPath)) // .append("&") // .append(Framework.MENU_TYPE) // .append("=") // .append(Framework.MAIN_CONTAINER); // if(externalparams != null && !externalparams.equals("")) // { // url.append("&") // .append(Framework.EXTERNAL_PARAMS_KEY).append("=") // .append(StringUtil.encode(externalparams)); // } // return url.toString(); return getMainUrl(context, menuPath, externalparams, subsystem, null); } public static String getMainUrl(String context, String menuPath, String externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.MAIN_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.MAIN_CONTAINER); if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getPerspectiveContentUrl(String context, String menuPath, String externalparams) { return getPerspectiveContentUrl(context, menuPath, externalparams, ""); } /** * 获取主工作区的url地址,通过本地址生成的系统框架包含navigator,workspace和status块的系统框架 * * @param context * @param menu * @param params * @return */ public static String getPerspectiveContentUrl(String context, String menuPath, String externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.CONTENT_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.CONTENT_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getPerspectiveContentUrl(String context, String menuPath, String externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.CONTENT_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.CONTENT_CONTAINER); // // // 外部参数,可以传递到各框架中,"external_params=" // if(externalparams != null && !externalparams.equals("")) // { // url.append("&") // .append(Framework.EXTERNAL_PARAMS_KEY).append("=") // .append(StringUtil.encode(externalparams)); // } // return url.toString(); return getPerspectiveContentUrl(context, menuPath, externalparams, subsystem, null); } public static String getNavigatorContainerUrl(String context, String menuPath, String externalparams) { return getNavigatorContainerUrl(context, menuPath, externalparams, ""); } /** * --新增 gao.tang 20080916 * * @param context * @param menuPath * @param externalparams * @param subsystem * @return */ public static String getNavigatorContainerUrl(String context, String menuPath, Map externalparams) { return getNavigatorContainerUrl(context, menuPath, externalparams, ""); } /** * --新增 gao.tang 20080916 * * @param context * @param menuPath * @param externalparams * @param subsystem * @return */ public static String getNavigatorContainerUrl(String context, String menuPath, Map externalparams, String subsystem) { String external_params = ""; if (externalparams != null) { external_params = getExternalQueryString(externalparams); } return getNavigatorContainerUrl(context, menuPath, external_params, subsystem); } /** * 获取actioncontainer地址,通过本地址将生成包含workspace和status块的系统框架 * * @param context * @param menu * @param externalparams * @return */ public static String getNavigatorContainerUrl(String context, String menuPath, String externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.NAVIGATOR_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append(Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.NAVIGATOR_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // if(externalparams != null && !externalparams.equals("")) // { // url.append("&") // .append(Framework.EXTERNAL_PARAMS_KEY).append("=") // .append(StringUtil.encode(externalparams)); // } // return url.toString(); return getNavigatorContainerUrl(context, menuPath, externalparams, subsystem, null); } public static String getNavigatorContainerUrl(String context, String menuPath, String externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.NAVIGATOR_CONTAINER_URL, sessionid),true); url.append(murl) .append(Framework.MENU_PATH).append("=").append(StringUtil.encode(menuPath)).append("&") .append(Framework.MENU_TYPE).append("=").append(Framework.NAVIGATOR_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getActionContainerUrl(String context, String menuPath, String externalparams) { return getActionContainerUrl(context, menuPath, externalparams, ""); } /** * 获取actioncontainer地址,通过本地址将生成包含workspace和status块的系统框架 * * @param context * @param menu * @param externalparams * @return */ public static String getActionContainerUrl(String context, String menuPath, String externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.ACTION_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.ACTION_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // if(externalparams != null && !externalparams.equals("")) // { // url.append("&") // .append(Framework.EXTERNAL_PARAMS_KEY).append("=") // .append(StringUtil.encode(externalparams)); // } // return url.toString(); return getActionContainerUrl(context, menuPath, externalparams, subsystem, null); } public static String getActionContainerUrl(String context, String menuPath, String externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.ACTION_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.ACTION_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getWorkspaceUrl(String context, String menuPath, String externalparams) { return getWorkspaceUrl(context, menuPath, externalparams, ""); } /** * 获取工作区页面地址,通过该地址可以方便地 * * @param context * @param menu * @param externalparams * @return */ public static String getWorkspaceUrl(String context, String menuPath, String externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.PROPERTIES_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append(Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.PROPERTIES_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // // if(externalparams != null && !externalparams.equals("")) // { // url.append("&") // .append(Framework.EXTERNAL_PARAMS_KEY).append("=") // .append(StringUtil.encode(externalparams)); // } // return url.toString(); return getWorkspaceUrl(context, menuPath, externalparams, subsystem, null); } public static String getWorkspaceUrl(String context, String menuPath, String externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.PROPERTIES_CONTAINER_URL, sessionid),true); url.append(murl) .append(Framework.MENU_PATH).append("=").append(StringUtil.encode(menuPath)).append("&") .append(Framework.MENU_TYPE).append("=").append(Framework.PROPERTIES_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getStatusUrl(String context, String menuPath, String externalparams) { return getStatusUrl(context, menuPath, externalparams, ""); } /** * 获取工作区页面地址,通过该地址可以方便地 * * @param context * @param menu * @param externalparams * @return */ public static String getStatusUrl(String context, String menuPath, String externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.STATUS_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menuPath) ) // .append( "&") // .append(Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.STATUS_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // // if(externalparams != null && !externalparams.equals("")) // { // url.append("&") // .append(Framework.EXTERNAL_PARAMS_KEY).append("=") // .append(StringUtil.encode(externalparams)); // } // return url.toString(); return getStatusUrl(context, menuPath, externalparams, subsystem, null); } public static String getStatusUrl(String context, String menuPath, String externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.STATUS_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menuPath)).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.STATUS_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" if (externalparams != null && !externalparams.equals("")) { url.append("&").append(Framework.EXTERNAL_PARAMS_KEY).append("=") .append(StringUtil.encode(externalparams)); } return url.toString(); } public static String getRootUrl(String context, MenuItem menu, Map externalparams) { return getRootUrl(context, menu, externalparams, ""); } /** * 获取菜单的根url地址,通过本地址将生成包含整个栏目所配置的块的系统框架 * * @param context * @param menu * @param params * @return */ public static String getRootUrl(String context, MenuItem menu, Map externalparams, String subsystem) { StringBuffer url = new StringBuffer(); if (context != null && !"".equals(context)) { url.append(context).append("/"); } url.append("main.frame?").append(Framework.MENU_TYPE).append("=").append(Framework.ROOT_CONTAINER); url.append("&").append(Framework.MENU_PATH).append("=").append(menu.getPath()); String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getMainUrl(MenuItem menu) { return getMainUrl(null, menu, (Map)null); } public static String getMainUrl(String contextpath,MenuItem menu) { return getMainUrl(contextpath, menu, (Map)null); } public static String getMainUrl(String menuPath) { return getMainUrl(null, MenuHelper.getMenu(menuPath), (Map)null); } public static String getMainUrl(String context, MenuItem menu, Map externalparams) { return getMainUrl(context, menu, externalparams, ""); } public static String getRealUrl(String context, String url,String... params) { if(params != null) { if(params.length == 1 ) { if(url.indexOf("?") > 0) url = url + "&" + params[0]; else url = url + "?" + params[0]; } else if(params.length > 1) { StringBuffer data = new StringBuffer(); if(url.indexOf("?") > 0) data.append(url).append("&").append(params[0]).append("=").append(params[1]); else data.append(url).append("?").append(params[0]).append("=").append(params[1]); for(int i =2; i < params.length; ) { data.append("&").append(params[i]).append("=").append(params[i + 1]); i = i + 2; } url = data.toString(); } } // if(url.startsWith("http://") || url.startsWith("https://") ||url.startsWith("ftp://") || url.startsWith("tps://")) // return url; if(StringUtil.isHttpUrl(url)) return url; return StringUtil.getRealPath(context, url,true); } /** * 获取主框架url地址,通过本地址生成的系统框架包含leftside menu、navigaitor、workspace以及status块的系统框架 * * @param context * @param menu * @param externalparams * @return */ public static String getMainUrl(String context, MenuItem menu, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.MAIN_CONTAINER_URL)) // .append(Framework.MENU_PATH).append("=") // .append(StringUtil.encode(menu.getPath(),null)) // .append("&") // .append(Framework.MENU_TYPE) // .append("=") // .append(Framework.MAIN_CONTAINER); // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getMainUrl(context, menu, externalparams, subsystem, null); } public static String getMainUrl(String context, MenuItem menu, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); String murl = Framework.getUrl(Framework.MAIN_CONTAINER_URL, sessionid); murl = StringUtil.getRealPath(context, murl, true); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } // else // { // // } url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menu.getPath(), null)).append("&") .append(Framework.MENU_TYPE).append("=").append(Framework.MAIN_CONTAINER); String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getPerspectiveContentUrl(String context, MenuItem menu, Map externalparams) { return getPerspectiveContentUrl(context, menu, externalparams, ""); } /** * 获取主工作区的url地址,通过本地址生成的系统框架包含navigator,workspace和status块的系统框架 * * @param context * @param menu * @param params * @return */ public static String getPerspectiveContentUrl(String context, MenuItem menu, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.CONTENT_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menu.getPath()) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append( Framework.CONTENT_CONTAINER); // // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getPerspectiveContentUrl(context, menu, externalparams, subsystem, null); } public static String getPerspectiveContentUrl(String context, MenuItem menu, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.CONTENT_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menu.getPath())).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.CONTENT_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getActionContainerUrl(String context, MenuItem menu, Map externalparams) { return getActionContainerUrl(context, menu, externalparams, ""); } /** * 获取actioncontainer地址,通过本地址将生成包含workspace和status块的系统框架 * * @param context * @param menu * @param externalparams * @param subsystem * @return */ public static String getActionContainerUrl(String context, MenuItem menu, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.ACTION_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menu.getPath()) ) // .append( "&") // .append(Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.ACTION_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getActionContainerUrl(context, menu, externalparams, subsystem, null); } public static String getActionContainerUrl(String context, MenuItem menu, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.ACTION_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menu.getPath())).append("&").append(Framework.MENU_TYPE) .append("=").append(Framework.ACTION_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getWorkspaceUrl(String context, MenuItem menu, Map externalparams) { return getWorkspaceUrl(context, menu, externalparams, ""); } /** * 获取工作区页面地址,通过该地址可以方便地 * * @param context * @param menu * @param externalparams * @return */ public static String getWorkspaceUrl(String context, MenuItem menu, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append(Framework.getUrl(Framework.PROPERTIES_CONTAINER_URL)) // .append( Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menu.getPath()) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append(Framework.PROPERTIES_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getWorkspaceUrl(context, menu, externalparams, subsystem, null); } public static String getWorkspaceUrl(String context, MenuItem menu, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.PROPERTIES_CONTAINER_URL, sessionid),true); url.append(murl) .append(Framework.MENU_PATH).append("=").append(StringUtil.encode(menu.getPath())).append("&") .append(Framework.MENU_TYPE).append("=").append(Framework.PROPERTIES_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public static String getStatusUrl(String context, MenuItem menu, Map externalparams) { return getStatusUrl(context, menu, externalparams, ""); } /** * 获取工作区页面地址,通过该地址可以方便地 * * @param context * @param menu * @param externalparams * @return */ public static String getStatusUrl(String context, MenuItem menu, Map externalparams, String subsystem) { // StringBuffer url = new StringBuffer(); // if(context != null && !"".equals(context)){ // url.append(context).append("/"); // } // url.append( Framework.getUrl(Framework.STATUS_CONTAINER_URL)) // .append(Framework.MENU_PATH ) // .append( "=" ) // .append(StringUtil.encode(menu.getPath(), null) ) // .append( "&") // .append( Framework.MENU_TYPE ) // .append( "=" ) // .append( Framework.STATUS_CONTAINER); // // 外部参数,可以传递到各框架中,"external_params=" // String external_params = getExternalQueryString(externalparams); // if(!external_params.equals("")) // { // url.append("&").append(external_params); // } // return url.toString(); return getStatusUrl(context, menu, externalparams, subsystem, null); } public static String getStatusUrl(String context, MenuItem menu, Map externalparams, String subsystem, String sessionid) { StringBuffer url = new StringBuffer(); // if (context != null && !"".equals(context)) { // url.append(context).append("/"); // } String murl = StringUtil.getRealPath(context,Framework.getUrl(Framework.STATUS_CONTAINER_URL, sessionid),true); url.append(murl).append(Framework.MENU_PATH) .append("=").append(StringUtil.encode(menu.getPath(), null)).append("&") .append(Framework.MENU_TYPE).append("=").append(Framework.STATUS_CONTAINER); // 外部参数,可以传递到各框架中,"external_params=" String external_params = getExternalQueryString(externalparams); if (!external_params.equals("")) { url.append("&").append(external_params); } return url.toString(); } public void resetControl(AccessControlInf control) { this.control = control; this.permissionIndexs = new HashMap(); menuitemQueue = new AuthMenuItemQueue(null); permissionMenuIndex = new HashMap(); } public Iterator iterator() { return menuitemQueue.iterator(); } public Item getFirstAuthorItem() { return this.firstItem; } public ModuleQueue getModules() { if (modules != null) return modules; return menuitemQueue.getModules(); } public ItemQueue getItems() { if (items != null) return items; return menuitemQueue.getItems(); } /** * 根据模块路径获取带权限的栏目 * * @param modulePath * @return */ public ItemQueue getSubItems(String modulePath) { return menuitemQueue.getSubItems(modulePath); } public boolean isShowrootmenuleft() { return this.framework.isShowrootleftmenu(); } /** * 根据模块路径获取带权限的子模块, * * @param modulePath * @return */ public ModuleQueue getSubModules(String modulePath) { return menuitemQueue.getSubModules(modulePath); } public Module getModule(String path) { // Module m = (Module)this.permissionMenuIndex.get(path); // if (m != null) // return m; // else { // Module m1 = framework.getModule(path); // if(m1 == null) // return null; // m = new AuthorModule(m1); // this.permissionMenuIndex.put(path, m); // return m; // } return (Module)getMenuItem(path); } public MenuItem getMenuItem(String path) { MenuItem m = (MenuItem)this.permissionMenuIndex.get(path); if (m != null) return m; else { m = framework.getMenuByPath(path); if(m == null) return null; Integer permission = this.permissionIndexs.get(m.getId()); if(permission != null) { if(permission == UNVISIBLE_PERMISSION ) { return null; } } if(control.checkPermission(m.getId(), AccessControl.VISIBLE_PERMISSION, AccessControl.COLUMN_RESOURCE)) { if(m instanceof Module) { m = new AuthorModule((Module)m); permissionMenuIndex.put(path, m); permissionIndexs.put(m.getId(), VISIBLE_PERMISSION); return m; } else if(m instanceof Item) { m = new AuthorItem((Item)m); this.permissionMenuIndex.put(path, m); permissionIndexs.put(m.getId(), VISIBLE_PERMISSION); return m; } else throw new java.lang.IllegalArgumentException(path+":不支持的菜单对象类型"+m.getClass().getCanonicalName()); } else { if(m instanceof Module) { AuthorModule amodule = new AuthorModule((Module)m); ModuleQueue submoduleQueue = amodule.getSubModules(); if (submoduleQueue != null && submoduleQueue.size() > 0) { permissionIndexs.put(amodule.getId(), SUB_VISIBLE_PERMISSION); permissionMenuIndex.put(amodule.getPath(), amodule); amodule.setUsesubpermission(true); return amodule; } ItemQueue items = amodule.getItems(); if (items != null && items.size() > 0) { permissionIndexs.put(amodule.getId(), SUB_VISIBLE_PERMISSION); permissionMenuIndex.put(amodule.getPath(), amodule); amodule.setUsesubpermission(true); return amodule; } } permissionIndexs.put(m.getId(), UNVISIBLE_PERMISSION); return null; } } } public Item getItem(String path) { // Item item = (Item)this.permissionMenuIndex.get(path); // if (item == null) { // Item temp = framework.getItem(path); // if(temp != null) // { // item = new AuthorItem(temp); // this.permissionMenuIndex.put(path, item); // } // } // return item; return (Item)getMenuItem(path); } class AuthMenuItemQueue { private List menuItemQueue; public AuthMenuItemQueue(List menuItemQueue) { this.menuItemQueue = menuItemQueue; } /** * 获取权限信息的模块队列 * * @return */ public ModuleQueue getModules() { if(modules != null) { return modules; } modules = new ModuleQueue(); if (framework.getModules() == null || framework.getModules().size() == 0) return modules; Iterator m = new MenuItemIterator(framework.getModules().getList().iterator()); Module temp = null; while (m.hasNext()) { temp = (Module)m.next(); // permissionMenuIndex.put(temp.getPath(),temp); modules.addModule(temp); } return modules; } /** * 获取权限信息的模块队列 * * @return */ public MenuQueue getMenuItems() { if(menus != null) return menus; menus = new MenuQueue(); if (framework.getMenus() == null || framework.getMenus().size() == 0) return menus; Iterator m = new MenuItemIterator(framework.getMenus().getList().iterator()); MenuItem temp = null; while (m.hasNext()) { temp = (MenuItem)m.next(); // permissionMenuIndex.put(temp.getPath(),temp); menus.addMenuItem(temp); } return menus; } public Iterator iterator() { return new MenuItemIterator(menuItemQueue.iterator()); } /** * 获取带权限的栏目队列 * * @return */ public ItemQueue getItems() { if(items != null) return items; items = new ItemQueue(); if (framework.getItems() == null || framework.getItems().size() == 0) return items; Iterator i = new MenuItemIterator(framework.getItems().getList().iterator()); Item temp = null; while (i.hasNext()) { temp = (Item)i.next(); // permissionMenuIndex.put(temp.getPath(),temp); items.addItem(temp); } return items; } /** * * 根据模块路径获取带权限的栏目 修改:2007-4-5 zhuo.wang * * @param modulePath * @return */ public ItemQueue getSubItems(String modulePath) { if (modulePath == null || modulePath.equals(Framework.getSuperMenu(Framework.getSubsystemFromPath(modulePath)))) { return this.getItems(); } // Module module = (Module)permissionMenuIndex.get(modulePath); MenuItem module = (MenuItem)permissionMenuIndex.get(modulePath); if (module == null) { module = framework.getCurrentSystemMenu(modulePath); if (module == null) { System.out.println("modulePath=[" + modulePath + "]的菜单项是不存在。"); return new ItemQueue(); } else if (module instanceof Item) { System.out.println("modulePath=[" + modulePath + "]的菜单项是一个item,不能再包含item"); return new ItemQueue(); } else if (module instanceof Module) { AuthorModule am = new AuthorModule((Module)module); permissionMenuIndex.put(am.getPath(), am); // 可能会有问题 return am.getItems(); } else return new ItemQueue(); } else { if (module instanceof Item) { System.out.println("modulePath=[" + modulePath + "]的菜单项是一个item,不能再包含item"); return new ItemQueue(); } else if (module instanceof Module) { return ((Module)module).getItems(); } else return new ItemQueue(); } } /** * 根据模块路径获取带权限的子模块, * * @param modulePath * @return */ public ModuleQueue getSubModules(String modulePath) { if (modulePath == null || modulePath.equals(Framework.getSuperMenu(Framework.getSubsystemFromPath(modulePath)))) { return this.getModules(); } Module module = (Module)permissionMenuIndex.get(modulePath); if (module == null) { MenuItem menuItem = null; menuItem = framework.getCurrentSystemMenu(modulePath); if (menuItem instanceof Module) { module = (Module)menuItem; AuthorModule am = new AuthorModule(module); permissionMenuIndex.put(am.getPath(), am); return am.getSubModules(); } else { return null; } } else return module.getSubModules(); } } class MenuItemIterator implements Iterator { Iterator allData; MenuItem decorator; public MenuItemIterator(Iterator allData) { this.allData = allData; } /* * (non-Javadoc) * * @see java.util.Iterator#hasNext() */ public boolean hasNext() { boolean found = false; while (allData.hasNext() && !found) { decorator = (MenuItem)allData.next(); found = found(); } if (!found) decorator = null; return found; } /** * 查找拥有可见权限的字模块或者栏目 * * @return boolean */ private boolean found() { if (decorator instanceof Module) { int permission = getModulePermission((Module)decorator); return permission == VISIBLE_PERMISSION || permission == SUB_VISIBLE_PERMISSION; } else if (decorator instanceof Item) { int permission = this.getItemPermission((Item)decorator); boolean ret = permission == VISIBLE_PERMISSION; if (ret && firstItem == null && decorator instanceof Item && decorator.isUsed()) { firstItem = (Item)decorator; } return ret; } return false; } private boolean checkPermission(String resid,String action, String restype) { if(control != null) return control.checkPermission(resid, action, restype); else { return AccessControl.checkPermission(principal, resid, action, restype); } } private int getModulePermission(Module module) { Integer permission = permissionIndexs.get(module.getId()); if (permission != null) { if(permission == VISIBLE_PERMISSION || permission == SUB_VISIBLE_PERMISSION) { this.decorator = (MenuItem) permissionMenuIndex.get(module.getPath()); if(decorator == null) { throw new java.lang.RuntimeException("菜单配置文件["+MenuHelper.this.framework.getConfigFile()+"]中存在多个id为"+module.getId()+"的菜单配置。"); } } return permission; } AuthorModule amodule = new AuthorModule(module); if (checkPermission(module.getId(), AccessControl.VISIBLE_PERMISSION, AccessControl.COLUMN_RESOURCE)) { permissionIndexs.put(module.getId(), VISIBLE_PERMISSION); permissionMenuIndex.put(module.getPath(), amodule); this.decorator = amodule; return VISIBLE_PERMISSION; } ModuleQueue submoduleQueue = amodule.getSubModules(); if (submoduleQueue != null && submoduleQueue.size() > 0) { permissionIndexs.put(module.getId(), SUB_VISIBLE_PERMISSION); this.decorator = amodule; permissionMenuIndex.put(module.getPath(), amodule); amodule.setUsesubpermission(true); return SUB_VISIBLE_PERMISSION; // MenuItemIterator moduleIterator = new // MenuItemIterator(submoduleQueue.iterator()); // while(moduleIterator.hasNext()) // { // permissionIndexs.put(module.getId(),AccessControl. // VISIBLE_PERMISSION); // return AccessControl.VISIBLE_PERMISSION; // } } ItemQueue items = amodule.getItems(); if (items != null && items.size() > 0) { permissionIndexs.put(module.getId(), SUB_VISIBLE_PERMISSION); permissionMenuIndex.put(module.getPath(), amodule); this.decorator = amodule; amodule.setUsesubpermission(true); return SUB_VISIBLE_PERMISSION; // MenuItemIterator moduleIterator = new // MenuItemIterator(items.iterator()); // while(moduleIterator.hasNext()) // { // permissionIndexs.put(module.getId(),AccessControl. // VISIBLE_PERMISSION); // return AccessControl.VISIBLE_PERMISSION; // } } permissionIndexs.put(module.getId(), UNVISIBLE_PERMISSION); return UNVISIBLE_PERMISSION; } private int getItemPermission(Item item) { Integer permission = permissionIndexs.get(item.getId()); if (permission != null) { if(permission == VISIBLE_PERMISSION ) { this.decorator = (MenuItem) permissionMenuIndex.get(item.getPath()); if(decorator == null) { throw new java.lang.RuntimeException("菜单配置文件["+MenuHelper.this.framework.getConfigFile()+"]中存在多个id为"+item.getId()+"的菜单配置。"); } } return permission; } if (checkPermission(item.getId(), AccessControl.VISIBLE_PERMISSION, AccessControl.COLUMN_RESOURCE)) { permissionIndexs.put(item.getId(), VISIBLE_PERMISSION); AuthorItem aitem = new AuthorItem(item); permissionMenuIndex.put(item.getPath(), aitem); this.decorator = aitem; return VISIBLE_PERMISSION; } else { permissionIndexs.put(item.getId(), UNVISIBLE_PERMISSION); return UNVISIBLE_PERMISSION; } } /* * (non-Javadoc) * * @see java.util.Iterator#next() */ public Object next() { if (decorator != null) return decorator; return null; } /* * (non-Javadoc) * * @see java.util.Iterator#remove() */ public void remove() { throw new UnsupportedOperationException("remove(),未支持的操作"); } } class AuthorModule extends Module { private Module module; private ModuleQueue submodules; private ItemQueue items; private MenuQueue menus; public AuthorModule(Module module) { this.module = module; } public String getOption() { return module.getOption(); } public MenuItem getParent() { return getCurrentSystemMenu(this.module.getParent()); // return this.module.getParent(); } public void addSubModule(Module subModule) { throw new UnsupportedOperationException("addSubModule(Module subModule)"); } public void addItem(Item item) { throw new UnsupportedOperationException("addItem(Item item)"); } public String getDescription() { return this.module.getDescription(); } public String getDescription(HttpServletRequest request) { return this.module.getDescription( request); } public String getId() { return this.module.getId(); } public ItemQueue getItems() { if (items != null) return items; items = new ItemQueue(); Iterator t = new AuthMenuItemQueue(this.module.getItems().getList()).iterator(); while (t.hasNext()) { Item temp = (Item)t.next(); this.items.addItem(temp); } return items; } public String getName() { return this.module.getName(); } public String getName(HttpServletRequest request) { return this.module.getName(request); } public String getMouseclickimg() { return this.module.getMouseclickimg(); } public String getMouseclickimg(HttpServletRequest request) { return this.module.getMouseclickimg( request); } public String getMouseoutimg() { return this.module.getMouseoutimg(); } public String getMouseoutimg(HttpServletRequest request) { return this.module.getMouseoutimg( request); } public String getMouseoverimg() { return this.module.getMouseoverimg(); } public String getMouseoverimg(HttpServletRequest request) { return this.module.getMouseoverimg( request); } public String getTitle() { return this.module.getTitle(); } public String getUrl() { return this.module.getUrl(); } public String getTitle(HttpServletRequest request) { return this.module.getTitle(request); } public String getParentPath() { return this.module.getParentPath(); } public String getPath() { return this.module.getPath(); } public String getMouseupimg() { return this.module.getMouseupimg(); } public String getMouseupimg(HttpServletRequest request) { return this.module.getMouseupimg( request); } public ModuleQueue getSubModules() { if (submodules != null) return submodules; else { submodules = new ModuleQueue(); Iterator t = new AuthMenuItemQueue(this.module.getSubModules().getList()).iterator(); while (t.hasNext()) { Module temp = (Module)t.next(); submodules.addModule(temp); } return submodules; } } public boolean isUsed() { return this.module.isUsed(); } public String getHeadimg() { // TODO Auto-generated method stub return this.module.getHeadimg(); } public String getHeadimg(HttpServletRequest request) { // TODO Auto-generated method stub return this.module.getHeadimg( request); } public int getCode() { return module.getCode(); } public SubSystem getSubSystem() { return module.getSubSystem(); } public String getTarget() { // TODO Auto-generated method stub return module.getTarget(); } public boolean isShowpage() { return module.isShowpage(); } public boolean isShowleftmenu() { // TODO Auto-generated method stub return module.isShowleftmenu(); } @Override public Map getExtendAttributes() { // TODO Auto-generated method stub return module.getExtendAttributes(); } @Override public String getStringExtendAttribute(String name) { // TODO Auto-generated method stub return module.getStringExtendAttribute(name); } @Override public String getStringExtendAttribute(String name, String defaultValue) { // TODO Auto-generated method stub return module.getStringExtendAttribute(name, defaultValue); } private boolean inited = false; private boolean hasSon = false; public boolean hasSonOfModule() { if(inited) return hasSon; hasSon = (getSubModules() != null && getSubModules().size() > 0) || (getItems() != null && getItems().size() > 0); inited = true; return hasSon; } @Override public boolean isUsesubpermission() { // TODO Auto-generated method stub return super.isUsesubpermission(); } @Override public MenuQueue getMenus() { if (menus != null) return menus; else { menus = new MenuQueue(); Iterator t = new AuthMenuItemQueue(this.module.getMenus().getList()).iterator(); while (t.hasNext()) { MenuItem temp = (MenuItem)t.next(); menus.addMenuItem(temp); } return menus; } } } class AuthorItem extends Item { Item item; public AuthorItem(Item item) { this.item = item; } public String getBottom() { return item.getBottom(); } public String getId() { return item.getId(); } public String getOption() { return item.getOption(); } public String getLeft() { return item.getLeft(); } public String getMain() { return item.getMain(); } public String getMenu() { return item.getMenu(); } // public List getModules() { // return modules; // } public String getName() { return item.getName(); } public String getName(HttpServletRequest request) { return item.getName(request); } public String getTop() { return item.getTop(); } public String getMouseclickimg() { return item.getMouseclickimg(); } public String getMouseclickimg(HttpServletRequest request) { return item.getMouseclickimg( request); } public String getMouseoutimg() { return item.getMouseoutimg(); } public String getMouseoutimg(HttpServletRequest request) { return item.getMouseoutimg( request); } public String getMouseoverimg() { return item.getMouseoverimg(); } public String getMouseoverimg(HttpServletRequest request) { return item.getMouseoverimg( request); } public String getTitle() { return item.getTitle(); } public String getTitle(HttpServletRequest request) { return item.getTitle( request); } public String getNavigatorToolbar() { return item.getNavigatorToolbar(); } public String getNavigatorContent() { return item.getNavigatorContent(); } public String getStatusContent() { return item.getStatusContent(); } public String getStatusToolbar() { return item.getStatusToolbar(); } public String getWorkspaceContent() { return item.getWorkspaceContent(); } public String getWorkspacecontentExtendAttribute(String attribute) { return item.getWorkspacecontentExtendAttribute(attribute); } public String getWorkspaceToolbar() { return this.item.getWorkspaceToolbar(); } public String getParentPath() { return this.item.getParentPath(); } public boolean isIsdefault() { return this.item.isIsdefault(); } public String getPath() { return this.item.getPath(); } public String getMouseupimg() { return this.item.getMouseupimg(); } public String getMouseupimg(HttpServletRequest request) { return this.item.getMouseupimg( request); } public String getAncestor() { return item.getAncestor(); } public boolean isUsed() { return item.isUsed(); } public MenuItem getParent() { return getCurrentSystemMenu(item.getParent()); } /** * @return Returns the left_cols. */ public String getLeft_cols() { return item.getLeft_cols(); } public String getHeadimg() { // TODO Auto-generated method stub return item.getHeadimg(); } public String getHeadimg(HttpServletRequest request) { // TODO Auto-generated method stub return item.getHeadimg( request); } public String getNavigator_width() { return item.getNavigator_width(); } public String getTop_height() { return item.getTop_height(); } public String getWorkspace_height() { return item.getWorkspace_height(); } public String getShowhidden() { return item.getShowhidden(); } public int getCode() { // TODO Auto-generated method stub return item.getCode(); } public SubSystem getSubSystem() { return item.getSubSystem(); } public String getTarget() { return item.getTarget(); } public boolean isShowpage() { return item.isShowpage(); } @Override public boolean hasLeftVaribale() { // TODO Auto-generated method stub return item.hasLeftVaribale(); } @Override public boolean hasTopVaribale() { // TODO Auto-generated method stub return item.hasTopVaribale(); } @Override public boolean hasNavigatorToolbarVariables() { // TODO Auto-generated method stub return item.hasNavigatorToolbarVariables(); } @Override public boolean hasNavigatorContentVariables() { // TODO Auto-generated method stub return item.hasNavigatorContentVariables(); } @Override public boolean hasStatusContentVariables() { // TODO Auto-generated method stub return item.hasStatusContentVariables(); } @Override public boolean hasStatusToolbarVariables() { // TODO Auto-generated method stub return item.hasStatusToolbarVariables(); } @Override public boolean hasWorkspaceContentVariables() { // TODO Auto-generated method stub return item.hasWorkspaceContentVariables(); } @Override public boolean hasWorkspaceToolbarVariables() { // TODO Auto-generated method stub return item.hasWorkspaceToolbarVariables(); } @Override public void parserVarible(BaseApplicationContext propertiesContext) { // TODO Auto-generated method stub item.parserVarible( propertiesContext); } @Override public ItemUrlStruction getWorkspaceContentItemUrlStruction() { // TODO Auto-generated method stub return item.getWorkspaceContentItemUrlStruction(); } @Override public ItemUrlStruction getWorkspaceToolbarItemUrlStruction() { // TODO Auto-generated method stub return item.getWorkspaceToolbarItemUrlStruction(); } @Override public ItemUrlStruction getNavigatorContentItemUrlStruction() { // TODO Auto-generated method stub return item.getNavigatorContentItemUrlStruction(); } @Override public ItemUrlStruction getNavigatorToolbarItemUrlStruction() { // TODO Auto-generated method stub return item.getNavigatorToolbarItemUrlStruction(); } @Override public ItemUrlStruction getStatusContentItemUrlStruction() { // TODO Auto-generated method stub return item.getStatusContentItemUrlStruction(); } @Override public ItemUrlStruction getStatusToolbarItemUrlStruction() { // TODO Auto-generated method stub return item.getStatusToolbarItemUrlStruction(); } @Override public ItemUrlStruction getTopItemUrlStruction() { // TODO Auto-generated method stub return item.getTopItemUrlStruction(); } @Override public ItemUrlStruction getLeftItemUrlStruction() { // TODO Auto-generated method stub return item.getLeftItemUrlStruction(); } public String getDesktop_width() { return item.getDesktop_width(); } public String getDesktop_height() { return item.getDesktop_height(); } public String getArea() { return item.getArea(); } public boolean isShowleftmenu() { // TODO Auto-generated method stub return item.isShowleftmenu(); } @Override public Map getExtendAttributes() { // TODO Auto-generated method stub return item.getExtendAttributes(); } @Override public String getStringExtendAttribute(String name) { // TODO Auto-generated method stub return item.getStringExtendAttribute(name); } @Override public String getStringExtendAttribute(String name, String defaultValue) { // TODO Auto-generated method stub return item.getStringExtendAttribute(name, defaultValue); } } public Item getPublicItem() { return this.framework.getPublicItem(); } public static final String MENUHELPER_REQUEST_ATTRIBUTE = "com.frameworkset.platform.framework.MENUHELPER_REQUEST_ATTRIBUTE"; public static MenuHelper getMenuHelper(HttpServletRequest request) { MenuHelper menuHelper = (MenuHelper)request.getAttribute(MENUHELPER_REQUEST_ATTRIBUTE); if(menuHelper == null) { AccessControl control = AccessControl.getAccessControl(); menuHelper = new MenuHelper( control.getCurrentSystemID(), control); request.setAttribute(MENUHELPER_REQUEST_ATTRIBUTE,menuHelper); } return menuHelper; } public static MenuHelper getMenuHelper(HttpServletRequest request,boolean refreshCurrentSystemID) { MenuHelper menuHelper = (MenuHelper)request.getAttribute(MENUHELPER_REQUEST_ATTRIBUTE); if(menuHelper == null) { AccessControl control = AccessControl.getAccessControl(); if(refreshCurrentSystemID) { control.refreshCurrentSystemID(request); } menuHelper = new MenuHelper( control.getCurrentSystemID(), control); request.setAttribute(MENUHELPER_REQUEST_ATTRIBUTE,menuHelper); } return menuHelper; } public Framework getFramework() { return framework; } public final static String sanymenupath_menuid = "sanymenupath_menuid"; public final static String sanymenupath = "sany_menupath"; public final static String sany_selecturl = "sany_selecturl"; public final static String sanyselectedmodule = "sanyselectedmodule"; public static String getItemUrl(Item subitem,String contextpath,String framepath,AccessControl control) { return getItemUrl(subitem,contextpath,framepath,(String)null,control); } public static String getItemUrl(Item subitem,String contextpath,String framepath,String selecturl,AccessControl control) { String area = subitem.getArea(); String url = null; if(!subitem.isShowleftmenu()) { if(area != null && area.equals("main")) { java.util.Map param = new HashMap(); param.put(sanymenupath_menuid, subitem.getId()); if(selecturl == null || selecturl.equals("")) { } else { selecturl = java.net.URLEncoder.encode(selecturl); param.put(sany_selecturl, selecturl); } url = MenuHelper.getMainUrl(contextpath, subitem, param); } else { if(selecturl == null || selecturl.equals("")) { url = MenuHelper.getRealUrl(contextpath, Framework.getWorkspaceContent(subitem,control),sanymenupath_menuid,subitem.getId()); } else { // selecturl = java.net.URLEncoder.encode(selecturl); url = MenuHelper.getRealUrl(contextpath, selecturl,sanymenupath_menuid,subitem.getId()); } } } else { if(selecturl == null || selecturl.equals("")){ url = new StringBuffer().append(framepath).append("?") .append(sanymenupath) .append("=") .append(subitem.getPath()).toString(); } else { selecturl = java.net.URLEncoder.encode(selecturl); url = new StringBuffer().append(framepath).append("?") .append(sanymenupath) .append("=") .append(subitem.getPath()).append("&") .append(sany_selecturl) .append("=") .append(selecturl).toString(); } } return url; } public static String getModuleUrl(Module subitem,String contextpath,AccessControl control) { String url = subitem.getUrl(); url = MenuHelper.getRealUrl(contextpath, url,sanymenupath_menuid,subitem.getId()); return url; } public MenuQueue getMenus() { if (menus != null) return menus; return menus = menuitemQueue.getMenuItems(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy