/**
* <copyright>
* </copyright>
*
* $Id$
*/
package de.tub.tfs.henshin.model.flowcontrol.impl;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.henshin.model.impl.NamedElementImpl;
import de.tub.tfs.henshin.model.flowcontrol.Activity;
import de.tub.tfs.henshin.model.flowcontrol.FlowControlPackage;
import de.tub.tfs.henshin.model.flowcontrol.FlowDiagram;
import de.tub.tfs.henshin.model.flowcontrol.Parameter;
import de.tub.tfs.henshin.model.flowcontrol.ParameterMapping;
import de.tub.tfs.henshin.model.flowcontrol.ParameterProvider;
/**
* <!-- begin-user-doc --> An implementation of the model object '
* <em><b>Parameter</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link de.tub.tfs.henshin.model.flowcontrol.impl.ParameterImpl#getProvider <em>Provider</em>}</li>
* <li>{@link de.tub.tfs.henshin.model.flowcontrol.impl.ParameterImpl#getHenshinParameter <em>Henshin Parameter</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class ParameterImpl extends NamedElementImpl implements Parameter {
/**
* The cached value of the '{@link #getProvider() <em>Provider</em>}' reference.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @see #getProvider()
* @generated
* @ordered
*/
protected ParameterProvider provider;
/**
* The cached value of the '{@link #getHenshinParameter() <em>Henshin Parameter</em>}' reference.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getHenshinParameter()
* @generated
* @ordered
*/
protected org.eclipse.emf.henshin.model.Parameter henshinParameter;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected ParameterImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return FlowControlPackage.Literals.PARAMETER;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public ParameterProvider getProvider() {
if (provider != null && provider.eIsProxy()) {
InternalEObject oldProvider = (InternalEObject)provider;
provider = (ParameterProvider)eResolveProxy(oldProvider);
if (provider != oldProvider) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, FlowControlPackage.PARAMETER__PROVIDER, oldProvider, provider));
}
}
return provider;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public ParameterProvider basicGetProvider() {
return provider;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public void setProvider(ParameterProvider newProvider) {
ParameterProvider oldProvider = provider;
provider = newProvider;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, FlowControlPackage.PARAMETER__PROVIDER, oldProvider, provider));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public org.eclipse.emf.henshin.model.Parameter getHenshinParameter() {
if (henshinParameter != null && henshinParameter.eIsProxy()) {
InternalEObject oldHenshinParameter = (InternalEObject)henshinParameter;
henshinParameter = (org.eclipse.emf.henshin.model.Parameter)eResolveProxy(oldHenshinParameter);
if (henshinParameter != oldHenshinParameter) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, FlowControlPackage.PARAMETER__HENSHIN_PARAMETER, oldHenshinParameter, henshinParameter));
}
}
return henshinParameter;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public org.eclipse.emf.henshin.model.Parameter basicGetHenshinParameter() {
return henshinParameter;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public void setHenshinParameter(
org.eclipse.emf.henshin.model.Parameter newHenshinParameter) {
org.eclipse.emf.henshin.model.Parameter oldHenshinParameter = henshinParameter;
henshinParameter = newHenshinParameter;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, FlowControlPackage.PARAMETER__HENSHIN_PARAMETER, oldHenshinParameter, henshinParameter));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
public boolean isInput() {
ParameterProvider provider = getProvider();
FlowDiagram diagram;
if (provider instanceof FlowDiagram) {
diagram = (FlowDiagram) provider;
for (ParameterMapping m : diagram.getParameterMappings()) {
if (m.getSrc() == this) {
return true;
}
}
} else {
diagram = ((Activity) provider).getDiagram();
for (ParameterMapping m : diagram.getParameterMappings()) {
if (m.getTarget() == this
&& m.getSrc().getProvider() == diagram) {
return true;
}
}
}
return false;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
public boolean isOutPut() {
ParameterProvider provider = getProvider();
FlowDiagram diagram;
if (provider instanceof FlowDiagram) {
diagram = (FlowDiagram) provider;
for (ParameterMapping m : diagram.getParameterMappings()) {
if (m.getTarget() == this) {
return true;
}
}
} else {
diagram = ((Activity) provider).getDiagram();
for (ParameterMapping m : diagram.getParameterMappings()) {
if (m.getSrc() == this
&& m.getTarget().getProvider() == diagram) {
return true;
}
}
}
return false;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case FlowControlPackage.PARAMETER__PROVIDER:
if (resolve) return getProvider();
return basicGetProvider();
case FlowControlPackage.PARAMETER__HENSHIN_PARAMETER:
if (resolve) return getHenshinParameter();
return basicGetHenshinParameter();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case FlowControlPackage.PARAMETER__PROVIDER:
setProvider((ParameterProvider)newValue);
return;
case FlowControlPackage.PARAMETER__HENSHIN_PARAMETER:
setHenshinParameter((org.eclipse.emf.henshin.model.Parameter)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case FlowControlPackage.PARAMETER__PROVIDER:
setProvider((ParameterProvider)null);
return;
case FlowControlPackage.PARAMETER__HENSHIN_PARAMETER:
setHenshinParameter((org.eclipse.emf.henshin.model.Parameter)null);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case FlowControlPackage.PARAMETER__PROVIDER:
return provider != null;
case FlowControlPackage.PARAMETER__HENSHIN_PARAMETER:
return henshinParameter != null;
}
return super.eIsSet(featureID);
}
} // ParameterImpl