com.wabacus.config.Config.java Source code

Java tutorial

Introduction

Here is the source code for com.wabacus.config.Config.java

Source

/* 
 * 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.config;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.wabacus.config.component.ComponentConfigLoadAssistant;
import com.wabacus.config.component.ComponentConfigLoadManager;
import com.wabacus.config.component.IComponentConfigBean;
import com.wabacus.config.component.container.page.PageBean;
import com.wabacus.config.database.datasource.AbsDataSource;
import com.wabacus.config.other.JavascriptFileBean;
import com.wabacus.config.resource.Resources;
import com.wabacus.config.resource.dataimport.configbean.AbsDataImportConfigBean;
import com.wabacus.config.template.TemplateBean;
import com.wabacus.config.xml.XmlElementBean;
import com.wabacus.exception.WabacusConfigLoadingException;
import com.wabacus.exception.WabacusRuntimeException;
import com.wabacus.system.ReportRequest;
import com.wabacus.system.assistant.AuthorizationAssistant;
import com.wabacus.system.buttons.AbsButtonType;
import com.wabacus.system.commoninterface.IListReportRoworderPersistence;
import com.wabacus.system.commoninterface.IPagePersonalizePersistence;
import com.wabacus.system.commoninterface.IReportPersonalizePersistence;
import com.wabacus.system.component.AbsComponentType;
import com.wabacus.system.component.application.report.abstractreport.AbsReportType;
import com.wabacus.system.component.application.report.abstractreport.IReportType;
import com.wabacus.system.component.container.AbsContainerType;
import com.wabacus.system.dataimport.thread.TimingDataImportTask;
import com.wabacus.system.dataset.select.common.AbsCommonDataSetValueProvider;
import com.wabacus.system.dataset.select.report.value.AbsReportDataSetValueProvider;
import com.wabacus.system.dataset.update.AbsUpdateActionProvider;
import com.wabacus.system.datatype.IDataType;
import com.wabacus.system.inputbox.AbsInputBox;
import com.wabacus.system.intercept.AbsPageInterceptor;
import com.wabacus.system.permission.ComponentPermissionBean;
import com.wabacus.system.task.TimingThread;
import com.wabacus.util.Consts;
import com.wabacus.util.Consts_Private;
import com.wabacus.util.Tools;
import com.wabacus.util.UniqueArrayList;

public class Config {
    private static Log log = LogFactory.getLog(Config.class);

    public static String homeAbsPath;//getRealPath("/")??

    public static String webroot;//URL/Wabacus/

    public static String webroot_abspath = "";

    public static boolean should_createjs = true;

    public static boolean show_sql = false;

    public static String configpath;

    public static String skin;

    public static String showreport_url;//URL

    public static String showreport_onpage_url;

    public static String showreport_onrichexcel_url;

    public static String showreport_onplainexcel_url;

    public static String showreport_onword_url;

    public static String showreport_onpdf_url;//pdfURL

    public static String encode;

    public static String default_errorpromptparams_onblur;

    public static IListReportRoworderPersistence default_roworder_object;

    public static IPagePersonalizePersistence default_pagepersonalize_object;

    public static IReportPersonalizePersistence default_reportpersonalize_object;//wabacus.cfg.xml?????

    public static String i18n_filename;

    public TemplateBean report_template_defaultbean;

    public TemplateBean dataexport_template_defaultbean;

    public TemplateBean print_template_defaultbean;

    private List<Class> lstServerValidateClasses;

    private List<Class> lstFormatClasses;//??

    private Map<String, PageBean> mReportStructureInfo;

    private Map<String, String> mSystemConfig;

    private Map<String, AbsContainerType> mContainertypes;

    private Map<String, IReportType> mReporttypes;

    private List<String> ulstGlobalCss;//???css

    private Map<String, List<String>> mLocalCss;

    private List<JavascriptFileBean> lstDefaultGlobalJavascriptFiles;

    private List<JavascriptFileBean> lstGlobalJavascriptFiles;

    private Map<String, List<JavascriptFileBean>> mLocalJavascriptFiles;

    private Map<String, AbsInputBox> mInputBoxTypes;//

    private Map<String, IDataType> mDataTypes;

    private Map<String, AbsReportDataSetValueProvider> mReportDatasetValueProviders;

    private Map<String, AbsCommonDataSetValueProvider> mCommonDatasetValueProviders;

    private Map<String, AbsUpdateActionProvider> mUpdateDatasetActionProviders;

    //    private Map<String,Class> mClasses;//CommonDataBean???????????

    private Resources resources;//?

    private String default_datasourcename;

    private Map<String, AbsDataSource> mDataSources;

    private Map<String, TemplateBean> mFileTemplates;//html/htm?

    private List<AbsPageInterceptor> lstGlobalPageInterceptors;

    private Map<String, List<AbsDataImportConfigBean>> mAutoDetectedDataImportBeans;

    private Map<String, ComponentPermissionBean> mComponentsDefaultPermissions;

    private Map<String, Map<String, String>> mSkinConfigProperties;

    private int dataexport_plainexcel_sheetsize = Integer.MIN_VALUE;//plainexcelsheetsheet

    private final static Config INSTANCE = new Config();

    private Config() {
    }

    public static Config getInstance() {
        return INSTANCE;
    }

    void setMReportStructureInfo(Map<String, PageBean> reportStructureInfo) {
        mReportStructureInfo = reportStructureInfo;
    }

    public Map<String, PageBean> getMAllPageBeans() {
        return this.mReportStructureInfo;
    }

    void setMReporttypes(Map<String, IReportType> reporttypes) {
        mReporttypes = reporttypes;
    }

    Map<String, AbsContainerType> getMContainertypes() {
        return mContainertypes;
    }

    void setMContainertypes(Map<String, AbsContainerType> containertypes) {
        mContainertypes = containertypes;
    }

    Map<String, IReportType> getMReporttypes() {
        return mReporttypes;
    }

    public Map<String, AbsDataSource> getMDataSources() {
        return mDataSources;
    }

    void setMDataSources(Map<String, AbsDataSource> dataSources) {
        mDataSources = dataSources;
    }

    public List<Class> getLstFormatClasses() {
        return lstFormatClasses;
    }

    void setLstFormatClasses(List<Class> lstFormatClasses) {
        this.lstFormatClasses = lstFormatClasses;
    }

    public String getDefault_datasourcename() {
        return default_datasourcename;
    }

    void setDefault_datasourcename(String default_datasourcename) {
        this.default_datasourcename = default_datasourcename;
    }

    public void initConfigLoad() {
        this.report_template_defaultbean = null;
        this.dataexport_template_defaultbean = null;
        this.lstGlobalPageInterceptors = null;
        this.ulstGlobalCss = null;
        if (mAutoDetectedDataImportBeans != null) {
            mAutoDetectedDataImportBeans.clear();
        }
        if (this.mDataSources != null) {
            for (Entry<String, AbsDataSource> entryDsTmp : mDataSources.entrySet()) {
                entryDsTmp.getValue().closePool();
            }
            this.mDataSources = null;
        }
        dataexport_plainexcel_sheetsize = Integer.MIN_VALUE;
        this.mReportDatasetValueProviders = null;
        this.mCommonDatasetValueProviders = null;
    }

    public Object getResourceObject(ReportRequest rrequest, PageBean pbean, String key, boolean ismust) {
        if (key == null)
            return null;
        if (Tools.isDefineKey("$", key)) {
            key = Tools.getRealKeyByDefine("$", key);
            return resources.get(rrequest, pbean, key, ismust);
        }
        return null;
    }

    public String getResourceString(ReportRequest rrequest, PageBean pbean, String key, boolean ismust) {
        if (key == null)
            return null;
        if (Tools.isDefineKey("$", key)) {
            key = Tools.getRealKeyByDefine("$", key);
            return resources.getString(rrequest, pbean, key, ismust);
        } else {
            return key;
        }
    }

    public AbsButtonType getResourceButton(ReportRequest rrequest, IComponentConfigBean ccbean, String key,
            Class buttonType) {
        if (key == null)
            return null;
        if (Tools.isDefineKey("$", key)) {
            key = Tools.getRealKeyByDefine("$", key);
        }
        XmlElementBean eleBean = (XmlElementBean) resources.get(rrequest, ccbean.getPageBean(), key, true);
        if (eleBean == null) {
            throw new WabacusConfigLoadingException("" + key + "?");
        }
        AbsButtonType buttonObj = ComponentConfigLoadManager.loadButtonConfig(ccbean, eleBean);
        if (buttonType != null && !buttonType.isInstance(buttonObj)) {
            throw new WabacusConfigLoadingException(
                    "KEY" + key + "??" + buttonType.getName() + "");
        }
        buttonObj.setLabel(getResourceString(rrequest, ccbean.getPageBean(), buttonObj.getLabel(), true));
        return buttonObj;
    }

    public Resources getResources() {
        if (resources == null)
            resources = new Resources();
        return resources;
    }

    public void setResources(Resources resources) {
        this.resources = resources;
    }

    void setMSystemConfig(Map<String, String> systemConfig) {
        mSystemConfig = systemConfig;
    }

    public Map<String, List<AbsDataImportConfigBean>> getMAutoDetectedDataImportBeans() {
        return mAutoDetectedDataImportBeans;
    }

    void setLstDefaultGlobalJavascriptFiles(List<JavascriptFileBean> lstDefaultGlobalJavascriptFiles) {
        this.lstDefaultGlobalJavascriptFiles = lstDefaultGlobalJavascriptFiles;
    }

    void setLstGlobalJavascriptFiles(List<JavascriptFileBean> lstGlobalJavascriptFiles) {
        this.lstGlobalJavascriptFiles = lstGlobalJavascriptFiles;
    }

    void setMLocalJavascriptFiles(Map<String, List<JavascriptFileBean>> localJavascriptFiles) {
        mLocalJavascriptFiles = localJavascriptFiles;
    }

    public List<JavascriptFileBean> getLstDefaultGlobalJavascriptFiles() {
        return lstDefaultGlobalJavascriptFiles;
    }

    public List<JavascriptFileBean> getLstGlobalJavascriptFiles() {
        return lstGlobalJavascriptFiles;
    }

    public void addAutoDetectedDataImportBean(String filepath, AbsDataImportConfigBean autoDetectedDataImportBean) {
        if (filepath == null || filepath.trim().equals("") || autoDetectedDataImportBean == null) {
            return;
        }
        filepath = filepath.trim();
        if (mAutoDetectedDataImportBeans == null) {
            mAutoDetectedDataImportBeans = new HashMap<String, List<AbsDataImportConfigBean>>();
        }
        List<AbsDataImportConfigBean> lstAutoDetectedDataImportBeans = mAutoDetectedDataImportBeans.get(filepath);
        if (lstAutoDetectedDataImportBeans == null) {
            lstAutoDetectedDataImportBeans = new ArrayList<AbsDataImportConfigBean>();
            mAutoDetectedDataImportBeans.put(filepath, lstAutoDetectedDataImportBeans);
        }
        lstAutoDetectedDataImportBeans.add(autoDetectedDataImportBean);
        TimingThread.getInstance().addTask(new TimingDataImportTask());
    }

    public String getSystemConfigValue(String key, String defaultValue) {
        String temp = getSystemConfigValue(key);
        if (temp.equals("")) {
            return defaultValue;
        } else {
            return temp;
        }
    }

    public int getSystemConfigValue(String key, int defaultValue) {
        String temp = getSystemConfigValue(key);
        if (temp.equals("")) {
            return defaultValue;
        } else {
            try {
                return Integer.parseInt(temp);
            } catch (Exception e) {
                e.printStackTrace();
                return defaultValue;
            }
        }
    }

    public long getSystemConfigValue(String key, long defaultValue) {
        String temp = getSystemConfigValue(key);
        if (temp.equals("")) {
            return defaultValue;
        } else {
            try {
                return Long.parseLong(temp);
            } catch (Exception e) {
                e.printStackTrace();
                return defaultValue;
            }
        }
    }

    public boolean getSystemConfigValue(String key, boolean defaultValue) {
        String temp = getSystemConfigValue(key);
        if (temp.equals("")) {
            return defaultValue;
        } else {
            try {
                return Boolean.valueOf(temp).booleanValue();
            } catch (Exception e) {
                e.printStackTrace();
                return defaultValue;
            }
        }
    }

    private String getSystemConfigValue(String key) {
        if (mSystemConfig == null) {
            return "";
        }
        String temp = mSystemConfig.get(key);
        if (temp == null || temp.trim().equals(""))
            return "";
        return temp;
    }

    public PageBean getPageBean(String pageid) {
        if (mReportStructureInfo == null)
            return null;
        return mReportStructureInfo.get(pageid);
    }

    public List<String> getLstAllPageIds() {
        if (this.mReportStructureInfo == null)
            return null;
        List<String> lstResults = new ArrayList<String>();//?list??keySet
        lstResults.addAll(this.mReportStructureInfo.keySet());
        return lstResults;
    }

    public List<PageBean> getLstAllPageBeans() {
        if (this.mReportStructureInfo == null)
            return null;
        List<PageBean> lstResults = new ArrayList<PageBean>();
        for (Entry<String, PageBean> entryTmp : this.mReportStructureInfo.entrySet()) {
            lstResults.add(entryTmp.getValue());
        }
        return lstResults;
    }

    public List<Class> getLstServerValidateClasses() {
        return lstServerValidateClasses;
    }

    public void setLstServerValidateClasses(List<Class> lstServerValidateClasses) {
        this.lstServerValidateClasses = lstServerValidateClasses;
    }

    public AbsContainerType getContainerType(String containername) {
        if (containername == null || containername.trim().equals(""))
            return null;
        containername = containername.trim();
        AbsContainerType containerObj = null;
        if (mContainertypes != null && mContainertypes.size() > 0) {
            containerObj = mContainertypes.get(containername);
        }
        if (containerObj == null) {
            Class c = this.getTypeClass(containername);
            if (c != null) {
                Object obj = AbsComponentType.createComponentTypeObj(c, null, null, null);
                if (!(obj instanceof AbsContainerType)) {
                    throw new WabacusRuntimeException("?" + containername + ""
                            + AbsContainerType.class.getName() + "");
                }
                containerObj = (AbsContainerType) obj;
                if (mContainertypes == null)
                    mContainertypes = new HashMap<String, AbsContainerType>();
                mContainertypes.put(containername, containerObj);
            }
        }
        return containerObj;
    }

    public AbsReportType getReportType(String typename) {
        if (typename == null || typename.trim().equals(""))
            typename = Consts.DEFAULT_KEY;
        typename = typename.trim();
        IReportType reportObj = null;
        if (mReporttypes != null && mReporttypes.size() > 0) {
            reportObj = mReporttypes.get(typename);
        }
        if (reportObj == null) {
            Class c = this.getTypeClass(typename);
            if (c != null) {
                Object obj = AbsComponentType.createComponentTypeObj(c, null, null, null);
                if (!(obj instanceof AbsReportType)) {
                    throw new WabacusRuntimeException(
                            "?" + typename + "AbsReportType");
                }
                reportObj = (IReportType) obj;
                if (mReporttypes == null)
                    mReporttypes = new HashMap<String, IReportType>();
                mReporttypes.put(typename, reportObj);
            }
        }
        if (reportObj == null) {
            throw new WabacusRuntimeException("?" + typename + "");
        }
        return (AbsReportType) reportObj;
    }

    private Class getTypeClass(String configclassname) {
        configclassname = configclassname == null ? "" : configclassname.trim();
        if (configclassname.equals(""))
            return null;
        if (Tools.isDefineKey("class", configclassname)) {
            String realclass = Tools.getRealKeyByDefine("class", configclassname).trim();
            if (realclass.equals(""))
                return null;
            return ConfigLoadManager.currentDynClassLoader.loadClassByCurrentLoader(realclass);
        }
        return null;
    }

    public AbsDataSource getDataSource(String datasource_name) {
        if (datasource_name == null || datasource_name.trim().equals("")) {
            datasource_name = Consts.DEFAULT_KEY;
        }
        datasource_name = datasource_name.trim();
        AbsDataSource datasource = mDataSources.get(datasource_name);
        if (datasource == null) {
            throw new WabacusRuntimeException(
                    "wabacus.cfg.xml?name" + datasource_name + "??");
        }
        return datasource;
    }

    public List<String> getUlstLocalCss(PageBean pbean) {
        if (this.mLocalCss == null)
            return null;
        return mLocalCss.get(pbean.getReportfile_key());
    }

    public void setMLocalCss(Map<String, List<String>> localCss) {
        mLocalCss = localCss;
    }

    public Map<String, List<String>> getMLocalCss() {
        return mLocalCss;
    }

    public Map<String, List<JavascriptFileBean>> getMLocalJavascriptFiles() {
        return mLocalJavascriptFiles;
    }

    public List<JavascriptFileBean> getLstLocalJavascript(PageBean pbean) {
        if (this.mLocalJavascriptFiles == null)
            return null;
        return mLocalJavascriptFiles.get(pbean.getReportfile_key());
    }

    public AbsInputBox getInputBoxTypeByName(String name) {
        if (mInputBoxTypes == null)
            return null;
        AbsInputBox typeObj = null;
        if (name == null || name.trim().equals("")) {
            typeObj = mInputBoxTypes.get(Consts.DEFAULT_KEY);
            if (typeObj == null) {
                throw new WabacusRuntimeException(
                        "???name");
            }
        } else {
            typeObj = mInputBoxTypes.get(name.trim());
            if (typeObj == null) {
                throw new WabacusRuntimeException("?name" + name + "");
            }
        }
        return typeObj;
    }

    public AbsInputBox getInputBoxByType(Class boxTypeClass) {
        if (mInputBoxTypes == null || boxTypeClass == null)
            return null;
        for (Entry<String, AbsInputBox> entryInputBox : this.mInputBoxTypes.entrySet()) {
            if (entryInputBox.getValue().getClass().getName().equals(boxTypeClass.getName()))
                return entryInputBox.getValue();
        }
        return null;
    }

    public void setInputBoxType(String name, AbsInputBox inputbox) {
        mInputBoxTypes.put(name, inputbox);
    }

    public void setMInputBoxTypes(Map<String, AbsInputBox> inputBoxTypes) {
        mInputBoxTypes = inputBoxTypes;
    }

    public Map<String, AbsInputBox> getMInputBoxTypes() {
        return mInputBoxTypes;
    }

    public void setMReportDatasetValueProviders(
            Map<String, AbsReportDataSetValueProvider> mReportDatasetValueTypes) {
        this.mReportDatasetValueProviders = mReportDatasetValueTypes;
    }

    Map<String, AbsReportDataSetValueProvider> getMReportDatasetValueProviders() {
        return mReportDatasetValueProviders;
    }

    public AbsReportDataSetValueProvider getReportDatasetValueProvider(String name) {
        if (this.mReportDatasetValueProviders == null)
            return null;
        AbsReportDataSetValueProvider typeObj;
        if (name == null || name.trim().equals("")) {
            typeObj = mReportDatasetValueProviders.get(Consts.DEFAULT_KEY);
            if (typeObj == null) {
                throw new WabacusRuntimeException(
                        "????name?");
            }
        } else {
            typeObj = mReportDatasetValueProviders.get(name.trim());
            if (typeObj == null) {
                throw new WabacusRuntimeException(
                        "?name" + name + "?");
            }
        }
        return typeObj;
    }

    public void setMCommonDatasetValueProviders(
            Map<String, AbsCommonDataSetValueProvider> commonDatasetValueTypes) {
        this.mCommonDatasetValueProviders = commonDatasetValueTypes;
    }

    Map<String, AbsCommonDataSetValueProvider> getMCommonDatasetValueProviders() {
        return mCommonDatasetValueProviders;
    }

    public AbsCommonDataSetValueProvider getCommonDatasetValueProvider(String name) {
        if (this.mCommonDatasetValueProviders == null)
            return null;
        AbsCommonDataSetValueProvider typeObj;
        if (name == null || name.trim().equals("")) {
            typeObj = mCommonDatasetValueProviders.get(Consts.DEFAULT_KEY);
            if (typeObj == null) {
                throw new WabacusRuntimeException(
                        "????name?");
            }
        } else {
            typeObj = mCommonDatasetValueProviders.get(name.trim());
            if (typeObj == null) {
                throw new WabacusRuntimeException(
                        "?name" + name + "?");
            }
        }
        return typeObj;
    }

    public void setMUpdateDatasetActionProviders(
            Map<String, AbsUpdateActionProvider> mUpdateDatasetActionProviders) {
        this.mUpdateDatasetActionProviders = mUpdateDatasetActionProviders;
    }

    Map<String, AbsUpdateActionProvider> getMUpdateDatasetActionProviders() {
        return mUpdateDatasetActionProviders;
    }

    public AbsUpdateActionProvider getUpdateDatasetActionProvider(String name) {
        if (this.mUpdateDatasetActionProviders == null)
            return null;
        AbsUpdateActionProvider typeObj;
        if (name == null || name.trim().equals("")) {
            typeObj = mUpdateDatasetActionProviders.get(Consts.DEFAULT_KEY);
        } else {
            typeObj = mUpdateDatasetActionProviders.get(name.trim());
        }
        return typeObj;
    }

    public IDataType getDataTypeByName(String name) {
        if (mDataTypes == null)
            return null;
        IDataType typeObj = null;
        if (name == null || name.trim().equals("")) {
            typeObj = mDataTypes.get(Consts.DEFAULT_KEY);
            if (typeObj == null) {
                throw new WabacusRuntimeException(
                        "????name?");
            }
        } else {
            typeObj = mDataTypes.get(name.trim());
            if (typeObj == null) {
                throw new WabacusRuntimeException("?name" + name + "?");
            }
        }
        return typeObj;
    }

    public IDataType getDataTypeByClass(Class typeClass) {
        if (mDataTypes == null)
            return null;
        for (Entry<String, IDataType> entryTypesTmp : mDataTypes.entrySet()) {
            if (entryTypesTmp.getValue().getClass().getName().equals(typeClass.getName())) {
                return entryTypesTmp.getValue();
            }
        }
        return null;
    }

    public Map<String, IDataType> getMDataTypes() {
        return mDataTypes;
    }

    public void setMDataTypes(Map<String, IDataType> dataTypes) {
        mDataTypes = dataTypes;
    }

    public void addGlobalInterceptor(AbsPageInterceptor interceptorObj) {
        if (this.lstGlobalPageInterceptors == null)
            this.lstGlobalPageInterceptors = new ArrayList<AbsPageInterceptor>();
        this.lstGlobalPageInterceptors.add(interceptorObj);
    }

    public List<AbsPageInterceptor> getLstGlobalPageInterceptors(String pageid) {
        List<AbsPageInterceptor> lstResults = new ArrayList<AbsPageInterceptor>();
        if (lstGlobalPageInterceptors == null || lstGlobalPageInterceptors.size() == 0)
            return lstResults;
        for (AbsPageInterceptor tmpInterceptor : lstGlobalPageInterceptors) {
            if (tmpInterceptor.isMatch(pageid))
                lstResults.add(tmpInterceptor);
        }
        return lstResults;
    }

    public List<String> getUlstGlobalCss() {
        return ulstGlobalCss;
    }

    public void addGlobalCss(String css) {
        if (ulstGlobalCss == null)
            ulstGlobalCss = new UniqueArrayList<String>();
        ulstGlobalCss.add(css);
    }

    public void addGlobalCss(List<String> lstcss) {
        if (ulstGlobalCss == null)
            ulstGlobalCss = new UniqueArrayList<String>();
        ulstGlobalCss.addAll(lstcss);
    }

    public void addFileTemplate(String filepath, TemplateBean tplBean) {
        if (this.mFileTemplates == null)
            this.mFileTemplates = new HashMap<String, TemplateBean>();
        mFileTemplates.put(filepath, tplBean);
    }

    public TemplateBean getFileTemplate(String filepath) {
        if (mFileTemplates == null)
            return null;
        return mFileTemplates.get(filepath);
    }

    public TemplateBean getDefaultReportTplBean() {
        if (report_template_defaultbean == null) {//??
            report_template_defaultbean = ComponentConfigLoadAssistant.getInstance()
                    .getStaticTemplateBeanByConfig(null, "${" + Consts.REPORT_TEMPLATE_DEFAULT + "}");
            if (report_template_defaultbean == null) {
                throw new WabacusConfigLoadingException(
                        "??????");
            }
        }
        return report_template_defaultbean;
    }

    public TemplateBean getDefaultDataExportTplBean() {
        if (dataexport_template_defaultbean == null) {
            dataexport_template_defaultbean = ComponentConfigLoadAssistant.getInstance()
                    .getStaticTemplateBeanByConfig(null, "${" + Consts.DATAEXPORT_TEMPLATE_DEFAULT + "}");
            if (dataexport_template_defaultbean == null) {
                throw new WabacusConfigLoadingException(
                        "?????");
            }
        }
        return dataexport_template_defaultbean;
    }

    public TemplateBean getDefaultReportPrintTplBean() {
        if (print_template_defaultbean == null) {
            print_template_defaultbean = ComponentConfigLoadAssistant.getInstance()
                    .getStaticTemplateBeanByConfig(null, "${" + Consts.PRINT_TEMPLATE_DEFAULT + "}");
            if (print_template_defaultbean == null) {
                throw new WabacusConfigLoadingException("??????");
            }
        }
        return print_template_defaultbean;
    }

    public int getPlainexcelSheetsize() {
        if (dataexport_plainexcel_sheetsize == Integer.MIN_VALUE) {
            dataexport_plainexcel_sheetsize = Config.getInstance()
                    .getSystemConfigValue("dataexport-plainexcel-sheetsize", 10000);
        }
        return dataexport_plainexcel_sheetsize;
    }

    public IComponentConfigBean getComponentConfigBeanByGuid(String componentGuid) {
        if (componentGuid == null || componentGuid.trim().equals(""))
            return null;
        componentGuid = componentGuid.trim();
        int idx = componentGuid.lastIndexOf(Consts_Private.GUID_SEPERATOR);
        String pageid = null;
        String componentid = null;
        if (idx <= 0 || componentGuid.endsWith(Consts_Private.GUID_SEPERATOR)) {
            pageid = componentGuid;
        } else {
            pageid = componentGuid.substring(0, idx).trim();
            componentid = componentGuid.substring(idx + Consts_Private.GUID_SEPERATOR.length()).trim();
        }
        if (pageid == null || pageid.trim().equals(""))
            return null;
        PageBean pagebean = getPageBean(pageid);
        if (componentid == null || componentid.trim().equals(""))
            return pagebean;
        return pagebean.getChildComponentBean(componentid, true);
    }

    public ComponentPermissionBean getComponentDefaultPermissionBean(String componentGuid) {
        if (mComponentsDefaultPermissions == null)
            return null;
        if (componentGuid == null || componentGuid.trim().equals(""))
            return null;
        return mComponentsDefaultPermissions.get(componentGuid);
    }

    public void authorize(String componentGuid, String partname, String partid, String permissiontype,
            String permissionvalue) {
        if (mComponentsDefaultPermissions == null)
            mComponentsDefaultPermissions = new HashMap<String, ComponentPermissionBean>();
        ComponentPermissionBean cabean = this.mComponentsDefaultPermissions.get(componentGuid);
        if (cabean == null) {
            IComponentConfigBean ccbean = getComponentConfigBeanByGuid(componentGuid);
            if (ccbean == null)
                throw new WabacusConfigLoadingException(
                        "guid" + componentGuid + "?");
            cabean = new ComponentPermissionBean(ccbean);
            mComponentsDefaultPermissions.put(componentGuid, cabean);
        }
        cabean.authorize(partname, partid, permissiontype, permissionvalue);
    }

    public int checkDefaultPermission(String componentGuid, String partname, String partid, String permissiontype) {
        return checkDefaultPermission(componentGuid, partname, partid, permissiontype, "true");
    }

    public int checkDefaultPermission(String componentGuid, String partname, String partid, String permissiontype,
            String permissionvalue) {
        if (!AuthorizationAssistant.getInstance().isExistPermissiontype(permissiontype))
            return Consts.CHKPERMISSION_UNSUPPORTEDTYPE;
        if (!AuthorizationAssistant.getInstance().isExistValueOfPermissiontype(permissiontype, permissionvalue))
            return Consts.CHKPERMISSION_UNSUPPORTEDVALUE;//??????
        if (componentGuid == null || componentGuid.trim().equals(""))
            return Consts.CHKPERMISSION_EMPTY;
        if (mComponentsDefaultPermissions == null || mComponentsDefaultPermissions.get(componentGuid) == null)
            return Consts.CHKPERMISSION_EMPTY;
        return mComponentsDefaultPermissions.get(componentGuid).checkPermission(partname, partid, permissiontype,
                permissionvalue);
    }

    public void setSkin(HttpServletRequest request, PageBean pbean, String skin) {
        if (pbean != null && pbean.getPersonalizeObj() != null) {
            pbean.getPersonalizeObj().storeSkin(request, pbean, skin);
        } else if (Config.default_pagepersonalize_object != null) {
            Config.default_pagepersonalize_object.storeSkin(request, pbean, skin);
        } else {
            log.warn("???????");
        }
    }

    public void setSkin(HttpServletRequest request, String pageid, String skin) {
        PageBean pbean = null;
        if (pageid != null && !pageid.trim().equals("")) {
            pbean = this.getPageBean(pageid);
            if (pbean == null) {
                throw new WabacusRuntimeException(
                        "?id" + pageid + "?");
            }
        }
        setSkin(request, pbean, skin);
    }

    public String getSkin(HttpServletRequest request, PageBean pbean) {
        String resultSkin = null;
        if (pbean != null && pbean.getPersonalizeObj() != null) {
            resultSkin = pbean.getPersonalizeObj().loadSkin(request, pbean);
            if (resultSkin != null && !resultSkin.trim().equals(""))
                return resultSkin;
            resultSkin = pbean.getPersonalizeObj().loadSkin(request, null);
            if (resultSkin != null && !resultSkin.trim().equals(""))
                return resultSkin;
        }
        if (Config.default_pagepersonalize_object != null) {
            resultSkin = Config.default_pagepersonalize_object.loadSkin(request, pbean);
            if (resultSkin != null && !resultSkin.trim().equals(""))
                return resultSkin;
            if (pbean != null) {
                resultSkin = Config.default_pagepersonalize_object.loadSkin(request, null);
                if (resultSkin != null && !resultSkin.trim().equals(""))
                    return resultSkin;
            }
        }
        return Config.skin;
    }

    public String getSkin(HttpServletRequest request, String pageid) {
        PageBean pbean = null;
        if (pageid != null && !pageid.trim().equals("")) {
            pbean = this.getPageBean(pageid);
            if (pbean == null) {
                throw new WabacusRuntimeException(
                        "??id" + pageid + "?");
            }
        }
        return getSkin(request, pbean);
    }

    public void addSkinConfigProperties(String skinname, Map<String, String> mConfigProperties) {
        if (this.mSkinConfigProperties == null)
            this.mSkinConfigProperties = new HashMap<String, Map<String, String>>();
        this.mSkinConfigProperties.put(skinname, mConfigProperties);
    }

    public String getSkinConfigValue(String skinname, String propertyname) {
        if (this.mSkinConfigProperties == null)
            return null;
        Map<String, String> mSkinConfigProperties = this.mSkinConfigProperties.get(skinname);
        if (mSkinConfigProperties == null)
            return null;
        return mSkinConfigProperties.get(propertyname);
    }
}