/*******************************************************************************
 *  Copyright (c) 2011 Oracle. 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: 
 *  	Oracle - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.jaxb.core.context;


/**
 * Represents a JAXB containment mappings (xml element/attribute)
 * <p>
 * Provisional API: This interface is part of an interim API that is still
 * under development and expected to change significantly before reaching
 * stability. It is available at this early stage to solicit feedback from
 * pioneering adopters on the understanding that any code that uses this API
 * will almost certainly be broken (repeatedly) as the API evolves.
 * 
 * @version 3.0
 * @since 3.0
 */
public interface JaxbContainmentMapping
		extends JaxbAttributeMapping, XmlAdaptable {
	
	// ***** schema component ref *****
	
	JaxbSchemaComponentRef getSchemaComponentRef();
	
	
	// ***** required *****
	
	static String SPECIFIED_REQUIRED_PROPERTY = "specifiedRequired"; //$NON-NLS-1$
	
	static boolean DEFAULT_REQUIRED = false;
	
	boolean isRequired();
	
	boolean isDefaultRequired();
	
	Boolean getSpecifiedRequired();
	
	void setSpecifiedRequired(Boolean specifiedRequired);
	
	
	// ********** xml schema type ************
	/**
	 * Return whether this class has an XmlSchemaType annotation)
	 */
	boolean hasXmlSchemaType();

	/**
	 * Return the xml schema type or null.
	 */
	XmlSchemaType getXmlSchemaType();

	XmlSchemaType addXmlSchemaType();
	void removeXmlSchemaType();
		String XML_SCHEMA_TYPE = "xmlSchemaType"; //$NON-NLS-1$


	/********** XmlList **********/
	XmlList getXmlList();
	XmlList addXmlList();
	void removeXmlList();
		String XML_LIST_PROPERTY = "xmlList"; //$NON-NLS-1$


	/********** XmlID **********/
	XmlID getXmlID();
	XmlID addXmlID();
	void removeXmlID();
		String XML_ID_PROPERTY = "xmlID"; //$NON-NLS-1$


	/********** XmlIDREF **********/
	XmlIDREF getXmlIDREF();
	XmlIDREF addXmlIDREF();
	void removeXmlIDREF();
		String XML_IDREF_PROPERTY = "xmlIDREF"; //$NON-NLS-1$


	/********** XmlAttachmentRef **********/
	XmlAttachmentRef getXmlAttachmentRef();
	XmlAttachmentRef addXmlAttachmentRef();
	void removeXmlAttachmentRef();
		String XML_ATTACHMENT_REF_PROPERTY = "xmlAttachmentRef"; //$NON-NLS-1$

}