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

📄 eventmodelproducer.java

📁 intra_mart是日本NDD公司开发的著名企业应用解决方案中间件。集成了J2ee服务器
💻 JAVA
字号:
/*
 * 嶌惉擔: 2003/12/23
 */
package jp.co.intra_mart.framework.base.event;

import java.io.IOException;
import java.util.Collection;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.TreeMap;

import javax.xml.parsers.ParserConfigurationException;

import jp.co.intra_mart.framework.util.XMLDocumentProducer;
import jp.co.intra_mart.framework.util.XMLNode;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

/**
 * 僀儀儞僩忣曬傪嶌惉偡傞僋儔僗偱偡丅
 * @author INTRAMART
 * @version 1.0
 * 
 */
public class EventModelProducer {
    private String application;
    private String key;

    /**
     * 僀儀儞僩儌僨儖傪嶌惉偟傑偡丅
     * @param fileName
     * @return
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException
     */
     EventGroupModel createEventModel(
        String application,
        String key,
        String prefix)
        throws
            ParserConfigurationException,
            SAXException,
            IOException,
            EventPropertyException,
            IllegalArgumentException {
        this.application = application;
        this.key = key;

        EventGroupModel model = null;
        XMLDocumentProducer producer = new XMLDocumentProducer();
        
        String fileName = (getPropertyPackage(application)
			+ prefix + "-"
			+ getApplicationID(application));
        
        Document doc = producer.getDocument(fileName);
        Node node = producer.getRoot(doc);
        XMLNode root = new XMLNode(node);
        XMLNode groupNode = selectXmlNodeByKey(root, key);
        model = getEventGroupModel(groupNode);
        return model;
    }

	/**
	 * EventGroupModel傪庢摼偟傑偡丅
	 * @param groupNode
	 * @return EventGroupModel 
	 * @throws EventPropertyException
	 */
    private EventGroupModel getEventGroupModel(XMLNode groupNode)
        throws EventPropertyException {
        EventGroupModel model = new EventGroupModel();
        model.setEventKey(groupNode.getString(EventGroupModel.P_ID_EVENT_KEY));
        model.setEventName(
            groupNode.getString(EventGroupModel.P_ID_EVENT_NAME));

        model.setEventFactory(getEventFactoryModel(groupNode));
        model.setPreTriggerInfos(getPreTriggerInfos(application, groupNode));
        model.setPostTriggerInfos(getPostTriggerInfos(application, groupNode));
        return model;
    }

    /**
     * 僲乕僪偺拞偐傜event-key偺抣偑丄targetKey偺抣傪堦抳偡傞暔傪庢傝弌偟傑偡丅
     * @param node xml僼傽僀儖偺儖乕僩僲乕僪
     * @param targetKey	僀儀儞僩僉乕
     * @return	result 僀儀儞僩僌儖乕僾
     */
    private XMLNode selectXmlNodeByKey(XMLNode node, String targetKey)
        throws EventPropertyException {
        XMLNode[] groups = node.select(EventGroupModel.ID);
        XMLNode groupNode = null;
        for (int i = 0; i < groups.length; i++) {
            String key = groups[i].getString(EventGroupModel.P_ID_EVENT_KEY);
            if (targetKey.equals(key)) {
                groupNode = groups[i];
                break;
            }
        }
        if (groupNode == null) {
            throw new EventPropertyException(
                "application = " + application + ", key = " + targetKey);
        }
        return groupNode;
    }

    /**
     * EventFactoryModel傪庢摼偟傑偡丅
     * @param eventGroupNode 僀儀儞僩僌儖乕僾僲乕僪
     * @return EventFactoryModel 僀儀儞僩僼傽僋僩儕
     * @throws EventPropertyException
     */
    private EventFactoryModel getEventFactoryModel(XMLNode eventGroupNode)
        throws EventPropertyException {
        EventFactoryModel factory = new EventFactoryModel();
        factory.setFactoryName(getFactoryName(eventGroupNode));
        factory.setFactoryParams(getEventFactoryParams(eventGroupNode));
        return factory;
    }

