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

📄 distributeseventpropertyhandler.java

📁 intra_mart是日本NDD公司开发的著名企业应用解决方案中间件。集成了J2ee服务器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 嶌惉擔丗 2004/09/15
 */
package jp.co.intra_mart.framework.base.event;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

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

/**
 * 傾僾儕働乕僔儑儞枅偺EventPropertyHandler傪屇傃弌偟傑偡丅
 * <BR>僾儘僷僥傿僼傽僀儖偼傾僾儕働乕僔儑儞枅偵暘妱偝傟傑偡丅偙偺応崌偺僼傽僀儖柤偼乽<I>僾儗僼傿僢僋僗</I>_<I>傾僾儕働乕僔儑儞ID</I>.properties乿丄傑偨偼乽<I>僾儗僼傿僢僋僗</I>_<I>傾僾儕働乕僔儑儞ID</I>.xml乿偱偡丅
 * <BR>僾儘僷僥傿僼傽僀儖偺僾儗僼傿僢僋僗偼{@link jp.co.intra_mart.framework.system.property.PropertyManager#getPropertyHandlerParams(String)}偱僉乕偵{@link EventManager#EVENT_PROPERTY_HANDLER_KEY}傪巜掕偟偨偲偒偵庢摼偝傟傞僷儔儊乕僞偺偆偪{@link #DEFAULT_BUNDLE_NAME}偱庢摼偝傟傞傕偺偲側傝傑偡丅
 * 巜掕偟側偐偭偨応崌偺僾儘僷僥傿僼傽僀儖偺僾儗僼傿僢僋僗偼{@link #DEFAULT_BUNDLE_NAME_PARAM}偱帵偝傟傞傕偺偱偡丅
 * @author INTRAMART
 * @version 1.0
 */
public class DistributesEventPropertyHandler implements EventPropertyHandler {

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

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

    /**
     * 僨僼僅儖僩
     */
    public static final String PARAM_DEFAULT = "default";

    /**
     * 傾僾儕働乕僔儑儞
     */
    public static final String PARAM_APPLICATION = "application";

    /**
     * 僷儔儊乕僞
     */
    public static final String PARAM_APPLICATION_PARAM = "param";

    /**
     * 僋儔僗
     */
    public static final String PARAM_APPLICATION_CLASS = "class";
    
    /**
     * 僾儘僷僥傿僼傽僀儖偺僼傽僀儖僷僗偺僷儔儊乕僞柤
     */
    public static final String PARAM_FILE_DIR = "file_dir";

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

    /**
     * 僾儘僷僥傿僼傽僀儖偺僶儞僪儖偺僷儔儊乕僞柤
     */
    public static final String PARAM_BUNDLE = "bundle";

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

	/**
	 * 傾僾儕働乕僔儑儞偛偲偺僀儀儞僩儕僜乕僗忣曬偑愝掕偝傟偰偄傞儕僜乕僗僶儞僪儖
	 */
	private Map bundles;

	/**
	 * 慜張棟梡僀儀儞僩僩儕僈忣曬偺儅僢僾
	 */
	private Map eventTriggers;

	/**
	 * 屻張棟梡僀儀儞僩僩儕僈忣曬偺儅僢僾
	 * 
	 * since 4.3
	 */
	private Map postEventTriggers;


    /**
     * DistributesEventPropertyHandler傪怴婯偵惗惉偟傑偡丅
     */
    public DistributesEventPropertyHandler() {
        setBundlePrefix(null);
        setApplicationBundles(new HashMap());
        setEventTriggers(new HashMap());
        setPostEventTriggers(new HashMap());
    }

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

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


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

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

