/*******************************************************************************
 * Copyright (c) 2004, 2005 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;



import java.util.Arrays;

import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;

/**
 * Complex type definition for <code>HTML</code>.<br>
 * Content Model:
 * HEAD, (FRAMESET|BODY)<br>
 */
final class CtdHtml extends ComplexTypeDefinition {

	/**
	 */
	public CtdHtml(ElementCollection elementCollection) {
		super(elementCollection);
		primaryCandidateName = HTML40Namespace.ElementName.HEAD;
	}

	/**
	 * (%html.content;).
	 * %html.content; is HEAD, (FRAMESET | BODY).
	 */
	protected void createContent() {
		if (content != null)
			return; // already created.
		if (collection == null)
			return;

		// ( )
		content = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
		if (content == null)
			return;

		// HEAD
		CMNode edec = collection.getNamedItem(HTML40Namespace.ElementName.HEAD);
		if (edec != null)
			content.appendChild(edec);

		// ( | )
		CMGroupImpl group = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
		content.appendChild(group);

		// FRAMESET, BODY
		String[] names = {HTML40Namespace.ElementName.FRAMESET, HTML40Namespace.ElementName.BODY};
		collection.getDeclarations(group, Arrays.asList(names).iterator());

		// since BODY start and end are omissable
		// adding valid children of BODY here under HTML
		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=97342
	    edec = collection.getNamedItem(HTML40Namespace.ElementName.MAP);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.PRE);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.BDO);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.INPUT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.P);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.NOSCRIPT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.I);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.BUTTON);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.LABEL);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.U);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.H6);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.CENTER);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.BASEFONT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.S);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.BLOCKQUOTE);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.H3);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.UL);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.B);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SELECT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.Q);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.STRIKE);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SCRIPT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.ABBR);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.BIG);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.H1);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.IMG);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.ACRONYM);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.DEL);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.NOFRAMES);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.TEXTAREA);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.H2);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.FONT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.OBJECT);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.KBD);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.IFRAME);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.HR);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.H4);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.DIR);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SAMP);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.INS);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.H5);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SUP);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.A);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.DFN);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.ISINDEX);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.DL);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.VAR);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.FIELDSET);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.TABLE);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.BR);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.TT);
		if (edec != null)
			content.appendChild(edec);

		edec = collection.getNamedItem(HTML40Namespace.ElementName.APPLET);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.OL);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SMALL);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.CITE);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.FORM);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.DIV);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.CODE);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SPAN);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.SUB);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.EM);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.MENU);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.ADDRESS);
		if (edec != null)
			content.appendChild(edec);

	    edec = collection.getNamedItem(HTML40Namespace.ElementName.STRONG);
		if (edec != null)
			content.appendChild(edec);
	}

	/**
	 * Element content.
	 */
	public int getContentType() {
		return CMElementDeclaration.ELEMENT;
	}

	public String getTypeName() {
		return ComplexTypeDefinitionFactory.CTYPE_HTML;
	}
}