    /**
     * 僌儖乕僾僲乕僪偑傜僀儀儞僩僼傽僋僩儕乕儕僗僫乕偺弶婜僷儔儊乕僞傪庢傝弌偟傑偡丅
     * @param groupNode丂僌儖乕僾僲乕僪
     * @return	factoryParams 僀儀儞僩僼傽僋僩儕乕儕僗僫乕偺弶婜僷儔儊乕僞丅弶婜僷儔儊乕僞偑愝掕偝傟偰偄側偄偲偒偼挿偝侽偺攝楍傪曉偡丅
     * @throws EventPropertyException
     */
    private EventListenerFactoryParam[] getEventFactoryParams(XMLNode groupNode)
        throws EventPropertyException {
        EventListenerFactoryParam[] factoryParams;

        //僌儖乕僾僲乕僪偐傜僼傽僋僩儕乕僷儔儊乕僞僲乕僪偺堦棗傪庢傝弌偡丅
        XMLNode[] paramNodes =
            groupNode.select(
                EventFactoryModel.ID
                    + "/"
                    + EventFactoryModel.P_ID_FACTORY_PARAM);

        if (paramNodes != null) {
            factoryParams = new EventListenerFactoryParam[paramNodes.length];
            for (int i = 0; i < paramNodes.length; i++) {
                factoryParams[i] = new EventListenerFactoryParam();
                factoryParams[i].setName(
                    paramNodes[i].getString(EventFactoryModel.P_ID_PARAM_NAME));
                factoryParams[i].setValue(
                    paramNodes[i].getString(
                        EventFactoryModel.P_ID_PARAM_VALUE));

                //僷儔儊乕僞柤偐僷儔儊乕僞抣偺偳偪傜偐偑null偺帪偼椺奜傪敪惗偝偣傞丅
                if (factoryParams[i].getName() == null
                    || factoryParams[i].getValue() == null) {
                    String message = null;
                    try {
                        message =
                            ResourceBundle
                                .getBundle("jp.co.intra_mart.framework.base.event.i18n")
                                .getString("ResourceBundleEventPropertyHandlerUtil.FailedToGetFactoryParameter");
                    } catch (MissingResourceException ex) {
                    }
                    throw new EventPropertyException(
                        message
                            + " : application = "
                            + application
                            + ", key = "
                            + groupNode.getString(
                                EventGroupModel.P_ID_EVENT_KEY));
                }
            }
        } else {
            //弶婜僷儔儊乕僞偑愝掕偝傟偰偄側偄偲偒偼丄挿偝僛儘偺攝楍傪曉偡.
            factoryParams = new EventListenerFactoryParam[0];
        }
        return factoryParams;
    }

    /**丂
     * 僀儀儞僩慜僩儕僈忣曬傪庢摼偟傑偡丅
     * @param groupNode
     * @return 僀儀儞僩慜僩儕僈乕偺忣曬丅愝掕偝傟偰偄側偄応崌偼丄撪梕偑偐傜偺Collection偑曉偝傟傞丅
     * @throws EventPropertyException
     */
    private Collection getPreTriggerInfos(String application, XMLNode groupNode)
        throws EventPropertyException {
        TreeMap infos = new TreeMap();
        XMLNode[] triggerNodes = groupNode.select(EventGroupModel.P_ID_PRE_TRIGGER);
        if (triggerNodes != null) {
            for (int i = 0; i < triggerNodes.length; i++) {
                EventTriggerInfo info = new EventTriggerInfo();
                info.setNumber(i + 1);
                // 僀儀儞僩僩儕僈偺僋儔僗柤傪愝掕偡傞
                String triggerClass =
                    triggerNodes[i].getString(
                        EventGroupModel.P_ID_TRIGGER_CLASS);
                if (triggerClass == null || triggerClass.equals("")) {
                    // 僀儀儞僩僩儕僈柤傪庢摼偱偒側偄応崌椺奜傪敪惗偝偣傞丅
                    String message = null;
                    try {
                        message =
                            ResourceBundle
                                .getBundle("jp.co.intra_mart.framework.base.event.i18n")
                                .getString("ResourceBundleEventPropertyHandlerUtil.TriggerNotDeclared");
                    } catch (MissingResourceException ex) {
                    }
                    throw new EventPropertyException(
                        message
                            + " : application = "
                            + application
                            + ", key = "
                            + groupNode.getString(
                                EventGroupModel.P_ID_EVENT_KEY));
                }
                info.setName(triggerClass);

                //僀儀儞僩僩儕僈乕偵忣曬傪捛壛偡傞丅
                infos.put(new Integer(i), info);
            }
        }
        return infos.values();
    }

