| /** |
| * Copyright (c) 2002-2014 IBM Corporation, CEA, 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: |
| * IBM - Initial API and implementation |
| * Christian W. Damus (CEA) - 433108 |
| */ |
| package org.eclipse.emf.ecore.impl; |
| |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.Collection; |
| import java.util.List; |
| import java.util.Map; |
| |
| 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.common.notify.impl.NotificationChainImpl; |
| import org.eclipse.emf.common.util.BasicEMap; |
| import org.eclipse.emf.common.util.EMap; |
| import org.eclipse.emf.ecore.EAnnotation; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EClassifier; |
| import org.eclipse.emf.ecore.EGenericType; |
| import org.eclipse.emf.ecore.EDataType; |
| import org.eclipse.emf.ecore.EFactory; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.EReference; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.ecore.EcorePackage; |
| import org.eclipse.emf.ecore.InternalEObject; |
| import org.eclipse.emf.ecore.util.BasicExtendedMetaData; |
| import org.eclipse.emf.ecore.util.BasicFeatureMap; |
| import org.eclipse.emf.ecore.util.EDataTypeEList; |
| import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; |
| import org.eclipse.emf.ecore.util.EObjectContainmentEList; |
| import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; |
| import org.eclipse.emf.ecore.util.EObjectEList; |
| import org.eclipse.emf.ecore.util.EObjectResolvingEList; |
| import org.eclipse.emf.ecore.util.EObjectWithInverseEList; |
| import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; |
| import org.eclipse.emf.ecore.util.EcoreEList; |
| import org.eclipse.emf.ecore.util.EcoreEMap; |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| import org.eclipse.emf.ecore.util.ExtendedMetaData; |
| import org.eclipse.emf.ecore.util.FeatureMap; |
| import org.eclipse.emf.ecore.util.InternalEList; |
| import org.eclipse.emf.ecore.xml.type.XMLTypePackage; |
| |
| |
| /** |
| * <!-- begin-user-doc --> |
| * An implementation of the model object '<em><b>EStructural Feature</b></em>'. |
| * @extends EStructuralFeature.Internal, BasicExtendedMetaData.EStructuralFeatureExtendedMetaData.Holder |
| * <!-- end-user-doc --> |
| * <p> |
| * The following features are implemented: |
| * </p> |
| * <ul> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#isChangeable <em>Changeable</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#isVolatile <em>Volatile</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#isTransient <em>Transient</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#getDefaultValueLiteral <em>Default Value Literal</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#getDefaultValue <em>Default Value</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#isUnsettable <em>Unsettable</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#isDerived <em>Derived</em>}</li> |
| * <li>{@link org.eclipse.emf.ecore.impl.EStructuralFeatureImpl#getEContainingClass <em>EContaining Class</em>}</li> |
| * </ul> |
| * |
| * @generated |
| */ |
| public abstract class EStructuralFeatureImpl extends ETypedElementImpl implements EStructuralFeature, EStructuralFeature.Internal, BasicExtendedMetaData.EStructuralFeatureExtendedMetaData.Holder |
| { |
| protected int featureID = -1; |
| protected Class<?> containerClass; |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| protected EStructuralFeatureImpl() |
| { |
| super(); |
| eFlags |= CHANGEABLE_EFLAG; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| protected EClass eStaticClass() |
| { |
| return EcorePackage.Literals.ESTRUCTURAL_FEATURE; |
| } |
| |
| @Override |
| protected void freeze() |
| { |
| // Bug 433108: Lock in the shared extended metadata for this feature |
| ExtendedMetaData.INSTANCE.getName(this); |
| |
| super.freeze(); |
| } |
| |
| protected Object defaultValue = null; |
| protected EFactory defaultValueFactory = null; |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated modifiable |
| */ |
| public Object getDefaultValue() |
| { |
| EClassifier eType = getEType(); |
| String literal = getDefaultValueLiteral(); |
| |
| if (literal == null && eType != null) |
| { |
| return isMany()? null : eType.getDefaultValue(); |
| } |
| else if (eType instanceof EDataType) |
| { |
| EPackage ePackage = eType.getEPackage(); |
| if (ePackage != null) |
| { |
| EFactory factory = ePackage.getEFactoryInstance(); |
| if (factory != defaultValueFactory) |
| { |
| EDataType eDataType = (EDataType)eType; |
| if (eDataType.isSerializable()) |
| { |
| try |
| { |
| defaultValue = factory.createFromString(eDataType, literal); |
| } |
| catch (Throwable e) |
| { |
| // At development time, the real factory may not be available. Just return null. |
| // |
| defaultValue = null; |
| } |
| } |
| defaultValueFactory = factory; |
| } |
| } |
| return defaultValue; |
| } |
| return null; |
| } |
| |
| public void setDefaultValue(Object newDefaultValue) |
| { |
| EClassifier eType = getEType(); |
| if (eType instanceof EDataType) |
| { |
| EFactory factory = eType.getEPackage().getEFactoryInstance(); |
| String literal = factory.convertToString((EDataType)eType, newDefaultValue); |
| defaultValueFactory = null; |
| setDefaultValueLiteralGen(literal); |
| return; |
| } |
| throw new IllegalStateException("Cannot serialize value to object without an EDataType eType"); |
| } |
| |
| public void setDefaultValueLiteral(String newDefaultValueLiteral) |
| { |
| defaultValueFactory = null; |
| setDefaultValueLiteralGen(newDefaultValueLiteral); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public void setDefaultValueLiteralGen(String newDefaultValueLiteral) |
| { |
| String oldDefaultValueLiteral = defaultValueLiteral; |
| defaultValueLiteral = newDefaultValueLiteral; |
| if (eNotificationRequired()) |
| eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE_LITERAL, oldDefaultValueLiteral, defaultValueLiteral)); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean isUnsettable() |
| { |
| return (eFlags & UNSETTABLE_EFLAG) != 0; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public void setUnsettable(boolean newUnsettable) |
| { |
| boolean oldUnsettable = (eFlags & UNSETTABLE_EFLAG) != 0; |
| if (newUnsettable) eFlags |= UNSETTABLE_EFLAG; else eFlags &= ~UNSETTABLE_EFLAG; |
| if (eNotificationRequired()) |
| eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ESTRUCTURAL_FEATURE__UNSETTABLE, oldUnsettable, newUnsettable)); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean isDerived() |
| { |
| return (eFlags & DERIVED_EFLAG) != 0; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public void setDerived(boolean newDerived) |
| { |
| boolean oldDerived = (eFlags & DERIVED_EFLAG) != 0; |
| if (newDerived) eFlags |= DERIVED_EFLAG; else eFlags &= ~DERIVED_EFLAG; |
| if (eNotificationRequired()) |
| eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ESTRUCTURAL_FEATURE__DERIVED, oldDerived, newDerived)); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public EClass getEContainingClass() |
| { |
| if (eContainerFeatureID() != EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS) return null; |
| return (EClass)eInternalContainer(); |
| } |
| |
| /** |
| * The default value of the '{@link #isChangeable() <em>Changeable</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isChangeable() |
| * @generated |
| * @ordered |
| */ |
| protected static final boolean CHANGEABLE_EDEFAULT = true; |
| |
| /** |
| * The flag representing the value of the '{@link #isChangeable() <em>Changeable</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isChangeable() |
| * @generated |
| * @ordered |
| */ |
| protected static final int CHANGEABLE_EFLAG = 1 << 10; |
| |
| /** |
| * The default value of the '{@link #isVolatile() <em>Volatile</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isVolatile() |
| * @generated |
| * @ordered |
| */ |
| protected static final boolean VOLATILE_EDEFAULT = false; |
| |
| /** |
| * The flag representing the value of the '{@link #isVolatile() <em>Volatile</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isVolatile() |
| * @generated |
| * @ordered |
| */ |
| protected static final int VOLATILE_EFLAG = 1 << 11; |
| |
| /** |
| * The default value of the '{@link #isTransient() <em>Transient</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isTransient() |
| * @generated |
| * @ordered |
| */ |
| protected static final boolean TRANSIENT_EDEFAULT = false; |
| |
| /** |
| * The flag representing the value of the '{@link #isTransient() <em>Transient</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isTransient() |
| * @generated |
| * @ordered |
| */ |
| protected static final int TRANSIENT_EFLAG = 1 << 12; |
| |
| /** |
| * The default value of the '{@link #getDefaultValueLiteral() <em>Default Value Literal</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #getDefaultValueLiteral() |
| * @generated |
| * @ordered |
| */ |
| protected static final String DEFAULT_VALUE_LITERAL_EDEFAULT = null; |
| |
| /** |
| * The cached value of the '{@link #getDefaultValueLiteral() <em>Default Value Literal</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #getDefaultValueLiteral() |
| * @generated |
| * @ordered |
| */ |
| protected String defaultValueLiteral = DEFAULT_VALUE_LITERAL_EDEFAULT; |
| |
| /** |
| * The default value of the '{@link #getDefaultValue() <em>Default Value</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #getDefaultValue() |
| * @generated |
| * @ordered |
| */ |
| protected static final Object DEFAULT_VALUE_EDEFAULT = null; |
| |
| /** |
| * The default value of the '{@link #isUnsettable() <em>Unsettable</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isUnsettable() |
| * @generated |
| * @ordered |
| */ |
| protected static final boolean UNSETTABLE_EDEFAULT = false; |
| |
| /** |
| * The flag representing the value of the '{@link #isUnsettable() <em>Unsettable</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isUnsettable() |
| * @generated |
| * @ordered |
| */ |
| protected static final int UNSETTABLE_EFLAG = 1 << 13; |
| |
| /** |
| * The default value of the '{@link #isDerived() <em>Derived</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isDerived() |
| * @generated |
| * @ordered |
| */ |
| protected static final boolean DERIVED_EDEFAULT = false; |
| |
| /** |
| * The flag representing the value of the '{@link #isDerived() <em>Derived</em>}' attribute. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see #isDerived() |
| * @generated |
| * @ordered |
| */ |
| protected static final int DERIVED_EFLAG = 1 << 14; |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean isTransient() |
| { |
| return (eFlags & TRANSIENT_EFLAG) != 0; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public void setTransient(boolean newTransient) |
| { |
| boolean oldTransient = (eFlags & TRANSIENT_EFLAG) != 0; |
| if (newTransient) eFlags |= TRANSIENT_EFLAG; else eFlags &= ~TRANSIENT_EFLAG; |
| if (eNotificationRequired()) |
| eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ESTRUCTURAL_FEATURE__TRANSIENT, oldTransient, newTransient)); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean isVolatile() |
| { |
| return (eFlags & VOLATILE_EFLAG) != 0; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public void setVolatile(boolean newVolatile) |
| { |
| boolean oldVolatile = (eFlags & VOLATILE_EFLAG) != 0; |
| if (newVolatile) eFlags |= VOLATILE_EFLAG; else eFlags &= ~VOLATILE_EFLAG; |
| if (eNotificationRequired()) |
| eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ESTRUCTURAL_FEATURE__VOLATILE, oldVolatile, newVolatile)); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean isChangeable() |
| { |
| return (eFlags & CHANGEABLE_EFLAG) != 0; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public void setChangeable(boolean newChangeable) |
| { |
| boolean oldChangeable = (eFlags & CHANGEABLE_EFLAG) != 0; |
| if (newChangeable) eFlags |= CHANGEABLE_EFLAG; else eFlags &= ~CHANGEABLE_EFLAG; |
| if (eNotificationRequired()) |
| eNotify(new ENotificationImpl(this, Notification.SET, EcorePackage.ESTRUCTURAL_FEATURE__CHANGEABLE, oldChangeable, newChangeable)); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public String getDefaultValueLiteral() |
| { |
| return defaultValueLiteral; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public String toString() |
| { |
| if (eIsProxy()) return super.toString(); |
| |
| StringBuffer result = new StringBuffer(super.toString()); |
| result.append(" (changeable: "); |
| result.append((eFlags & CHANGEABLE_EFLAG) != 0); |
| result.append(", volatile: "); |
| result.append((eFlags & VOLATILE_EFLAG) != 0); |
| result.append(", transient: "); |
| result.append((eFlags & TRANSIENT_EFLAG) != 0); |
| result.append(", defaultValueLiteral: "); |
| result.append(defaultValueLiteral); |
| result.append(", unsettable: "); |
| result.append((eFlags & UNSETTABLE_EFLAG) != 0); |
| result.append(", derived: "); |
| result.append((eFlags & DERIVED_EFLAG) != 0); |
| result.append(')'); |
| return result.toString(); |
| } |
| |
| /** |
| * @generated modifiable |
| */ |
| public int getFeatureID() |
| { |
| return featureID; |
| } |
| |
| public void setFeatureID(int featureID) |
| { |
| this.featureID = featureID; |
| } |
| |
| /** |
| * @generated modifiable |
| */ |
| public Class<?> getContainerClass() |
| { |
| return containerClass; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @SuppressWarnings("unchecked") |
| @Override |
| public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) |
| { |
| switch (featureID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__EANNOTATIONS: |
| return ((InternalEList<InternalEObject>)(InternalEList<?>)getEAnnotations()).basicAdd(otherEnd, msgs); |
| case EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS: |
| if (eInternalContainer() != null) |
| msgs = eBasicRemoveFromContainer(msgs); |
| return eBasicSetContainer(otherEnd, EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS, msgs); |
| } |
| return eDynamicInverseAdd(otherEnd, featureID, msgs); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) |
| { |
| switch (featureID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__EANNOTATIONS: |
| return ((InternalEList<?>)getEAnnotations()).basicRemove(otherEnd, msgs); |
| case EcorePackage.ESTRUCTURAL_FEATURE__EGENERIC_TYPE: |
| return basicUnsetEGenericType(msgs); |
| case EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS: |
| return eBasicSetContainer(null, EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS, msgs); |
| } |
| return eDynamicInverseRemove(otherEnd, featureID, msgs); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) |
| { |
| switch (eContainerFeatureID()) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS: |
| return eInternalContainer().eInverseRemove(this, EcorePackage.ECLASS__ESTRUCTURAL_FEATURES, EClass.class, msgs); |
| } |
| return eDynamicBasicRemoveFromContainer(msgs); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public Object eGet(int featureID, boolean resolve, boolean coreType) |
| { |
| switch (featureID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__EANNOTATIONS: |
| return getEAnnotations(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__NAME: |
| return getName(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__ORDERED: |
| return isOrdered(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNIQUE: |
| return isUnique(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__LOWER_BOUND: |
| return getLowerBound(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__UPPER_BOUND: |
| return getUpperBound(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__MANY: |
| return isMany(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__REQUIRED: |
| return isRequired(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__ETYPE: |
| if (resolve) return getEType(); |
| return basicGetEType(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__EGENERIC_TYPE: |
| return getEGenericType(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__CHANGEABLE: |
| return isChangeable(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__VOLATILE: |
| return isVolatile(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__TRANSIENT: |
| return isTransient(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE_LITERAL: |
| return getDefaultValueLiteral(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE: |
| return getDefaultValue(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNSETTABLE: |
| return isUnsettable(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__DERIVED: |
| return isDerived(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS: |
| return getEContainingClass(); |
| } |
| return eDynamicGet(featureID, resolve, coreType); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @SuppressWarnings("unchecked") |
| @Override |
| public void eSet(int featureID, Object newValue) |
| { |
| switch (featureID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__EANNOTATIONS: |
| getEAnnotations().clear(); |
| getEAnnotations().addAll((Collection<? extends EAnnotation>)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__NAME: |
| setName((String)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__ORDERED: |
| setOrdered((Boolean)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNIQUE: |
| setUnique((Boolean)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__LOWER_BOUND: |
| setLowerBound((Integer)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UPPER_BOUND: |
| setUpperBound((Integer)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__ETYPE: |
| setEType((EClassifier)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__EGENERIC_TYPE: |
| setEGenericType((EGenericType)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__CHANGEABLE: |
| setChangeable((Boolean)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__VOLATILE: |
| setVolatile((Boolean)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__TRANSIENT: |
| setTransient((Boolean)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE_LITERAL: |
| setDefaultValueLiteral((String)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNSETTABLE: |
| setUnsettable((Boolean)newValue); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__DERIVED: |
| setDerived((Boolean)newValue); |
| return; |
| } |
| eDynamicSet(featureID, newValue); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public void eUnset(int featureID) |
| { |
| switch (featureID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__EANNOTATIONS: |
| getEAnnotations().clear(); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__NAME: |
| setName(NAME_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__ORDERED: |
| setOrdered(ORDERED_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNIQUE: |
| setUnique(UNIQUE_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__LOWER_BOUND: |
| setLowerBound(LOWER_BOUND_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UPPER_BOUND: |
| setUpperBound(UPPER_BOUND_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__ETYPE: |
| unsetEType(); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__EGENERIC_TYPE: |
| unsetEGenericType(); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__CHANGEABLE: |
| setChangeable(CHANGEABLE_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__VOLATILE: |
| setVolatile(VOLATILE_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__TRANSIENT: |
| setTransient(TRANSIENT_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE_LITERAL: |
| setDefaultValueLiteral(DEFAULT_VALUE_LITERAL_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNSETTABLE: |
| setUnsettable(UNSETTABLE_EDEFAULT); |
| return; |
| case EcorePackage.ESTRUCTURAL_FEATURE__DERIVED: |
| setDerived(DERIVED_EDEFAULT); |
| return; |
| } |
| eDynamicUnset(featureID); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public boolean eIsSet(int featureID) |
| { |
| switch (featureID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE__EANNOTATIONS: |
| return eAnnotations != null && !eAnnotations.isEmpty(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__NAME: |
| return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); |
| case EcorePackage.ESTRUCTURAL_FEATURE__ORDERED: |
| return ((eFlags & ORDERED_EFLAG) != 0) != ORDERED_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNIQUE: |
| return ((eFlags & UNIQUE_EFLAG) != 0) != UNIQUE_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__LOWER_BOUND: |
| return lowerBound != LOWER_BOUND_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__UPPER_BOUND: |
| return upperBound != UPPER_BOUND_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__MANY: |
| return isMany() != MANY_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__REQUIRED: |
| return isRequired() != REQUIRED_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__ETYPE: |
| return isSetEType(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__EGENERIC_TYPE: |
| return isSetEGenericType(); |
| case EcorePackage.ESTRUCTURAL_FEATURE__CHANGEABLE: |
| return ((eFlags & CHANGEABLE_EFLAG) != 0) != CHANGEABLE_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__VOLATILE: |
| return ((eFlags & VOLATILE_EFLAG) != 0) != VOLATILE_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__TRANSIENT: |
| return ((eFlags & TRANSIENT_EFLAG) != 0) != TRANSIENT_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE_LITERAL: |
| return DEFAULT_VALUE_LITERAL_EDEFAULT == null ? defaultValueLiteral != null : !DEFAULT_VALUE_LITERAL_EDEFAULT.equals(defaultValueLiteral); |
| case EcorePackage.ESTRUCTURAL_FEATURE__DEFAULT_VALUE: |
| return DEFAULT_VALUE_EDEFAULT == null ? getDefaultValue() != null : !DEFAULT_VALUE_EDEFAULT.equals(getDefaultValue()); |
| case EcorePackage.ESTRUCTURAL_FEATURE__UNSETTABLE: |
| return ((eFlags & UNSETTABLE_EFLAG) != 0) != UNSETTABLE_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__DERIVED: |
| return ((eFlags & DERIVED_EFLAG) != 0) != DERIVED_EDEFAULT; |
| case EcorePackage.ESTRUCTURAL_FEATURE__ECONTAINING_CLASS: |
| return getEContainingClass() != null; |
| } |
| return eDynamicIsSet(featureID); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException |
| { |
| switch (operationID) |
| { |
| case EcorePackage.ESTRUCTURAL_FEATURE___GET_EANNOTATION__STRING: |
| return getEAnnotation((String)arguments.get(0)); |
| case EcorePackage.ESTRUCTURAL_FEATURE___GET_FEATURE_ID: |
| return getFeatureID(); |
| case EcorePackage.ESTRUCTURAL_FEATURE___GET_CONTAINER_CLASS: |
| return getContainerClass(); |
| } |
| return eDynamicInvoke(operationID, arguments); |
| } |
| |
| public void setContainerClass(Class<?> containerClass) |
| { |
| this.containerClass = containerClass; |
| } |
| |
| public boolean isResolveProxies() |
| { |
| return false; |
| } |
| |
| public boolean isContainer() |
| { |
| return false; |
| } |
| |
| public boolean isContainment() |
| { |
| return false; |
| } |
| |
| public EReference getEOpposite() |
| { |
| return null; |
| } |
| |
| public boolean isID() |
| { |
| return false; |
| } |
| |
| protected EStructuralFeature.Internal.SettingDelegate settingDelegate; |
| |
| public EStructuralFeature.Internal.SettingDelegate getSettingDelegate() |
| { |
| if (settingDelegate == null) |
| { |
| EClass eClass = getEContainingClass(); |
| eClass.getFeatureCount(); |
| EReference eOpposite = getEOpposite(); |
| if (eOpposite != null) |
| { |
| eOpposite.getEContainingClass().getFeatureCount(); |
| } |
| |
| EClassifier eType = getEType(); |
| Class<?> instanceClass = eType.getInstanceClass(); |
| Class<?> dataClass = EcoreUtil.wrapperClassFor(instanceClass); |
| Object defaultValue = getDefaultValue(); |
| Object intrinsicDefaultValue = eType.getDefaultValue(); |
| |
| EStructuralFeature featureMapFeature; |
| SettingDelegate.Factory settingDelegateFactory; |
| if ((settingDelegateFactory = EcoreUtil.getSettingDelegateFactory(this)) != null) |
| { |
| settingDelegate = settingDelegateFactory.createSettingDelegate(this); |
| } |
| else if (isDerived() && |
| (((featureMapFeature = ExtendedMetaData.INSTANCE.getMixedFeature(eClass)) != null && |
| featureMapFeature != this) || |
| ((featureMapFeature = ExtendedMetaData.INSTANCE.getGroup(this)) != null))) |
| { |
| settingDelegate = new InternalSettingDelegateFeatureMapDelegator(this, featureMapFeature); |
| } |
| else if (isMany()) |
| { |
| if (isContainment()) |
| { |
| if (eOpposite == null) |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_UNSETTABLE_DYNAMIC_RESOLVE, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_UNSETTABLE_DYNAMIC, this); |
| } |
| } |
| else if (dataClass == Map.Entry.class) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EMAP_UNSETTABLE, BasicEMap.Entry.class, this); |
| } |
| else |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_UNSETTABLE_RESOLVE, dataClass, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_UNSETTABLE, dataClass, this); |
| } |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_DYNAMIC_RESOLVE, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_DYNAMIC, this); |
| } |
| } |
| else if (dataClass == Map.Entry.class) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EMAP, BasicEMap.Entry.class, this); |
| } |
| else |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_RESOLVE, dataClass, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT, dataClass, this); |
| |
| } |
| } |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_UNSETTABLE_DYNAMIC_RESOLVE, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_UNSETTABLE_DYNAMIC, this, eOpposite); |
| } |
| } |
| else |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_UNSETTABLE_RESOLVE, dataClass, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_UNSETTABLE, dataClass, this, eOpposite); |
| } |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_DYNAMIC_RESOLVE, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_DYNAMIC, this, eOpposite); |
| } |
| } |
| |
| else |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE_RESOLVE, dataClass, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.CONTAINMENT_INVERSE, dataClass, this, eOpposite); |
| } |
| } |
| } |
| } |
| } |
| else if (eType instanceof EDataType) |
| { |
| if (dataClass == FeatureMap.Entry.class) |
| { |
| settingDelegate = createFeatureMapSettingDelegate(); |
| } |
| else if (isUnique()) |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_UNIQUE_UNSETTABLE_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_UNIQUE_UNSETTABLE, dataClass, this); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_UNIQUE_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_UNIQUE, dataClass, this); |
| } |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_UNSETTABLE_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_UNSETTABLE, dataClass, this); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.DATA, dataClass, this); |
| } |
| } |
| } |
| } |
| else if (eOpposite == null) |
| { |
| if (isResolveProxies()) |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_RESOLVE_UNSETTABLE_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_RESOLVE_UNSETTABLE, dataClass, this); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_RESOLVE_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_RESOLVE, dataClass, this); |
| } |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_UNSETTABLE_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_UNSETTABLE, dataClass, this); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT_DYNAMIC, this); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.EOBJECT, dataClass, this); |
| } |
| } |
| } |
| } |
| else if (eOpposite.isMany()) |
| { |
| if (isResolveProxies()) |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_RESOLVE_UNSETTABLE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_RESOLVE_UNSETTABLE, dataClass, this, eOpposite); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_RESOLVE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_RESOLVE, dataClass, this, eOpposite); |
| } |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_UNSETTABLE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_UNSETTABLE, dataClass, this, eOpposite); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.MANY_INVERSE, dataClass, this, eOpposite); |
| } |
| } |
| } |
| } |
| else |
| { |
| if (isResolveProxies()) |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_RESOLVE_UNSETTABLE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_RESOLVE_UNSETTABLE, dataClass, this, eOpposite); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_RESOLVE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_RESOLVE, dataClass, this, eOpposite); |
| } |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_UNSETTABLE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_UNSETTABLE, dataClass, this, eOpposite); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE_DYNAMIC, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = |
| new InternalSettingDelegateMany |
| (InternalSettingDelegateMany.INVERSE, dataClass, this, eOpposite); |
| } |
| } |
| } |
| } |
| } |
| else if (isContainer()) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleContainerResolving((EClass)eType, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleContainer((EClass)eType, this, eOpposite); |
| } |
| } |
| else if (eType instanceof EDataType) |
| { |
| if (dataClass == FeatureMap.Entry.class) |
| { |
| settingDelegate = createFeatureMapSettingDelegate(); |
| } |
| else if (isUnsettable()) |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = new InternalSettingDelegateSingleDataUnsettableDynamic((EDataType)eType, defaultValue, intrinsicDefaultValue, this); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleDataUnsettableStatic(dataClass, defaultValue, intrinsicDefaultValue, this, InternalSettingDelegateSingleData.NotificationCreator.get(instanceClass)); |
| } |
| } |
| else |
| { |
| if (dataClass == null) |
| { |
| settingDelegate = new InternalSettingDelegateSingleDataDynamic((EDataType)eType, defaultValue, intrinsicDefaultValue, this); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleDataStatic(dataClass, defaultValue, intrinsicDefaultValue, this, InternalSettingDelegateSingleData.NotificationCreator.get(instanceClass)); |
| } |
| } |
| } |
| else if (isContainment()) |
| { |
| if (eOpposite == null) |
| { |
| if (isUnsettable()) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentUnsettableResolving((EClass)eType, this); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentUnsettable((EClass)eType, this); |
| } |
| } |
| else |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentResolving((EClass)eType, this); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainment((EClass)eType, this); |
| } |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving((EClass)eType, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable((EClass)eType, this, eOpposite); |
| } |
| } |
| else |
| { |
| if (isResolveProxies()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentWithInverseResolving((EClass)eType, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectContainmentWithInverse((EClass)eType, this, eOpposite); |
| } |
| } |
| } |
| } |
| else if (isResolveProxies()) |
| { |
| if (eOpposite == null) |
| { |
| if (isUnsettable()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectResolvingUnsettable((EClass)eType, this); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectResolving((EClass)eType, this); |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable((EClass)eType, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectResolvingWithInverse((EClass)eType, this, eOpposite); |
| } |
| } |
| } |
| else |
| { |
| if (eOpposite == null) |
| { |
| if (isUnsettable()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectUnsettable((EClass)eType, this); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObject((EClass)eType, this); |
| } |
| } |
| else |
| { |
| if (isUnsettable()) |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectWithInverseUnsettable((EClass)eType, this, eOpposite); |
| } |
| else |
| { |
| settingDelegate = new InternalSettingDelegateSingleEObjectWithInverse((EClass)eType, this, eOpposite); |
| } |
| } |
| } |
| } |
| |
| return settingDelegate; |
| } |
| |
| protected EStructuralFeature.Internal.SettingDelegate createFeatureMapSettingDelegate() |
| { |
| return new InternalSettingDelegateMany(InternalSettingDelegateMany.FEATURE_MAP, this); |
| } |
| |
| public void setSettingDelegate(EStructuralFeature.Internal.SettingDelegate settingDelegate) |
| { |
| this.settingDelegate = settingDelegate; |
| } |
| |
| public static class InternalSettingDelegateFeatureMapDelegator implements EStructuralFeature.Internal.SettingDelegate |
| { |
| protected EStructuralFeature feature; |
| protected EStructuralFeature featureMapFeature; |
| |
| public InternalSettingDelegateFeatureMapDelegator(EStructuralFeature feature, EStructuralFeature featureMapFeature) |
| { |
| this.feature = feature; |
| this.featureMapFeature = featureMapFeature; |
| } |
| |
| protected EStructuralFeature.Setting createDynamicSetting(InternalEObject owner) |
| { |
| return ((FeatureMap.Internal)owner.eGet(featureMapFeature)).setting(feature); |
| } |
| |
| public EStructuralFeature.Setting dynamicSetting(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| return createDynamicSetting(owner); |
| } |
| |
| public Object dynamicGet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, boolean resolve, boolean coreType) |
| { |
| FeatureMap.Internal featureMap = (FeatureMap.Internal)owner.eGet(featureMapFeature); |
| return featureMap.setting(feature).get(resolve); |
| } |
| |
| public void dynamicSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, Object newValue) |
| { |
| FeatureMap.Internal featureMap = (FeatureMap.Internal)owner.eGet(featureMapFeature); |
| featureMap.setting(feature).set(newValue); |
| } |
| |
| public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| FeatureMap.Internal featureMap = (FeatureMap.Internal)owner.eGet(featureMapFeature); |
| featureMap.setting(feature).unset(); |
| } |
| |
| public boolean dynamicIsSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| FeatureMap.Internal featureMap = (FeatureMap.Internal)owner.eGet(featureMapFeature); |
| return featureMap.setting(feature).isSet(); |
| } |
| |
| public NotificationChain dynamicInverseAdd |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| FeatureMap.Internal featureMap = (FeatureMap.Internal)owner.eGet(featureMapFeature); |
| return featureMap.basicAdd(feature, otherEnd, notifications); |
| } |
| |
| public NotificationChain dynamicInverseRemove |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| FeatureMap.Internal featureMap = (FeatureMap.Internal)owner.eGet(featureMapFeature); |
| return featureMap.basicRemove(feature, otherEnd, notifications); |
| } |
| } |
| |
| public static class InternalSettingDelegateMany implements EStructuralFeature.Internal.SettingDelegate |
| { |
| public static final int CONTAINMENT_UNSETTABLE_DYNAMIC = 0; |
| public static final int CONTAINMENT_UNSETTABLE = 1; |
| public static final int CONTAINMENT_DYNAMIC = 2; |
| public static final int CONTAINMENT = 3; |
| public static final int CONTAINMENT_INVERSE_UNSETTABLE_DYNAMIC = 4; |
| public static final int CONTAINMENT_INVERSE_UNSETTABLE = 5; |
| public static final int CONTAINMENT_INVERSE_DYNAMIC = 6; |
| public static final int CONTAINMENT_INVERSE = 7; |
| public static final int DATA_UNIQUE_UNSETTABLE_DYNAMIC = 8; |
| public static final int DATA_UNIQUE_UNSETTABLE = 9; |
| public static final int DATA_UNIQUE_DYNAMIC = 10; |
| public static final int DATA_UNIQUE = 11; |
| public static final int DATA_UNSETTABLE_DYNAMIC = 12; |
| public static final int DATA_UNSETTABLE = 13; |
| public static final int DATA_DYNAMIC = 14; |
| public static final int DATA = 15; |
| public static final int EOBJECT_RESOLVE_UNSETTABLE_DYNAMIC = 16; |
| public static final int EOBJECT_RESOLVE_UNSETTABLE = 17; |
| public static final int EOBJECT_RESOLVE_DYNAMIC = 18; |
| public static final int EOBJECT_RESOLVE = 19; |
| public static final int EOBJECT_UNSETTABLE_DYNAMIC = 20; |
| public static final int EOBJECT_UNSETTABLE = 21; |
| public static final int EOBJECT_DYNAMIC = 22; |
| public static final int EOBJECT = 23; |
| public static final int MANY_INVERSE_RESOLVE_UNSETTABLE_DYNAMIC = 24; |
| public static final int MANY_INVERSE_RESOLVE_UNSETTABLE = 25; |
| public static final int MANY_INVERSE_RESOLVE_DYNAMIC = 26; |
| public static final int MANY_INVERSE_RESOLVE = 27; |
| public static final int MANY_INVERSE_UNSETTABLE_DYNAMIC = 28; |
| public static final int MANY_INVERSE_UNSETTABLE = 29; |
| public static final int MANY_INVERSE_DYNAMIC = 30; |
| public static final int MANY_INVERSE = 31; |
| public static final int INVERSE_RESOLVE_UNSETTABLE_DYNAMIC = 32; |
| public static final int INVERSE_RESOLVE_UNSETTABLE = 33; |
| public static final int INVERSE_RESOLVE_DYNAMIC = 34; |
| public static final int INVERSE_RESOLVE = 35; |
| public static final int INVERSE_UNSETTABLE_DYNAMIC = 36; |
| public static final int INVERSE_UNSETTABLE = 37; |
| public static final int INVERSE_DYNAMIC = 38; |
| public static final int INVERSE = 39; |
| public static final int FEATURE_MAP = 40; |
| public static final int EMAP = 41; |
| public static final int CONTAINMENT_UNSETTABLE_DYNAMIC_RESOLVE = 42; |
| public static final int CONTAINMENT_UNSETTABLE_RESOLVE = 43; |
| public static final int CONTAINMENT_DYNAMIC_RESOLVE = 44; |
| public static final int CONTAINMENT_RESOLVE = 45; |
| public static final int CONTAINMENT_INVERSE_UNSETTABLE_DYNAMIC_RESOLVE = 46; |
| public static final int CONTAINMENT_INVERSE_UNSETTABLE_RESOLVE = 47; |
| public static final int CONTAINMENT_INVERSE_DYNAMIC_RESOLVE = 48; |
| public static final int CONTAINMENT_INVERSE_RESOLVE = 49; |
| public static final int EMAP_UNSETTABLE = 50; |
| |
| protected int style; |
| protected int dynamicKind; |
| protected Class<?> dataClass; |
| protected EStructuralFeature feature; |
| protected EReference inverseFeature; |
| |
| public InternalSettingDelegateMany(int style, Class<?> dataClass, EStructuralFeature feature) |
| { |
| this.style = style; |
| this.dataClass = dataClass; |
| this.feature = feature; |
| } |
| |
| public InternalSettingDelegateMany(int style, EStructuralFeature feature) |
| { |
| this.style = style; |
| this.dataClass = Object.class; |
| this.dynamicKind = EcoreEList.Generic.kind(feature); |
| this.feature = feature; |
| } |
| |
| public InternalSettingDelegateMany(int style, Class<?> dataClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| this.style = style; |
| this.dataClass = dataClass; |
| this.feature = feature; |
| this.inverseFeature = inverseFeature; |
| } |
| |
| public InternalSettingDelegateMany(int style, EStructuralFeature feature, EReference inverseFeature) |
| { |
| this.style = style; |
| this.dataClass = Object.class; |
| this.dynamicKind = EcoreEList.Generic.kind(feature); |
| this.feature = feature; |
| this.inverseFeature = inverseFeature; |
| } |
| |
| protected EStructuralFeature.Setting createDynamicSetting(InternalEObject owner) |
| { |
| switch (style) |
| { |
| case CONTAINMENT_UNSETTABLE_DYNAMIC: |
| case CONTAINMENT_DYNAMIC: |
| case CONTAINMENT_INVERSE_UNSETTABLE_DYNAMIC: |
| case CONTAINMENT_INVERSE_DYNAMIC: |
| case CONTAINMENT_UNSETTABLE_DYNAMIC_RESOLVE: |
| case CONTAINMENT_DYNAMIC_RESOLVE: |
| case CONTAINMENT_INVERSE_UNSETTABLE_DYNAMIC_RESOLVE: |
| case CONTAINMENT_INVERSE_DYNAMIC_RESOLVE: |
| case DATA_UNIQUE_UNSETTABLE_DYNAMIC: |
| case DATA_UNIQUE_DYNAMIC: |
| case DATA_UNSETTABLE_DYNAMIC: |
| case DATA_DYNAMIC: |
| case EOBJECT_RESOLVE_UNSETTABLE_DYNAMIC: |
| case EOBJECT_RESOLVE_DYNAMIC: |
| case EOBJECT_UNSETTABLE_DYNAMIC: |
| case EOBJECT_DYNAMIC: |
| case MANY_INVERSE_RESOLVE_UNSETTABLE_DYNAMIC: |
| case MANY_INVERSE_RESOLVE_DYNAMIC: |
| case MANY_INVERSE_UNSETTABLE_DYNAMIC: |
| case MANY_INVERSE_DYNAMIC: |
| case INVERSE_RESOLVE_UNSETTABLE_DYNAMIC: |
| case INVERSE_RESOLVE_DYNAMIC: |
| case INVERSE_UNSETTABLE_DYNAMIC: |
| case INVERSE_DYNAMIC: |
| return new EcoreEList.Dynamic<Object>(dynamicKind, dataClass, owner, feature); |
| case CONTAINMENT_UNSETTABLE: |
| return new EObjectContainmentEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case CONTAINMENT_UNSETTABLE_RESOLVE: |
| return new EObjectContainmentEList.Unsettable.Resolving<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case CONTAINMENT: |
| return new EObjectContainmentEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case CONTAINMENT_RESOLVE: |
| return new EObjectContainmentEList.Resolving<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case EMAP: |
| return new EcoreEMap<Object, Object>((EClass)feature.getEType(), dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case EMAP_UNSETTABLE: |
| return new EcoreEMap.Unsettable<Object, Object>((EClass)feature.getEType(), dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case CONTAINMENT_INVERSE_UNSETTABLE: |
| return new EObjectContainmentWithInverseEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case CONTAINMENT_INVERSE_UNSETTABLE_RESOLVE: |
| return new EObjectContainmentWithInverseEList.Unsettable.Resolving<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case CONTAINMENT_INVERSE: |
| return new EObjectContainmentWithInverseEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case CONTAINMENT_INVERSE_RESOLVE: |
| return new EObjectContainmentWithInverseEList.Resolving<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case DATA_UNIQUE_UNSETTABLE: |
| return new EDataTypeUniqueEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case DATA_UNIQUE: |
| return new EDataTypeUniqueEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case DATA_UNSETTABLE: |
| return new EDataTypeEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case DATA: |
| return new EDataTypeEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case EOBJECT_RESOLVE_UNSETTABLE: |
| return new EObjectResolvingEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case EOBJECT_RESOLVE: |
| return new EObjectResolvingEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case EOBJECT_UNSETTABLE: |
| return new EObjectEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case EOBJECT: |
| return new EObjectEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature)); |
| case MANY_INVERSE_RESOLVE_UNSETTABLE: |
| return new EObjectWithInverseResolvingEList.Unsettable.ManyInverse<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case MANY_INVERSE_RESOLVE: |
| return new EObjectWithInverseResolvingEList.ManyInverse<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case MANY_INVERSE_UNSETTABLE: |
| return new EObjectWithInverseEList.Unsettable.ManyInverse<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case MANY_INVERSE: |
| return new EObjectWithInverseEList.ManyInverse<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case INVERSE_RESOLVE_UNSETTABLE: |
| return new EObjectWithInverseResolvingEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case INVERSE_RESOLVE: |
| return new EObjectWithInverseResolvingEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case INVERSE_UNSETTABLE: |
| return new EObjectWithInverseEList.Unsettable<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case INVERSE: |
| return new EObjectWithInverseEList<Object>(dataClass, owner, owner.eClass().getFeatureID(feature), inverseFeature.getFeatureID()); |
| case FEATURE_MAP: |
| return new BasicFeatureMap(owner, owner.eClass().getFeatureID(feature)); |
| default: |
| throw new RuntimeException("Unknown feature style: " + style); |
| } |
| } |
| |
| public EStructuralFeature.Setting dynamicSetting(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| Object setting = settings.dynamicGet(index); |
| if (setting == null) |
| { |
| settings.dynamicSet(index, setting = createDynamicSetting(owner)); |
| } |
| |
| if (setting instanceof EStructuralFeature.Setting) |
| { |
| return (EStructuralFeature.Setting)setting; |
| } |
| else |
| { |
| @SuppressWarnings("unchecked") List<Object> result = (List<Object>)settings.dynamicGet(index); |
| return new SettingMany(owner, feature, result); |
| } |
| } |
| |
| public Object dynamicGet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, boolean resolve, boolean coreType) |
| { |
| Object result = settings.dynamicGet(index); |
| if (result == null) |
| { |
| settings.dynamicSet(index, result = createDynamicSetting(owner)); |
| } |
| if (!coreType) |
| { |
| switch (style) |
| { |
| case EMAP_UNSETTABLE: |
| case EMAP : return ((EMap<?, ?>)result).map(); |
| case FEATURE_MAP : return ((FeatureMap.Internal)result).getWrapper(); |
| } |
| } |
| return result; |
| } |
| |
| public void dynamicSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, Object newValue) |
| { |
| EStructuralFeature.Setting setting = (EStructuralFeature.Setting)settings.dynamicGet(index); |
| if (setting == null) |
| { |
| settings.dynamicSet(index, setting = createDynamicSetting(owner)); |
| } |
| setting.set(newValue); |
| } |
| |
| public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| EStructuralFeature.Setting setting = (EStructuralFeature.Setting)settings.dynamicGet(index); |
| if (setting == null) |
| { |
| settings.dynamicSet(index, setting = createDynamicSetting(owner)); |
| } |
| setting.unset(); |
| } |
| |
| public boolean dynamicIsSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| Object setting = settings.dynamicGet(index); |
| if (setting == null) |
| { |
| return false; |
| } |
| else |
| { |
| return ((EStructuralFeature.Setting)setting).isSet(); |
| } |
| } |
| |
| public NotificationChain dynamicInverseAdd |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| Object setting = settings.dynamicGet(index); |
| if (setting == null) |
| { |
| settings.dynamicSet(index, setting = createDynamicSetting(owner)); |
| } |
| @SuppressWarnings("unchecked") NotificationChain result = ((InternalEList<InternalEObject>)setting).basicAdd(otherEnd, notifications); |
| return result; |
| } |
| |
| public NotificationChain dynamicInverseRemove |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| Object setting = settings.dynamicGet(index); |
| if (setting != null) |
| { |
| notifications = ((InternalEList<?>)setting).basicRemove(otherEnd, notifications); |
| } |
| return notifications; |
| } |
| } |
| |
| public static abstract class InternalSettingDelegateSingle implements EStructuralFeature.Internal.SettingDelegate |
| { |
| public static final Object NIL = EStructuralFeature.Internal.DynamicValueHolder.NIL; |
| |
| protected EStructuralFeature feature; |
| |
| public InternalSettingDelegateSingle(EStructuralFeature feature) |
| { |
| this.feature = feature; |
| } |
| |
| public EStructuralFeature.Setting dynamicSetting(final InternalEObject owner, final EStructuralFeature.Internal.DynamicValueHolder settings, final int index) |
| { |
| return |
| new EStructuralFeature.Setting() |
| { |
| public EObject getEObject() |
| { |
| return owner; |
| } |
| |
| public EStructuralFeature getEStructuralFeature() |
| { |
| return feature; |
| } |
| |
| public Object get(boolean resolve) |
| { |
| return dynamicGet(owner, settings, index, resolve, true); |
| } |
| |
| public void set(Object newValue) |
| { |
| dynamicSet(owner, settings, index, newValue); |
| } |
| |
| public boolean isSet() |
| { |
| return dynamicIsSet(owner, settings, index); |
| } |
| |
| public void unset() |
| { |
| dynamicUnset(owner, settings, index); |
| } |
| }; |
| } |
| |
| public NotificationChain dynamicInverseAdd |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| throw new UnsupportedOperationException(); |
| } |
| |
| public NotificationChain dynamicInverseRemove |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| throw new UnsupportedOperationException(); |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleContainer extends InternalSettingDelegateSingle |
| { |
| protected EClass eClass; |
| protected EReference inverseFeature; |
| |
| public InternalSettingDelegateSingleContainer(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(feature); |
| this.eClass = eClass; |
| this.inverseFeature = inverseFeature; |
| } |
| |
| public Object dynamicGet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, boolean resolve, boolean coreType) |
| { |
| return owner.eContainmentFeature() == inverseFeature ? isResolveProxies() && resolve ? owner.eContainer() : owner.eInternalContainer() : null; |
| } |
| |
| protected boolean isResolveProxies() |
| { |
| return false; |
| } |
| |
| public void dynamicSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, Object newValue) |
| { |
| if (newValue != null && !eClass.isInstance(newValue)) |
| { |
| throw |
| new ClassCastException |
| ("The value of type '" + |
| (newValue instanceof EObject ? ((EObject)newValue).eClass().toString() : newValue.getClass().toString()) + |
| "' must be of type '" + eClass + "'"); |
| } |
| |
| EObject eContainer = owner.eInternalContainer(); |
| int featureID = owner.eClass().getFeatureID(feature); |
| if (newValue != eContainer || (owner.eContainerFeatureID() != featureID && newValue != null)) |
| { |
| if (EcoreUtil.isAncestor(owner, (EObject)newValue)) |
| throw new IllegalArgumentException("Recursive containment not allowed for " + owner.toString()); |
| |
| NotificationChain notifications = null; |
| if (eContainer != null) |
| { |
| notifications = owner.eBasicRemoveFromContainer(notifications); |
| } |
| |
| InternalEObject internalEObject = (InternalEObject)newValue; |
| if (internalEObject != null) |
| { |
| notifications = |
| internalEObject.eInverseAdd |
| (owner, internalEObject.eClass().getFeatureID(inverseFeature), null, notifications); |
| } |
| |
| notifications = owner.eBasicSetContainer(internalEObject, featureID, notifications); |
| if (notifications != null) notifications.dispatch(); |
| } |
| else |
| { |
| if (owner.eNotificationRequired()) |
| owner.eNotify(new ENotificationImpl(owner, Notification.SET, featureID, newValue, newValue)); |
| } |
| } |
| |
| public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| EObject eContainer = owner.eInternalContainer(); |
| if (eContainer != null) |
| { |
| NotificationChain notifications = owner.eBasicRemoveFromContainer(null); |
| int featureID = owner.eClass().getFeatureID(feature); |
| notifications = owner.eBasicSetContainer(null, featureID, notifications); |
| if (notifications != null) notifications.dispatch(); |
| } |
| else |
| { |
| if (owner.eNotificationRequired()) |
| owner.eNotify(new ENotificationImpl(owner, Notification.SET, feature, null, null)); |
| } |
| } |
| |
| public boolean dynamicIsSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| int featureID = owner.eClass().getFeatureID(feature); |
| return owner.eInternalContainer() != null && owner.eContainerFeatureID() == featureID; |
| } |
| |
| @Override |
| public NotificationChain dynamicInverseAdd |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| if (owner.eInternalContainer() != null) |
| { |
| notifications = owner.eBasicRemoveFromContainer(notifications); |
| } |
| int featureID = owner.eClass().getFeatureID(feature); |
| return owner.eBasicSetContainer(otherEnd, featureID, notifications); |
| } |
| |
| @Override |
| public NotificationChain dynamicInverseRemove |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| int featureID = owner.eClass().getFeatureID(feature); |
| return owner.eBasicSetContainer(null, featureID, notifications); |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleContainerResolving extends InternalSettingDelegateSingleContainer |
| { |
| public InternalSettingDelegateSingleContainerResolving(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isResolveProxies() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleData extends InternalSettingDelegateSingle |
| { |
| /** |
| * @since 2.9 |
| */ |
| public static class NotificationCreator |
| { |
| public static NotificationCreator get(Class<?> dataClass) |
| { |
| if (dataClass == Integer.TYPE) |
| { |
| return INT_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Boolean.TYPE) |
| { |
| return BOOLEAN_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Long.TYPE) |
| { |
| return LONG_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Float.TYPE) |
| { |
| return FLOAT_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Double.TYPE) |
| { |
| return DOUBLE_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Short.TYPE) |
| { |
| return SHORT_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Byte.TYPE) |
| { |
| return BYTE_NOTIFICATION_CREATOR; |
| } |
| else if (dataClass == Character.TYPE) |
| { |
| return CHAR_NOTIFICATION_CREATOR; |
| } |
| else |
| { |
| return NotificationCreator.OBJECT_NOTIFICATION_CREATOR; |
| } |
| } |
| |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, oldValue, newValue); |
| } |
| |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, oldValue, newValue, wasSet); |
| } |
| |
| public static final NotificationCreator OBJECT_NOTIFICATION_CREATOR = new NotificationCreator(); |
| |
| public static final NotificationCreator BOOLEAN_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Boolean)oldValue).booleanValue(), ((Boolean)newValue).booleanValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Boolean)oldValue).booleanValue(), ((Boolean)newValue).booleanValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator BYTE_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Byte)oldValue).byteValue(), ((Byte)newValue).byteValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Byte)oldValue).byteValue(), ((Byte)newValue).byteValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator CHAR_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Character)oldValue).charValue(), ((Character)newValue).charValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Character)oldValue).charValue(), ((Character)newValue).charValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator DOUBLE_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Double)oldValue).doubleValue(), ((Double)newValue).doubleValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Double)oldValue).doubleValue(), ((Double)newValue).doubleValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator FLOAT_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Float)oldValue).floatValue(), ((Float)newValue).floatValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Float)oldValue).floatValue(), ((Float)newValue).floatValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator INT_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Integer)oldValue).intValue(), ((Integer)newValue).intValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Integer)oldValue).intValue(), ((Integer)newValue).intValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator LONG_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Long)oldValue).longValue(), ((Long)newValue).longValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Long)oldValue).longValue(), ((Long)newValue).longValue(), wasSet); |
| } |
| }; |
| |
| public static final NotificationCreator SHORT_NOTIFICATION_CREATOR = |
| new NotificationCreator() |
| { |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Short)oldValue).shortValue(), ((Short)newValue).shortValue()); |
| } |
| |
| @Override |
| public Notification createNotification(InternalEObject notifier, int eventType, EStructuralFeature feature, Object oldValue, Object newValue, boolean wasSet) |
| { |
| return new ENotificationImpl(notifier, eventType, feature, ((Short)oldValue).shortValue(), ((Short)newValue).shortValue(), wasSet); |
| } |
| }; |
| } |
| |
| protected Object defaultValue; |
| protected Object intrinsicDefaultValue; |
| |
| /** |
| * @since 2.9 |
| */ |
| protected NotificationCreator notificationCreator; |
| |
| public InternalSettingDelegateSingleData(Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) |
| { |
| super(feature); |
| this.defaultValue = defaultValue; |
| this.intrinsicDefaultValue = intrinsicDefaultValue; |
| notificationCreator = NotificationCreator.OBJECT_NOTIFICATION_CREATOR; |
| } |
| |
| /** |
| * @since 2.9 |
| */ |
| public InternalSettingDelegateSingleData(Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature, NotificationCreator notificationCreator) |
| { |
| super(feature); |
| this.defaultValue = defaultValue; |
| this.intrinsicDefaultValue = intrinsicDefaultValue; |
| this.notificationCreator = notificationCreator; |
| } |
| |
| protected void validate(Object object) |
| { |
| throw new ClassCastException(); |
| } |
| |
| public Object dynamicGet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, boolean resolve, boolean coreType) |
| { |
| Object result = settings.dynamicGet(index); |
| if (result == null) |
| { |
| return this.defaultValue; |
| } |
| else if (result == NIL) |
| { |
| return null; |
| } |
| else |
| { |
| return result; |
| } |
| } |
| |
| public void dynamicSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, Object newValue) |
| { |
| if (owner.eNotificationRequired()) |
| { |
| Object oldValue = dynamicGet(owner, settings, index, false, true); |
| |
| if (newValue == null) |
| { |
| if (intrinsicDefaultValue != null) |
| { |
| settings.dynamicSet(index, null); |
| newValue = defaultValue; |
| } |
| else if (defaultValue != null) |
| { |
| settings.dynamicSet(index, NIL); |
| } |
| else |
| { |
| settings.dynamicSet(index, null); |
| } |
| } |
| else |
| { |
| validate(newValue); |
| settings.dynamicSet(index, newValue); |
| } |
| |
| owner.eNotify |
| (notificationCreator.createNotification |
| (owner, |
| Notification.SET, |
| feature, |
| oldValue, |
| newValue)); |
| } |
| else |
| { |
| if (newValue == null) |
| { |
| if (intrinsicDefaultValue != null) |
| { |
| settings.dynamicSet(index, null); |
| } |
| else if (defaultValue != null) |
| { |
| settings.dynamicSet(index, NIL); |
| } |
| else |
| { |
| settings.dynamicSet(index, null); |
| } |
| } |
| else |
| { |
| validate(newValue); |
| settings.dynamicSet(index, newValue); |
| } |
| } |
| } |
| |
| public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| if (owner.eNotificationRequired()) |
| { |
| Object oldValue = dynamicGet(owner, settings, index, false, true); |
| settings.dynamicUnset(index); |
| owner.eNotify |
| (notificationCreator.createNotification |
| (owner, Notification.SET, feature, oldValue, this.defaultValue)); |
| } |
| else |
| { |
| settings.dynamicUnset(index); |
| } |
| } |
| |
| public boolean dynamicIsSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| Object setting = settings.dynamicGet(index); |
| if (setting == null) |
| { |
| return false; |
| } |
| else if (setting == NIL) |
| { |
| return true; |
| } |
| else |
| { |
| return !setting.equals(this.defaultValue); |
| } |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleDataDynamic extends InternalSettingDelegateSingleData |
| { |
| protected EDataType eDataType; |
| |
| public InternalSettingDelegateSingleDataDynamic(EDataType eDataType, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature); |
| this.eDataType = eDataType; |
| } |
| |
| /** |
| * @since 2.9 |
| */ |
| public InternalSettingDelegateSingleDataDynamic(EDataType eDataType, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature, NotificationCreator notificationCreator) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature, notificationCreator); |
| this.eDataType = eDataType; |
| } |
| |
| @Override |
| protected void validate(Object object) |
| { |
| if (!eDataType.isInstance(object)) |
| { |
| throw new ClassCastException("The value of type '" + object.getClass() + "' must be of type '" + eDataType + "'"); |
| } |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleDataStatic extends InternalSettingDelegateSingleData |
| { |
| protected Class<?> dataClass; |
| |
| public InternalSettingDelegateSingleDataStatic(Class<?> dataClass, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature); |
| this.dataClass = dataClass; |
| notificationCreator = NotificationCreator.get(feature.getEType().getInstanceClass()); |
| } |
| |
| /** |
| * @since 2.9 |
| */ |
| public InternalSettingDelegateSingleDataStatic(Class<?> dataClass, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature, NotificationCreator notificationCreator) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature, notificationCreator); |
| this.dataClass = dataClass; |
| } |
| |
| @Override |
| protected void validate(Object object) |
| { |
| if (!dataClass.isInstance(object)) |
| { |
| throw new ClassCastException("The value of type '" + object.getClass() + "' must be of type '" + dataClass + "'"); |
| } |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleDataUnsettable extends InternalSettingDelegateSingleData |
| { |
| public InternalSettingDelegateSingleDataUnsettable(Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature); |
| } |
| |
| /** |
| * @since 2.9 |
| */ |
| public InternalSettingDelegateSingleDataUnsettable(Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature, NotificationCreator notificationCreator) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature, notificationCreator); |
| } |
| |
| @Override |
| public void dynamicSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, Object newValue) |
| { |
| if (owner.eNotificationRequired()) |
| { |
| boolean oldIsSet = true; |
| Object oldValue = settings.dynamicGet(index); |
| if (oldValue == null) |
| { |
| oldIsSet = false; |
| oldValue = this.defaultValue; |
| } |
| else if (oldValue == NIL) |
| { |
| oldValue = null; |
| } |
| |
| if (newValue == null) |
| { |
| if (intrinsicDefaultValue != null) |
| { |
| settings.dynamicSet(index, null); |
| newValue = this.defaultValue; |
| } |
| else |
| { |
| settings.dynamicSet(index, NIL); |
| } |
| } |
| else |
| { |
| validate(newValue); |
| settings.dynamicSet(index, newValue); |
| } |
| |
| owner.eNotify |
| (notificationCreator.createNotification |
| (owner, |
| Notification.SET, |
| feature, |
| oldValue, |
| newValue, |
| !oldIsSet)); |
| } |
| else |
| { |
| if (newValue == null) |
| { |
| if (intrinsicDefaultValue != null) |
| { |
| settings.dynamicSet(index, null); |
| } |
| else |
| { |
| settings.dynamicSet(index, NIL); |
| } |
| } |
| else |
| { |
| validate(newValue); |
| settings.dynamicSet(index, newValue); |
| } |
| } |
| } |
| |
| @Override |
| public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| if (owner.eNotificationRequired()) |
| { |
| boolean oldIsSet = true; |
| Object oldValue = settings.dynamicGet(index); |
| if (oldValue == null) |
| { |
| oldIsSet = false; |
| oldValue = this.defaultValue; |
| } |
| else if (oldValue == NIL) |
| { |
| oldValue = null; |
| } |
| settings.dynamicUnset(index); |
| owner.eNotify |
| (notificationCreator.createNotification |
| (owner, Notification.UNSET, feature, oldValue, this.defaultValue, oldIsSet)); |
| } |
| else |
| { |
| settings.dynamicUnset(index); |
| } |
| } |
| |
| @Override |
| public boolean dynamicIsSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| Object setting = settings.dynamicGet(index); |
| if (setting == null) |
| { |
| return false; |
| } |
| else |
| { |
| return true; |
| } |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleDataUnsettableDynamic extends InternalSettingDelegateSingleDataUnsettable |
| { |
| protected EDataType eDataType; |
| |
| public InternalSettingDelegateSingleDataUnsettableDynamic(EDataType eDataType, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature); |
| this.eDataType = eDataType; |
| } |
| |
| /** |
| * @since 2.9 |
| */ |
| public InternalSettingDelegateSingleDataUnsettableDynamic(EDataType eDataType, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature, NotificationCreator notificationCreator) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature, notificationCreator); |
| this.eDataType = eDataType; |
| } |
| |
| @Override |
| protected void validate(Object object) |
| { |
| if (!eDataType.isInstance(object)) |
| { |
| throw new ClassCastException("The value of type '" + object.getClass() + "' must be of type '" + eDataType + "'"); |
| } |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleDataUnsettableStatic extends InternalSettingDelegateSingleDataUnsettable |
| { |
| protected Class<?> dataClass; |
| |
| public InternalSettingDelegateSingleDataUnsettableStatic(Class<?> dataClass, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature); |
| this.dataClass = dataClass; |
| notificationCreator = NotificationCreator.get(feature.getEType().getInstanceClass()); |
| } |
| |
| /** |
| * @since 2.9 |
| */ |
| public InternalSettingDelegateSingleDataUnsettableStatic(Class<?> dataClass, Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature, NotificationCreator notificationCreator) |
| { |
| super(defaultValue, intrinsicDefaultValue, feature, notificationCreator); |
| this.dataClass = dataClass; |
| } |
| |
| @Override |
| protected void validate(Object object) |
| { |
| if (!dataClass.isInstance(object)) |
| { |
| throw new ClassCastException("The value of type '" + object.getClass() + "' must be of type '" + dataClass + "'"); |
| } |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObject extends InternalSettingDelegateSingle |
| { |
| protected EClass eClass; |
| protected EReference inverseFeature; |
| |
| public InternalSettingDelegateSingleEObject(EClass eClass, EStructuralFeature feature) |
| { |
| super(feature); |
| this.eClass = eClass; |
| } |
| |
| public InternalSettingDelegateSingleEObject(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(feature); |
| this.eClass = eClass; |
| this.inverseFeature = inverseFeature; |
| } |
| |
| protected boolean isUnsettable() |
| { |
| return false; |
| } |
| |
| protected boolean hasInverse() |
| { |
| return false; |
| } |
| |
| protected boolean isContainment() |
| { |
| return false; |
| } |
| |
| protected boolean isResolveProxies() |
| { |
| return false; |
| } |
| |
| public Object dynamicGet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, boolean resolve, boolean coreType) |
| { |
| Object result = settings.dynamicGet(index); |
| if (isUnsettable() && result == NIL) |
| { |
| return null; |
| } |
| else if (isResolveProxies() && resolve && result != null) |
| { |
| InternalEObject oldEObject = (InternalEObject)result; |
| if (oldEObject.eIsProxy()) |
| { |
| EObject resolvedEObject = owner.eResolveProxy(oldEObject); |
| if (oldEObject != resolvedEObject) |
| { |
| if (!eClass.isInstance(resolvedEObject)) |
| { |
| throw new ClassCastException("The value of type '" + resolvedEObject.getClass() + "' must be of type '" + eClass + "'"); |
| } |
| |
| settings.dynamicSet(index, result = resolvedEObject); |
| |
| if (isContainment()) |
| { |
| InternalEObject newEObject = (InternalEObject)resolvedEObject; |
| NotificationChain notificationChain = |
| oldEObject.eInverseRemove |
| (owner, |
| inverseFeature == null ? |
| InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature) : |
| oldEObject.eClass().getFeatureID(inverseFeature), |
| null, |
| null); |
| if (newEObject.eInternalContainer() == null) |
| { |
| notificationChain = |
| newEObject.eInverseAdd |
| (owner, |
| inverseFeature == null ? |
| InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature) : |
| newEObject.eClass().getFeatureID(inverseFeature), |
| null, |
| notificationChain); |
| } |
| if (notificationChain != null) |
| { |
| notificationChain.dispatch(); |
| } |
| } |
| if (owner.eNotificationRequired()) |
| { |
| owner.eNotify |
| (new ENotificationImpl(owner, Notification.RESOLVE, feature, oldEObject, resolvedEObject)); |
| } |
| } |
| } |
| |
| return result; |
| } |
| else |
| { |
| return result; |
| } |
| } |
| |
| |
| public void dynamicSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, Object newValue) |
| { |
| if (newValue != null && !eClass.isInstance(newValue)) |
| { |
| throw |
| new ClassCastException |
| ("The value of type '" + |
| (newValue instanceof EObject ? ((EObject)newValue).eClass().toString() : newValue.getClass().toString()) + |
| "' must be of type '" + eClass + "'"); |
| } |
| |
| Object oldValue = settings.dynamicGet(index); |
| boolean oldIsSet = oldValue != null; |
| if (isUnsettable() && oldValue == NIL) |
| { |
| oldValue = null; |
| } |
| |
| NotificationChain notifications = null; |
| if (hasInverse()) |
| { |
| if (oldValue != newValue) |
| { |
| if (oldValue != null) |
| { |
| InternalEObject internalEObject = (InternalEObject)oldValue; |
| notifications = |
| internalEObject.eInverseRemove |
| (owner, |
| internalEObject.eClass().getFeatureID(inverseFeature), |
| null, |
| notifications); |
| } |
| if (newValue != null) |
| { |
| InternalEObject internalEObject = (InternalEObject)newValue; |
| notifications = |
| internalEObject.eInverseAdd |
| (owner, |
| internalEObject.eClass().getFeatureID(inverseFeature), |
| null, |
| notifications); |
| } |
| } |
| } |
| else if (isContainment()) |
| { |
| if (oldValue != newValue) |
| { |
| if (oldValue != null) |
| { |
| notifications = |
| ((InternalEObject)oldValue).eInverseRemove |
| (owner, |
| InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature), |
| null, |
| notifications); |
| } |
| if (newValue != null) |
| { |
| notifications = |
| ((InternalEObject)newValue).eInverseAdd |
| (owner, |
| InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature), |
| null, |
| notifications); |
| } |
| } |
| } |
| |
| if (newValue == null && isUnsettable()) |
| { |
| settings.dynamicSet(index, NIL); |
| } |
| else |
| { |
| settings.dynamicSet(index, newValue); |
| } |
| |
| if (owner.eNotificationRequired()) |
| { |
| Notification notification = |
| new ENotificationImpl |
| (owner, |
| Notification.SET, |
| feature, |
| oldValue, |
| newValue, |
| isUnsettable() && !oldIsSet); |
| if (notifications == null) |
| { |
| owner.eNotify(notification); |
| } |
| else |
| { |
| notifications.add(notification); |
| notifications.dispatch(); |
| } |
| } |
| else if (notifications != null) |
| { |
| notifications.dispatch(); |
| } |
| } |
| |
| public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| Object oldValue = settings.dynamicGet(index); |
| boolean oldIsSet = oldValue != null; |
| if (isUnsettable() && oldValue == NIL) |
| { |
| oldValue = null; |
| } |
| |
| NotificationChain notifications = null; |
| if (oldValue != null) |
| { |
| if (hasInverse()) |
| { |
| InternalEObject internalEObject = (InternalEObject)oldValue; |
| notifications = |
| internalEObject.eInverseRemove |
| (owner, |
| internalEObject.eClass().getFeatureID(inverseFeature), |
| null, |
| notifications); |
| } |
| else if (isContainment()) |
| { |
| notifications = |
| ((InternalEObject)oldValue).eInverseRemove |
| (owner, |
| InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature), |
| null, |
| notifications); |
| } |
| } |
| |
| settings.dynamicUnset(index); |
| |
| if (owner.eNotificationRequired()) |
| { |
| Notification notification = |
| new ENotificationImpl |
| (owner, |
| isUnsettable() ? Notification.UNSET : Notification.SET, |
| feature, |
| oldValue, |
| null, |
| oldIsSet); |
| if (notifications == null) |
| { |
| owner.eNotify(notification); |
| } |
| else |
| { |
| notifications.add(notification); |
| notifications.dispatch(); |
| } |
| } |
| else if (notifications != null) |
| { |
| notifications.dispatch(); |
| } |
| } |
| |
| public boolean dynamicIsSet(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index) |
| { |
| Object setting = settings.dynamicGet(index); |
| return setting != null; |
| } |
| |
| @Override |
| public NotificationChain dynamicInverseAdd |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| Object oldValue = settings.dynamicGet(index); |
| if (oldValue == NIL) |
| { |
| oldValue = null; |
| } |
| |
| settings.dynamicSet(index, otherEnd); |
| |
| if (hasInverse()) |
| { |
| if (oldValue != otherEnd && oldValue != null) |
| { |
| InternalEObject internalEObject = (InternalEObject)oldValue; |
| notifications = |
| internalEObject.eInverseRemove |
| (owner, |
| internalEObject.eClass().getFeatureID(inverseFeature), |
| null, |
| notifications); |
| } |
| } |
| else if (isContainment()) |
| { |
| if (oldValue != null) |
| { |
| notifications = |
| ((InternalEObject)oldValue).eInverseRemove |
| (owner, |
| InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature), |
| null, |
| notifications); |
| } |
| } |
| |
| if (owner.eNotificationRequired()) |
| { |
| if (notifications == null) notifications = new NotificationChainImpl(4); |
| notifications.add |
| (new ENotificationImpl |
| (owner, |
| Notification.SET, |
| feature, |
| oldValue, |
| otherEnd)); |
| } |
| |
| return notifications; |
| } |
| |
| @Override |
| public NotificationChain dynamicInverseRemove |
| (InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index, InternalEObject otherEnd, NotificationChain notifications) |
| { |
| Object oldValue = settings.dynamicGet(index); |
| if (oldValue == NIL) |
| { |
| oldValue = null; |
| } |
| |
| settings.dynamicUnset(index); |
| |
| if (owner.eNotificationRequired()) |
| { |
| if (notifications == null) notifications = new NotificationChainImpl(4); |
| if (isUnsettable()) |
| { |
| notifications.add(new ENotificationImpl(owner, Notification.UNSET, feature, oldValue, null)); |
| } |
| else |
| { |
| notifications.add(new ENotificationImpl(owner, Notification.SET, feature, oldValue, null)); |
| } |
| } |
| |
| return notifications; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectUnsettable extends InternalSettingDelegateSingleEObject |
| { |
| public InternalSettingDelegateSingleEObjectUnsettable(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| @Override |
| protected boolean isUnsettable() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectWithInverse extends InternalSettingDelegateSingleEObject |
| { |
| public InternalSettingDelegateSingleEObjectWithInverse(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean hasInverse() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectWithInverseUnsettable extends InternalSettingDelegateSingleEObjectWithInverse |
| { |
| public InternalSettingDelegateSingleEObjectWithInverseUnsettable(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isUnsettable() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainment extends InternalSettingDelegateSingleEObject |
| { |
| public InternalSettingDelegateSingleEObjectContainment(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| public InternalSettingDelegateSingleEObjectContainment(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isContainment() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentResolving extends InternalSettingDelegateSingleEObjectContainment |
| { |
| public InternalSettingDelegateSingleEObjectContainmentResolving(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| @Override |
| protected boolean isResolveProxies() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentWithInverse extends InternalSettingDelegateSingleEObjectContainment |
| { |
| public InternalSettingDelegateSingleEObjectContainmentWithInverse(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean hasInverse() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentWithInverseResolving extends InternalSettingDelegateSingleEObjectContainmentWithInverse |
| { |
| public InternalSettingDelegateSingleEObjectContainmentWithInverseResolving(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isResolveProxies() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentUnsettable extends InternalSettingDelegateSingleEObjectContainment |
| { |
| public InternalSettingDelegateSingleEObjectContainmentUnsettable(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| @Override |
| protected boolean isUnsettable() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentUnsettableResolving extends InternalSettingDelegateSingleEObjectContainmentUnsettable |
| { |
| public InternalSettingDelegateSingleEObjectContainmentUnsettableResolving(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| @Override |
| protected boolean isResolveProxies() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable extends InternalSettingDelegateSingleEObjectContainmentWithInverse |
| { |
| public InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isUnsettable() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving extends InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable |
| { |
| public InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isResolveProxies() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectResolving extends InternalSettingDelegateSingleEObject |
| { |
| public InternalSettingDelegateSingleEObjectResolving(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| public InternalSettingDelegateSingleEObjectResolving(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isResolveProxies() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectResolvingUnsettable extends InternalSettingDelegateSingleEObjectResolving |
| { |
| public InternalSettingDelegateSingleEObjectResolvingUnsettable(EClass eClass, EStructuralFeature feature) |
| { |
| super(eClass, feature); |
| } |
| |
| @Override |
| protected boolean isUnsettable() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectResolvingWithInverse extends InternalSettingDelegateSingleEObjectResolving |
| { |
| public InternalSettingDelegateSingleEObjectResolvingWithInverse(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean hasInverse() |
| { |
| return true; |
| } |
| } |
| |
| public static class InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable extends InternalSettingDelegateSingleEObjectResolvingWithInverse |
| { |
| public InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable(EClass eClass, EStructuralFeature feature, EReference inverseFeature) |
| { |
| super(eClass, feature, inverseFeature); |
| } |
| |
| @Override |
| protected boolean isUnsettable() |
| { |
| return true; |
| } |
| } |
| |
| public static class SettingMany implements EStructuralFeature.Setting |
| { |
| protected EObject owner; |
| protected EStructuralFeature eStructuralFeature; |
| protected List<Object> list; |
| public SettingMany(EObject owner, EStructuralFeature eStructuralFeature, List<Object> list) |
| { |
| this.list = list; |
| } |
| |
| public EObject getEObject() |
| { |
| return owner; |
| } |
| |
| public EStructuralFeature getEStructuralFeature() |
| { |
| return eStructuralFeature; |
| } |
| |
| public Object get(boolean resolve) |
| { |
| return list; |
| } |
| |
| public void set(Object newValue) |
| { |
| list.clear(); |
| list.addAll((List<?>)newValue); |
| } |
| |
| public boolean isSet() |
| { |
| return |
| list instanceof InternalEList.Unsettable<?> ? |
| ((InternalEList.Unsettable<Object>)list).isSet() : |
| !list.isEmpty(); |
| } |
| |
| public void unset() |
| { |
| if (list instanceof InternalEList.Unsettable<?>) |
| { |
| ((InternalEList.Unsettable<Object>)list).unset(); |
| } |
| else |
| { |
| list.clear(); |
| } |
| } |
| } |
| |
| protected EClassifier cachedEType; |
| protected boolean cachedIsFeatureMap; |
| |
| public boolean isFeatureMap() |
| { |
| if (cachedEType != eType) |
| { |
| EClassifier eType = getEType(); |
| cachedIsFeatureMap = eType != null && eType.getInstanceClassName() == "org.eclipse.emf.ecore.util.FeatureMap$Entry"; |
| cachedEType = eType; |
| } |
| return cachedIsFeatureMap; |
| } |
| |
| public static abstract class BasicFeatureMapEntry implements FeatureMap.Entry.Internal |
| { |
| protected final EStructuralFeature.Internal eStructuralFeature; |
| |
| BasicFeatureMapEntry(EStructuralFeature.Internal eStructuralFeature) |
| { |
| this.eStructuralFeature = eStructuralFeature; |
| } |
| |
| final public EStructuralFeature getEStructuralFeature() |
| { |
| return eStructuralFeature; |
| } |
| |
| public void validate(Object value) |
| { |
| if (value != null && !eStructuralFeature.getEType().isInstance(value)) |
| { |
| String valueClass = value instanceof EObject ? ((EObject)value).eClass().getName() : value.getClass().getName(); |
| throw |
| new ClassCastException |
| ("The feature '" + eStructuralFeature.getName() + "'s type '" + |
| eStructuralFeature.getEType().getName() + "' does not permit a value of type '" + valueClass + "'"); |
| } |
| } |
| |
| public Internal createEntry(Object value) |
| { |
| return createEntry((InternalEObject)value); |
| } |
| |
| public Internal createEntry(InternalEObject value) |
| { |
| return createEntry((Object)value); |
| } |
| |
| @Override |
| public boolean equals(Object that) |
| { |
| if (this == that) |
| { |
| return true; |
| } |
| else if (!(that instanceof FeatureMap.Entry)) |
| { |
| return false; |
| } |
| else |
| { |
| FeatureMap.Entry entry = (FeatureMap.Entry)that; |
| if (entry.getEStructuralFeature() == getEStructuralFeature()) |
| { |
| Object value = getValue(); |
| return value == null ? entry.getValue() == null : value.equals(entry.getValue()); |
| } |
| else |
| { |
| return false; |
| } |
| } |
| } |
| |
| @Override |
| public int hashCode() |
| { |
| Object value = getValue(); |
| return getEStructuralFeature().hashCode() ^ (value == null ? 0 : value.hashCode()); |
| } |
| |
| @Override |
| public String toString() |
| { |
| EStructuralFeature eStructuralFeature = getEStructuralFeature(); |
| String prefix = eStructuralFeature.getEContainingClass().getEPackage().getNsPrefix(); |
| eStructuralFeature.getName(); |
| return |
| (prefix != null && prefix.length() != 0 ? |
| prefix + ":" + eStructuralFeature.getName() : |
| eStructuralFeature.getName()) + |
| "=" + getValue(); |
| } |
| } |
| |
| public final static class SimpleFeatureMapEntry extends BasicFeatureMapEntry |
| { |
| protected final Object value; |
| |
| public SimpleFeatureMapEntry(EStructuralFeature.Internal eStructuralFeature, Object value) |
| { |
| super(eStructuralFeature); |
| this.value = value; |
| } |
| |
| public final Object getValue() |
| { |
| return value; |
| } |
| |
| @Override |
| public Internal createEntry(Object value) |
| { |
| return new SimpleFeatureMapEntry(eStructuralFeature, value); |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| } |
| |
| public final static class SimpleContentFeatureMapEntry extends BasicFeatureMapEntry |
| { |
| protected EFactory eFactory; |
| protected EDataType eDataType; |
| |
| public SimpleContentFeatureMapEntry(EStructuralFeature.Internal eStructuralFeature) |
| { |
| super(eStructuralFeature); |
| eDataType = (EDataType)eStructuralFeature.getEType(); |
| eFactory = eDataType.getEPackage().getEFactoryInstance(); |
| } |
| |
| public final Object getValue() |
| { |
| return null; |
| } |
| |
| @Override |
| public Internal createEntry(Object value) |
| { |
| return |
| new SimpleFeatureMapEntry |
| ((EStructuralFeature.Internal)XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__TEXT, |
| eFactory.convertToString(eDataType, value)); |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return notifications; |
| } |
| } |
| |
| |
| public final class InverseUpdatingFeatureMapEntry extends BasicFeatureMapEntry |
| { |
| protected final InternalEObject value; |
| |
| public InverseUpdatingFeatureMapEntry(EStructuralFeature.Internal eStructuralFeature, InternalEObject value) |
| { |
| super(eStructuralFeature); |
| this.value = value; |
| } |
| |
| final public Object getValue() |
| { |
| return value; |
| } |
| |
| @Override |
| public Internal createEntry(InternalEObject value) |
| { |
| return new InverseUpdatingFeatureMapEntry(eStructuralFeature, value); |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return inverseAdd(owner, value, featureID, notifications); |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return inverseRemove(owner, value, featureID, notifications); |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return inverseAdd(owner, value, featureID, notifications); |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return inverseRemove(owner, value, featureID, notifications); |
| } |
| |
| protected final NotificationChain inverseAdd(InternalEObject owner, InternalEObject otherEnd, int featureID, NotificationChain notifications) |
| { |
| if (otherEnd != null) |
| { |
| notifications = |
| otherEnd.eInverseAdd |
| (owner, |
| otherEnd.eClass().getFeatureID(eStructuralFeature.getEOpposite()), |
| null, |
| notifications); |
| } |
| |
| return notifications; |
| } |
| |
| protected final NotificationChain inverseRemove(InternalEObject owner, InternalEObject otherEnd, int featureID, NotificationChain notifications) |
| { |
| if (otherEnd != null) |
| { |
| notifications = |
| otherEnd.eInverseRemove |
| (owner, |
| otherEnd.eClass().getFeatureID(eStructuralFeature.getEOpposite()), |
| null, |
| notifications); |
| } |
| return notifications; |
| } |
| } |
| |
| public final static class ContainmentUpdatingFeatureMapEntry extends BasicFeatureMapEntry |
| { |
| protected final InternalEObject value; |
| |
| public ContainmentUpdatingFeatureMapEntry(EStructuralFeature.Internal eStructuralFeature, InternalEObject value) |
| { |
| super(eStructuralFeature); |
| this.value = value; |
| } |
| |
| public final Object getValue() |
| { |
| return value; |
| } |
| |
| @Override |
| public final Internal createEntry(InternalEObject value) |
| { |
| return new ContainmentUpdatingFeatureMapEntry(eStructuralFeature, value); |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return inverseAdd(owner, value, featureID, notifications); |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, int featureID, NotificationChain notifications) |
| { |
| return inverseRemove(owner, value, featureID, notifications); |
| } |
| |
| public final NotificationChain inverseAdd(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return inverseAdd(owner, (InternalEObject)otherEnd, featureID, notifications); |
| } |
| |
| public final NotificationChain inverseRemove(InternalEObject owner, Object otherEnd, int featureID, NotificationChain notifications) |
| { |
| return inverseRemove(owner, (InternalEObject)otherEnd, featureID, notifications); |
| } |
| |
| protected final NotificationChain inverseAdd(InternalEObject owner, InternalEObject otherEnd, int featureID, NotificationChain notifications) |
| { |
| if (otherEnd != null) |
| { |
| int containmentFeatureID = owner.eClass().getFeatureID(eStructuralFeature); |
| notifications = |
| otherEnd.eInverseAdd |
| (owner, |
| InternalEObject.EOPPOSITE_FEATURE_BASE - (containmentFeatureID == -1 ? featureID : containmentFeatureID), |
| null, |
| notifications); |
| } |
| |
| return notifications; |
| } |
| |
| protected final NotificationChain inverseRemove(InternalEObject owner, InternalEObject otherEnd, int featureID, NotificationChain notifications) |
| { |
| if (otherEnd != null) |
| { |
| int containmentFeatureID = owner.eClass().getFeatureID(eStructuralFeature); |
| notifications = |
| otherEnd.eInverseRemove |
| (owner, |
| InternalEObject.EOPPOSITE_FEATURE_BASE - (containmentFeatureID == -1 ? featureID : containmentFeatureID), |
| null, |
| notifications); |
| } |
| |
| return notifications; |
| } |
| } |
| |
| protected FeatureMap.Entry.Internal prototypeFeatureMapEntry; |
| |
| public FeatureMap.Entry.Internal getFeatureMapEntryPrototype() |
| { |
| if (prototypeFeatureMapEntry == null) |
| { |
| EReference eOpposite = getEOpposite(); |
| if (eOpposite != null) |
| { |
| prototypeFeatureMapEntry = new InverseUpdatingFeatureMapEntry(this, null); |
| } |
| else if (isContainment()) |
| { |
| // create containment one. |
| prototypeFeatureMapEntry = new ContainmentUpdatingFeatureMapEntry(this, null); |
| } |
| else if (ExtendedMetaData.INSTANCE.getFeatureKind(this) == ExtendedMetaData.SIMPLE_FEATURE) |
| { |
| prototypeFeatureMapEntry = new SimpleContentFeatureMapEntry(this); |
| } |
| else |
| { |
| prototypeFeatureMapEntry = new SimpleFeatureMapEntry(this, null); |
| } |
| } |
| return prototypeFeatureMapEntry; |
| } |
| |
| public void setFeatureMapEntryPrototype(FeatureMap.Entry.Internal prototype) |
| { |
| prototypeFeatureMapEntry = prototype; |
| } |
| |
| protected BasicExtendedMetaData.EStructuralFeatureExtendedMetaData eStructuralFeatureExtendedMetaData; |
| |
| public BasicExtendedMetaData.EStructuralFeatureExtendedMetaData getExtendedMetaData() |
| { |
| return eStructuralFeatureExtendedMetaData; |
| } |
| |
| public void setExtendedMetaData(BasicExtendedMetaData.EStructuralFeatureExtendedMetaData eStructuralFeatureExtendedMetaData) |
| { |
| this.eStructuralFeatureExtendedMetaData = eStructuralFeatureExtendedMetaData; |
| } |
| |
| @Override |
| public void setName(String newName) |
| { |
| if (eContainer instanceof EClassImpl) |
| { |
| ((EClassImpl)eContainer).getESuperAdapter().setFlags(ESuperAdapter.STRUCTURAL_FEATURES); |
| } |
| super.setName(newName); |
| } |
| } |