package com.norteksoft.product.util; import java.util.List; import com.norteksoft.mms.module.entity.Menu; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.enumeration.DataState; /** * 菜单工具类 * */ public class SystemUrls { private static final String SYSTEM_MEMCACHE_KEY = "_system_url_infos"; private static final Integer CODE_INDEX = 0; private static final Integer URL_INDEX = 1; private static final Integer NAME_INDEX = 2; private static final Integer IS_PRODUCT_INDEX = 3; private static final Integer ENABLE_STATE_INDEX = 4; private SystemUrls(){} /** * 更新缓存 */ public static synchronized void updateUrls(){ init(); } /** * 初始化系统URL缓存 * key : SYSTEM_MEMCACHE_KEY * value: [code, URL, name, isProduct] */ private static synchronized void init() { List<com.norteksoft.product.api.entity.Menu> menus = ApiFactory.getMmsService().getTopMenus(); String[][] systemInfos = new String[menus.size()][5]; for(int i = 0; i < menus.size(); i++){ systemInfos[i][CODE_INDEX] = menus.get(i).getCode(); systemInfos[i][URL_INDEX] = menus.get(i).getUrl(); systemInfos[i][NAME_INDEX] = menus.get(i).getName(); systemInfos[i][IS_PRODUCT_INDEX] = "true"; systemInfos[i][ENABLE_STATE_INDEX] = menus.get(i).getEnableState().toString(); } MemCachedUtils.add(SYSTEM_MEMCACHE_KEY, systemInfos); } /** * 获取portal主题 * @return */ public static String getPortalTheme(){ return (String)MemCachedUtils.get("THEME_"+ContextUtils.getUserId()); } /** * 获取portal的访问地址 * @return */ public static String getPortalUrl(){ return (String)MemCachedUtils.get("PORTALURL"); } private static Object getMenusFromCache(){ Object obj = MemCachedUtils.get(SYSTEM_MEMCACHE_KEY); if(obj == null) init(); return MemCachedUtils.get(SYSTEM_MEMCACHE_KEY); } /** * 查询业务系统的访问路径 * @param systemCode 系统code * @return 业务系统的访问路径 */ public static String getBusinessPath(String systemCode){ String[][] menus = (String[][]) getMenusFromCache(); for(String[] menu : menus){ if(systemCode.equalsIgnoreCase(menu[CODE_INDEX])){ return getSystemPath(systemCode,menu); } } return ""; } /** * 根据系统编号获取系统URL * @param code * @return */ public static String getSystemUrl(String code){ String url = null; String[][] menus = (String[][]) getMenusFromCache(); for(String[] menu : menus){ if(code.equalsIgnoreCase(menu[0])){ url = getSystemPath(code,menu); break; } } if(url == null){ com.norteksoft.product.api.entity.Menu menu = ApiFactory.getMmsService().getTopMenu(code); if(menu != null) url = menu.getUrl(); } return url; } /** * 获取系统菜单 * @return */ public static String getMenus(){ StringBuilder resultMenu = new StringBuilder(); String[][] menus = (String[][]) getMenusFromCache(); for(String[] menu : menus){ if(menu.length==5){//新加了一个菜单状态 if(DataState.ENABLE.toString().equals(menu[ENABLE_STATE_INDEX])){ if(Boolean.parseBoolean(menu[IS_PRODUCT_INDEX])){ resultMenu.append(processProductMenuHtml(menu)); }else{ resultMenu.append(processCommonMenuHtml(menu)); } } }else{//旧版没有菜单状态 if(Boolean.parseBoolean(menu[IS_PRODUCT_INDEX])){ resultMenu.append(processProductMenuHtml(menu)); }else{ resultMenu.append(processCommonMenuHtml(menu)); } } } return resultMenu.toString(); } /* * values[0] = menu Id * values[1] = menu URL * values[2] = menu name * <li id='code' ONMOUSEMOVE='mouseMove(this,3);' ONMOUSEOUT='mouseOut(this,4);'><a HREF='URL'>name</a></li> */ private static String processCommonMenuHtml(String[] values){ if(PropUtils.isBasicSystem(values[URL_INDEX])){ String redirectUrl=PropUtils.getProp("redirectUrl.properties",values[CODE_INDEX]); if(ContextUtils.isAuthority(redirectUrl,values[CODE_INDEX])){ return new StringBuilder("<li id='") .append(values[CODE_INDEX]).append(getStyle(values[CODE_INDEX], true)) .append("<a href=\'").append(values[URL_INDEX]).append("'>").append(values[NAME_INDEX]).append("</a></li>") .toString(); } }else{ return new StringBuilder("<li id='") .append(values[CODE_INDEX]).append(getStyle(values[CODE_INDEX], true)) .append("<a href=\'").append(values[URL_INDEX]).append("'>").append(values[NAME_INDEX]).append("</a></li>") .toString(); } return ""; } /* * values[0] = menu Id * values[1] = menu URL * values[2] = menu name * <li id='code' ONMOUSEMOVE='mouseMove(this,3);' ONMOUSEOUT='mouseOut(this,4);'><a HREF='URL'>name</a></li> */ private static String processProductMenuHtml(String[] values){ if(PropUtils.isBasicSystem(values[URL_INDEX])){ String redirectUrl=PropUtils.getProp("redirectUrl.properties",values[CODE_INDEX]); if(ContextUtils.isAuthority(redirectUrl,values[CODE_INDEX])){ return new StringBuilder("<li id='") .append(values[CODE_INDEX]).append(getStyle(values[CODE_INDEX], false)) .append("<a href=\'").append(values[URL_INDEX]).append("'>").append(values[NAME_INDEX]).append("</a></li>") .toString(); } }else{ return new StringBuilder("<li id='") .append(values[CODE_INDEX]).append(getStyle(values[CODE_INDEX], false)) .append("<a href=\'").append(values[URL_INDEX]).append("'>").append(values[NAME_INDEX]).append("</a></li>") .toString(); } return ""; } private static String getStyle(String sysCode, boolean isSystem){ String result = ""; String code = ContextUtils.getSystemCode(); if(isSystem){ if(sysCode.equals(code)){ result = "' class='system fristBg'>"; }else{ result = "' class='system'>"; } }else{ if(sysCode.equals(code)){ result = "' class='navPrdt navPrdt1'>"; }else{ result = "' class='navPrdt'>"; } } return result; } /** * 根据uri获得系统编码 * @param uri 如:/imatrix/mms/module/menu.htm(底层平台的应用),/oa/notice/list.htm(项目应用) * @return */ public static String getSysCodeFromUri(String uri){ String[] split = uri.split("/"); String sysCode = "portal"; String imatrixUrl=SystemUrls.getSystemUrl("imatrix"); String imatrixCode=imatrixUrl.substring(imatrixUrl.lastIndexOf("/")+1); if(split.length>1){ if(imatrixCode.equals(split[1])){ if(split.length>2){ sysCode = split[2]; if(!PropUtils.isBasicSystem("/"+sysCode)){//如果不是底层系统,则默认为portal,如:/imatrix/j_spring_security_logout时,就会出现问题 sysCode = "portal"; } } }else{ sysCode = split[1]; } } return sysCode; } public static String getSystemPath(String code, String[] menu) { //Long systemId = ContextUtils.getSystemId(code); String url = null; if(PropUtils.getProp("project.model")!=null&&PropUtils.getProp("project.model").equals("developing.model")){//表示开发模式 if(PropUtils.getProp("host.imatrix")!=null && PropUtils.isBasicSystem("/"+code)){ url = PropUtils.getProp("host.imatrix")+"/"+code; }else if(PropUtils.getProp("host."+code)!=null){ url = PropUtils.getProp("host."+code); }else if(menu[URL_INDEX].toString().indexOf("mms/common/list.htm")>0){ if(menu[URL_INDEX].toString().indexOf("?")>0){ url = PropUtils.getProp("host.imatrix")+"/mms/common/list.htm?"; }else{ url = PropUtils.getProp("host.imatrix")+"/mms/common/list.htm"; } }else{ url = menu[URL_INDEX]; } }else{ url = menu[URL_INDEX]; } return url; } }