package org.itscool.weber.io;

import java.io.IOException;
import java.util.HashMap;

import org.itscool.commons.document.XmlConfigReader;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * weber-config.xmlファイルの&lt;messages&gt;要素を解析するクラスです
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2004/11/1
 */
public class MessageConfigReader extends XmlConfigReader{
    
    /**
     * XMLファイルから&lt;roles&gt;要素を解析します<br>
     * 解析結果はnodeListにセットします<br>
     * @param hashMap XMLの解析結果
    */
    protected void doCreate(HashMap hashMap) throws IOException{
        /* ルートタグ名を取得 */
        Element root = document.getDocumentElement();
        if( root == null ){
            String err = "Can not root element at weber-message.xml(" + 
                getClass().getName()+")";
            throw new IOException(err);
        }
        /* action-mappings の取得*/
        NodeList rolesList = root.getElementsByTagName("messages");
        if( rolesList != null ){
            Node roles = rolesList.item(0);
            if( roles != null ){
                createMessages(roles, hashMap);
            }
        }
    }
    
    /**
     * &lt;message&gt;要素を解析します
     * @param roles &lt;massages&gt;要素
     * @param hashMap 解析後の&lt;massages&gt;要素を追加するノードリスト
     * @throws Exception
     */
    protected void createMessages(Node roles, HashMap hashMap){
        NodeList rolesChilds = roles.getChildNodes();
        
        for( int i = 0; i < rolesChilds.getLength(); i++) {
            Node message = rolesChilds.item(i);
            if( message.getNodeName().equals("message")){
                createMessage(message, hashMap);
            }
        }
    }
    
    /**
     * &lt;message&gt;要素の属性を解析します
     * @param message &lt;message&gt;要素
     * @param hashMap 解析後の&lt;message&gt;要素を追加するノードリスト
     * @throws Exception
     */
    protected void createMessage(Node message, HashMap hashMap){
        NamedNodeMap attributes = message.getAttributes();
        Node key = attributes.getNamedItem("key");
        Node value = attributes.getNamedItem("value");
        hashMap.put( key.getNodeValue(), value.getNodeValue() );
        
    }
}