	/**
	 * 傾僾儕働乕僔儑儞僶儞僪儖偐傜僴儞僪儔偺儕僜乕僗忣曬傪庢摼偟傑偡丅
	 * 
	 * @return 僴儞僪儔偺儕僜乕僗忣曬
	 * @since
	 * 
	 */
	private Object getApplicationBundle( String application ) {
        Object obj = this.bundles.get( application );
        if ( obj == null ) {
            obj = this.bundles.get(PARAM_DEFAULT);
        }
        return obj;
	}
	/**
	 * 僀儀儞僩僩儕僈忣曬偺儅僢僾傪愝掕偟傑偡丅
	 * 
	 * @param eventTriggers 僀儀儞僩僩儕僈忣曬偺儅僢僾
	 * @since 3.2
	 * 
	 */
	private void setEventTriggers(Map eventTriggers) {
		this.eventTriggers = eventTriggers;
	}

	/**
	 * 僀儀儞僩僩儕僈忣曬偺儅僢僾傪庢摼偟傑偡丅
	 * 
	 * @return 僀儀儞僩僩儕僈忣曬偺儅僢僾
	 * @since 3.2
	 * 
	 */
	private Map getEventTriggers() {
		return this.eventTriggers;
	}

	/**
	 * 僀儀儞僩僩儕僈忣曬偺儅僢僾傪愝掕偟傑偡丅
	 * 
	 * @param eventTriggers 僀儀儞僩僩儕僈忣曬偺儅僢僾
	 * @since 4.3
	 * 
	 */
	private void setPostEventTriggers(Map eventTriggers) {
		this.postEventTriggers = eventTriggers;
	}

	/**
	 * 僀儀儞僩僩儕僈忣曬偺儅僢僾傪庢摼偟傑偡丅
	 * 
	 * @return 僀儀儞僩僩儕僈忣曬偺儅僢僾
	 * @since 4.3
	 * 
	 */
	private Map getPostEventTriggers() {
		return this.postEventTriggers;
	}

    /**
     * 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗僶儞僪儖傪庢摼偟傑偡丅
     *
     * @param application 傾僾儕働乕僔儑儞ID
     * @return 傾僾儕働乕僔儑儞ID偵奩摉偡傞儕僜乕僗僶儞僪儖
     * @throws EventPropertyException 儕僜乕僗僶儞僪儖偺庢摼帪偵椺奜偑敪惗
     * @since 3.2
     */
    private ResourceBundle getResourceBundle(String application)
        throws EventPropertyException {

        ResourceBundle result;

        result = (ResourceBundle)getApplicationBundles().get(application);
        if (result == null) {
            synchronized (this) {
                result =
                    (ResourceBundle)getApplicationBundles().get(application);
                if (result == null) {
                    result = createResourceBundle(application);
                    getApplicationBundles().put(application, result);
                }
            }
        }

        return result;
    }

    /**
     * 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗僶儞僪儖傪惗惉偟傑偡丅
     *
     * @param application 傾僾儕働乕僔儑儞ID
     * @return 傾僾儕働乕僔儑儞ID偵奩摉偡傞儕僜乕僗僶儞僪儖
     * @throws EventPropertyException 儕僜乕僗僶儞僪儖偺庢摼帪偵椺奜偑敪惗
     * @since 3.2
     */
    private ResourceBundle createResourceBundle(String application)
        throws EventPropertyException {

        try {
            return  ResourceBundle.getBundle(
				getPropertyPackage( application ) + getBundlePrefix() + "_" + getApplicationID( application ));
        } catch (MissingResourceException e) {
            throw new EventPropertyException(e.getMessage(), e);
        }
    }

    /**
     * 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗僶儞僪儖偐傜僉乕偱巜掕偝傟偨僾儘僷僥傿傪庢摼偟傑偡丅
     *
     * @param application 傾僾儕働乕僔儑儞ID
     * @param key 僉乕
     * @return 巜掕偝傟偨僉乕偵奩摉偡傞僾儘僷僥傿
     * @throws MissingResourceException 僾儘僷僥傿偺庢摼帪偵椺奜偑敪惗
     * @throws EventPropertyException 僾儘僷僥傿偺庢摼偵幐攕
     */
    private String getString(String application, String key)
        throws MissingResourceException, EventPropertyException {

        ResourceBundle bundle;
        String result;

        bundle = getResourceBundle(application);
        result = bundle.getString(key);

        return result;
    }

