⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlservicepropertyhandler.java

📁 intra_mart是日本NDD公司开发的著名企业应用解决方案中间件。集成了J2ee服务器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/*
 * XmlServicePropertyHandler.java
 *
 * Created on 2002/01/07, 14:15
 */
package jp.co.intra_mart.framework.base.service;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.StringTokenizer;

import javax.xml.parsers.ParserConfigurationException;

import jp.co.intra_mart.framework.system.property.PropertyHandlerException;
import jp.co.intra_mart.framework.system.property.PropertyParam;
import jp.co.intra_mart.framework.util.XMLDocumentProducer;

import org.xml.sax.SAXException;

/**
 * 僒乕價僗偺愝掕忣曬偵愙懕偡傞僾儘僷僥傿僴儞僪儔偱偡丅 <BR>
 * 
 * XML宍幃偱婰弎偝傟偨僾儘僷僥傿忣曬傪撉傒庢傝傑偡丅XML僼傽僀儖偼傾僾儕働乕僔儑儞枅偵暘妱偝傟傑偡丅偙偺応崌偺僼傽僀儖柤偼乽 <I>僾儗僼傿僢僋僗
 * </I>_ <I>傾僾儕働乕僔儑儞ID </I>.xml乿偱偡丅傑偨丄傾僾儕働乕僔儑儞偵埶懚偟側偄乽 <I>僾儗僼傿僢僋僗 </I>.xml乿偑偁傝傑偡丅
 * <BR>
 * XML僼傽僀儖偺僾儗僼傿僢僋僗偼
 * {@link jp.co.intra_mart.framework.system.property.PropertyManager#getPropertyHandlerParams(String)}
 * 偱僉乕偵 {@link ServiceManager#SERVICE_PROPERTY_HANDLER_KEY}
 * 傪巜掕偟偨偲偒偵庢摼偝傟傞僷儔儊乕僞偺偆偪 {@link #DEFAULT_BUNDLE_NAME}偱庢摼偝傟傞傕偺偲側傝傑偡丅
 * 巜掕偟側偐偭偨応崌偺僾儘僷僥傿僼傽僀儖偺僾儗僼傿僢僋僗偼 {@link #DEFAULT_BUNDLE_NAME_PARAM}偱帵偝傟傞傕偺偱偡丅
 * <BR>
 * 僾儘僷僥傿偺専嶕弴偼丄傾僾儕働乕僔儑儞偛偲偺僾儘僷僥傿僼傽僀儖乽 <I>僾儗僼傿僢僋僗 </I>_ <I>傾僾儕働乕僔儑儞ID
 * </I>.xml乿偑桪愭偝傟傑偡丅奩摉偡傞僾儘僷僥傿偑尒偮偐傜側偄応崌丄堷偒懕偄偰乽 <I>僾儗僼傿僢僋僗 </I>.xml乿傪専嶕偟傑偡丅
 * 
 * @author INTRAMART
 * @since 5.0
 */
public class XmlServicePropertyHandler implements ServicePropertyHandler {

    /**
     * 僨僼僅儖僩偺儕僜乕僗僶儞僪儖柤偺僾儗僼傿僢僋僗
     */
    public static final String DEFAULT_BUNDLE_NAME = "service-config";

    /**
     * 儕僜乕僗僶儞僪儖柤偺僷儔儊乕僞柤
     */
    public static final String DEFAULT_BUNDLE_NAME_PARAM = "bundle";

    /**
     * 僾儘僷僥傿僼傽僀儖偺嵞撉傒崬傒壜擻偺僷儔儊乕僞柤
     */
    public static final String PARAM_DYNAMIC = "dynamic";

    /**
     * 僨乕僞儕僜乕僗忣曬偑愝掕偝傟偰偄傞儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗
     */
    private String xmlPrefix;

    /**
     * 嵞愝掕壜擻僼儔僌
     */
    private boolean dynamic;

    /**
     * 傾僾儕働乕僔儑儞偛偲偺僒乕價僗儕僜乕僗忣曬偺廤崌
     */
    private Map models = new HashMap();

    /**
     * 嫟捠偺僒乕價僗儕僜乕僗忣曬偺廤崌
     */
    private Map commonServices = new HashMap();

    /**
     * 傾僾儕働乕僔儑儞偛偲偺僒乕價僗忣曬偑愝掕偝傟傞儌僨儖傪嶌惉偡傞僆僽僕僃僋僩
     */
    private ServiceConfigModelProducer producer;

