`
qq1988627
  • 浏览: 107071 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

文件解析

    博客分类:
  • Java
 
阅读更多
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(){
			@Override
			public 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;
					}	
				}
			}

			@Override
			public boolean accept(File arg0, String arg1) {
				// TODO Auto-generated method stub
				return false;
			}
			
		}, new IOFileFilter(){
			@Override
			public boolean accept(File arg0) {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public boolean accept(File arg0, String arg1) {
				// TODO Auto-generated method stub
				return 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 block
				e.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);
	}
}
 
分享到:
评论

相关推荐

    ILDA动画文件解析,可以用于单片机解析ILDA文件

    ILDA动画文件解析 ILDA(International Laser Display Association)是激光显示技术的标准规范,用于描述激光显示设备的控制和数据交换格式。ILDA文件是一种二进制文件格式,用于存储激光显示设备的控制信息和图形...

    凯立德2012配置文件解析与参考.zip

    凯立德是一款知名的车载导航软件,其2012版本的配置文件解析是理解软件运行机制、自定义导航设置及优化用户体验的关键。本文件压缩包包含了一份关于凯立德2012配置文件的详细解析与参考材料,旨在帮助用户深入理解和...

    数字变电站SCD文件解析工具

    《数字变电站SCD文件解析工具详解》 在现代电力系统中,数字变电站作为一种高效、可靠的通信方式,已经逐渐取代了传统的模拟变电站。SCD(System Configuration Description)文件是数字变电站的核心配置文件,它...

    java对mht文件解析

    ### Java对MHT文件解析及内容抓取技术详解 #### 一、引言 MHT(Mime HTML)文件是一种将HTML文档与嵌入资源(如图像、样式表等)合并为一个文件的格式,方便在网络上传输。本文将详细介绍如何使用Java语言解析MHT...

    打印监控 spl文件解析成emf文件

    本文将深入探讨如何将 SPL(Spool File)文件解析为 EMF(Enhanced Metafile)文件,以便于进行打印监控。 SPL 文件是Windows操作系统中的一种打印队列文件格式,它包含了用户请求打印的所有信息,如文本、图像和...

    基于C#开发的STEP文件解析器完整源码+项目说明(毕设项目).zip

    基于C#开发的STEP文件解析器完整源码+项目说明(毕设项目).zip 【资源介绍】 此项目是本人的毕业设计的研究课题,旨在实现一个STEP解析器,预期功能如下: 解析STEP文件,识别出各组成元素的类型、详细信息,以及元素...

    IFC文件解析器C#版本

    一个IFC文件解析器C#版本,如"IFC文件解析器",是专门设计来读取、理解和处理IFC文件的程序。下面我们将深入探讨这个解析器的相关知识点。 1. **IFC格式**: IFC是一种基于XML的开放标准,用于存储建筑项目中的几何...

    dwg文件解析读取程序

    标题中的“dwg文件解析读取程序”是指一个软件或库,它允许用户在没有安装AutoCAD的情况下,处理和解析DWG(Drawing)文件。DWG是AutoCAD用于存储二维和三维图形的数据格式,广泛应用于工程和设计领域。这个程序的...

    BLF文件解析工程-.c-.h-数据-vs工程源代码

    **BLF文件解析工程概述** BLF文件解析工程是一个基于C语言和Visual Studio(VS)开发的后端项目,其核心目标是理解和处理特定格式的BLF(Binary Log File)文件。这种文件通常用于存储系统日志或应用程序的运行记录...

    ab文件解析工具abe

    **标题:“ab文件解析工具abe”** 在移动设备和游戏开发领域,`.ab`文件(Asset Bundle)是一种常见的数据打包格式,通常用于存储游戏资源、应用程序数据或任何其他需要高效加载和分发的二进制内容。`.ab`文件由...

    PE文件解析器

    **PE文件解析器** 在Windows操作系统中,可执行文件(如.exe和.dll)采用一种称为Portable Executable(PE)的文件格式。PE文件解析器是一种工具,它能够解析这些文件的内部结构,揭示其组成元素,这对于软件开发、...

    PE文件解析类 PE文件解析类

    PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件解析类PE文件...

    [免积分下载]数字变电站SCD文件解析工具

    SCD文件解析工具是用于理解和处理这些配置文件的关键软件。该工具能够帮助工程师们查看、编辑和验证SCD文件内容,确保变电站设备的正确配置。通过对SCD文件的解析,用户可以了解每个IED的功能、通信协议、地址设置...

    AutoCAD逆向工程中Shx字体文件解析

    ### AutoCAD逆向工程中Shx字体文件解析 #### 摘要 本文详细解析了AutoCAD中的Shx(形)字体文件格式,探讨了其三种不同格式的特点,并重点介绍了如何在应用程序中正确加载这些Shx字体文件。通过深入分析Shx字体文件...

    C#实现CAD文件解析并显示图片

    总的来说,通过C#实现CAD文件解析并显示图片是一项涉及文件解析、图形渲染和用户交互的复杂任务。理解和应用上述步骤,可以帮助你构建一个功能完善的CAD查看器。在开发过程中,确保遵循最佳实践,注重代码的可读性和...

    基于CAPL的HEX文件解析

    基于CAPL的HEX文件解析

    eml文件解析 C++ 代码

    eml文件解析 C++ 代码,从codeproject上面下载,希望对你有用。 http://lamp.codeproject.com/Articles/5759/MIME-Message-Composer-Analyser?rp=/KB/IP/mimecpp/mimecpp_src.zip

    故障录波文件解析源程序(VC++)

    故障录波文件解析是电力系统自动化领域中的一个重要环节,它涉及到电力系统运行状态的监测与故障分析。在电力系统中,故障录波器是用于记录电网异常或故障时瞬间电气参数变化的设备。这些记录下来的故障录波数据包含...

    EFileParser.zip_EFileParser_E格式_pro/E文件解析_thy7dj_电力系统E格式文件解析代码

    电力系统E格式文件解析代码,本人原创,用于公司平台中。

    HPGL(PLT文件格式)文件解析及VS2017工程源码

    为了深入理解HPGL文件解析,你需要学习以下知识点: 1. HPGL指令集:了解每个命令的含义和用法,如何根据这些指令绘制图形。 2. 文件I/O操作:在C++中读取二进制文件,因为PLT文件通常是以二进制格式存储的。 3. ...

Global site tag (gtag.js) - Google Analytics