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 + -
显示快捷键?