package org.eclipse.emf.edapt.declaration.replacement;

import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edapt.declaration.EdaptConstraint;
import org.eclipse.emf.edapt.declaration.EdaptOperation;
import org.eclipse.emf.edapt.declaration.EdaptParameter;
import org.eclipse.emf.edapt.declaration.OperationImplementation;
import org.eclipse.emf.edapt.spi.migration.Metamodel;
import org.eclipse.emf.edapt.spi.migration.Model;

/**
 * {@description}
 *
 * @author herrmama
 * @author $Author$
 * @version $Rev$
 * @levd.rating YELLOW Hash: 5B7747DFD5031268253054D789641EE5
 */
@EdaptOperation(identifier = "volatileToOpposite", label = "Volatile to Opposite Reference", description = "In the metamodel, a reference is changed from being volatile to an opposite. In the model, the opposite direction needs to be set.", breaking = true)
public class VolatileToOpposite extends OperationImplementation {

	/** {@description} */
	@EdaptParameter(main = true, description = "The reference which is changed from volatile to opposite")
	public EReference reference;

	/** {@description} */
	@EdaptParameter(description = "The reference which is going to be the opposite")
	public EReference opposite;

	/** {@description} */
	@EdaptConstraint(restricts = "opposite", description = "Reference and opposite "
		+ "must be compatible with each other")
	public boolean checkOppositeCompatible(EReference opposite) {
		return reference.getEType() == opposite.getEContainingClass()
			&& reference.getEContainingClass() == opposite.getEType();
	}

	/** {@description} */
	@EdaptParameter(description = "Whether the reference is going to be changeable")
	public Boolean changeable = true;

	/** {@description} */
	@EdaptConstraint(description = "Reference must be volatile")
	public boolean checkReferenceVolatile() {
		return reference.isVolatile();
	}

	/** {@description} */
	@EdaptConstraint(description = "Reference must not already have an opposite")
	public boolean checkReferenceNoOpposite() {
		return reference.getEOpposite() == null;
	}

	/** {@inheritDoc} */
	@Override
	public void execute(Metamodel metamodel, Model model) {
		// metamodel adaptation
		reference.setVolatile(false);
		reference.setTransient(false);
		reference.setDerived(false);
		reference.setChangeable(changeable);
		metamodel.setEOpposite(opposite, reference);
	}
}
