/*
* Copyright (C) 2010---2014 星星(wuweixing)<349446658@qq.com>
*
* This file is part of Wabacus
*
* Wabacus is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.wabacus.system.assistant;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.wabacus.config.Config;
import com.wabacus.config.ConfigLoadManager;
import com.wabacus.config.component.container.page.PageBean;
import com.wabacus.exception.WabacusConfigLoadingException;
import com.wabacus.exception.WabacusRuntimeException;
import com.wabacus.system.ReportRequest;
import com.wabacus.system.component.AbsComponentType;
import com.wabacus.util.Consts_Private;
import com.wabacus.util.RegexTools;
import com.wabacus.util.Tools;
public class WabacusAssistant
{
private static Log log=LogFactory.getLog(WabacusAssistant.class);
private final static WabacusAssistant instance=new WabacusAssistant();
protected WabacusAssistant()
{}
public static WabacusAssistant getInstance()
{
return instance;
}
public String addDefaultPopupParams(String popupparams,String initsize,String defaultWidth,String defaultHeight,String defaultHandler)
{
popupparams=popupparams==null?"":popupparams.trim();
if(popupparams.startsWith("{")&&popupparams.endsWith("}")) popupparams=popupparams.substring(1,popupparams.length()-1).trim();
if(defaultWidth!=null&&!defaultWidth.trim().equals("")&&popupparams.toLowerCase().indexOf("width:")<0)
{
if(!popupparams.equals("")) popupparams+=",";
popupparams+="width:"+defaultWidth;
}
if(defaultHeight!=null&&!defaultHeight.trim().equals("")&&popupparams.toLowerCase().indexOf("height:")<0)
{
if(!popupparams.equals("")) popupparams+=",";
popupparams+="height:"+defaultHeight;
}
if(initsize!=null&&initsize.toLowerCase().trim().equals("max"))
{
if(!popupparams.equals("")) popupparams+=",";
popupparams+="initsize:'max'";
}else if(initsize!=null&&initsize.toLowerCase().trim().equals("min"))
{
if(!popupparams.equals("")) popupparams+=",";
popupparams+="initsize:'min'";
}
if(defaultHandler!=null&&!defaultHandler.trim().equals("")&&popupparams.toLowerCase().indexOf("handler:")<0)
{
if(!popupparams.equals("")) popupparams+=",";
popupparams+="handler:"+defaultHandler;
}
if(!popupparams.trim().equals("")) popupparams="{"+popupparams+"}";
return popupparams;
}
public List<Map<String,String>> parseStringToList(String sourcestring)
{
if(sourcestring==null||sourcestring.trim().equals("")) return null;
List<String> lstTemp=null;
if(!sourcestring.startsWith("[")||!sourcestring.endsWith("]"))
{
lstTemp=new ArrayList<String>();
lstTemp.add(sourcestring);
}else
{
sourcestring=sourcestring.substring(1,sourcestring.length()-1);
lstTemp=Tools.parseStringToList(sourcestring,"][",false);
}
List<Map<String,String>> lstResult=new ArrayList<Map<String,String>>();
String temp;
for(int i=0;i<lstTemp.size();i++)
{
temp=lstTemp.get(i);
if(temp==null||temp.trim().equals("")) continue;
Map<String,String> mParams=new HashMap<String,String>();
List<String> lstParams=Tools.parseStringToList(temp,";;",false);
for(int k=0;k<lstParams.size();k++)
{
temp=lstParams.get(k);
int idx=temp.indexOf("=");
if(idx<=0)
{
throw new WabacusRuntimeException(sourcestring+"不合法,参数名与值之间必须用=号连接");
}
mParams.put(temp.substring(0,idx).trim(),temp.substring(idx+1).trim());
}
lstResult.add(mParams);
}
return lstResult;
}
public String replaceSystemPlaceHolder(String content)
{
if(content==null) return null;
content=Tools.replaceAll(content,"%WEBROOT%",Config.webroot);
return content;
}
public String parseConfigPathToRealPath(String configpath,String webroot_abspath)
{
if(configpath==null||configpath.trim().equals("")) return "";
configpath=configpath.trim();
if(Tools.isDefineKey("classpath",configpath))
{//相对classpath的路径
configpath=Tools.getRealKeyByDefine("classpath",configpath);
while(configpath.startsWith("/"))
{//因为这种配置方式是用ClassLoader进行加载,而不是Class,所以必须不能以/打头
configpath=configpath.substring(1);
}
while(configpath.endsWith("/"))
{
configpath=configpath.substring(0,configpath.length()-1);
}
configpath="classpath{"+configpath+"}";
}else if(Tools.isDefineKey("relative",configpath))
{
configpath=Tools.getRealKeyByDefine("relative",configpath);
configpath=FilePathAssistant.getInstance().standardFilePath(webroot_abspath+"\\"+configpath+"\\");
}else
{
if(Tools.isDefineKey("absolute",configpath)) configpath=Tools.getRealKeyByDefine("absolute",configpath);
configpath=FilePathAssistant.getInstance().standardFilePath(configpath+"\\");
}
return configpath;
}
public String getRealFilePath(String rootpath,String fileRelativePath)
{
String abspath=null;
if(Tools.isDefineKey("classpath",rootpath))
{
String homepath=Tools.getRealKeyByDefine("classpath",rootpath);
if(homepath.equals(""))
{
abspath=fileRelativePath;
}else
{
while(fileRelativePath.startsWith("/"))
fileRelativePath=fileRelativePath.substring(1).trim();
abspath=homepath+"/"+fileRelativePath;
}
abspath=Tools.replaceAll(abspath,"//","/");
while(abspath.startsWith("/"))
abspath=abspath.substring(1);//因为这种配置方式是用ClassLoader进行加载,而不是Class,所以必须不能以/打头
}else
{
abspath=rootpath+"\\"+fileRelativePath;
abspath=FilePathAssistant.getInstance().standardFilePath(abspath);
}
return abspath;
}
public File getFileObjByPathInClasspath(String rootpath,String relativepath)
{
while(rootpath.startsWith("/"))
{
rootpath=rootpath.substring(1);
}
try
{
rootpath=ConfigLoadManager.currentDynClassLoader.getResource(rootpath).getPath();
rootpath=URLDecoder.decode(rootpath,"UTF-8");
}catch(Exception e)
{
throw new WabacusConfigLoadingException("在classpath中没有取到文件"+rootpath,e);
}
if(rootpath.toLowerCase().startsWith("jar:")||rootpath.indexOf(".jar!/")>0)
{
throw new WabacusConfigLoadingException(rootpath+"为jar包中的目录,无法创建jar包中文件路径的File对象");
}
if(!rootpath.endsWith("/")) rootpath=rootpath+"/";
// while(rootpath.startsWith("/")) rootpath=rootpath.trim();
while(relativepath.startsWith("/"))
relativepath=relativepath.substring(1);
rootpath=rootpath+relativepath;
return new File(rootpath);
}
public String replaceAllImgPathInExportDataFile(HttpServletRequest request,String displayvalue)
{
String serverName=request.getServerName();
String serverPort=String.valueOf(request.getServerPort());
return replaceAllImgPathInExportDataFile("http://"+serverName+":"+serverPort,displayvalue);
}
public String replaceAllImgPathInExportDataFile(String host,String displayvalue)
{
if(displayvalue==null) return displayvalue;
List<Map<String,Object>> lstImgObjs=RegexTools.getMatchObjectArray(displayvalue,
"<img[^>]*>",false);
if(lstImgObjs!=null&&lstImgObjs.size()>0)
{
String valueTmp;
int startidxTmp;
int endidxTmp;
Map<String,Object> mTmp=null;
for(int i=lstImgObjs.size()-1;i>=0;i--)
{//从后向前替换,这样不会导致没替换的<img/>的startidx和endidx改变
mTmp=lstImgObjs.get(i);
valueTmp=(String)mTmp.get("value");
startidxTmp=(Integer)mTmp.get("startindex");
endidxTmp=(Integer)mTmp.get("endindex");
if(valueTmp==null) continue;
valueTmp=replaceImgSrc(valueTmp,host);
if(valueTmp==null||valueTmp.trim().equals("")) continue;
displayvalue=displayvalue.substring(0,startidxTmp)+valueTmp
+displayvalue.substring(endidxTmp);
}
}
// lstImgObjs=RegexTools.getMatchObjectArray(displayvalue,"<img[^>]*>",false);
return displayvalue;
}
private String replaceImgSrc(String imgstr,String host)
{
imgstr=imgstr.trim();
int idxSrc=imgstr.toLowerCase().indexOf(" src");
StringBuffer resultBuf=new StringBuffer();
while(idxSrc>0)
{
resultBuf.append(imgstr.substring(0,idxSrc+4));
imgstr=imgstr.substring(idxSrc+4).trim();
if(!imgstr.startsWith("="))
{
idxSrc=imgstr.toLowerCase().indexOf(" src");
continue;
}
resultBuf.append("=");
imgstr=imgstr.substring(1).trim();
if(imgstr.equals("")) return null;
String tmp;
char c=imgstr.charAt(0);
if(c=='\\')
{//=后面是\号,则如果后面跟上'或",则此\号为转义符,后面也要以\"或\'结尾
if(imgstr.length()==1)
{
return null;
}else if(imgstr.charAt(1)=='\'')
{
imgstr=imgstr.substring(2);
resultBuf.append("\\\'");
tmp="\\\'";
}else if(imgstr.charAt(1)=='"')
{
imgstr=imgstr.substring(2);
resultBuf.append("\\\"");
tmp="\\\"";
}else
{
tmp=" ";
}
}else if(c=='\'')
{
imgstr=imgstr.substring(1);
resultBuf.append("\'");
tmp="\'";
}else if(c=='"')
{
imgstr=imgstr.substring(1);
resultBuf.append("\"");
tmp="\"";
}else
{
tmp=" ";
}
if(tmp.equals(" "))
{
int idx=imgstr.indexOf(" ");
if(idx==0) return null;
if(idx<0)
{
idx=imgstr.length()-1;
}
String src=imgstr.substring(0,idx).trim();
if(src.equals("")) return null;
if(src.toLowerCase().startsWith("http://")) return null;//已经包括http://xxx/,则不用再加上
if(!src.startsWith("/")) return null;//相对路径,则不加上http://xxx
src=host+src;
resultBuf.append(src).append(imgstr.substring(idx));
}else
{
int idx=imgstr.indexOf(tmp);
if(idx<=0) return null;
String src=imgstr.substring(0,idx).trim();
if(src.equals("")) return null;
if(src.toLowerCase().startsWith("http://")) return null;
if(!src.startsWith("/")) return null;
src=host+src;
resultBuf.append(src).append(imgstr.substring(idx));
}
return resultBuf.toString();
}
return null;
}
public String getComponentIdByGuid(String cguid)
{
if(cguid==null||cguid.trim().equals("")) return null;
int idx=cguid.lastIndexOf(Consts_Private.GUID_SEPERATOR);
if(idx<=0)
{
return null;
}
String cid=cguid.substring(idx+Consts_Private.GUID_SEPERATOR.length()).trim();
if(cid.equals(""))
{
return null;
}
return cid;
}
public String getReportGuidByInputboxId(String inputboxid)
{
if(Tools.isEmpty(inputboxid)) return null;
inputboxid=inputboxid.trim();
int idx=inputboxid.indexOf(Consts_Private.GUID_SEPERATOR);
String pageid=inputboxid.substring(0,idx);
inputboxid=inputboxid.substring(idx+Consts_Private.GUID_SEPERATOR.length());
idx=inputboxid.indexOf("_wxcol_");
if(idx<=0) idx=inputboxid.indexOf("_wxcondition_");
if(idx<=0) return null;
String reportid=inputboxid.substring(0,idx);
return pageid+Consts_Private.GUID_SEPERATOR+reportid;
}
public String parseDynPartsInConfigValue(String configvalue,Map<String,String> mDynParts,String[] dynTypenamesArr)
{
if(dynTypenamesArr==null||dynTypenamesArr.length==0) return configvalue;
String typenameTmp, strStart, strDynValue, strEnd, placeHolderTmp;
for(int i=0;i<dynTypenamesArr.length;i++)
{
int placeholderIdxTmp=0;
typenameTmp=dynTypenamesArr[i];
int idx=configvalue.indexOf(typenameTmp+"{");
while(idx>=0)
{
strStart=configvalue.substring(0,idx).trim();
strEnd=configvalue.substring(idx);
idx=strEnd.indexOf("}");
if(idx<0) break;
strDynValue=strEnd.substring(0,idx+1);//把右边的}号也括进来,即组成一个完整的type{...}
strEnd=strEnd.substring(idx+1).trim();
placeHolderTmp="[PLACE_HOLDER_"+typenameTmp+"_"+placeholderIdxTmp+"]";
mDynParts.put(placeHolderTmp,strDynValue);
configvalue=strStart+placeHolderTmp+strEnd;
idx=configvalue.indexOf(typenameTmp+"{");
placeholderIdxTmp++;
}
}
return configvalue;
}
public boolean isGetRequestContextValue(String paramname)
{
if(paramname==null||paramname.trim().equals("")) return false;
if(Tools.isDefineKey("url",paramname)) return true;
if(Tools.isDefineKey("request",paramname)) return true;
if(Tools.isDefineKey("rrequest",paramname)) return true;
if(Tools.isDefineKey("session",paramname)) return true;
return false;
}
public String getRequestContextStringValue(ReportRequest rrequest,String key,String defaultvalue)
{
Object obj=getRequestContextValue(rrequest,key);
if(obj==null||obj.toString().trim().equals("")) return defaultvalue;
return obj.toString().trim();
}
public String getRequestContextStringValue(HttpServletRequest request,String key,String defaultvalue)
{
Object obj=getRequestContextValue(request,key);
if(obj==null||obj.toString().trim().equals("")) return defaultvalue;
return obj.toString().trim();
}
public Object getRequestContextValue(ReportRequest rrequest,String key)
{
if(key==null||key.trim().equals("")) return null;
if(Tools.isDefineKey("url",key)) return getValueFromUrl(rrequest.getRequest(),key);
if(Tools.isDefineKey("rrequest",key)) return getValueFromReportRequest(rrequest,key);
if(Tools.isDefineKey("request",key)) return getValueFromRequest(rrequest.getRequest(),key);
if(Tools.isDefineKey("session",key)) return getValueFromSession(rrequest.getRequest().getSession(),key);
return null;
}
public Object getRequestContextValue(HttpServletRequest request,String key)
{
if(key==null||key.trim().equals("")) return null;
if(Tools.isDefineKey("url",key)) return getValueFromUrl(request,key);//从url中取值
if(Tools.isDefineKey("request",key)) return getValueFromRequest(request,key);
if(Tools.isDefineKey("session",key)) return getValueFromSession(request.getSession(),key);
return null;
}
private String getValueFromUrl(HttpServletRequest request,String paramname)
{
if(request==null) return null;
paramname=Tools.getRealKeyByDefine("url",paramname);
if(paramname==null||paramname.trim().equals("")) return null;
String value=request.getParameter(paramname);
if(value==null||value.trim().equals("")) return null;
return value.trim();
}
private Object getValueFromReportRequest(ReportRequest rrequest,String key)
{
if(rrequest==null) return null;
String realkey=Tools.getRealKeyByDefine("rrequest",key);
if(realkey==null||realkey.trim().equals("")) return null;
int idx=realkey.lastIndexOf(".");
if(idx>0)
{
String pojokey=realkey.substring(0,idx).trim();
String propname=realkey.substring(idx+1).trim();
if(pojokey.equals("")||propname.equals("")) return null;
return getPojoPropertyValue(rrequest.getAttribute(pojokey),propname);
}else
{
return rrequest.getAttribute(realkey);
}
}
public Object getValueFromRequest(HttpServletRequest request,String key)
{
if(request==null) return null;
String realkey=Tools.getRealKeyByDefine("request",key);
if(realkey==null||realkey.trim().equals("")) return null;
int idx=realkey.lastIndexOf(".");
if(idx>0)
{
String pojokey=realkey.substring(0,idx).trim();
String propname=realkey.substring(idx+1).trim();
if(pojokey.equals("")||propname.equals("")) return null;
return getPojoPropertyValue(request.getAttribute(pojokey),propname);
}else
{
return request.getAttribute(realkey);
}
}
public Object getValueFromSession(HttpSession session,String key)
{
if(session==null) return null;
String realkey=Tools.getRealKeyByDefine("session",key);
if(realkey==null||realkey.trim().equals("")) return null;
int idx=realkey.lastIndexOf(".");
if(idx>0)
{
String pojokey=realkey.substring(0,idx).trim();
String propname=realkey.substring(idx+1).trim();
if(pojokey.equals("")||propname.equals("")) return null;
return getPojoPropertyValue(session.getAttribute(pojokey),propname);
}else
{
return session.getAttribute(realkey);
}
}
private Object getPojoPropertyValue(Object pojoObj,String propname)
{
if(pojoObj==null||propname==null||propname.trim().equals("")) return null;
try
{
Method m=pojoObj.getClass().getMethod("get"+propname.substring(0,1).toUpperCase()+propname.substring(1),new Class[] {});
return m.invoke(pojoObj,new Object[] {});
}catch(Exception e)
{
throw new WabacusRuntimeException("从"+pojoObj.getClass().getName()+"对象中取成员变量"+propname+"的值失败",e);
}
}
public String encodeAttachFilename(HttpServletRequest request,String title)
{
if(title==null) title="";
title=Tools.replaceAll(title," ","");
title=title.replaceAll("<.*?\\>","").trim();
try
{
if(Config.encode.equalsIgnoreCase("utf-8"))
{
if(request.getHeader("User-Agent").toLowerCase().indexOf("firefox")>0)
{
title=new String(title.getBytes("UTF-8"),"iso-8859-1");
}else
{
title=URLEncoder.encode(title,"UTF-8");
}
}else
{
title=new String(title.getBytes(Config.encode),"iso-8859-1");
}
}catch(UnsupportedEncodingException e)
{
e.printStackTrace();
}
return title;
}
public Object[] parseStringWithDynPart(PageBean pbean,String value)
{
if(value==null||value.equals("")) return new Object[] { null, null };
Map<String,String> mDynParts=new HashMap<String,String>();
value=parseStringWithCertainDynPart(value,"$",mDynParts);
if(mDynParts.size()>0)
{
String valueTmp;
for(Entry<String,String> entryTmp:mDynParts.entrySet())
{
valueTmp=Config.getInstance().getResourceString(null,pbean,entryTmp.getValue(),false);
if(valueTmp==null) valueTmp=entryTmp.getValue();
value=Tools.replaceAll(value,entryTmp.getKey(),valueTmp);
}
}
return parseStringWithDynPart(value);
}
public Object[] parseStringWithDynPart(String value)
{
if(value==null||value.equals("")) return new Object[] { null, null };
Map<String,String> mDynParts=new HashMap<String,String>();
value=parseStringWithCertainDynPart(value,"url",mDynParts);
value=parseStringWithCertainDynPart(value,"rrequest",mDynParts);
value=parseStringWithCertainDynPart(value,"request",mDynParts);
value=parseStringWithCertainDynPart(value,"session",mDynParts);
if(mDynParts.size()==0) mDynParts=null;
return new Object[] { value, mDynParts };
}
private String parseStringWithCertainDynPart(String value,String partname,Map<String,String> mDynParts)
{
if(value==null||value.trim().equals("")) return value;
int index=value.indexOf(partname+"{");
int placeholderindex=0;
String placeholderTmp;
while(index>=0)
{
String valueTmp=value.substring(index);
int index2=valueTmp.indexOf("}");
if(index2<0) break;
placeholderTmp="PLACE_HOLDER_"+partname.toUpperCase()+"_"+placeholderindex;
mDynParts.put(placeholderTmp,valueTmp.substring(0,index2+1));//取到完整的partname{...}部分
if(Tools.getRealKeyByDefine(partname,mDynParts.get(placeholderTmp)).trim().equals(""))
{
throw new WabacusConfigLoadingException("配置的字符串"+value+"中的"+partname+"{}为空");
}
value=value.substring(0,index)+placeholderTmp+valueTmp.substring(index2+1);
index=value.indexOf(partname+"{");
placeholderindex++;
}
return value;
}
public String getStringValueWithDynPart(ReportRequest rrequest,String value,Map<String,String> mDynParts,String defaultvalue)
{
if(mDynParts!=null&&mDynParts.size()>0)
{
for(Entry<String,String> entryTmp:mDynParts.entrySet())
{
value=Tools.replaceAll(value,entryTmp.getKey(),rrequest==null?entryTmp.getValue():getRequestContextStringValue(rrequest,entryTmp.getValue(),""));
}
}
value=rrequest==null?value:rrequest.getI18NStringValue(value);
if(value==null||value.equals("")) value=defaultvalue;
return value;
}
public String getStringValueWithDynPart(HttpServletRequest request,String value,Map<String,String> mDynParts,String defaultvalue)
{
if(mDynParts!=null&&mDynParts.size()>0)
{
for(Entry<String,String> entryTmp:mDynParts.entrySet())
{
value=Tools.replaceAll(value,entryTmp.getKey(),request==null?entryTmp.getValue():getRequestContextStringValue(request,entryTmp
.getValue(),""));
}
}
if(value==null||value.equals("")) value=defaultvalue;
return value;
}
public Object[] parseStylepropertyWithDynPart(String styleproperty)
{
Object[] objArr=parseStringWithDynPart(styleproperty);
if(objArr[1]==null||((Map<String,String>)objArr[1]).size()==0) return new Object[] { objArr[0], null };
styleproperty=(String)objArr[0];
if(styleproperty==null) styleproperty="";
List<String> lstDynParts=new ArrayList<String>();
for(String keyTmp:((Map<String,String>)objArr[1]).keySet())
{
styleproperty=Tools.replaceAll(styleproperty,keyTmp," ");
lstDynParts.add(((Map<String,String>)objArr[1]).get(keyTmp));
}
return new Object[] { styleproperty.trim(), lstDynParts };
}
public String getStylepropertyWithDynPart(ReportRequest rrequest,String styleproperty,List<String> lstDynStylepropertyParts,String defaultvalue)
{
if(styleproperty==null) styleproperty="";
if(lstDynStylepropertyParts!=null&&lstDynStylepropertyParts.size()>0)
{
for(String dynValTmp:lstDynStylepropertyParts)
{//依次替换掉value中所有占位符为真正的值
if(rrequest==null)
{
styleproperty+=" "+dynValTmp;
}else
{
styleproperty=Tools.mergeHtmlTagPropertyString(styleproperty,getRequestContextStringValue(rrequest,dynValTmp,""),1);
}
}
}
return styleproperty.trim().equals("")?defaultvalue:styleproperty.trim();
}
public String parseAndGetRealValue(HttpServletRequest request,String originValue,String defaultvalue)
{
Object[] objArr=parseStringWithDynPart(originValue);
return getStringValueWithDynPart(request,(String)objArr[0],(Map<String,String>)objArr[1],defaultvalue);
}
public String parseAndGetRealValue(ReportRequest rrequest,String originValue,String defaultvalue)
{
Object[] objArr=parseStringWithDynPart(originValue);
return getStringValueWithDynPart(rrequest,(String)objArr[0],(Map<String,String>)objArr[1],defaultvalue);
}
public String getSpacingDisplayString(int spacenum)
{
if(spacenum<=0) return "";
return "<span style=\"margin-left:"+spacenum+"px;\"></span>";
}
private static List<String> lstSupportHtmlSizeUnits=new ArrayList<String>();
static
{
lstSupportHtmlSizeUnits.add("%");
lstSupportHtmlSizeUnits.add("em");
lstSupportHtmlSizeUnits.add("ex");
lstSupportHtmlSizeUnits.add("px");
lstSupportHtmlSizeUnits.add("pixel");
lstSupportHtmlSizeUnits.add("in");
lstSupportHtmlSizeUnits.add("cm");
lstSupportHtmlSizeUnits.add("mm");
lstSupportHtmlSizeUnits.add("pt");
lstSupportHtmlSizeUnits.add("pc");
}
public String[] parseHtmlElementSizeValueAndType(String htmlsize)
{
if(htmlsize==null||htmlsize.trim().equals("")) return null;
htmlsize=htmlsize.toLowerCase().trim();
String sizevalue;
String sizetype="";
StringBuffer tmpBuf=new StringBuffer();
int i=0,len=htmlsize.length();
for(;i<len;i++)
{
if(htmlsize.charAt(i)>='0'&&htmlsize.charAt(i)<='9')
{
tmpBuf.append(htmlsize.charAt(i));
}else
{
break;
}
}
sizevalue=tmpBuf.toString();
if(sizevalue.equals("")) return null;
int isizevalue=0;
try
{
isizevalue=Integer.parseInt(sizevalue);
}catch(NumberFormatException e)
{
log.debug(e);
return null;
}
if(isizevalue<0) return null;
if(i<len) sizetype=htmlsize.substring(i,len).trim();//宽度类型(可能是百分比,也可能是像素等等)
if(!sizetype.equals("")&&!lstSupportHtmlSizeUnits.contains(sizetype.toLowerCase()))
{
log.warn("配置的html元素大小"+htmlsize+"无效,它的值将变为"+isizevalue);
sizetype="";
}
return new String[]{String.valueOf(isizevalue),sizetype};
}
public String readFileContentByPath(String filepath)
{
if(filepath==null||filepath.trim().equals("")) return "";
filepath=filepath.trim();
BufferedReader bis=null;
try
{
bis=new BufferedReader(new InputStreamReader(readFile(filepath),Config.encode));
StringBuffer contentBuf=new StringBuffer();
String str=bis.readLine();
while(str!=null)
{
contentBuf.append(str);
str=bis.readLine();
}
return contentBuf.toString();
}catch(FileNotFoundException e)
{
throw new WabacusConfigLoadingException("没有找到文件"+filepath,e);
}catch(IOException ioe)
{
throw new WabacusConfigLoadingException("读取文件"+filepath+"失败",ioe);
}finally
{
if(bis!=null)
{
try
{
bis.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
}
public InputStream readFile(String filepath) throws IOException
{
if(filepath==null||filepath.trim().equals("")) return null;
filepath=filepath.trim();
InputStream istream=null;
if(Tools.isDefineKey("classpath",filepath))
{
filepath=Tools.getRealKeyByDefine("classpath",filepath).trim();
while(filepath.startsWith("/"))
{
filepath=filepath.substring(1);
}
istream=ConfigLoadManager.currentDynClassLoader.getResourceAsStream(filepath);
}else if(Tools.isDefineKey("relative",filepath))
{
filepath=Tools.getRealKeyByDefine("relative",filepath).trim();
filepath=Config.webroot_abspath+"\\"+filepath;
filepath=FilePathAssistant.getInstance().standardFilePath(filepath);
istream=new FileInputStream(filepath);
}else
{
if(Tools.isDefineKey("absolute",filepath))
{
filepath=Tools.getRealKeyByDefine("absolute",filepath).trim();
}
istream=new FileInputStream(filepath);
}
return istream;
}
public void includeDynTpl(ReportRequest rrequest,AbsComponentType comObj,String dyntplpath)
{
if(dyntplpath==null||dyntplpath.trim().equals("")||dyntplpath.trim().equals(Consts_Private.REPORT_TEMPLATE_NONE))
{
return;
}
if(rrequest.isExportToLocalFile())
{
throw new WabacusRuntimeException("当前是以在服务器端落地的方式导出组件"+comObj.getConfigBean().getPath()+"的数据,不能为它指定导出动态模板");
}
rrequest.getRequest().setAttribute("WX_COMPONENT_OBJ",comObj);
try
{
RequestDispatcher rd=rrequest.getRequest().getRequestDispatcher(dyntplpath.trim());
rd.include(rrequest.getRequest(),rrequest.getWResponse().getResponse());
}catch(Exception e)
{
throw new WabacusRuntimeException("通过模板"+dyntplpath+"显示组件"+comObj.getConfigBean().getPath()+"失败",e);
}
}
public void release(Connection conn,Statement stmt)
{
try
{
if(stmt!=null)
{
stmt.close();
stmt=null;
}
}catch(Exception e)
{
log.error("关闭数据库Statement失败",e);
}
try
{
if(conn!=null)
{
conn.close();
conn=null;
}
}catch(Exception e)
{
log.error("关闭数据库连接失败",e);
}
}
}