    /**丂
     * 僀儀儞僩屻僩儕僈忣曬傪庢摼偟傑偡丅
     * @param groupNode
     * @return 僀儀儞僩屻僩儕僈乕偺忣曬丅愝掕偝傟偰偄側偄応崌偼丄撪梕偑偐傜偺Collection偑曉偝傟傞丅
     * @throws EventPropertyException
     */
    private Collection getPostTriggerInfos(String application, XMLNode groupNode)
        throws EventPropertyException {
        TreeMap infos = new TreeMap();
        XMLNode[] triggerNodes = groupNode.select(EventGroupModel.P_ID_POST_TRIGGER);
        if (triggerNodes != null) {
            for (int i = 0; i < triggerNodes.length; i++) {
                EventTriggerInfo info = new EventTriggerInfo();
                info.setNumber(i + 1);
                // 僀儀儞僩僩儕僈偺僋儔僗柤傪愝掕偡傞
                String triggerClass =
                    triggerNodes[i].getString(
                        EventGroupModel.P_ID_TRIGGER_CLASS);
                if (triggerClass == null || triggerClass.equals("")) {
                    // 僀儀儞僩僩儕僈柤傪庢摼偱偒側偄応崌椺奜傪敪惗偝偣傞丅
                    String message = null;
                    try {
                        message =
                            ResourceBundle
                                .getBundle("jp.co.intra_mart.framework.base.event.i18n")
                                .getString("ResourceBundleEventPropertyHandlerUtil.TriggerNotDeclared");
                    } catch (MissingResourceException ex) {
                    }
                    throw new EventPropertyException(
                        message
                            + " : application = "
                            + application
                            + ", key = "
                            + groupNode.getString(
                                EventGroupModel.P_ID_EVENT_KEY));
                }
                info.setName(triggerClass);

                //僀儀儞僩僩儕僈乕偵忣曬傪捛壛偡傞丅
                infos.put(new Integer(i), info);
            }
        }
        return infos.values();
    }
    
    /**
     * 僀儀儞僩儕僗僫僼傽僋僩儕柤傪庢摼偟傑偡丅 
     * @param groupNode
     * @return	僀儀儞僩儕僗僫乕僼傽僋僩儕乕偺僋儔僗柤傪曉偡丅
     * @throws EventPropertyException 僀儀儞僩儕僗僫乕僼傽僋僩儕乕偑愝掕偝傟偨側応崌偼丄椺奜傪敪惗偝偣傞丅
     */
    private String getFactoryName(XMLNode groupNode)
        throws EventPropertyException {
        String name =
            groupNode.getString(
                EventFactoryModel.ID
                    + "/"
                    + EventFactoryModel.P_ID_FACTORY_CLASS);
        if (name == null || name.trim().equals("")) {
            String message = null;
            try {
                message =
                    ResourceBundle
                        .getBundle("jp.co.intra_mart.framework.base.event.i18n")
                        .getString("ResourceBundleEventPropertyHandlerUtil.FacotryClassNotDeclared");
            } catch (MissingResourceException e) {
            }
            throw new EventPropertyException(
                message
                    + " : application = "
                    + application
                    + ", key = "
                    + groupNode.getString(EventGroupModel.P_ID_EVENT_KEY));
        }
        return name;

    }

    /**
	 * properties僼傽僀儖偑懚嵼偡傞僷僢働乕僕傪庢摼偟傑偡丅
	 * 僷僢働乕僕壔偝傟偰偄側偄応崌偼嬻暥帤傪曉媝偟傑偡丅
	 *  
	 * @param application
	 * @return 僷僢働乕僕
     * @since 2004.09.13
	 */
    private String getPropertyPackage( String application ) {
        String[] paramAry = application.split("[.]");
		StringBuffer buf = new StringBuffer();
		if ( paramAry.length > 1 ) {
			for ( int i = 0; i < paramAry.length - 1; i++ ) {
			    buf.append(paramAry[i]);
			    buf.append('/');
			}
		}
        return buf.toString();
	}

    /**
	 * 傾僾儕働乕僔儑儞ID傪庢摼偟傑偡丅
	 * 
	 * @param application
	 * @return 傾僾儕働乕僔儑儞ID
     * @since 2004.09.13
	 */
    private String getApplicationID( String application ) {
        String[] paramAry = application.split("[.]");
	    String id = paramAry[paramAry.length - 1];
        return id;
	}
}

⌨️ 快捷键说明

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