/**
* <copyright>
* </copyright>
*
* $Id$
*/
package orgomg.cwm.analysis.businessnomenclature.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.EObjectWithInverseResolvingEList;
import org.eclipse.emf.ecore.util.InternalEList;
import orgomg.cwm.analysis.businessnomenclature.BusinessnomenclaturePackage;
import orgomg.cwm.analysis.businessnomenclature.Concept;
import orgomg.cwm.analysis.businessnomenclature.Term;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Term</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getConcept <em>Concept</em>}</li>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getRelatedTerm <em>Related Term</em>}</li>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getTerm <em>Term</em>}</li>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getPreferredTerm <em>Preferred Term</em>}</li>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getSynonym <em>Synonym</em>}</li>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getWiderTerm <em>Wider Term</em>}</li>
* <li>{@link orgomg.cwm.analysis.businessnomenclature.impl.TermImpl#getNarrowerTerm <em>Narrower Term</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class TermImpl extends VocabularyElementImpl implements Term {
/**
* The cached value of the '{@link #getConcept() <em>Concept</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getConcept()
* @generated
* @ordered
*/
protected EList<Concept> concept;
/**
* The cached value of the '{@link #getRelatedTerm() <em>Related Term</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getRelatedTerm()
* @generated
* @ordered
*/
protected EList<Term> relatedTerm;
/**
* The cached value of the '{@link #getTerm() <em>Term</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTerm()
* @generated
* @ordered
*/
protected EList<Term> term;
/**
* The cached value of the '{@link #getPreferredTerm() <em>Preferred Term</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getPreferredTerm()
* @generated
* @ordered
*/
protected Term preferredTerm;
/**
* The cached value of the '{@link #getSynonym() <em>Synonym</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSynonym()
* @generated
* @ordered
*/
protected EList<Term> synonym;
/**
* The cached value of the '{@link #getWiderTerm() <em>Wider Term</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getWiderTerm()
* @generated
* @ordered
*/
protected EList<Term> widerTerm;
/**
* The cached value of the '{@link #getNarrowerTerm() <em>Narrower Term</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getNarrowerTerm()
* @generated
* @ordered
*/
protected EList<Term> narrowerTerm;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected TermImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return BusinessnomenclaturePackage.Literals.TERM;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Concept> getConcept() {
if (concept == null) {
concept = new EObjectWithInverseResolvingEList.ManyInverse<Concept>(Concept.class, this, BusinessnomenclaturePackage.TERM__CONCEPT, BusinessnomenclaturePackage.CONCEPT__TERM);
}
return concept;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Term> getRelatedTerm() {
if (relatedTerm == null) {
relatedTerm = new EObjectWithInverseResolvingEList.ManyInverse<Term>(Term.class, this, BusinessnomenclaturePackage.TERM__RELATED_TERM, BusinessnomenclaturePackage.TERM__TERM);
}
return relatedTerm;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Term> getTerm() {
if (term == null) {
term = new EObjectWithInverseResolvingEList.ManyInverse<Term>(Term.class, this, BusinessnomenclaturePackage.TERM__TERM, BusinessnomenclaturePackage.TERM__RELATED_TERM);
}
return term;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Term getPreferredTerm() {
if (preferredTerm != null && preferredTerm.eIsProxy()) {
InternalEObject oldPreferredTerm = (InternalEObject)preferredTerm;
preferredTerm = (Term)eResolveProxy(oldPreferredTerm);
if (preferredTerm != oldPreferredTerm) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, BusinessnomenclaturePackage.TERM__PREFERRED_TERM, oldPreferredTerm, preferredTerm));
}
}
return preferredTerm;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Term basicGetPreferredTerm() {
return preferredTerm;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetPreferredTerm(Term newPreferredTerm, NotificationChain msgs) {
Term oldPreferredTerm = preferredTerm;
preferredTerm = newPreferredTerm;
if (eNotificationRequired()) {
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, BusinessnomenclaturePackage.TERM__PREFERRED_TERM, oldPreferredTerm, newPreferredTerm);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setPreferredTerm(Term newPreferredTerm) {
if (newPreferredTerm != preferredTerm) {
NotificationChain msgs = null;
if (preferredTerm != null)
msgs = ((InternalEObject)preferredTerm).eInverseRemove(this, BusinessnomenclaturePackage.TERM__SYNONYM, Term.class, msgs);
if (newPreferredTerm != null)
msgs = ((InternalEObject)newPreferredTerm).eInverseAdd(this, BusinessnomenclaturePackage.TERM__SYNONYM, Term.class, msgs);
msgs = basicSetPreferredTerm(newPreferredTerm, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, BusinessnomenclaturePackage.TERM__PREFERRED_TERM, newPreferredTerm, newPreferredTerm));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Term> getSynonym() {
if (synonym == null) {
synonym = new EObjectWithInverseResolvingEList<Term>(Term.class, this, BusinessnomenclaturePackage.TERM__SYNONYM, BusinessnomenclaturePackage.TERM__PREFERRED_TERM);
}
return synonym;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Term> getWiderTerm() {
if (widerTerm == null) {
widerTerm = new EObjectWithInverseResolvingEList.ManyInverse<Term>(Term.class, this, BusinessnomenclaturePackage.TERM__WIDER_TERM, BusinessnomenclaturePackage.TERM__NARROWER_TERM);
}
return widerTerm;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Term> getNarrowerTerm() {
if (narrowerTerm == null) {
narrowerTerm = new EObjectWithInverseResolvingEList.ManyInverse<Term>(Term.class, this, BusinessnomenclaturePackage.TERM__NARROWER_TERM, BusinessnomenclaturePackage.TERM__WIDER_TERM);
}
return narrowerTerm;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case BusinessnomenclaturePackage.TERM__CONCEPT:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getConcept()).basicAdd(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__RELATED_TERM:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getRelatedTerm()).basicAdd(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__TERM:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getTerm()).basicAdd(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__PREFERRED_TERM:
if (preferredTerm != null)
msgs = ((InternalEObject)preferredTerm).eInverseRemove(this, BusinessnomenclaturePackage.TERM__SYNONYM, Term.class, msgs);
return basicSetPreferredTerm((Term)otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__SYNONYM:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getSynonym()).basicAdd(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__WIDER_TERM:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getWiderTerm()).basicAdd(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__NARROWER_TERM:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getNarrowerTerm()).basicAdd(otherEnd, msgs);
}
return super.eInverseAdd(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case BusinessnomenclaturePackage.TERM__CONCEPT:
return ((InternalEList<?>)getConcept()).basicRemove(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__RELATED_TERM:
return ((InternalEList<?>)getRelatedTerm()).basicRemove(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__TERM:
return ((InternalEList<?>)getTerm()).basicRemove(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__PREFERRED_TERM:
return basicSetPreferredTerm(null, msgs);
case BusinessnomenclaturePackage.TERM__SYNONYM:
return ((InternalEList<?>)getSynonym()).basicRemove(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__WIDER_TERM:
return ((InternalEList<?>)getWiderTerm()).basicRemove(otherEnd, msgs);
case BusinessnomenclaturePackage.TERM__NARROWER_TERM:
return ((InternalEList<?>)getNarrowerTerm()).basicRemove(otherEnd, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case BusinessnomenclaturePackage.TERM__CONCEPT:
return getConcept();
case BusinessnomenclaturePackage.TERM__RELATED_TERM:
return getRelatedTerm();
case BusinessnomenclaturePackage.TERM__TERM:
return getTerm();
case BusinessnomenclaturePackage.TERM__PREFERRED_TERM:
if (resolve) return getPreferredTerm();
return basicGetPreferredTerm();
case BusinessnomenclaturePackage.TERM__SYNONYM:
return getSynonym();
case BusinessnomenclaturePackage.TERM__WIDER_TERM:
return getWiderTerm();
case BusinessnomenclaturePackage.TERM__NARROWER_TERM:
return getNarrowerTerm();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case BusinessnomenclaturePackage.TERM__CONCEPT:
getConcept().clear();
getConcept().addAll((Collection<? extends Concept>)newValue);
return;
case BusinessnomenclaturePackage.TERM__RELATED_TERM:
getRelatedTerm().clear();
getRelatedTerm().addAll((Collection<? extends Term>)newValue);
return;
case BusinessnomenclaturePackage.TERM__TERM:
getTerm().clear();
getTerm().addAll((Collection<? extends Term>)newValue);
return;
case BusinessnomenclaturePackage.TERM__PREFERRED_TERM:
setPreferredTerm((Term)newValue);
return;
case BusinessnomenclaturePackage.TERM__SYNONYM:
getSynonym().clear();
getSynonym().addAll((Collection<? extends Term>)newValue);
return;
case BusinessnomenclaturePackage.TERM__WIDER_TERM:
getWiderTerm().clear();
getWiderTerm().addAll((Collection<? extends Term>)newValue);
return;
case BusinessnomenclaturePackage.TERM__NARROWER_TERM:
getNarrowerTerm().clear();
getNarrowerTerm().addAll((Collection<? extends Term>)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case BusinessnomenclaturePackage.TERM__CONCEPT:
getConcept().clear();
return;
case BusinessnomenclaturePackage.TERM__RELATED_TERM:
getRelatedTerm().clear();
return;
case BusinessnomenclaturePackage.TERM__TERM:
getTerm().clear();
return;
case BusinessnomenclaturePackage.TERM__PREFERRED_TERM:
setPreferredTerm((Term)null);
return;
case BusinessnomenclaturePackage.TERM__SYNONYM:
getSynonym().clear();
return;
case BusinessnomenclaturePackage.TERM__WIDER_TERM:
getWiderTerm().clear();
return;
case BusinessnomenclaturePackage.TERM__NARROWER_TERM:
getNarrowerTerm().clear();
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case BusinessnomenclaturePackage.TERM__CONCEPT:
return concept != null && !concept.isEmpty();
case BusinessnomenclaturePackage.TERM__RELATED_TERM:
return relatedTerm != null && !relatedTerm.isEmpty();
case BusinessnomenclaturePackage.TERM__TERM:
return term != null && !term.isEmpty();
case BusinessnomenclaturePackage.TERM__PREFERRED_TERM:
return preferredTerm != null;
case BusinessnomenclaturePackage.TERM__SYNONYM:
return synonym != null && !synonym.isEmpty();
case BusinessnomenclaturePackage.TERM__WIDER_TERM:
return widerTerm != null && !widerTerm.isEmpty();
case BusinessnomenclaturePackage.TERM__NARROWER_TERM:
return narrowerTerm != null && !narrowerTerm.isEmpty();
}
return super.eIsSet(featureID);
}
} //TermImpl