文件解析
package com.byd.portal.pagedesign.util;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Set;import javax.servlet.http.HttpServletRequest;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import org.apache.commons.io.FileUtils;import org.apache.commons.io.filefilter.IOFileFilter;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public final class PortalUiLoader{private static Log log=LogFactory.getLog(PortalUiLoader.class);private static JSONObject PORTALUICONFIGJSONOBJECT = null;static{refresh(false);}/** * 生成控件配置JSONObject */public static void refresh(Boolean beta){PORTALUICONFIGJSONOBJECT = JSONObject.fromObject(getUiConfigFilesContent(beta));}/** * 读取所有配置文件,生成字符串 */private static String getUiConfigFilesContent(final Boolean beta){log.debug("beta"+beta);//文件路径String utfPath = PortalUiLoader.class.getClassLoader().getResource("portalUiConfig").getFile();//String utfPath = PortalUiLoader.class.getResource("portalUiConfig").getFile();String filePath = null;log.debug("utfPath::::"+utfPath);log.debug("filePath::::"+filePath);try {filePath = java.net.URLDecoder.decode(utfPath,"utf-8");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}File file = new File(filePath);//配置文件集合 Iterator fileIterator = FileUtils.iterateFiles(file,new IOFileFilter(){@Overridepublic boolean accept(File arg0) {//非测试模式下,则读取min文件if(beta){if(StringUtils.contains(arg0.getName(),"-min.properties")){return false;}else{return true;}}else{if(StringUtils.contains(arg0.getName(),"-min.properties")){return true;}else{return false;}}}@Overridepublic boolean accept(File arg0, String arg1) {// TODO Auto-generated method stubreturn false;}}, new IOFileFilter(){@Overridepublic boolean accept(File arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean accept(File arg0, String arg1) {// TODO Auto-generated method stubreturn false;}});StringBuffer sb = new StringBuffer();sb.append("{");boolean status = false;while(fileIterator.hasNext()){try {File fileTmp = new File(fileIterator.next().toString());String str = FileUtils.readFileToString(fileTmp);if(status){sb.append(",");}sb.append(str);status = true;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}sb.append("}");return sb.toString();}/** * 这个是一个算法,请不要修改: 根据传入的控件名,返回控件所需要的Js文件引用路径集合 * @param comps 控件名数组 * @return LinkedHashMap Js文件引用路径字符串集合 */private static LinkedHashMap<String,String> getRequisiteJs(List<String> comps,LinkedHashMap<String,String> jsMap){int i = 0;String key = "";LinkedHashMap<String, String> lhs = new LinkedHashMap<String, String>();while(i<comps.size()){String component = comps.get(i);JSONObject jo = PORTALUICONFIGJSONOBJECT.getJSONObject(component);if(!jo.isNullObject() && jo instanceof JSONObject){if(StringUtils.equals(jo.getString("type").trim(),"js")){if(jo.get("requires") instanceof JSONArray && !jo.getJSONArray("requires").isEmpty()){List<String> compRequisiteJs = JSONArray.toList(jo.getJSONArray("requires"));if(compRequisiteJs.size()>0){lhs.putAll(getRequisiteJs(compRequisiteJs,jsMap));}}key = jo.getString("path");if(StringUtils.isNotEmpty(key)){if(jsMap.get(key) == null){lhs.put(key,"");}jsMap.put(key,"");}}}i++;}return lhs;}/** * 获取request中的LinkedHashMap(记录同一个请求中需加载的JS js标签) */private static LinkedHashMap<String,String> getRequestRequisiteJs(HttpServletRequest request){if(request.getAttribute("jsMap") == null){request.setAttribute("jsMap", new LinkedHashMap<String, String>());}return (LinkedHashMap<String,String>)request.getAttribute("jsMap");}/** * 根据传入的JS文件路径Map、控件集合,返回控件所需要的Js文件引用标签字符串 * @param libPath 控件路径Map * @param comps 控件集合 * @param HttpServletRequest request * @param beta 应用模式 * @return 控件所需要的Js文件引用标签字符串 */public static String outJavaScriptTag(Map<String,String> libPath,String[] comps,HttpServletRequest request,Boolean beta){if(beta){//debug模式下,需重新加载配置文件refresh(beta);}List<String> compList = new ArrayList<String>();String javaScriptTag = "";for(int i = 0; i< comps.length; i++){compList.add(comps[i]);}LinkedHashMap<String, String> lhs = getRequisiteJs(compList,getRequestRequisiteJs(request));Set<String> compJsSet = lhs.keySet();for(String compJs : compJsSet){String key = StringUtils.substring(compJs,StringUtils.indexOf(compJs, "{")+1, StringUtils.indexOf(compJs, "}"));String jsLib = libPath.get(key);String tag = "<script type="text/javascript" src=""+StringUtils.replace(compJs, "{"+key+"}", jsLib)+""></script>\n";javaScriptTag = javaScriptTag + tag;}return javaScriptTag;}/** * 根据传入的字符串,返回控件所需要的Js文件引用标签字符串 * @param paramterConfig * @param paramterConfig:{'yui':'yahoo/ui/widget/','portalUi':'portalUi/ui/widget/','components':['animation','button','datatable']} * @param HttpServletRequest request * @param Boolean beta 应用模式 * @return 控件所需要的Js文件引用标签字符串 */public static String outJavaScriptTag(String paramterConfig,HttpServletRequest request,Boolean beta){log.debug("paramterConfig"+paramterConfig);if(beta){//debug模式下,需重新加载配置文件refresh(beta);}String javaScriptTag = "";log.debug("javascriptTag:"+javaScriptTag);List<String> compList = new ArrayList<String>();JSONObject paramterConfigJsonObject = JSONObject.fromObject(paramterConfig);JSONArray compArray = paramterConfigJsonObject.getJSONArray("components");for(int i = 0; i< compArray.size(); i++){compList.add(compArray.getString(i));}LinkedHashMap<String,String> lhs = getRequisiteJs(compList,getRequestRequisiteJs(request));Set<String> compJsSet = lhs.keySet();for(String compJs : compJsSet){String key = StringUtils.substring(compJs,StringUtils.indexOf(compJs, "{")+1, StringUtils.indexOf(compJs, "}"));String jslib = paramterConfigJsonObject.getString(key);String tag = "<script type="text/javascript" src=""+StringUtils.replace(compJs, "{"+key+"}", jslib)+""></script>\n";javaScriptTag = javaScriptTag + tag;}log.debug("javascriptTag1:"+javaScriptTag);return javaScriptTag;}/** * 根据传入的字符串,返回控件所需要的Js文件引用标签字符串 * @param paramterConfig * @param paramterConfig:{'yui':'yahoo/ui/widget/','portalUi':'portalUi/ui/widget/','components':['animation','button','datatable']} * @param HttpServletRequest request * @return 控件所需要的Js文件引用标签字符串 */public static String outJavaScriptTag(String paramterConfig,HttpServletRequest request){return outJavaScriptTag(paramterConfig,request,false);}}?