pageconfig.java
来自「电信的网厅的整站代码」· Java 代码 · 共 632 行 · 第 1/2 页
JAVA
632 行
package com.doone.webtemplate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.doone.util.FileLogger;
public class PageConfig {
private String name = null;
private boolean isDefault = false;
private Date startTime = null;
private Date endTime = null;
private Date autoDelete = null;
private String allowUser = AllowUserEnum.EVERYONE;
private String allowUser_Org = null;
private Date createTime = null;
private String desc = null;
private String status = null;
private Map param = null;
private ModuleConfig module = null;
private String fullPath = null;
public PageConfig() {
}
PageConfig(ModuleConfig mc) {
module = mc;
}
static PageConfig getInstance(ModuleConfig mc) {
PageConfig pc = new PageConfig(mc);
return pc;
}
static PageConfig getInstance(ModuleConfig mc, Element page) {
String _name = page.attributeValue("name");
String _isDefault = page.attributeValue("isdefault");
String _startTime = page.attributeValue("starttime");
String _endTime = page.attributeValue("endtime");
String _autoDelete = page.attributeValue("autodelete");
String _allowUser = page.attributeValue("allowuser");
String _allowUser_Org = page.attributeValue("allowuser_org");
String _createTime = page.attributeValue("createtime");
String _desc = page.attributeValue("desc");
String _status = page.attributeValue("status");
// 如果必填项为空则该页面不是有效页面,返回null。
if (_name == null) return null;
PageConfig pc = new PageConfig(mc);
pc.setName(_name);
if (_isDefault == null)
pc.setIsDefault(false);
else {
if (_isDefault.toLowerCase().equals("yes")) {
pc.setIsDefault(true);
pc.setStartTime(getDate(_startTime));
pc.setEndTime(getDate(_endTime));
pc.setAutoDelete(getDate(_autoDelete));
} else {
pc.setIsDefault(false);
pc.setStartTime(null);
pc.setEndTime(null);
pc.setAutoDelete(null);
}
}
if (_allowUser != null) {
_allowUser = _allowUser.toLowerCase();
java.lang.reflect.Field[] fields = AllowUserEnum.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if (_allowUser.equals(fields[i].toString())) {
pc.setAllowUser(_allowUser);
break;
}
}
}
if (_allowUser_Org != null) pc.setAllowUser_Org(_allowUser_Org);
if (_createTime != null) {
pc.setCreateTime(parserDate(_createTime));
}
if (_desc != null) pc.setDesc(_desc);
if (_status != null && _status.equals("P"))
pc.setStatus(_status);
else
pc.setStatus("N");
// 加载扩展参数。
try {
List paramlist = page.elements("param");
pc.param = new HashMap();
FileLogger.getLogger().debug(
pc.getName() + "-->ParamCount:" + String.valueOf(paramlist.size()));
for (int i = 0; i < paramlist.size(); i++) {
Element pe = (Element) paramlist.get(i);
String paramName = pe.attributeValue("name");
String paramValue = pe.getText();
FileLogger.getLogger().debug(pc.getName() + "-->paramName:" + paramName);
FileLogger.getLogger().debug(pc.getName() + "-->paramValue:" + paramValue);
if (paramName != null && paramValue != null) {
paramName = paramName.trim().toLowerCase();
if (pc.param.get(paramName) != null)
FileLogger.getLogger().warn("扩展参数有重名,旧值将被新值覆盖。");
pc.param.put(paramName, paramValue);
}
}
} catch (Exception ex) {
String errMsg = "加载页面配置出错,文件名称为:" + pc.getName();
FileLogger.getLogger().warn(errMsg, ex);
}
return pc;
}
private static Date parserDate(String time) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(time);
} catch (ParseException ex) {
FileLogger.getLogger().warn("XML文件中的日期格式有错,标准的日期格式为yyyy-MM-dd");
throw new RuntimeException(ex);
}
}
Element getXmlElement() {
if (getName() == null) return null;
Element ret = DocumentHelper.createElement("page");
ret.addAttribute("name", getName());
if (getIsDefault()) ret.addAttribute("isDefault", "yes");
if (getStartTime() != null) ret.addAttribute("starttime", format(getStartTime()));
if (getEndTime() != null) ret.addAttribute("endtime", format(getEndTime()));
if (getAutoDelete() != null) ret.addAttribute("autodelete", format(getAutoDelete()));
if (getCreateTime() != null) ret.addAttribute("createtime", format(getCreateTime()));
if (getAllowUser() != null) ret.addAttribute("allowuser", getAllowUser());
if (getAllowUser_Org() != null) ret.addAttribute("allowuser_org", getAllowUser_Org());
if (getDesc() != null) ret.addAttribute("desc", getDesc());
if (getStatus() != null) ret.addAttribute("status", getStatus());
// 生成扩展参数。
try {
if (this.param != null) {
Object[] keys = this.param.keySet().toArray();
for (int i = 0; i < keys.length; i++) {
String paramName = (String) keys[i];
String paramValue = (String) this.param.get(paramName);
Element pe = DocumentHelper.createElement("param");
pe.addAttribute("name", paramName);
pe.setText(paramValue);
ret.add(pe);
}
}
} catch (Exception ex) {
String errMsg = "生成页面扩展参数的Element对象时出错,文件名称为:" + this.getName();
FileLogger.getLogger().warn(errMsg, ex);
}
return ret;
}
private String format(Date time) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(time);
}
private static Date getDate(String sTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date ret = null;
try {
if (sTime != null) ret = sdf.parse(sTime);
} catch (Exception ex) {
FileLogger.getLogger().warn("配置文件中的日期格式不正确,正确的格式应该是:yyyy-MM-dd HH:mm:ss", ex);
}
return ret;
}
ModuleConfig getParent() {
return module;
}
boolean checkFile() {
// FIXME 检查文件是否存在,暂时先全部有效。
return true;
}
/**
* 判断该页面对象是否有效。
*
* @return
*/
boolean isValid(HttpServletRequest request) {
boolean ret = false;
if (this.getStatus().charAt(0) == 'N') {
if (this.getIsDefault())
ret = true;
else {
long curr = System.currentTimeMillis();
long sTime = Long.MIN_VALUE;
long eTime = Long.MAX_VALUE;
long aTime = Long.MAX_VALUE;
if (getStartTime() != null) sTime = getStartTime().getTime();
if (getEndTime() != null) eTime = getEndTime().getTime();
if (getAutoDelete() != null) aTime = getAutoDelete().getTime();
if (curr > sTime && curr < eTime && curr < aTime) {
ret = true;
}
}
}
// 如果文件不存在,该页面无效。
if (ret && !checkFile()) ret = false;
// FIXME 进行用户验证。
if (ret) {
if (getAllowUser().equals(AllowUserEnum.NONE))
ret = false;
else if (getAllowUser().equals(AllowUserEnum.EVERYONE))
;
else if (getAllowUser().equals(AllowUserEnum.AUTH)) {
// 如果当前用户已经登录则返回true。
} else if (getAllowUser().equals(AllowUserEnum.USER)) {
// 如果当前登录用户在用户列表中则返回true。
} else if (getAllowUser().equals(AllowUserEnum.ORG)) {
// 如果当前登录用户所在组织在当前页面列表中则返回true。
}
}
// FIXME 进行扩展参数验证。
if (ret) {
Map reqMap = request.getParameterMap();
Object[] keys = this.param.keySet().toArray();
for (int i = 0; i < keys.length; i++) {
String pName = (String) keys[i];
String pValue = this.getParam(pName);
String value = (String) reqMap.get(pName);
if (value != null) {
if (!pValue.equals(value)) ret = false;
} else {
ret = false;
if (reqMap.containsValue(pValue)) {
// 有值相同,可能是名称大小写问题,将名称取出来比较。
Object[] rKeys = reqMap.keySet().toArray();
String upKey = keys[i].toString().toUpperCase();
for (int j = 0; j < rKeys.length; j++) {
if (upKey.equals(rKeys[i].toString().toUpperCase())) {
ret = true;
break;
}
}
}
}
}
}
return ret;
}
/**
* 判断该页面对象是否有效(不检查权限)。
*
* @return
*/
boolean isValid(Map oParam) {
boolean ret = false;
if (this.getStatus().charAt(0) == 'N') {
if (this.getIsDefault())
ret = true;
else {
long curr = System.currentTimeMillis();
long sTime = Long.MIN_VALUE;
long eTime = Long.MAX_VALUE;
long aTime = Long.MAX_VALUE;
if (getStartTime() != null) sTime = getStartTime().getTime();
if (getEndTime() != null) eTime = getEndTime().getTime();
if (getAutoDelete() != null) aTime = getAutoDelete().getTime();
if (curr > sTime && curr < eTime && curr < aTime) {
ret = true;
}
}
}
// 如果文件不存在,该页面无效。
if (ret && !checkFile()) ret = false;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?