/*******************************************************************************
 * Copyright (c) 2009 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;

import java.util.ListIterator;
import org.eclipse.jpt.core.context.MappingFileDefinition;
import org.eclipse.jpt.core.context.java.JavaAttributeMappingProvider;
import org.eclipse.jpt.core.context.java.JavaTypeMappingProvider;

/**
 * This interface is to be implemented by a JPA vendor to provide extensions to 
 * the core JPA model.  The core JPA model will provide functionality for JPA
 * spec annotations in java, persistence.xml and mapping (orm.xml) files.
 * The org.eclipse.jpt.core.generic extension supplies 
 * resource models for those file types in GenericJpaPlatformProvider. 
 * 
 * This JpaPlatformProvider implementation most likely only returns providers
 * that are extensions of other platforms.  Then in the GenericJpaPlatform implementation
 * you pass in 1 or more JpaPlatformProviders.
 * 
 * See the org.eclipse.jpt.core.jpaPlatforms extension point
 * 
 * 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 JpaPlatformProvider
{
	/**
	 * Return the resource model providers that apply to this platform.
	 */
	ListIterator<JpaResourceModelProvider> resourceModelProviders();

	/**
	 * Return the mapping file definitions supported by this platform.
	 */
	ListIterator<MappingFileDefinition> mappingFileDefinitions();

	/**
	 * Return the java type mapping providers that apply to this platform.
	 */
	ListIterator<JavaTypeMappingProvider> javaTypeMappingProviders();
	
	/**
	 * Return the mapping providers to use for default java attribute mappings for this platform.
	 */
	ListIterator<JavaAttributeMappingProvider> defaultJavaAttributeMappingProviders();

	/**
	 * Return the mapping providers to use for specified java attribute mappings for this platform.
	 */
	ListIterator<JavaAttributeMappingProvider> specifiedJavaAttributeMappingProviders();
}
