/*******************************************************************************
 * Copyright (c) 2004 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.contentmodel.chtml;



import org.eclipse.wst.html.core.contentmodel.HTMLElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;

/**
 * This class is intended to represent a complex type definition
 * in XML Schema.<br>
 */
abstract class ComplexTypeDefinition {

	protected CMGroupImpl content = null;
	protected ElementCollection collection = null;
	protected String primaryCandidateName = null;

	/**
	 * ComplexTypeDefinition constructor comment.
	 */
	public ComplexTypeDefinition(ElementCollection elementCollection) {
		super();
		collection = elementCollection;
		createContent();
	}

	/**
	 * Create an actual content model.
	 * This method should be called once and only once in the constructor.<br>
	 */
	protected abstract void createContent();

	/**
	 * @return org.eclipse.wst.xml.core.internal.contentmodel.CMGroup
	 */
	public CMGroup getContent() {
		return content;
	}

	/**
	 * @return int; Should be one of ANY, EMPTY, ELEMENT, MIXED, PCDATA, CDATA,
	 * those are defined in CMElementDeclaration.
	 */
	/* NOTE: Do we need LOGICAL type?
	 * -- 3/7/2001
	 */
	public abstract int getContentType();

	/**
	 * Get content hint.
	 * @return com.ibm.sed.contentmodel.html.HTMLElementDeclaration
	 */
	public HTMLElementDeclaration getPrimaryCandidate() {
		if (primaryCandidateName == null)
			return null;
		return (HTMLElementDeclaration) collection.getNamedItem(primaryCandidateName);
	}

	/**
	 * Name of complex type definition.
	 * Each singleton must know its own name.
	 * All names should be defined in
	 * {@link <code>ComplexTypeDefinitionFactory</code>} as constants.<br>
	 * @return java.lang.String
	 */
	public abstract String getTypeName();
}