| author | Matthieu Helleboid | 2012-09-07 09:31:34 (EDT) |
|---|---|---|
| committer | Ed Merks | 2012-09-07 09:31:34 (EDT) |
| commit | 51b0b61992a0fcde222f584d0cefe707b7f86e78 (patch) (side-by-side diff) | |
| tree | 0aa6a5b68ffdff31d19808d9960b87c92d1a76dc | |
| parent | 6347ba92a08d5073cf5daa5249050300664717b7 (diff) | |
| download | org.eclipse.emf-51b0b61992a0fcde222f584d0cefe707b7f86e78.zip org.eclipse.emf-51b0b61992a0fcde222f584d0cefe707b7f86e78.tar.gz org.eclipse.emf-51b0b61992a0fcde222f584d0cefe707b7f86e78.tar.bz2 | |
[387754] Fix wasSet value for unsetting single valued references.
| -rw-r--r-- | plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EStructuralFeatureImpl.java | 6578 |
1 files changed, 3290 insertions, 3288 deletions
diff --git a/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EStructuralFeatureImpl.java b/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EStructuralFeatureImpl.java index ce8d060..3a9de64 100644 --- a/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EStructuralFeatureImpl.java +++ b/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EStructuralFeatureImpl.java @@ -1,3288 +1,3290 @@ -/**
- * Copyright (c) 2002-2009 IBM Corporation 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
- */
-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.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:
- * <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>
- * </p>
- *
- * @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;
- }
-
- 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)
- {
- EFactory factory = eType.getEPackage().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)eContainer();
- }
-
- /**
- * 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<?> dataClass = EcoreUtil.wrapperClassFor(eType.getInstanceClass());
- 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);
- }
- }
- else
- {
- if (dataClass == null)
- {
- settingDelegate = new InternalSettingDelegateSingleDataDynamic((EDataType)eType, defaultValue, intrinsicDefaultValue, this);
- }
- else
- {
- settingDelegate = new InternalSettingDelegateSingleDataStatic(dataClass, defaultValue, intrinsicDefaultValue, this);
- }
- }
- }
- 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
- {
- protected Object defaultValue;
- protected Object intrinsicDefaultValue;
-
- public InternalSettingDelegateSingleData(Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature)
- {
- super(feature);
- this.defaultValue = defaultValue;
- this.intrinsicDefaultValue = intrinsicDefaultValue;
- }
-
- 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
- (new ENotificationImpl
- (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
- (new ENotificationImpl
- (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;
- }
-
- @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;
- }
-
- @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);
- }
-
- @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
- (new ENotificationImpl
- (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
- (new ENotificationImpl
- (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;
- }
-
- @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;
- }
-
- @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)
- {
- 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);
- 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);
- 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)
- {
- cachedEType = getEType();
- cachedIsFeatureMap = eType != null && eType.getInstanceClassName() == "org.eclipse.emf.ecore.util.FeatureMap$Entry";
- }
- 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);
- }
-}
+/** + * Copyright (c) 2002-2009 IBM Corporation 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 + */ +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.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: + * <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> + * </p> + * + * @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; + } + + 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) + { + EFactory factory = eType.getEPackage().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)eContainer(); + } + + /** + * 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<?> dataClass = EcoreUtil.wrapperClassFor(eType.getInstanceClass()); + 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); + } + } + else + { + if (dataClass == null) + { + settingDelegate = new InternalSettingDelegateSingleDataDynamic((EDataType)eType, defaultValue, intrinsicDefaultValue, this); + } + else + { + settingDelegate = new InternalSettingDelegateSingleDataStatic(dataClass, defaultValue, intrinsicDefaultValue, this); + } + } + } + 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 + { + protected Object defaultValue; + protected Object intrinsicDefaultValue; + + public InternalSettingDelegateSingleData(Object defaultValue, Object intrinsicDefaultValue, EStructuralFeature feature) + { + super(feature); + this.defaultValue = defaultValue; + this.intrinsicDefaultValue = intrinsicDefaultValue; + } + + 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 + (new ENotificationImpl + (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 + (new ENotificationImpl + (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; + } + + @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; + } + + @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); + } + + @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 + (new ENotificationImpl + (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 + (new ENotificationImpl + (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; + } + + @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; + } + + @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) + { + 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) + { + cachedEType = getEType(); + cachedIsFeatureMap = eType != null && eType.getInstanceClassName() == "org.eclipse.emf.ecore.util.FeatureMap$Entry"; + } + 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); + } +} |

