/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.eclipse.stem.definitions.edges;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Mixing Edge</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.stem.definitions.edges.MixingEdge#isUseAbsoluteValues <em>Use Absolute Values</em>}</li>
 * </ul>
 *
 * @see org.eclipse.stem.definitions.edges.EdgesPackage#getMixingEdge()
 * @model
 * @generated
 */
public interface MixingEdge extends PopulationEdge {
	
	
	
	/**
	 * Returns the value of the '<em><b>Use Absolute Values</b></em>' attribute.
	 * The default value is <code>"0"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Use Absolute Values</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Use Absolute Values</em>' attribute.
	 * @see #setUseAbsoluteValues(boolean)
	 * @see org.eclipse.stem.definitions.edges.EdgesPackage#getMixingEdge_UseAbsoluteValues()
	 * @model default="0"
	 * @generated
	 */
	boolean isUseAbsoluteValues();

	/**
	 * Sets the value of the '{@link org.eclipse.stem.definitions.edges.MixingEdge#isUseAbsoluteValues <em>Use Absolute Values</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Use Absolute Values</em>' attribute.
	 * @see #isUseAbsoluteValues()
	 * @generated
	 */
	void setUseAbsoluteValues(boolean value);
	
	/**
	 * This is the segment of the type URI that prefixes all other segments in a
	 * migration edge URI.
	 */
	public String URI_TYPE_MIXING_EDGE_SEGMENT = URI_TYPE_EDGE_SEGMENT + "/mixing";

	/**
	 * Overrides getLabel() to enforce the returning of a migration edge label
	 **/
	@Override
	MixingEdgeLabel getLabel();
	
	/**
	 * Overrides setLabel() to enforce setting of a migration edge label
	 * @param lbl
	 */
	void setLabel(MixingEdgeLabel lbl);
	
} // MixingEdge
