/*
* GNU LESSER GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Contact info: lobochief@users.sourceforge.net
*/
/*
* Created on Oct 8, 2005
*/
package com.nvarghese.beowulf.common.cobra.html.domimpl;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.w3c.dom.DOMException;
import org.w3c.dom.html2.HTMLElement;
class ElementFactory implements Serializable {
private final Map builders = new HashMap(80);
private ElementFactory() {
// This sets up builders for each known element tag.
Map builders = this.builders;
builders.put("HTML", new HTMLElementBuilder.Html());
builders.put("TITLE", new HTMLElementBuilder.Title());
builders.put("BASE", new HTMLElementBuilder.Base());
HTMLElementBuilder div = new HTMLElementBuilder.Div();
builders.put("DIV", div);
builders.put("DL", div);
builders.put("BODY", new HTMLElementBuilder.Body());
builders.put("CENTER", new HTMLElementBuilder.Center());
builders.put("CAPTION", new HTMLElementBuilder.Center());
builders.put("PRE", new HTMLElementBuilder.Pre());
builders.put("P", new HTMLElementBuilder.P());
HTMLElementBuilder bq = new HTMLElementBuilder.Blockquote();
builders.put("BLOCKQUOTE", bq);
builders.put("DD", bq);
builders.put("SPAN", new HTMLElementBuilder.Span());
builders.put("SCRIPT", new HTMLElementBuilder.Script());
builders.put("IMG", new HTMLElementBuilder.Img());
builders.put("STYLE", new HTMLElementBuilder.Style());
builders.put("LINK", new HTMLElementBuilder.Link());
builders.put("A", new HTMLElementBuilder.Anchor());
builders.put("ANCHOR", new HTMLElementBuilder.Anchor());
builders.put("TABLE", new HTMLElementBuilder.Table());
builders.put("TD", new HTMLElementBuilder.Td());
builders.put("TH", new HTMLElementBuilder.Th());
builders.put("TR", new HTMLElementBuilder.Tr());
builders.put("FORM", new HTMLElementBuilder.Form());
builders.put("INPUT", new HTMLElementBuilder.Input());
builders.put("BUTTON", new HTMLElementBuilder.Button());
builders.put("TEXTAREA", new HTMLElementBuilder.Textarea());
builders.put("SELECT", new HTMLElementBuilder.Select());
builders.put("OPTION", new HTMLElementBuilder.Option());
builders.put("FRAMESET", new HTMLElementBuilder.Frameset());
builders.put("FRAME", new HTMLElementBuilder.Frame());
builders.put("IFRAME", new HTMLElementBuilder.IFrame());
builders.put("UL", new HTMLElementBuilder.Ul());
builders.put("OL", new HTMLElementBuilder.Ol());
builders.put("LI", new HTMLElementBuilder.Li());
builders.put("HR", new HTMLElementBuilder.Hr());
builders.put("BR", new HTMLElementBuilder.Br());
builders.put("OBJECT", new HTMLElementBuilder.HtmlObject());
builders.put("APPLET", new HTMLElementBuilder.Applet());
builders.put("EMBED", new HTMLElementBuilder.NonStandard());
builders.put("FONT", new HTMLElementBuilder.Font());
builders.put("BASEFONT", new HTMLElementBuilder.BaseFont());
builders.put("TT", new HTMLElementBuilder.Tt());
builders.put("CODE", new HTMLElementBuilder.Code());
builders.put("SMALL", new HTMLElementBuilder.Small());
builders.put("BIG", new HTMLElementBuilder.Big());
builders.put("B", new HTMLElementBuilder.Strong());
builders.put("STRONG", new HTMLElementBuilder.Strong());
builders.put("U", new HTMLElementBuilder.Underline());
builders.put("STRIKE", new HTMLElementBuilder.Strike());
builders.put("SUP", new HTMLElementBuilder.Sup());
builders.put("SUB", new HTMLElementBuilder.Sub());
HTMLElementBuilder em = new HTMLElementBuilder.Em();
builders.put("I", em);
builders.put("EM", em);
builders.put("CITE", em);
HTMLElementBuilder heading = new HTMLElementBuilder.Heading();
builders.put("H1", heading);
builders.put("H2", heading);
builders.put("H3", heading);
builders.put("H4", heading);
builders.put("H5", heading);
builders.put("H6", heading);
}
private static ElementFactory instance = new ElementFactory();
public static ElementFactory getInstance() {
return instance;
}
public final HTMLElement createElement(HTMLDocumentImpl document, String name) throws DOMException {
String normalName = name.toUpperCase();
// No need to synchronize; read-only map at this point.
HTMLElementBuilder builder = (HTMLElementBuilder) this.builders.get(normalName);
if (builder == null) {
// TODO: IE would assume name is html text here?
HTMLElementImpl element = new HTMLElementImpl(name);
element.setOwnerDocument(document);
return element;
} else {
return builder.create(document, name);
}
}
}