/**
*/
package org.erlide.erlang.impl;
import java.util.Collection;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;
import org.erlide.erlang.ErlangPackage;
import org.erlide.erlang.Expression;
import org.erlide.erlang.FieldType;
import org.erlide.erlang.RecordType;
/**
* <!-- begin-user-doc --> An implementation of the model object '
* <em><b>Record Type</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
* </p>
* <ul>
* <li>{@link org.erlide.erlang.impl.RecordTypeImpl#getRec <em>Rec</em>}</li>
* <li>{@link org.erlide.erlang.impl.RecordTypeImpl#getFields <em>Fields</em>}</li>
* </ul>
*
* @generated
*/
public class RecordTypeImpl extends TypeImpl implements RecordType {
/**
* The cached value of the '{@link #getRec() <em>Rec</em>}' containment
* reference. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getRec()
* @generated
* @ordered
*/
protected Expression rec;
/**
* The cached value of the '{@link #getFields() <em>Fields</em>}'
* containment reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFields()
* @generated
* @ordered
*/
protected EList<FieldType> fields;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected RecordTypeImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected EClass eStaticClass() {
return ErlangPackage.Literals.RECORD_TYPE;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Expression getRec() {
return rec;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public NotificationChain basicSetRec(final Expression newRec,
NotificationChain msgs) {
final Expression oldRec = rec;
rec = newRec;
if (eNotificationRequired()) {
final ENotificationImpl notification = new ENotificationImpl(this,
Notification.SET, ErlangPackage.RECORD_TYPE__REC, oldRec,
newRec);
if (msgs == null) {
msgs = notification;
} else {
msgs.add(notification);
}
}
return msgs;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setRec(final Expression newRec) {
if (newRec != rec) {
NotificationChain msgs = null;
if (rec != null) {
msgs = ((InternalEObject) rec)
.eInverseRemove(this, EOPPOSITE_FEATURE_BASE
- ErlangPackage.RECORD_TYPE__REC, null, msgs);
}
if (newRec != null) {
msgs = ((InternalEObject) newRec)
.eInverseAdd(this, EOPPOSITE_FEATURE_BASE
- ErlangPackage.RECORD_TYPE__REC, null, msgs);
}
msgs = basicSetRec(newRec, msgs);
if (msgs != null) {
msgs.dispatch();
}
} else if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
ErlangPackage.RECORD_TYPE__REC, newRec, newRec));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<FieldType> getFields() {
if (fields == null) {
fields = new EObjectContainmentEList<FieldType>(FieldType.class,
this, ErlangPackage.RECORD_TYPE__FIELDS);
}
return fields;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public NotificationChain eInverseRemove(final InternalEObject otherEnd,
final int featureID, final NotificationChain msgs) {
switch (featureID) {
case ErlangPackage.RECORD_TYPE__REC:
return basicSetRec(null, msgs);
case ErlangPackage.RECORD_TYPE__FIELDS:
return ((InternalEList<?>) getFields()).basicRemove(otherEnd, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(final int featureID, final boolean resolve,
final boolean coreType) {
switch (featureID) {
case ErlangPackage.RECORD_TYPE__REC:
return getRec();
case ErlangPackage.RECORD_TYPE__FIELDS:
return getFields();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(final int featureID, final Object newValue) {
switch (featureID) {
case ErlangPackage.RECORD_TYPE__REC:
setRec((Expression) newValue);
return;
case ErlangPackage.RECORD_TYPE__FIELDS:
getFields().clear();
getFields().addAll((Collection<? extends FieldType>) newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(final int featureID) {
switch (featureID) {
case ErlangPackage.RECORD_TYPE__REC:
setRec((Expression) null);
return;
case ErlangPackage.RECORD_TYPE__FIELDS:
getFields().clear();
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(final int featureID) {
switch (featureID) {
case ErlangPackage.RECORD_TYPE__REC:
return rec != null;
case ErlangPackage.RECORD_TYPE__FIELDS:
return fields != null && !fields.isEmpty();
}
return super.eIsSet(featureID);
}
} // RecordTypeImpl