/*
 * Created on Sep 21, 2005
 */
package fmp;

import org.eclipse.emf.common.util.EList;

/**
 * @author chpkim, mantkiew
 * @model
 */
public interface Feature extends Clonable{
	/**
	 * @model
	 */
	String getName();
	
	/**
	 * Sets the value of the '{@link fmp.Feature#getName <em>Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Name</em>' attribute.
	 * @see #getName()
	 * @generated
	 */
	void setName(String value);

	/**
	 * @model
	 */
	ValueType getValueType();
	
	/**
	 * Sets the value of the '{@link fmp.Feature#getValueType <em>Value Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Value Type</em>' attribute.
	 * @see fmp.ValueType
	 * @see #getValueType()
	 * @generated
	 */
	void setValueType(ValueType value);

	/**
	 * @model containment="true"
	 */
	TypedValue getTypedValue();
	
	/**
	 * Sets the value of the '{@link fmp.Feature#getTypedValue <em>Typed Value</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Typed Value</em>' containment reference.
	 * @see #getTypedValue()
	 * @generated
	 */
	void setTypedValue(TypedValue value);

	/**
	 * @model type="Feature" containment="true"
	 */
	EList getConfigurations();
	/**
	 * @model type="Reference" transient="true" opposite="feature"
	 */
	EList getReferences();
	/**
	 * @model opposite="properties"
	 */
	Node getDescribedNode();
	/**
	 * Sets the value of the '{@link fmp.Feature#getDescribedNode <em>Described Node</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Described Node</em>' reference.
	 * @see #getDescribedNode()
	 * @generated
	 */
	void setDescribedNode(Node value);

	/**
	 * @model type="Constraint" containment="true"
	 */
	EList getConstraints();

	/**
	 * Michal: convenience, non-model method
	 * @generated NOT
	 */
	TypedValue getDefaultValue();

	/**
	 * Michal: convenience, non-model method
	 * @generated NOT
	 */
	void setDefaultValue(TypedValue defaultTypedValue);
}