    private final Locale END_LOCALE = new Locale("", "");

    /**
     * XmlServicePropertyHandler傪怴婯偵惗惉偟傑偡丅
     */
    public XmlServicePropertyHandler() {
        setXMLPrefix(null);
        producer = new ServiceConfigModelProducer();
    }

    /**
     * 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗傪愝掕偟傑偡丅
     * 
     * @param xmlPrefix 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗
     */
    private void setXMLPrefix(String xmlPrefix) {
        this.xmlPrefix = xmlPrefix;
    }

    /**
     * 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗傪庢摼偟傑偡丅
     * 
     * @return 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗
     */
    private String getXMLPrefix() {
        return this.xmlPrefix;
    }

    /**
     * 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗儌僨儖偺廤崌傪愝掕偟傑偡丅
     * 
     * @param applicationBundles 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗僶儞僪儖偺廤崌
     */
    private void setApplicationModels(Map applicationModels) {
        this.models = applicationModels;
    }

    /**
     * 傾僾儕働乕僔儑儞ID偲儘働乕儖偐傜儕僜乕僗儌僨儖傪愝掕偟傑偡丅
     * 
     * @param application 傾僾儕働乕僔儑儞ID
     * @return 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗僶儞僪儖偺廤崌
     */
    private void setApplicationSerivceModel(String application,
            ServiceModel model) {

        setApplicationServiceModel(application, model, (Locale) null);
    }

    /**
     * 傾僾儕働乕僔儑儞ID偲儘働乕儖偐傜儕僜乕僗儌僨儖傪愝掕偟傑偡丅
     * 
     * @param application 傾僾儕働乕僔儑儞ID
     * @param 儕僜乕僗儌僨儖
     * @param locale 儘働乕儖
     * @return 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗僶儞僪儖偺廤崌
     */
    private void setApplicationServiceModel(String application,
            ServiceModel model, Locale locale) {

        Map appMap = (Map) this.models.get(locale);
        if (appMap == null) {
            appMap = new HashMap();
            this.models.put(locale, appMap);
        }
        appMap.put(application, model);
    }

    /**
     * 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗儌僨儖偺廤崌傪庢摼偟傑偡丅
     * 
     * @return 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗僶儞僪儖偺廤崌
     */
    private Map getModels() {
        return this.models;
    }

    /**
     * 嫟捠偺儕僜乕僗儌僨儖傪愝掕偟傑偡丅
     * 
     * @param commonModel 嫟捠偺儕僜乕僗僶儞僪儖
     */
    private void setCommonServiceModel(Locale key,
            CommonServiceModel commonService) {
        commonServices.put(key, commonService);
    }

    /**
     * 嫟捠偺儕僜乕僗儌僨儖傪庢摼偟傑偡丅
     * 
     * @return 嫟捠偺儕僜乕僗僶儞僪儖
     * @throws ServicePropertyException 嫟捠偺儕僜乕僗僶儞僪儖庢摼帪偵椺奜偑敪惗
     */
    private CommonServiceModel getCommonServiceModel()
            throws ServicePropertyException {
        return getCommonServiceModel(new Locale("", ""));
    }

    /**
     * 嫟捠偺儕僜乕僗儌僨儖傪庢摼偟傑偡丅
     * 
     * @param locale 儘働乕儖
     * @return 嫟捠偺儕僜乕僗僶儞僪儖
     * @throws ServicePropertyException 嫟捠偺儕僜乕僗僶儞僪儖庢摼帪偵椺奜偑敪惗
     */
    private CommonServiceModel getCommonServiceModel(Locale locale)
            throws ServicePropertyException {
        synchronized (commonServices) {
        	CommonServiceModel model = _getCommonServiceModel(locale);
        	if(model == null) {
                String message = null;
                try {
                    message =
                        ResourceBundle
                            .getBundle("jp.co.intra_mart.framework.base.service.i18n")
                            .getString("Xml.FileNotFound");
                } catch (MissingResourceException ex) {
                }
                throw new ServicePropertyException(message);
        	}
            return model;
        }
    }

