package org.itscool.stylist.tag;

import java.io.IOException;

/**
 * ルート要素をあらわすHtmlタグ情報
 * @author kano
 * @version 1.00A 2006/08/09 新規作成
 */
public class HtmlRootTag extends HtmlTag{
    /**
     * XMLヘッダ
     */
    private String xml="";
    /**
     * エンコード指定
     */
    private String encode;
    /**
     * DTD部
     */
    private String dtd="";
    /**
     * テンプレートの最終更新日
     */
    private long lastModified;
    
    public HtmlRootTag(String encode){
        this.encode = encode;
    }
    
    /**
     * HTMLのノード情報をString形式で取得します
     * @param floor ノードの階層
     * @param tab 階層毎のTAB
     * @return HTMLのノード情報
     */
    public String toString(int floor, String tab){
        String line = System.getProperty("line.separator");
        StringBuffer sb = new StringBuffer();
        
        if(xml != null){
            sb.append(xml).append(line);
        }
        if(dtd != null){
            sb.append(dtd).append(line);
        }
        if( this.size() > 0 ){
            sb.append(super.toString(floor, tab));
        }
        return sb.toString();
    }
    
    /**
     * DTD部を取得します
     * @return DTD部
     */
    public String getDtd() {
        return dtd;
    }
    
    /**
     * DTD部をセットします
     * @param dtd DTD部
     */
    public void setDtd(String dtd) {
        if( dtd == null )dtd = "";
        this.dtd = dtd;
    }
    
    /**
     * XMLヘッダ部を取得します
     * @return XMLヘッダ部
     */
    public String getXml() {
        return xml;
    }
    
    /**
     * XMLヘッダ部をセットします
     * @param xml XMLヘッダ部
     */
    public void setXml(String xml) throws IOException{
        int encStartPos = xml.indexOf("encoding=\"");
        if( encStartPos < 0 ){
            throw new IOException("No defined encoding to xml tag.");
        }
        String stack = xml.substring(encStartPos+("encoding=\"").length());
        int encEndPos = stack.indexOf("\"");
        if( encEndPos < 0 ){
            throw new IOException("Can't convert encoding to xml tag.");
        }
        String encode = stack.substring(0, encEndPos);
        this.setEncode(encode);
        this.xml = xml;
    }
    
    /**
     * エンコード指定を取得します
     * @return エンコード指定
     */
    public String getEncode() {
        return encode;
    }
    
    /**
     * エンコード指定をセットします
     * @param encode エンコード指定
     */
    public void setEncode(String encode) {
        this.encode = encode;
    }

    public long getLastModified() {
        return lastModified;
    }

    public void setLastModified(long lastModified) {
        this.lastModified = lastModified;
    }
}