    /**
     * 僾儘僷僥傿僴儞僪儔傪弶婜壔偟傑偡丅
     *
     * @param params 弶婜僷儔儊乕僞
     * @throws PropertyHandlerException 僾儘僷僥傿僴儞僪儔偺弶婜壔帪偵椺奜偑敪惗
     */
    public void init(PropertyParam[] params) throws PropertyHandlerException {
        String bundleName = null;

        if (params != null) {
            for (int i = 0; i < params.length; i++) {
                if (params[i].getName().equals(DEFAULT_BUNDLE_NAME_PARAM)) {
                    bundleName = params[i].getValue();
                }
            }
            // 僨僼僅儖僩偺Handler僋儔僗傪庢摼偟傑偡丅
            getDefaultHandler(params);

            // 傾僾儕働乕僔儑儞枅偺Handler僋儔僗傪庢摼偟傑偡丅
			getApplicationHandler(params);

        }
        if (bundleName == null) {
            bundleName = DEFAULT_BUNDLE_NAME;
        }

        setBundlePrefix(bundleName);
    }

    /**
     * Default偺Handler忣曬傪庢摼偟傑偡丅 
     *
     * @param params 弶婜僷儔儊乕僞
     */
    private void getDefaultHandler(PropertyParam[] params) throws PropertyHandlerException{

		List keys = new ArrayList();
		HashMap values = new HashMap();

		try {
			// "default"偱峣傝崬傒傑偡丅
			for ( int i = 0; i < params.length; i++ ) {
				if ( params[i].getName().indexOf(PARAM_DEFAULT) != -1 ) {
				    keys.add(params[i].getName());
					values.put(params[i].getName(), params[i].getValue());
				}
			}

			setApplicationBundles( PARAM_DEFAULT, keys, values );

		} catch (Exception e) {
			throw new PropertyHandlerException();		    
		}
	}

    /**
     * Application枅偺Handler忣曬傪庢摼偟傑偡丅 
     *
     * @param params 弶婜僷儔儊乕僞
     */
    private void getApplicationHandler(PropertyParam[] params) throws PropertyHandlerException{

		List keys = new ArrayList();
		Map values = new HashMap();

		// "application"偱峣傝崬傒傑偡丅
		for ( int i = 0; i < params.length; i++ ) {
			if ( params[i].getName().indexOf(PARAM_APPLICATION) != -1 ) {
			    keys.add( params[i].getName() ); 
				values.put( params[i].getName(), params[i].getValue() );
			}
		}

		// applicationID偺儕僗僩傪庢摼偟傑偡
		String[] appIds = getApplicationIdList(keys);
		
		// applicationID傪傕偲偵丄class丄property傪庢摼偟傑偡
		for ( int i = 0; i < appIds.length; i++ ) {

		    setApplicationBundles( appIds[i], keys, values );

		}

    }

	/**
	 * Handler僋儔僗傪惗惉偟丄Map偵曐帩偟傑偡丅
	 * 
	 * @param id
	 * @param list
	 * @param map
	 */
	private void setApplicationBundles(String id, List keys, Map values) throws PropertyHandlerException{
	    

		// 僴儞僪儔僋儔僗柤傪庢摼偟傑偡丅
	    String className = getApplicationHandlerClass(id, keys, values);

	    Object obj = null;
	    try {
	        // 僋儔僗傪惗惉偟傑偡丅
            obj = Class.forName(className).newInstance();

	    } catch (Exception ex) {

			throw new PropertyHandlerException();		    
        }

		// 僷儔儊乕僞傪庢摼偟傑偡丅
		PropertyParam[] params = getApplicationHandlerProperty(id, keys, values);
		
	    // Handler僋儔僗傪惗惉偟Map偵曐帩偟傑偡丅
		Map returnMap = new HashMap();
	    if ( obj instanceof DefaultEventPropertyHandler ) {

⌨️ 快捷键说明

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