blob: 51d693d046498f2d50b773c28da481ba34af80b6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.html.core.internal.contentmodel;
/**
* Factory of ComplexTypeDefinition.
*/
final class ComplexTypeDefinitionFactory {
private static ComplexTypeDefinitionFactory instance = null;
private java.util.Hashtable definitions = null;
// constants for complex type name
/** for ADDRESS. */
public final static String CTYPE_ADDRESS = "CTYPE_ADDRESS";//$NON-NLS-1$
/** CDATA content. No ComplexTypeDefinition instance shuld be created. */
public final static String CTYPE_CDATA = "CTYPE_CDATA";//$NON-NLS-1$
/** col group content. COL* */
public final static String CTYPE_COLUMN_GROUP = "CTYPE_COLUMN_GROUP";//$NON-NLS-1$
/** for DL. */
public final static String CTYPE_DEFINITION_LIST = "CTYPE_DEFINITION_LIST";//$NON-NLS-1$
/** for DETAILS */
public final static String CTYPE_DETAILS_CONTAINER = "CTYPE_DETAILS_CONTAINER";//$NON-NLS-1$
/** for EMBED. */
public final static String CTYPE_EMBED = "CTYPE_EMBED";//$NON-NLS-1$
/** empty content. No ComplexTypeDefinition instance should be created. */
public final static String CTYPE_EMPTY = "CTYPE_EMPTY";//$NON-NLS-1$
/** for FIELDSET. */
public final static String CTYPE_FIELDSET = "CTYPE_FIELDSET";//$NON-NLS-1$
/** for FRAMESET. */
public final static String CTYPE_FRAMESET = "CTYPE_FRAMESET";//$NON-NLS-1$
/** flow content. (%flow;)* */
public final static String CTYPE_FLOW_CONTAINER = "CTYPE_FLOW_CONTAINER";//$NON-NLS-1$
/** html content. HEAD, (FRAMESET|BODY) */
public final static String CTYPE_HTML = "CTYPE_HTML";//$NON-NLS-1$
/** head content. TITLE & ISINDEX? & BASE? */
public final static String CTYPE_HEAD = "CTYPE_HEAD";//$NON-NLS-1$
/** inline content. (%inline;)* */
public final static String CTYPE_INLINE_CONTAINER = "CTYPE_INLINE_CONTAINER";//$NON-NLS-1$
/** list item container. (LI)+ */
public final static String CTYPE_LI_CONTAINER = "CTYPE_LI_CONTAINER";//$NON-NLS-1$
/** for MAP. */
public final static String CTYPE_MAP = "CTYPE_MAP";//$NON-NLS-1$
/** noframes content. */
public final static String CTYPE_NOFRAMES_CONTENT = "CTYPE_NOFRAMES_CONTENT";//$NON-NLS-1$
/** for OPTGROUP. */
public final static String CTYPE_OPTION_CONTAINER = "CTYPE_OPTION_CONTAINER";//$NON-NLS-1$
/** param container. For OBJECT/APPLET. */
public final static String CTYPE_PARAM_CONTAINER = "CTYPE_PARAM_CONTAINER";//$NON-NLS-1$
/** PCDATA content. No ComplexTypeDefinition instance shuld be created. */
public final static String CTYPE_PCDATA = "CTYPE_PCDATA";//$NON-NLS-1$
/** for SELECT. */
public final static String CTYPE_SELECT = "CTYPE_SELECT";//$NON-NLS-1$
/** table content. CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+ */
public final static String CTYPE_TABLE = "CTYPE_TABLE";//$NON-NLS-1$
/** table cell contaier. (TH|TD)+ */
public final static String CTYPE_TCELL_CONTAINER = "CTYPE_TCELL_CONTAINER";//$NON-NLS-1$
/** table record container. (TR)+ */
public final static String CTYPE_TR_CONTAINER = "CTYPE_TR_CONTAINER";//$NON-NLS-1$
/** heading group container. (H1|h2|H3|H4|H5|H6)+ */
public final static String CTYPE_HEADING_CONTAINER = "CTYPE_HGROUP_CONTAINER"; //$NON-NLS-1$
/** media content. (AUDIO|VIDEO) */
public final static String CTYPE_MEDIA_ELEMENT = "CTYPE_MEDIA";//$NON-NLS-1$
/** for DATALIST. */
public final static String CTYPE_DATALIST = "CTYPE_DATALIST";//$NON-NLS-1$
/** for FIGURE. */
public final static String CTYPE_FIGURE = "CTYPE_FIGURE";//$NON-NLS-1$
/** for RUBY. */
public final static String CTYPE_RUBY = "CTYPE_RUBY";//$NON-NLS-1$
/**
* ComplexTypeDefinitionFactory constructor comment.
*/
private ComplexTypeDefinitionFactory() {
super();
definitions = new java.util.Hashtable();
}
/**
* Factory method for ComplexTypeDefinition.
* Each instance created in this method must be registered into
* the map with its name.
* @param definitionName java.lang.String
* @param elementCollection ElementCollection
*/
public ComplexTypeDefinition createTypeDefinition(String definitionName, ElementCollection elementCollection) {
ComplexTypeDefinition[] defs = null;
if (definitions.containsKey(definitionName)) {
defs = (ComplexTypeDefinition[]) definitions.get(definitionName);
for (int i = 0; i < defs.length; i++) {
if (defs[i].collection == elementCollection)
return defs[i];
}
}
else {
// initialize a new definition
defs = new ComplexTypeDefinition[0];
}
ComplexTypeDefinition def = null;
if (definitionName == CTYPE_ADDRESS) {
def = new CtdAddress(elementCollection);
}
else if (definitionName == CTYPE_COLUMN_GROUP) {
def = new CtdColumnGroup(elementCollection);
}
else if (definitionName == CTYPE_DATALIST) {
def = new CtdDatalist(elementCollection);
}
else if (definitionName == CTYPE_DEFINITION_LIST) {
def = new CtdDl(elementCollection);
}
else if (definitionName == CTYPE_DETAILS_CONTAINER) {
def = new CtdDetails(elementCollection);
}
else if (definitionName == CTYPE_EMBED) {
def = new CtdEmbed(elementCollection);
}
else if (definitionName == CTYPE_FIELDSET) {
def = new CtdFieldset(elementCollection);
}
else if (definitionName == CTYPE_FIGURE) {
def = new CtdFigure(elementCollection);
}
else if (definitionName == CTYPE_FLOW_CONTAINER) {
def = new CtdFlowContainer(elementCollection);
}
else if (definitionName == CTYPE_FRAMESET) {
def = new CtdFrameset(elementCollection);
}
else if (definitionName == CTYPE_HEAD) {
def = new CtdHead(elementCollection);
}
else if (definitionName == CTYPE_HEADING_CONTAINER) {
def = new CtdHeadingContainer(elementCollection);
}
else if (definitionName == CTYPE_HTML) {
def = new CtdHtml(elementCollection);
}
else if (definitionName == CTYPE_INLINE_CONTAINER) {
def = new CtdInlineContainer(elementCollection);
}
else if (definitionName == CTYPE_LI_CONTAINER) {
def = new CtdLiContainer(elementCollection);
}
else if (definitionName == CTYPE_MAP) {
def = new CtdMap(elementCollection);
}
else if (definitionName == CTYPE_MEDIA_ELEMENT) {
def = new CtdMediaElement(elementCollection);
}
else if (definitionName == CTYPE_NOFRAMES_CONTENT) {
def = new CtdNoframesContent(elementCollection);
}
else if (definitionName == CTYPE_OPTION_CONTAINER) {
def = new CtdOptionContainer(elementCollection);
}
else if (definitionName == CTYPE_PARAM_CONTAINER) {
def = new CtdParamContainer(elementCollection);
}
else if (definitionName == CTYPE_RUBY) {
def = new CtdRuby(elementCollection);
}
else if (definitionName == CTYPE_SELECT) {
def = new CtdSelect(elementCollection);
}
else if (definitionName == CTYPE_TABLE) {
def = new CtdTable(elementCollection);
}
else if (definitionName == CTYPE_TCELL_CONTAINER) {
def = new CtdTableCellContainer(elementCollection);
}
else if (definitionName == CTYPE_TR_CONTAINER) {
def = new CtdTrContainer(elementCollection);
}
else {
def = null;
}
if (def == null)
return null; // fail to create.
ComplexTypeDefinition[] temp = defs;
defs = new ComplexTypeDefinition[defs.length + 1];
System.arraycopy(temp, 0, defs, 0, temp.length);
defs[temp.length] = def;
definitions.put(definitionName, defs);
return def;
}
/**
* For singleton.
*/
public synchronized static ComplexTypeDefinitionFactory getInstance() {
if (instance != null)
return instance;
instance = new ComplexTypeDefinitionFactory();
return instance;
}
}