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

import org.eclipse.jpt.core.context.JpaContextNode;

/**
 * Derived identity
 * <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.3
 */
public interface DerivedIdentity2_0
	extends JpaContextNode
{
// TODO bjv rename methods
	/**
	 * Return the associated single relationship mapping.
	 */
	SingleRelationshipMapping2_0 getMapping();

	// ********** predominant strategy **********

	/**
	 * String associated with changes to the predominant derived identity
	 * strategy property.
	 */
	String PREDOMINANT_DERIVED_IDENTITY_STRATEGY_PROPERTY = "predominantDerivedIdentityStrategy";  //$NON-NLS-1$

	/**
	 * Return the mapping's predominant strategy.
	 */
	DerivedIdentityStrategy2_0 getPredominantDerivedIdentityStrategy();


	// ********** null strategy **********

	/**
	 * Return whether the mapping has no strategy.
	 */
	boolean usesNullDerivedIdentityStrategy();

	/**
	 * Configure the mapping so it has no strategy.
	 * This will remove all other strategies.
	 */
	void setNullDerivedIdentityStrategy();


	// ********** ID strategy **********

	/**
	 * Return the mapping's ID strategy.
	 */
	IdDerivedIdentityStrategy2_0 getIdDerivedIdentityStrategy();

	/**
	 * Return whether the mapping uses an ID strategy.
	 */
	boolean usesIdDerivedIdentityStrategy();

	/**
	 * Configure the mapping so it has an ID strategy.
	 * This will remove all other strategies.
	 */
	void setIdDerivedIdentityStrategy();

	/**
	 * Clear the mapping's ID strategy.
	 * This will not set any other strategy; so whichever other strategy is
	 * present (or the null strategy) will apply.
	 */
	void unsetIdDerivedIdentityStrategy();


	// ********** maps ID strategy **********

	/**
	 * Return the mapping's "maps ID" strategy.
	 */
	MapsIdDerivedIdentityStrategy2_0 getMapsIdDerivedIdentityStrategy();

	/**
	 * Return whether the mapping uses a "maps ID" strategy.
	 */
	boolean usesMapsIdDerivedIdentityStrategy();

	/**
	 * Configure the mapping so it has a "maps ID" strategy.
	 * This will remove all other strategies.
	 */
	void setMapsIdDerivedIdentityStrategy();

	/**
	 * Clear the mapping's "maps ID" strategy.
	 * This will not set any other strategy; so whichever other strategy is
	 * present (or the null strategy) will apply.
	 */
	void unsetMapsIdDerivedIdentityStrategy();
}
