/*******************************************************************************
 * Copyright (c) 2007, 2008 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.core.context.orm;

import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.context.persistence.MappingFileRef;
import org.eclipse.jpt.core.resource.orm.OrmResource;

/**
 * 
 * 
 * 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.
 */
public interface OrmXml extends OrmJpaContextNode, JpaStructureNode
{
	
	MappingFileRef getParent();
	
	// **************** persistence *******************************************
	
	/**
	 * String constant associated with changes to the entity-mappings property
	 */
	public final static String ENTITY_MAPPINGS_PROPERTY = "entityMappingsProperty";
	
	/** 
	 * Return the content represented by the root of the orm.xml file.
	 * This may be null.
	 */
	EntityMappings getEntityMappings();
	
	/**
	 * Add a entity-mappings node to the orm.xml file and return the object 
	 * representing it.
	 * Throws {@link IllegalStateException} if a entity-mappings node already exists.
	 */
	EntityMappings addEntityMappings();
	
	/**
	 * Remove the entity-mappings node from the orm.xml file.
	 * Throws {@link IllegalStateException} if a persistence node does not exist.
	 */
	void removeEntityMappings();
	
	PersistenceUnitDefaults getPersistenceUnitDefaults();
	
	/**
	 * Return the OrmPersistentType listed in this mapping file
	 * with the given fullyQualifiedTypeName.  Return null if none exists.
	 */
	OrmPersistentType getPersistentType(String fullyQualifiedTypeName);

	// **************** updating **********************************************
	
	void update(OrmResource ormResource);
}