    /**
     * 嫟捠偺儕僜乕僗儌僨儖傪庢摼偟傑偡丅
     * 
     * @param locale 儘働乕儖
     * @return 嫟捠偺儕僜乕僗僶儞僪儖
     * @throws ServicePropertyException 嫟捠偺儕僜乕僗僶儞僪儖庢摼帪偵椺奜偑敪惗
     */
    private CommonServiceModel _getCommonServiceModel(Locale locale)
            throws ServicePropertyException {
        CommonServiceModel commonService = null;
        if(!isDynamic()) {
            commonService = (CommonServiceModel) commonServices.get(locale);
        }
        if (commonService == null) {
            if (checkCommonServiceFileExist(locale)) {
                commonService = createCommonServiceModel(locale);

                // 懡尵岅懳墳
                if (!locale.equals(END_LOCALE)) {
                    Locale parentLocale = getParentLocale(locale);
                    CommonServiceModel parent = _getCommonServiceModel(parentLocale);
                    commonService.setParent(parent);
                }
                commonServices.put(locale, commonService);
            } else {
                if (!locale.equals(END_LOCALE)) {
                    Locale parentLocale = getParentLocale(locale);
                    commonService = _getCommonServiceModel(parentLocale);
                } else {
                    // 儘働乕儖偵忣曬偑new Locale("","");偺忬懺偺帪
                    return null;
                }
            }
        }

        return commonService;
    }

    /**
     * 巜掕偝傟偨儘働乕儖偺嫟捠儕僜乕僗僼傽僀儖偑懚嵼偡傞偐挷傋傞丅
     * 
     * @param locale
     */
    private boolean checkCommonServiceFileExist(Locale locale) {
        return XMLDocumentProducer.isFileExist(getXMLPrefix(), locale);
    }

    /**
     * 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗儌僨儖傪惗惉偟傑偡丅
     * 
     * @param application 傾僾儕働乕僔儑儞ID
     * @return 傾僾儕働乕僔儑儞ID偵奩摉偡傞儕僜乕僗儌僨儖
     * @throws ServicePropertyException 儕僜乕僗儌僨儖偺庢摼帪偵椺奜偑敪惗
     */
    private CommonServiceModel createCommonServiceModel(Locale locale)
            throws ServicePropertyException {
        try {
            CommonServiceModelProducer producer = new CommonServiceModelProducer();
            String fileName = XMLDocumentProducer.getFileName(getXMLPrefix(),
                    locale);
            CommonServiceModel commonModel = producer
                    .createCommonServiceModel(fileName);

            return commonModel;
        } catch (ParserConfigurationException e) {
            throw new ServicePropertyException(e.getMessage(), e);
        } catch (SAXException e) {
            throw new ServicePropertyException(e.getMessage(), e);
        } catch (IOException e) {
            throw new ServicePropertyException(e.getMessage(), e);
        } catch (IllegalArgumentException e) {
            throw new ServicePropertyException(e.getMessage(), e);
        }
    }

    /**
     * 傾僾儕働乕僔儑儞ID偲儘働乕儖偐傜儕僜乕僗儌僨儖傪庢摼偟傑偡丅
     * 
     * @param application 傾僾儕働乕僔儑儞ID
     * @return 傾僾儕働乕僔儑儞偛偲偺儕僜乕僗僶儞僪儖偺廤崌
     */
    private ServiceConfigModel getSerivceConfigModel(String application)
            throws ServicePropertyException {
        return getServiceConfigModel(application, new Locale("", ""));
    }

    /**
     * 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗儌僨儖傪庢摼偟傑偡丅
     * 
     * @param application 傾僾儕働乕僔儑儞ID
     * @param locale 儘働乕儖
     * @return 傾僾儕働乕僔儑儞ID偵奩摉偡傞儕僜乕僗僶儞僪儖
     * @throws ServicePropertyException 儕僜乕僗僶儞僪儖偺庢摼帪偵椺奜偑敪惗
     */
    private ServiceConfigModel getServiceConfigModel(String application)
            throws ServicePropertyException {
        return getServiceConfigModel(application, new Locale("", ""));
    }

    /**
     * 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗儌僨儖傪庢摼偟傑偡丅
     * 
     * @param application 傾僾儕働乕僔儑儞ID
     * @param locale 儘働乕儖
     * @return 傾僾儕働乕僔儑儞ID偵奩摉偡傞儕僜乕僗僶儞僪儖
     * @throws ServicePropertyException 儕僜乕僗僶儞僪儖偺庢摼帪偵椺奜偑敪惗
     */
    private ServiceConfigModel getServiceConfigModel(String application,
            Locale locale) throws ServicePropertyException {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -