`
qq1988627
  • 浏览: 105851 次
  • 性别: 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文件是一种二进制文件格式,用于存储激光显示设备的控制信息和图形...

    java对mht文件解析

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

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

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

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

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

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

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

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

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

    dwg文件解析读取程序

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

    IFC文件解析器C#版本

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

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

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

    PE文件解析器

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

    NXP LIN ncf文件解析工具

    **NXP LIN ncf文件解析工具** 在汽车电子领域,LIN(Local Interconnect Network)是一种广泛应用的串行通信协议,用于实现汽车内部的低成本、低数据速率通信。NXP半导体公司是LIN协议的重要参与者,提供了丰富的...

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

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

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

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

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

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

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

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

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

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

    java 读取Ftp指定位置的文件解析并入库

    标题 "java 读取Ftp指定位置的文件解析并入库" 涉及到的是使用Java编程语言通过FTP(File Transfer Protocol)协议从远程服务器上下载文件,然后对下载的文件进行解析,并将解析得到的数据存储到数据库中。...

    eml文件解析 C++ 代码

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

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

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

    XPDL2.0流程文件解析与生成工具包API文档

    XPDL2.0流程文件解析与生成工具包API文档是一个重要的资源,主要针对那些需要处理和操作XPDL格式流程信息的开发者。XPDL(eXtensible Process Definition Language)是一种XML标准,用于定义和交换业务流程模型。它...

Global site tag (gtag.js) - Google Analytics