/**
* <copyright>
* </copyright>
*
* $Id$
*/
package org.eclipse.emf.henshin.model.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.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
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.EObjectContainmentWithInverseEList;
import org.eclipse.emf.ecore.util.EObjectResolvingEList;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.emf.henshin.model.Graph;
import org.eclipse.emf.henshin.model.HenshinPackage;
import org.eclipse.emf.henshin.model.Module;
import org.eclipse.emf.henshin.model.Unit;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Module</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.eclipse.emf.henshin.model.impl.ModuleImpl#getSubModules <em>Sub Modules</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.ModuleImpl#getSuperModule <em>Super Module</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.ModuleImpl#getImports <em>Imports</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.ModuleImpl#getUnits <em>Units</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.ModuleImpl#getInstances <em>Instances</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.ModuleImpl#isNullValueMatching <em>Null Value Matching</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class ModuleImpl extends NamedElementImpl implements Module {
/**
* The cached value of the '{@link #getSubModules() <em>Sub Modules</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSubModules()
* @generated
* @ordered
*/
protected EList<Module> subModules;
/**
* The cached value of the '{@link #getImports() <em>Imports</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getImports()
* @generated
* @ordered
*/
protected EList<EPackage> imports;
/**
* The cached value of the '{@link #getUnits() <em>Units</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getUnits()
* @generated
* @ordered
*/
protected EList<Unit> units;
/**
* The cached value of the '{@link #getInstances() <em>Instances</em>}' containment reference list.
* <!-- begin-user-doc -->
* @deprecated Will be removed in the future.
* <!-- end-user-doc -->
* @see #getInstances()
* @generated
* @ordered
*/
protected EList<Graph> instances;
/**
* The default value of the '{@link #isNullValueMatching() <em>Null Value Matching</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isNullValueMatching()
* @generated
* @ordered
*/
protected static final boolean NULL_VALUE_MATCHING_EDEFAULT = true;
/**
* The cached value of the '{@link #isNullValueMatching() <em>Null Value Matching</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isNullValueMatching()
* @generated
* @ordered
*/
protected boolean nullValueMatching = NULL_VALUE_MATCHING_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public ModuleImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return HenshinPackage.Literals.MODULE;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Module> getSubModules() {
if (subModules == null) {
subModules = new EObjectContainmentWithInverseEList<Module>(Module.class, this, HenshinPackage.MODULE__SUB_MODULES, HenshinPackage.MODULE__SUPER_MODULE);
}
return subModules;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Module getSuperModule() {
if (eContainerFeatureID() != HenshinPackage.MODULE__SUPER_MODULE) return null;
return (Module)eInternalContainer();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetSuperModule(Module newSuperModule, NotificationChain msgs) {
msgs = eBasicSetContainer((InternalEObject)newSuperModule, HenshinPackage.MODULE__SUPER_MODULE, msgs);
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setSuperModule(Module newSuperModule) {
if (newSuperModule != eInternalContainer() || (eContainerFeatureID() != HenshinPackage.MODULE__SUPER_MODULE && newSuperModule != null)) {
if (EcoreUtil.isAncestor(this, newSuperModule))
throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
NotificationChain msgs = null;
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
if (newSuperModule != null)
msgs = ((InternalEObject)newSuperModule).eInverseAdd(this, HenshinPackage.MODULE__SUB_MODULES, Module.class, msgs);
msgs = basicSetSuperModule(newSuperModule, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, HenshinPackage.MODULE__SUPER_MODULE, newSuperModule, newSuperModule));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<EPackage> getImports() {
if (imports == null) {
imports = new EObjectResolvingEList<EPackage>(EPackage.class, this, HenshinPackage.MODULE__IMPORTS);
}
return imports;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Unit> getUnits() {
if (units == null) {
units = new EObjectContainmentEList<Unit>(Unit.class, this, HenshinPackage.MODULE__UNITS);
}
return units;
}
/**
* <!-- begin-user-doc -->
* @deprecated Will be removed in the future.
* <!-- end-user-doc -->
* @generated
*/
public EList<Graph> getInstances() {
if (instances == null) {
instances = new EObjectContainmentEList<Graph>(Graph.class, this, HenshinPackage.MODULE__INSTANCES);
}
return instances;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isNullValueMatching() {
return nullValueMatching;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setNullValueMatching(boolean newNullValueMatching) {
boolean oldNullValueMatching = nullValueMatching;
nullValueMatching = newNullValueMatching;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, HenshinPackage.MODULE__NULL_VALUE_MATCHING, oldNullValueMatching, nullValueMatching));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public Unit getUnit(String name) {
if (name==null) name = "";
for (Unit unit : getUnits()) {
String n = unit.getName();
if (n==null) n = "";
if (name.equals(n)) {
return unit;
}
}
return null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public Module getSubModule(String name) {
if (name==null) name = "";
for (Module subModule : getSubModules()) {
String n = subModule.getName();
if (n==null) n = "";
if (name.equals(n)) {
return subModule;
}
}
return null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case HenshinPackage.MODULE__SUB_MODULES:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getSubModules()).basicAdd(otherEnd, msgs);
case HenshinPackage.MODULE__SUPER_MODULE:
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
return basicSetSuperModule((Module)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 HenshinPackage.MODULE__SUB_MODULES:
return ((InternalEList<?>)getSubModules()).basicRemove(otherEnd, msgs);
case HenshinPackage.MODULE__SUPER_MODULE:
return basicSetSuperModule(null, msgs);
case HenshinPackage.MODULE__UNITS:
return ((InternalEList<?>)getUnits()).basicRemove(otherEnd, msgs);
case HenshinPackage.MODULE__INSTANCES:
return ((InternalEList<?>)getInstances()).basicRemove(otherEnd, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
switch (eContainerFeatureID()) {
case HenshinPackage.MODULE__SUPER_MODULE:
return eInternalContainer().eInverseRemove(this, HenshinPackage.MODULE__SUB_MODULES, Module.class, msgs);
}
return super.eBasicRemoveFromContainerFeature(msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case HenshinPackage.MODULE__SUB_MODULES:
return getSubModules();
case HenshinPackage.MODULE__SUPER_MODULE:
return getSuperModule();
case HenshinPackage.MODULE__IMPORTS:
return getImports();
case HenshinPackage.MODULE__UNITS:
return getUnits();
case HenshinPackage.MODULE__INSTANCES:
return getInstances();
case HenshinPackage.MODULE__NULL_VALUE_MATCHING:
return isNullValueMatching();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
@Override
public Object eGet(EStructuralFeature eFeature, boolean resolve, boolean coreType) {
/*
* For backward compatibility to old models:
*/
if (eFeature==((HenshinPackageImpl) HenshinPackage.eINSTANCE).getFakeRulesFeature()) {
return getUnits();
}
return super.eGet(eFeature, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case HenshinPackage.MODULE__SUB_MODULES:
getSubModules().clear();
getSubModules().addAll((Collection<? extends Module>)newValue);
return;
case HenshinPackage.MODULE__SUPER_MODULE:
setSuperModule((Module)newValue);
return;
case HenshinPackage.MODULE__IMPORTS:
getImports().clear();
getImports().addAll((Collection<? extends EPackage>)newValue);
return;
case HenshinPackage.MODULE__UNITS:
getUnits().clear();
getUnits().addAll((Collection<? extends Unit>)newValue);
return;
case HenshinPackage.MODULE__INSTANCES:
getInstances().clear();
getInstances().addAll((Collection<? extends Graph>)newValue);
return;
case HenshinPackage.MODULE__NULL_VALUE_MATCHING:
setNullValueMatching((Boolean)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case HenshinPackage.MODULE__SUB_MODULES:
getSubModules().clear();
return;
case HenshinPackage.MODULE__SUPER_MODULE:
setSuperModule((Module)null);
return;
case HenshinPackage.MODULE__IMPORTS:
getImports().clear();
return;
case HenshinPackage.MODULE__UNITS:
getUnits().clear();
return;
case HenshinPackage.MODULE__INSTANCES:
getInstances().clear();
return;
case HenshinPackage.MODULE__NULL_VALUE_MATCHING:
setNullValueMatching(NULL_VALUE_MATCHING_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case HenshinPackage.MODULE__SUB_MODULES:
return subModules != null && !subModules.isEmpty();
case HenshinPackage.MODULE__SUPER_MODULE:
return getSuperModule() != null;
case HenshinPackage.MODULE__IMPORTS:
return imports != null && !imports.isEmpty();
case HenshinPackage.MODULE__UNITS:
return units != null && !units.isEmpty();
case HenshinPackage.MODULE__INSTANCES:
return instances != null && !instances.isEmpty();
case HenshinPackage.MODULE__NULL_VALUE_MATCHING:
return nullValueMatching != NULL_VALUE_MATCHING_EDEFAULT;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (nullValueMatching: ");
result.append(nullValueMatching);
result.append(')');
return result.toString();
}
} //ModuleImpl