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

📄 menuutil.java

📁 本公司开发项目中本人做的公共类文件。如文件的操作
💻 JAVA
字号:
package com.intohotel.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.jar.JarInputStream;
import java.util.zip.ZipEntry;

import com.intohotel.entity.Menu;

/**
 * 菜单的生成工具类
 * 
 * @author sys53
 * @since 7:53:26 PM
 * @version 2_0_0
 */
public class MenuUtil {
	private static final String MENU_HEADER_TPL = "headmenu.tpl";
	private static final String MENU_MAIN_TPL = "menu.tpl";
	private static final String MENU_SUBMENU_TPL = "submenu.tpl";
	private static String menuHeaderTpl;
	private static String menuMainTpl;
	private static String subMenuTpl;
	//菜单控制常量
	private static final String HEAD_CONTROL_CLASS = "\\$\\{header-control-class\\}";
	//菜单主体常量
	private static final String MENU_MAIN_CLASS = "\\$\\{menu-main-class\\}";
	private static final String MENU_HEAD_CLASS = "\\$\\{menu-head-class\\}";
	private static final String MENU_HEAD_ID = "\\$\\{head-id\\}";
	private static final String MENU_HEAD_TEXT_CLASS = "\\$\\{menu-head-text-class\\}";
	private static final String MENU_HEAD_TEXT = "\\$\\{menu-head-text\\}";
	private static final String MENU_ID = "\\$\\{menu-id\\}";
	private static final String CONTEXTPATH = "\\$\\{contextPath\\}";
	private static final String SUBMENU_CLASS = "\\$\\{submenu-class\\}";
	private static final String SUB_MENU = "\\$\\{sub-menu\\}";
	//子菜单常量
	private static final String SUBMENU_TEXT_CLASS = "\\$\\{submenu-text-class\\}";
	private static final String SUBMENU_URL = "\\$\\{url\\}";
	private static final String SUBMENU_TARGET = "\\$\\{target\\}";
	private static final String SUBMENU_TEXT = "\\$\\{submenu-text\\}";
	
	/**
	 * 菜单的头控制源代码
	 * @return
	 */
	public static String genMenuControlHead(String contextPath){
		String sMenu = getMenuHeaderTpl();
		sMenu = sMenu.replaceAll(HEAD_CONTROL_CLASS, "header-control-class");
		sMenu = sMenu.replaceAll(CONTEXTPATH, contextPath);
		return sMenu;
	}
	
