/**
 * Exportelement.java
 */

package jp.co.nri.rid.export;

import  java.util.*;
import org.w3c.dom.*;
import jp.co.nri.rid.xml.*;
import jp.co.iti.fagot.util.*;

/**
 * CSV,SVGエキスポート用エレメント定義
 */
public class Exportelement{

    /**
     *　コンストラクタ
     */
    public  Exportelement(Element element){
        myElement   =   element;
    }

    public  Element element(){
        return myElement;
    }

    /**
     * Element作成
     * @param String name エレメント名
     * @return element
     */
    public Exportelement add(String name){
        Element ele = myElement.getOwnerDocument().createElement(name);
        Exportelement element = new Exportelement(ele);
        if(null==element)   return null;
        
        myElement.appendChild(element.element());
        return element;
    }
    
    /**
     * Element作成
     * @param String     name      エレメント名
     * @param Attributes attribute 属性
     * @return element
     */
    public Exportelement add(String name ,Attributes attributes){

        Exportelement element = add(name);
        if(null == element) return null;
        
        if(null != attributes)  element.attributes(attributes);
        
        return element;
    }

    /**
     * 属性セット 
     * @param String name  属性名
     * @param String value 値
     */
    public void attribute(String name ,String value){

        if(null==name)  return;
        if(null==value)             myElement.removeAttribute(name);
        else if(0>=value.length())  myElement.removeAttribute(name);
        else                        myElement.setAttribute(name ,value);
    }

    /** 
     * 属性の値抽出
     * @param String name 属性名
     * @return 値 
     */
    public String attribute(String name){

        String attribute = myElement.getAttribute(name);

        if(0<attribute.trim().length()){
            return attribute;
        }
        return null;
    }

    /**
     * 属性設定
     * @param Attributes attributes　属性 
     * @return attribute(name, value)
     */
    public void attributes(Attributes attributes){

        if(null==attributes)    return;
        
        Attribute[] a = attributes.attributes();
        if(null==a) return;
        
        for(int i = 0;i < a.length;i++){
            attribute(a[i].name ,a[i].value);
        }
    }

    public Element[] lister(String name) {

        NodeList list = myElement.getElementsByTagName(name);
        if (list==null) return null;
        int size = list.getLength();
        Element[] result = new Element[size];
        for(int i = 0; i < size; i++) {
            result[i] = (Element)list.item(i);
        }
        return (result);
    }

    /**
     * Unitに対する子の検索
     * @param name Unit名
     */
    public Exportelement child(String name){

        NodeList list = myElement.getChildNodes();

        for(int i = 0; i < list.getLength(); i++){
            Node node = list.item(i);
            if(Node.ELEMENT_NODE != node.getNodeType())    continue;
            if(!name.equals(node.getNodeName()))           continue;
            
            return new Exportelement((Element)node);
        }
        return null;
    }

    /**
     * 子ノードのチェック
     * @param name  エレメント名
     * @return Exportelement
     */
    public Exportelement[] children(String name){

        NodeList list = myElement.getChildNodes();
        
        Vector vec = new Vector();

        for(int i = 0; i < list.getLength(); i++){
            Node node = list.item(i);
            if(Node.ELEMENT_NODE != node.getNodeType())    continue;
            if(!name.equals(node.getNodeName()))           continue;
            vec.add(new Exportelement((Element)node));
        }
        if(0>=vec.size())   return null;

        //最初の子をreturnする
        return (Exportelement[])vec.toArray(new Exportelement[0]);
    }    
    
    protected   Exportdocument   myDocument;
    protected   Element         myElement;
}