/**
* <copyright>
* Copyright (c) 2010-2014 Henshin developers. All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* </copyright>
*/
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.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
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.InternalEList;
import org.eclipse.emf.henshin.model.HenshinPackage;
import org.eclipse.emf.henshin.model.Module;
import org.eclipse.emf.henshin.model.Parameter;
import org.eclipse.emf.henshin.model.ParameterMapping;
import org.eclipse.emf.henshin.model.Unit;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Unit</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.eclipse.emf.henshin.model.impl.UnitImpl#getParameters <em>Parameters</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.UnitImpl#getParameterMappings <em>Parameter Mappings</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.UnitImpl#isActivated <em>Activated</em>}</li>
* <li>{@link org.eclipse.emf.henshin.model.impl.UnitImpl#isIsUsed <em>Is Used</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public abstract class UnitImpl extends NamedElementImpl implements Unit {
/**
* The cached value of the '{@link #getParameters() <em>Parameters</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getParameters()
* @generated
* @ordered
*/
protected EList<Parameter> parameters;
/**
* The cached value of the '{@link #getParameterMappings() <em>Parameter Mappings</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getParameterMappings()
* @generated
* @ordered
*/
protected EList<ParameterMapping> parameterMappings;
/**
* The default value of the '{@link #isActivated() <em>Activated</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isActivated()
* @generated
* @ordered
*/
protected static final boolean ACTIVATED_EDEFAULT = true;
/**
* The cached value of the '{@link #isActivated() <em>Activated</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isActivated()
* @generated
* @ordered
*/
protected boolean activated = ACTIVATED_EDEFAULT;
/**
* The default value of the '{@link #isIsUsed() <em>Is Used</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isIsUsed()
* @generated
* @ordered
*/
protected static final boolean IS_USED_EDEFAULT = false;
/**
* The cached value of the '{@link #isIsUsed() <em>Is Used</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isIsUsed()
* @generated
* @ordered
*/
protected boolean isUsed = IS_USED_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public UnitImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return HenshinPackage.Literals.UNIT;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isActivated() {
return activated;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setActivated(boolean newActivated) {
boolean oldActivated = activated;
activated = newActivated;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, HenshinPackage.UNIT__ACTIVATED, oldActivated, activated));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isIsUsed() {
return isUsed;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setIsUsed(boolean newIsUsed) {
boolean oldIsUsed = isUsed;
isUsed = newIsUsed;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, HenshinPackage.UNIT__IS_USED, oldIsUsed, isUsed));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public Module getModule() {
EObject container = eContainer();
while (container!=null) {
if (container instanceof Module) {
return (Module) container;
}
container = container.eContainer();
}
return null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<Parameter> getParameters() {
if (parameters == null) {
parameters = new EObjectContainmentWithInverseEList<Parameter>(Parameter.class, this, HenshinPackage.UNIT__PARAMETERS, HenshinPackage.PARAMETER__UNIT);
}
return parameters;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<ParameterMapping> getParameterMappings() {
if (parameterMappings == null) {
parameterMappings = new EObjectContainmentEList<ParameterMapping>(ParameterMapping.class, this, HenshinPackage.UNIT__PARAMETER_MAPPINGS);
}
return parameterMappings;
}
/**
* <!-- begin-user-doc -->
* Get the direct subUnits of this unit. Subclasses must implement this method.
* <!-- end-user-doc -->
* @generated NOT
*/
protected abstract EList<Unit> getSubUnits();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public final EList<Unit> getSubUnits(boolean deep) {
EList<Unit> result = new BasicEList<Unit>();
result.addAll(getSubUnits());
if (deep) {
boolean changed;
do {
changed = false;
int count = result.size();
for (int i=0; i<count; i++) {
for (Unit unit : ((UnitImpl) result.get(i)).getSubUnits()) {
if (!result.contains(unit)) {
result.add(unit);
changed = true;
}
}
}
} while (changed);
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public Parameter getParameter(String name) {
for (Parameter parameter : getParameters()) {
if (name==null) {
if (parameter.getName()==null) {
return parameter;
}
} else {
if (name.equals(parameter.getName())) {
return parameter;
}
}
}
return null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public Parameter getParameterByName(String name) {
return getParameter(name);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID,
NotificationChain msgs) {
switch (featureID) {
case HenshinPackage.UNIT__PARAMETERS:
return ((InternalEList<InternalEObject>)(InternalEList<?>)getParameters()).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 HenshinPackage.UNIT__PARAMETERS:
return ((InternalEList<?>)getParameters()).basicRemove(otherEnd, msgs);
case HenshinPackage.UNIT__PARAMETER_MAPPINGS:
return ((InternalEList<?>)getParameterMappings()).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 HenshinPackage.UNIT__PARAMETERS:
return getParameters();
case HenshinPackage.UNIT__PARAMETER_MAPPINGS:
return getParameterMappings();
case HenshinPackage.UNIT__ACTIVATED:
return isActivated();
case HenshinPackage.UNIT__IS_USED:
return isIsUsed();
}
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 HenshinPackage.UNIT__PARAMETERS:
getParameters().clear();
getParameters().addAll((Collection<? extends Parameter>)newValue);
return;
case HenshinPackage.UNIT__PARAMETER_MAPPINGS:
getParameterMappings().clear();
getParameterMappings().addAll((Collection<? extends ParameterMapping>)newValue);
return;
case HenshinPackage.UNIT__ACTIVATED:
setActivated((Boolean)newValue);
return;
case HenshinPackage.UNIT__IS_USED:
setIsUsed((Boolean)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case HenshinPackage.UNIT__PARAMETERS:
getParameters().clear();
return;
case HenshinPackage.UNIT__PARAMETER_MAPPINGS:
getParameterMappings().clear();
return;
case HenshinPackage.UNIT__ACTIVATED:
setActivated(ACTIVATED_EDEFAULT);
return;
case HenshinPackage.UNIT__IS_USED:
setIsUsed(IS_USED_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case HenshinPackage.UNIT__PARAMETERS:
return parameters != null && !parameters.isEmpty();
case HenshinPackage.UNIT__PARAMETER_MAPPINGS:
return parameterMappings != null && !parameterMappings.isEmpty();
case HenshinPackage.UNIT__ACTIVATED:
return activated != ACTIVATED_EDEFAULT;
case HenshinPackage.UNIT__IS_USED:
return isUsed != IS_USED_EDEFAULT;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
@Override
public String toString() {
String result = eClass().getName() + (name!=null ? " " + name : "");
if (!getParameters().isEmpty()) {
result = result + "(";
for (int i=0; i<parameters.size(); i++) {
Parameter param = parameters.get(i);
result = result + param.getName();
if (param.getType()!=null) {
result = result + ":" + param.getType().getName();
}
if (i<parameters.size()-1) {
result = result + ", ";
}
}
result = result + ")";
}
return result;
}
} // UnitImpl