	/**
	 * 菜单一级菜单的html源代码
	 * @return
	 */
	public static String genMenuSource(Menu menu,List<String> rights,String contextPath){
		if(!Menu.MENU_STATUS_Y.equals(menu.getMenustatus()) || !allow(menu,rights))
			return "";
		String sMenu = getMenuMainTpl();
		sMenu = sMenu.replaceAll(MENU_MAIN_CLASS, "menu-main-class");
		sMenu = sMenu.replaceAll(MENU_HEAD_CLASS, "menu-head-class");
		sMenu = sMenu.replaceAll(MENU_HEAD_ID, menu.getGrade()+"");
		sMenu = sMenu.replaceAll(MENU_HEAD_TEXT_CLASS, "menu-head-text-class");
		sMenu = sMenu.replaceAll(MENU_HEAD_TEXT, menu.getMenuname());
		sMenu = sMenu.replaceAll(CONTEXTPATH, contextPath);
		sMenu = sMenu.replaceAll(SUBMENU_CLASS, "submenu-class");
		//获取子菜单的html源代码
		String subMenuSource = "";
		if(menu.getMenus()!=null){
			Iterator<Menu> it = menu.getMenus().iterator();
			while(it.hasNext()){
				Menu subMenu = it.next();
				if(!Menu.MENU_STATUS_Y.equals(subMenu.getMenustatus()) ||!allow(subMenu,rights))
					continue;
				String subMenuTpl = getSubMenuTpl();
				subMenuTpl = subMenuTpl.replaceAll(SUBMENU_TEXT_CLASS, "submenu-text-class");
				if(!StringUtil.isEmpty(subMenu.getAction())){
					if(subMenu.getAction().startsWith("ftp://")
							||subMenu.getAction().startsWith("http://")
							||subMenu.getAction().startsWith("https://")
							||subMenu.getAction().startsWith("javascript:")
							||subMenu.getAction().startsWith("file://")){
						subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, subMenu.getAction());
					}else{
						if(subMenu.getAction().startsWith("/"))
							subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, subMenu.getAction()==null?"javascript:void(0);":contextPath+subMenu.getAction());
						else
							subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, subMenu.getAction()==null?"javascript:void(0);":contextPath+"/"+subMenu.getAction());
					}
				}else{
					subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, "javascript:void(0);");
				}
				subMenuTpl = subMenuTpl.replaceAll(SUBMENU_TARGET, subMenu.getTarget()==null?"":subMenu.getTarget());
				subMenuTpl = subMenuTpl.replaceAll(SUBMENU_TEXT, subMenu.getMenuname()==null?"":subMenu.getMenuname());
				subMenuTpl = subMenuTpl.replaceAll(MENU_ID, subMenu.getMenuid()+"");
				subMenuSource += subMenuTpl + "\n";
			}
		}
		sMenu = sMenu.replaceAll(SUB_MENU, subMenuSource);
		return sMenu;
	}
	
	/**
	 * 菜单一级菜单的html源代码
	 * @return
	 */
	public static String genEbookMenuSource(Menu menu,String contextPath){
		String sMenu = getMenuMainTpl();
		sMenu = sMenu.replaceAll(MENU_MAIN_CLASS, "menu-main-class");
		sMenu = sMenu.replaceAll(MENU_HEAD_CLASS, "menu-head-class");
		sMenu = sMenu.replaceAll(MENU_HEAD_ID, menu.getGrade()+"");
		sMenu = sMenu.replaceAll(MENU_HEAD_TEXT_CLASS, "menu-head-text-class");
		sMenu = sMenu.replaceAll(MENU_HEAD_TEXT, menu.getMenuname());
		sMenu = sMenu.replaceAll(CONTEXTPATH, contextPath);
		sMenu = sMenu.replaceAll(SUBMENU_CLASS, "submenu-class");
		//获取子菜单的html源代码
		String subMenuSource = "";
		if(menu.getMenus()!=null){
			Iterator<Menu> it = menu.getMenus().iterator();
			while(it.hasNext()){
				Menu subMenu = it.next();
				if(!Menu.MENU_STATUS_Y.equals(subMenu.getMenustatus()))
					continue;
				String subMenuTpl = getSubMenuTpl();
				subMenuTpl = subMenuTpl.replaceAll(SUBMENU_TEXT_CLASS, "submenu-text-class");
				if(!StringUtil.isEmpty(subMenu.getAction())){
					if(subMenu.getAction().startsWith("ftp://")
							||subMenu.getAction().startsWith("http://")
							||subMenu.getAction().startsWith("https://")
							||subMenu.getAction().startsWith("javascript:")
							||subMenu.getAction().startsWith("file://")){
						subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, subMenu.getAction());
					}else{
						if(subMenu.getAction().startsWith("/"))
							subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, subMenu.getAction()==null?"javascript:void(0);":contextPath+subMenu.getAction());
						else
							subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, subMenu.getAction()==null?"javascript:void(0);":contextPath+"/"+subMenu.getAction());
					}
				}else{
					subMenuTpl = subMenuTpl.replaceAll(SUBMENU_URL, "javascript:void(0);");
				}
				subMenuTpl = subMenuTpl.replaceAll(SUBMENU_TARGET, subMenu.getTarget()==null?"":subMenu.getTarget());
				subMenuTpl = subMenuTpl.replaceAll(SUBMENU_TEXT, subMenu.getMenuname()==null?"":subMenu.getMenuname());
				subMenuTpl = subMenuTpl.replaceAll(MENU_ID, subMenu.getMenuid()+"");
				subMenuSource += subMenuTpl + "\n";
			}
		}
		sMenu = sMenu.replaceAll(SUB_MENU, subMenuSource);
		return sMenu;
	}
	/**
	 * 获取菜单的控制模板
	 * 
	 * @return
	 */
	public static String getMenuHeaderTpl() {
		try {
			if (StringUtil.isEmpty(menuHeaderTpl))
				menuHeaderTpl = readTplSource(MENU_HEADER_TPL);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return menuHeaderTpl;
	}
	/**
	 * 获取菜单主内容模板
	 * @return
	 */
	public static String getMenuMainTpl(){
		try {
			if (StringUtil.isEmpty(menuMainTpl))
				menuMainTpl = readTplSource(MENU_MAIN_TPL);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return menuMainTpl;
	}
	/**
	 * 获取菜单主内容模板
	 * @return
	 */
	public static String getSubMenuTpl(){
		try {
			if (StringUtil.isEmpty(subMenuTpl))
				subMenuTpl = readTplSource(MENU_SUBMENU_TPL);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return subMenuTpl;
	}
	
	/**
	 * 验证菜单是不是有已有权限中,如果是父菜单,那么其子菜单有权限,那个自动会传递到父菜单的权限中去
	 * @param menu
	 * @param rights
	 * @return
	 *  允许:true,拒绝:false;
	 */
//	private static boolean allow(Menu menu,List<Authorization> rights){
//		if(Menu.MENU_STATUS_Y.equals(menu.getMenustatus())){
//			if(rights.contains(menu.getAuthorization()))
//				return true;
//			else{
//				if(menu.getMenus()!=null){
//					java.util.Iterator<Menu> it = menu.getMenus().iterator();
//					while(it.hasNext()){
//						Menu subMenu = it.next();
//						if(rights.contains(subMenu.getAuthorization()))
//							return true;
//						else
//							if(allow(subMenu,rights))
//								return true;
//					}
//				}
//			}
//		}
//		return false;
//	}
	
	private static boolean allow(Menu menu,List<String> rights){
		if(rights==null)
			return false;
		if(menu.getAuthorization()==null)
			return false;
		if(Menu.MENU_STATUS_Y.equals(menu.getMenustatus())){
			if(rights.contains(menu.getAuthorization().getAuthCode()))
				return true;
			else{
				if(menu.getMenus()!=null){
					java.util.Iterator<Menu> it = menu.getMenus().iterator();
					while(it.hasNext()){
						Menu subMenu = it.next();
						if(subMenu.getAuthorization()!=null && subMenu.getAuthorization().getAuthCode()!=null){
							if(rights.contains(subMenu.getAuthorization().getAuthCode()))
								return true;
							else
								if(allow(subMenu,rights))
									return true;
						}
						else{
							if(allow(subMenu,rights))
								return true;
						}
					}
				}
			}
		}
		return false;
	}
	/**
	 * 读取tpl文件的内容
	 * tpl文件放在classes目录下的或者lib下的jar包里,会自动搜过,classes目录下的所有文件,直到找到相应文件为止
	 * @param fileName
	 *            fileName:文件名
	 * @return
	 * @throws IOException 
	 */
	public static String readTplSource(String fileName) throws IOException {
		//String path = System.getProperties().getProperty("java.class.path");
		String path =  MenuUtil.class.getClassLoader().getResource("").getPath();
		path = path.replaceAll("%20", " ");
		StringTokenizer st = new StringTokenizer(path, ";");
		String fullFileName = "";
		while (st.hasMoreTokens()) {
			String part = st.nextToken();
			File partFile = new File(part);
			if (partFile.exists()) {
				if (partFile.isDirectory())
					fullFileName = findFileInDir(partFile, fileName);
				else
					fullFileName = findFileInJar(partFile, fileName);
			}
			if(!StringUtil.isEmpty(fullFileName))
				break;
		}
		if(!StringUtil.isEmpty(fullFileName)){
			File propFile = new File(fullFileName);
			InputStreamReader read = new InputStreamReader (new FileInputStream(propFile),"GBK");
			BufferedReader reader=new BufferedReader(read);
			String sRet = "";
			String line;
			while ((line = reader.readLine()) != null) {
				sRet += line+"\n";
			}
			return sRet.trim();
		}
		return "";
	}
	
	/**
	 * 查找jar包里的匹配文件
	 * @param partFile
	 * @param fileName
	 * @return
	 */
	private static String findFileInJar(File partFile, String fileName) {
		try {
			JarInputStream jis = new JarInputStream(
					new FileInputStream(partFile));
			ZipEntry entry = jis.getNextEntry();
			while (entry != null) {
				if (!entry.isDirectory()) {
					String path = entry.getName();
					String shortFileName = path.substring(path.lastIndexOf(File.separatorChar)+1);
					if (shortFileName.equals(fileName))
						return partFile.getAbsolutePath() + "!"
								+ entry.getName();
				}
				jis.closeEntry();
				entry = jis.getNextEntry();
			}
		} catch (Exception e) {
		}
		return "";
	}

	/**
	 * 查找找定目录下的匹配文件
	 * @param dir
	 * @param fileName
	 * @return
	 */
	private static String findFileInDir(File dir, String fileName){
		String as[] = dir.list();
		for (int j = 0; j < as.length; j++) {
			File next = new File("" + dir + File.separatorChar + as[j]);
			if (next.isFile()) {
				String path = next.getAbsolutePath();
				
				String shortFileName = path.substring(path.lastIndexOf(File.separatorChar)+1);
				if (shortFileName.equals(fileName))
					return next.getAbsolutePath();
				
			} else {
				String str = findFileInDir(next, fileName);
				if(!StringUtil.isEmpty(str))
					return str;
			}
		}
		return "";
	}
}

⌨️ 快捷键说明

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