/*******************************************************************************
 * Copyright (c) 2002, 2005 Object Factory Inc.
 * 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:
 *		Object Factory Inc. - Initial implementation
 *******************************************************************************/
package org.eclipse.ant.internal.ui.dtd;

import org.eclipse.ant.internal.ui.dtd.schema.Nfm;

/**
 * Content model. This is the printable version of the model. The walkable version is the IDfm.
 * 
 * @author Bob Foster
 */
public interface IModel {

	public static final int UNKNOWN = 0;
	public static final int SEQUENCE = 1;
	public static final int CHOICE = 2;
	public static final int LEAF = 4;

	public static final int UNBOUNDED = Integer.MAX_VALUE;

	/**
	 * @return one of SEQUENCE, CHOICE, LEAF
	 */
	public int getKind();

	/**
	 * @return one of 0 or 1.
	 */
	public int getMinOccurs();

	/**
	 * @return one of 1 or UNBOUNDED.
	 */
	public int getMaxOccurs();

	/**
	 * @return if SEQUENCE or CHOICE return array of sub-models; otherwise undefined.
	 */
	public IModel[] getContents();

	/**
	 * @return if LEAF return atom; otherwise undefined.
	 */
	public IAtom getLeaf();

	/**
	 * @return if SEQUENCE or CHOICE return "," and "|", respectively; otherwise undefined. Useful when printing model.
	 */
	public String getOperator();

	/**
	 * @return one of "", "?", "*" or "+". Useful when printing model.
	 */
	public String getQualifier();

	/**
	 * Convert content model to string representation.
	 */
	public String stringRep();

	/**
	 * Convert the model to an Nfm on demand.
	 * 
	 * @return Nfm
	 */
	public Nfm toNfm();
}
