package com.norteksoft.acs.base.utils;
import java.util.ArrayList;
import java.util.List;
import com.norteksoft.acs.entity.organization.Company;
import com.norteksoft.acs.service.AcsUtils;
import com.norteksoft.acs.service.security.SecurityResourceCache;
import com.norteksoft.mms.module.entity.Menu;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.enumeration.DataState;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.MemCachedUtils;
import com.norteksoft.product.util.ParameterUtils;
import com.norteksoft.product.util.PropUtils;
import com.norteksoft.product.util.ThreadParameters;
/**
* 请更换为 com.norteksoft.product.util.SystemUrls
*/
@Deprecated
public class MenuUtils {
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 MenuUtils(){}
static {
init();
}
/**
* 更新缓存
*/
public static synchronized void updateUrls(){
init();
}
/**
* 初始化系统URL缓存
* key : SYSTEM_MEMCACHE_KEY
* value: [code, URL, name, isProduct]
*/
private static synchronized void init() {
AcsUtils acsUtils=(AcsUtils)ContextUtils.getBean("acsUtils");
List<Company> companys=acsUtils.getAllCompanys();
List<com.norteksoft.product.api.entity.Menu> result=new ArrayList<com.norteksoft.product.api.entity.Menu>();
for(Company company:companys){
ThreadParameters parameter=new ThreadParameters();
parameter.setCompanyId(company.getId());
ParameterUtils.setParameters(parameter);
List<com.norteksoft.product.api.entity.Menu> menus = ApiFactory.getMmsService().getTopMenus();
for(com.norteksoft.product.api.entity.Menu m:menus){
if(!result.contains(m))result.add(m);
}
}
String[][] systemInfos = new String[result.size()][4];
for(int i = 0; i < result.size(); i++){
systemInfos[i][CODE_INDEX] = result.get(i).getCode();
systemInfos[i][URL_INDEX] = result.get(i).getUrl();
systemInfos[i][NAME_INDEX] = result.get(i).getName();
systemInfos[i][IS_PRODUCT_INDEX] = "true";
}
MemCachedUtils.add(SYSTEM_MEMCACHE_KEY, systemInfos);
}
/**
* 获取系统菜单
* @return
*/
public static String getMenus(){
StringBuilder resultMenu = new StringBuilder();
String[][] menus = (String[][]) MemCachedUtils.get(SYSTEM_MEMCACHE_KEY);
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();
}
/**
* 获取portal主题
* @return
*/
public static String getPortalTheme(){
return (String)MemCachedUtils.get("THEME_"+SystemContextUtils.getUserId());
}
/**
* 获取portal的访问地址
* @return
*/
public static String getPortalUrl(){
return (String)MemCachedUtils.get("PORTALURL");
}
/**
* 查询业务系统的访问路径
* @param systemCode 系统code
* @return 业务系统的访问路径
*/
public static String getBusinessPath(String systemCode){
String[][] menus = (String[][]) MemCachedUtils.get(SYSTEM_MEMCACHE_KEY);
for(String[] menu : menus){
if(systemCode.equalsIgnoreCase(menu[CODE_INDEX])){
return menu[URL_INDEX];
}
}
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 processCommonMenuHtml(String[] values){
if(PropUtils.isBasicSystem(values[URL_INDEX])){
String redirectUrl=PropUtils.getProp("redirectUrl.properties",values[CODE_INDEX]);
String grantedAuthorities = SecurityResourceCache.getAuthoritysInCache("/"+values[CODE_INDEX]+redirectUrl);
if(grantedAuthorities!=null){
if(ContextUtils.isAuthority(grantedAuthorities)){
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]);
String grantedAuthorities = SecurityResourceCache.getAuthoritysInCache("/"+values[CODE_INDEX]+redirectUrl);
if(grantedAuthorities!=null){
if(ContextUtils.isAuthority(grantedAuthorities)){
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){
//FIXME 将class提取到properties中
String result = "";
String code = SystemContextUtils.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;
}
/**
* 根据系统编号获取系统URL
* @param code
* @return
*/
public static String getSystemUrl(String code){
String result = null;
String[][] menus = (String[][]) MemCachedUtils.get(SYSTEM_MEMCACHE_KEY);
for(String[] menu : menus){
if(code.equalsIgnoreCase(menu[CODE_INDEX])){
result = menu[URL_INDEX];
break;
}
}
if(result == null){
com.norteksoft.product.api.entity.Menu menu = ApiFactory.getMmsService().getTopMenu(code);
if(menu != null) result = menu.getUrl();
}
return result;
}
}