blob: 07bb9c5f3699b2741a27bf5b58078c0d8c061b80 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2015 Willink Transformations and others.
* 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
*
* Contributors:
* E.D.Willink - Initial API and implementation
*******************************************************************************/
package org.eclipse.qvtd.codegen.qvticgmodel.impl;
import java.util.Map;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
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.EcoreUtil;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.cgmodel.CGElement;
import org.eclipse.ocl.examples.codegen.cgmodel.CGInvalid;
import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
import org.eclipse.ocl.examples.codegen.cgmodel.impl.CGValuedElementImpl;
import org.eclipse.ocl.examples.codegen.cgmodel.util.CGModelVisitor;
import org.eclipse.ocl.examples.codegen.cse.AbstractPlace;
import org.eclipse.ocl.pivot.ids.TypeId;
import org.eclipse.qvtd.codegen.qvti.cse.PredicatePlaces;
import org.eclipse.qvtd.codegen.qvticgmodel.CGMappingExp;
import org.eclipse.qvtd.codegen.qvticgmodel.CGPredicate;
import org.eclipse.qvtd.codegen.qvticgmodel.QVTiCGModelPackage;
import org.eclipse.qvtd.codegen.qvticgmodel.util.QVTiCGModelVisitor;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>CG Predicate</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* </p>
* <ul>
* <li>{@link org.eclipse.qvtd.codegen.qvticgmodel.impl.CGPredicateImpl#getConditionExpression <em>Condition Expression</em>}</li>
* <li>{@link org.eclipse.qvtd.codegen.qvticgmodel.impl.CGPredicateImpl#getMappingExp <em>Mapping Exp</em>}</li>
* <li>{@link org.eclipse.qvtd.codegen.qvticgmodel.impl.CGPredicateImpl#getThenExpression <em>Then Expression</em>}</li>
* </ul>
*
* @generated
*/
public class CGPredicateImpl extends CGValuedElementImpl implements CGPredicate {
/**
* The cached value of the '{@link #getConditionExpression() <em>Condition Expression</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getConditionExpression()
* @generated
* @ordered
*/
protected CGValuedElement conditionExpression;
/**
* The cached value of the '{@link #getThenExpression() <em>Then Expression</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getThenExpression()
* @generated
* @ordered
*/
protected CGValuedElement thenExpression;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected CGPredicateImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return QVTiCGModelPackage.Literals.CG_PREDICATE;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public CGValuedElement getConditionExpression() {
return conditionExpression;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetConditionExpression(CGValuedElement newConditionExpression, NotificationChain msgs) {
CGValuedElement oldConditionExpression = conditionExpression;
conditionExpression = newConditionExpression;
if (eNotificationRequired()) {
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION, oldConditionExpression, newConditionExpression);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void setConditionExpression(CGValuedElement newConditionExpression) {
if (newConditionExpression != conditionExpression) {
NotificationChain msgs = null;
if (conditionExpression != null)
msgs = ((InternalEObject)conditionExpression).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION, null, msgs);
if (newConditionExpression != null)
msgs = ((InternalEObject)newConditionExpression).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION, null, msgs);
msgs = basicSetConditionExpression(newConditionExpression, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION, newConditionExpression, newConditionExpression));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public CGMappingExp getMappingExp() {
if (eContainerFeatureID() != QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP) return null;
return (CGMappingExp)eInternalContainer();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetMappingExp(CGMappingExp newMappingExp, NotificationChain msgs) {
msgs = eBasicSetContainer((InternalEObject)newMappingExp, QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP, msgs);
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void setMappingExp(CGMappingExp newMappingExp) {
if (newMappingExp != eInternalContainer() || (eContainerFeatureID() != QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP && newMappingExp != null)) {
if (EcoreUtil.isAncestor(this, newMappingExp))
throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
NotificationChain msgs = null;
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
if (newMappingExp != null)
msgs = ((InternalEObject)newMappingExp).eInverseAdd(this, QVTiCGModelPackage.CG_MAPPING_EXP__PREDICATES, CGMappingExp.class, msgs);
msgs = basicSetMappingExp(newMappingExp, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP, newMappingExp, newMappingExp));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public CGValuedElement getThenExpression() {
return thenExpression;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetThenExpression(CGValuedElement newThenExpression, NotificationChain msgs) {
CGValuedElement oldThenExpression = thenExpression;
thenExpression = newThenExpression;
if (eNotificationRequired()) {
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION, oldThenExpression, newThenExpression);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void setThenExpression(CGValuedElement newThenExpression) {
if (newThenExpression != thenExpression) {
NotificationChain msgs = null;
if (thenExpression != null)
msgs = ((InternalEObject)thenExpression).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION, null, msgs);
if (newThenExpression != null)
msgs = ((InternalEObject)newThenExpression).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION, null, msgs);
msgs = basicSetThenExpression(newThenExpression, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION, newThenExpression, newThenExpression));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
return basicSetMappingExp((CGMappingExp)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 QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION:
return basicSetConditionExpression(null, msgs);
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
return basicSetMappingExp(null, msgs);
case QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION:
return basicSetThenExpression(null, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
switch (eContainerFeatureID()) {
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
return eInternalContainer().eInverseRemove(this, QVTiCGModelPackage.CG_MAPPING_EXP__PREDICATES, CGMappingExp.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 QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION:
return getConditionExpression();
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
return getMappingExp();
case QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION:
return getThenExpression();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION:
setConditionExpression((CGValuedElement)newValue);
return;
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
setMappingExp((CGMappingExp)newValue);
return;
case QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION:
setThenExpression((CGValuedElement)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION:
setConditionExpression((CGValuedElement)null);
return;
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
setMappingExp((CGMappingExp)null);
return;
case QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION:
setThenExpression((CGValuedElement)null);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case QVTiCGModelPackage.CG_PREDICATE__CONDITION_EXPRESSION:
return conditionExpression != null;
case QVTiCGModelPackage.CG_PREDICATE__MAPPING_EXP:
return getMappingExp() != null;
case QVTiCGModelPackage.CG_PREDICATE__THEN_EXPRESSION:
return thenExpression != null;
}
return super.eIsSet(featureID);
}
/**
* {@inheritDoc}
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public @Nullable <R> R accept(@NonNull CGModelVisitor<R> visitor) {
return (R) ((QVTiCGModelVisitor<?>)visitor).visitCGPredicate(this);
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public @Nullable TypeId getASTypeId() {
return TypeId.BOOLEAN;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public @Nullable CGInvalid getInvalidValue() {
CGInvalid invalidValue = (conditionExpression != null) ? conditionExpression.getInvalidValue() : null;
if (invalidValue == null) {
invalidValue = (thenExpression != null) ? thenExpression.getInvalidValue() : null;
}
return invalidValue;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public @Nullable AbstractPlace getPlace(@NonNull Map<CGElement,AbstractPlace> element2place) {
return PredicatePlaces.createPredicatePlaces(element2place, this);
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isAssertedNonNull() {
return false;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isBoxed() {
return true;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public @Nullable Boolean isEquivalentToInternal(@NonNull CGValuedElement thatValue) {
if (this == thatValue) {
return Boolean.TRUE;
}
else {
return Boolean.FALSE;
}
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isFalse() {
return ((conditionExpression != null) && conditionExpression.isFalse()) || ((thenExpression != null) && thenExpression.isFalse());
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isGlobal() {
return false;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isNonInvalid() {
return ((conditionExpression != null) && conditionExpression.isNonInvalid()) && ((thenExpression != null) && thenExpression.isNonInvalid());
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isNonNull() {
return true;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isNull() {
return false;
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isTrue() {
return ((conditionExpression != null) && conditionExpression.isTrue()) && ((thenExpression != null) && thenExpression.isTrue());
}
/**
* {@inheritDoc}
* @generated
*/
@Override
public boolean isUnboxed() {
return true;
}
} //CGPredicateImpl