/*
 * $Revision: 1.4 $ $Date: 2005/12/17 16:22:27 $
 * Copyright (C) 2005 SUGIMOTO Ken-ichi
 * 作成日： 2005/7/29
 */

package feat.v1.impl.template;

import feat.v1.FeatRuntimeException;
import feat.v1.StringUtil;
import feat.v1.template.HTMLNode;
import feat.v1.template.HTMLRemark;
import feat.v1.template.NodeNotFoundException;
import feat.v1.template.RemarkTextException;

/**
 * コメントを表すクラス。
 */
public class HTMLRemarkImpl extends HTMLNodeImpl implements HTMLRemark {

    private String text;

    /**
     * 空のコメントノードを作成する。
     */
    HTMLRemarkImpl() {
        setDomNode(new DOMCommentImpl(this));
    }

    /**
     * 内容を指定してコメントノードを作成する。
     * @param str "&lt;!--", "--&gt;"を含まないコメントの内容のテキスト。
     * @throws RemarkTextException テキストの中に"--"が含まれている
     */
    HTMLRemarkImpl(String str) throws RemarkTextException {
        this();
        if ( str != null ) {
            if ( str.indexOf("--") > -1 ) {
                throw new RemarkTextException();
            }
            this.text = str;
        }
    }

    public void setText(String str) throws RemarkTextException {
        if ( str != null ) {
            if ( str.indexOf("--") > -1 ) {
                throw new RemarkTextException();
            }
            this.text = str;
        }
        else
            this.text = null;
    }

    public String getText() {
        return text;
    }

    public void addText(String str) throws RemarkTextException {
        if ( str != null ) {
            if ( str.indexOf("--") > -1 ) {
                throw new RemarkTextException();
            }
            this.text += str;
        }
    }

    public String toString() {
        if ( text != null )
            return StringUtil.unescapeHTMLText(text);
        else
            return "";
    }

    // HTMLNodeの実装 -----------------------------------------------------------

    public String getValue() {
        return getText();
    }

    public HTMLNode copy(boolean deep) {
        try {
            return new HTMLRemarkImpl(text);
        }
        catch (RemarkTextException ex) {
            throw new FeatRuntimeException(ex);
        }
    }

    public StringBuffer toHTML(StringBuffer buf) {
        if ( text != null )
            buf.append("<!--").append(text).append("-->");
        return buf;
    }

    public int getNodeType() {
        return NODETYPE_REMARK;
    }

    public HTMLNode getFirstChild() throws NodeNotFoundException {
        throw new NodeNotFoundException();
    }

    public void setFirstChild(HTMLNode child) {
    }

}

