/*******************************************************************************
 * Copyright (c) 2006, 2010 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;

import java.util.Iterator;

/**
 * JPA attribute mapping.
 * <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 2.3
 * @since 2.0
 */
public interface AttributeMapping
	extends JpaContextNode
{
	PersistentAttribute getPersistentAttribute();
	
	String getName();

	boolean isDefault();

	/**
	 * Return a unique key for the attribute mapping.  If this is defined in
	 * an extension they should be equal.
	 */
	String getKey();
	
	/**
	 * Return whether the "attribute" mapping can be overridden.
	 * Must be a {@link ColumnMapping}
	 */
	boolean isOverridableAttributeMapping();

	/**
	 * Return whether the "association" mapping can be overridden.
	 * Must be a {@link RelationshipMapping}
	 */
	boolean isOverridableAssociationMapping();

	/**
	 * Return the mapping for the attribute mapping's attribute's type.
	 */
	TypeMapping getTypeMapping();

	/**
	 * If the mapping is for a primary key column, return the column's name,
	 * otherwise return null.
	 */
	String getPrimaryKeyColumnName();

	/**
	 * Return whether this mapping is the owning side of the relationship.
	 * Either this is a unidirectional mapping or it is the owning side of a
	 * bidirectional relationship. If bidirectional, the owning side is the
	 * side that does not specify 'mappedBy'. The owning side is the side where
	 * the join table would be specified. If this returns true then the mapping
	 * will be a RelationshipMapping
	 */
	boolean isRelationshipOwner();

	/**
	 * Return whether the given mapping manages a relationship with this mapping
	 */
	boolean isOwnedBy(AttributeMapping mapping);
	
	/**
	 * Return whether any database metadata specific validation should occur.
	 * (For instance, if the connection is not active, then it should not.)
	 */
	boolean shouldValidateAgainstDatabase();

	/**
	 * This is used for mappedBy choices in a relationship mapping.
	 * Typically this will just be a single element iterator with the name of the mapping.
	 * In a 2.0 project, an embedded mapping should return its own name as well as 
	 * the name of its target Embeddable's mappings with the embedded mapping name 
	 * prepended : "embedded", "embedded.foo", "embedded.bar".
	 */
	Iterator<String> allMappingNames();
	
	/**
	 * This is used to determine the virtual attribute overrides for an embedded mapping
	 * or an entity. Return an Iterator of all attribute names that can be overridden.
	 * In a 2.0 project this will include nested attributes that are overridable
	 * @see isOverridableAttributeMapping()
	 */
	Iterator<String> allOverrideableAttributeMappingNames();
	
	/**
	 * This is used to determine the virtual association overrides for an embedded mapping
	 * or an entity. Return an Iterator of all association names that can be overridden.
	 * In a 2.0 project this will include nested associations that are overridable
	 * @see isOverridableAssociationMapping()
	 */
	Iterator<String> allOverrideableAssociationMappingNames();

	/**
	 * Returns this attribute mapping if its name matches the name.
	 * In 2.0 this name could use dot-notation for nested mappings.
	 * 2.0 Embedded mappings will have to parse this name and return the appropriate 
	 * nested attribute mapping.
	 */
	AttributeMapping resolveAttributeMapping(String name);
	
	/**
	 * Returns the Column of the overridable attribute mapping with the given 
	 * attribute name. In 2.0 this name could use dot-notation for nested mappings.
	 */
	Column resolveOverriddenColumn(String attributeName);

	RelationshipReference resolveRelationshipReference(String attributeName);

}
