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(International Laser Display Association)是激光显示技术的标准规范,用于描述激光显示设备的控制和数据交换格式。ILDA文件是一种二进制文件格式,用于存储激光显示设备的控制信息和图形...
凯立德是一款知名的车载导航软件,其2012版本的配置文件解析是理解软件运行机制、自定义导航设置及优化用户体验的关键。本文件压缩包包含了一份关于凯立德2012配置文件的详细解析与参考材料,旨在帮助用户深入理解和...
《数字变电站SCD文件解析工具详解》 在现代电力系统中,数字变电站作为一种高效、可靠的通信方式,已经逐渐取代了传统的模拟变电站。SCD(System Configuration Description)文件是数字变电站的核心配置文件,它...
### Java对MHT文件解析及内容抓取技术详解 #### 一、引言 MHT(Mime HTML)文件是一种将HTML文档与嵌入资源(如图像、样式表等)合并为一个文件的格式,方便在网络上传输。本文将详细介绍如何使用Java语言解析MHT...
本文将深入探讨如何将 SPL(Spool File)文件解析为 EMF(Enhanced Metafile)文件,以便于进行打印监控。 SPL 文件是Windows操作系统中的一种打印队列文件格式,它包含了用户请求打印的所有信息,如文本、图像和...
基于C#开发的STEP文件解析器完整源码+项目说明(毕设项目).zip 【资源介绍】 此项目是本人的毕业设计的研究课题,旨在实现一个STEP解析器,预期功能如下: 解析STEP文件,识别出各组成元素的类型、详细信息,以及元素...
一个IFC文件解析器C#版本,如"IFC文件解析器",是专门设计来读取、理解和处理IFC文件的程序。下面我们将深入探讨这个解析器的相关知识点。 1. **IFC格式**: IFC是一种基于XML的开放标准,用于存储建筑项目中的几何...
标题中的“dwg文件解析读取程序”是指一个软件或库,它允许用户在没有安装AutoCAD的情况下,处理和解析DWG(Drawing)文件。DWG是AutoCAD用于存储二维和三维图形的数据格式,广泛应用于工程和设计领域。这个程序的...
**BLF文件解析工程概述** BLF文件解析工程是一个基于C语言和Visual Studio(VS)开发的后端项目,其核心目标是理解和处理特定格式的BLF(Binary Log File)文件。这种文件通常用于存储系统日志或应用程序的运行记录...
**标题:“ab文件解析工具abe”** 在移动设备和游戏开发领域,`.ab`文件(Asset Bundle)是一种常见的数据打包格式,通常用于存储游戏资源、应用程序数据或任何其他需要高效加载和分发的二进制内容。`.ab`文件由...
**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文件...
SCD文件解析工具是用于理解和处理这些配置文件的关键软件。该工具能够帮助工程师们查看、编辑和验证SCD文件内容,确保变电站设备的正确配置。通过对SCD文件的解析,用户可以了解每个IED的功能、通信协议、地址设置...
### AutoCAD逆向工程中Shx字体文件解析 #### 摘要 本文详细解析了AutoCAD中的Shx(形)字体文件格式,探讨了其三种不同格式的特点,并重点介绍了如何在应用程序中正确加载这些Shx字体文件。通过深入分析Shx字体文件...
总的来说,通过C#实现CAD文件解析并显示图片是一项涉及文件解析、图形渲染和用户交互的复杂任务。理解和应用上述步骤,可以帮助你构建一个功能完善的CAD查看器。在开发过程中,确保遵循最佳实践,注重代码的可读性和...
基于CAPL的HEX文件解析
eml文件解析 C++ 代码,从codeproject上面下载,希望对你有用。 http://lamp.codeproject.com/Articles/5759/MIME-Message-Composer-Analyser?rp=/KB/IP/mimecpp/mimecpp_src.zip
故障录波文件解析是电力系统自动化领域中的一个重要环节,它涉及到电力系统运行状态的监测与故障分析。在电力系统中,故障录波器是用于记录电网异常或故障时瞬间电气参数变化的设备。这些记录下来的故障录波数据包含...
电力系统E格式文件解析代码,本人原创,用于公司平台中。
为了深入理解HPGL文件解析,你需要学习以下知识点: 1. HPGL指令集:了解每个命令的含义和用法,如何根据这些指令绘制图形。 2. 文件I/O操作:在C++中读取二进制文件,因为PLT文件通常是以二进制格式存储的。 3. ...