/*
 * ICESOFT COMMERCIAL SOURCE CODE LICENSE V 1.1
 *
 * The contents of this file are subject to the ICEsoft Commercial Source
 * Code License Agreement V1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of the
 * License at
 * http://www.icesoft.com/license/commercial-source-v1.1.html
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations under
 * the License.
 *
 * Copyright 2009-2015 ICEsoft Technologies Canada, Corp. All Rights Reserved.
 */

package com.icesoft.facelets;

import java.util.HashSet;

import javax.faces.view.facelets.Tag;
import javax.faces.view.facelets.TagAttribute;
import javax.faces.view.facelets.TagAttributes;
import javax.faces.view.facelets.TagDecorator;

public class HtmlTagDecorator implements TagDecorator {

    public final static String XhtmlNamespace = "http://www.w3.org/1999/xhtml";
    public final static String Namespace = "http://java.sun.com/jsf/html";
    private HashSet HtmlTags = new HashSet();

    /**
     * 
     */
    public HtmlTagDecorator() {
        super();
        //comment out head, body, and form
        HtmlTags.add("a");
        HtmlTags.add("abbr");
        HtmlTags.add("acronym");
        HtmlTags.add("address");
        HtmlTags.add("applet");
        HtmlTags.add("area");
        HtmlTags.add("b");
        HtmlTags.add("base");
        HtmlTags.add("basefont");
        HtmlTags.add("bdo");
        HtmlTags.add("big");
        HtmlTags.add("blockquote");
//        HtmlTags.add("body");
        HtmlTags.add("br");
        HtmlTags.add("button");
        HtmlTags.add("caption");
        HtmlTags.add("center");
        HtmlTags.add("cite");
        HtmlTags.add("code");
        HtmlTags.add("col");
        HtmlTags.add("colgroup");
        HtmlTags.add("dd");
        HtmlTags.add("del");
        HtmlTags.add("dfn");
        HtmlTags.add("dir");
        HtmlTags.add("div");
        HtmlTags.add("dl");
        HtmlTags.add("dt");
        HtmlTags.add("em");
        HtmlTags.add("fieldset");
        HtmlTags.add("font");
//        HtmlTags.add("form");
        HtmlTags.add("frame");
        HtmlTags.add("frameset");
        HtmlTags.add("h1");
        HtmlTags.add("h2");
        HtmlTags.add("h3");
        HtmlTags.add("h4");
        HtmlTags.add("h5");
        HtmlTags.add("h6");
//        HtmlTags.add("head");
        HtmlTags.add("hr");
//        HtmlTags.add("html");
        HtmlTags.add("i");
        HtmlTags.add("iframe");
        HtmlTags.add("img");
        HtmlTags.add("input");
        HtmlTags.add("ins");
        HtmlTags.add("isindex");
        HtmlTags.add("kbd");
        HtmlTags.add("label");
        HtmlTags.add("legend");
        HtmlTags.add("li");
        HtmlTags.add("link");
        HtmlTags.add("map");
        HtmlTags.add("menu");
        HtmlTags.add("meta");
        HtmlTags.add("noframes");
        HtmlTags.add("noscript");
        HtmlTags.add("object");
        HtmlTags.add("ol");
        HtmlTags.add("optgroup");
        HtmlTags.add("option");
        HtmlTags.add("p");
        HtmlTags.add("param");
        HtmlTags.add("pre");
        HtmlTags.add("q");
        HtmlTags.add("s");
        HtmlTags.add("samp");
        HtmlTags.add("script");
        HtmlTags.add("select");
        HtmlTags.add("small");
        HtmlTags.add("span");
        HtmlTags.add("strike");
        HtmlTags.add("strong");
        HtmlTags.add("style");
        HtmlTags.add("sub");
        HtmlTags.add("sup");
        HtmlTags.add("table");
        HtmlTags.add("tbody");
        HtmlTags.add("td");
        HtmlTags.add("textarea");
        HtmlTags.add("tfoot");
        HtmlTags.add("th");
        HtmlTags.add("thead");
        HtmlTags.add("title");
        HtmlTags.add("tr");
        HtmlTags.add("tt");
        HtmlTags.add("u");
        HtmlTags.add("ul");
        HtmlTags.add("var");
        HtmlTags.add("xmp");

    }

    /*
     * (non-Javadoc)
     * 
     * @see com.sun.facelets.tag.TagDecorator#decorate(com.sun.facelets.tag.Tag)
     */
    public Tag decorate(Tag tag) {
        if (tag.getNamespace() != null && !tag.getNamespace().equals(XhtmlNamespace)) {
            return tag;
        }
        if (!shouldDecorate(tag.getLocalName()))  {
            return tag;
        }
        return new Tag(tag.getLocation(), "http://www.icesoft.com/icefaces/xhtml",
                    tag.getLocalName(), tag.getQName(), tag.getAttributes());
    }

    
    public boolean shouldDecorate(String tagName)  {
        return HtmlTags.contains(tagName);
    }
}
