/** * 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.codegen.ecore.genmodel.impl; import org.eclipse.emf.codegen.ecore.genmodel.GenEnum; import org.eclipse.emf.codegen.ecore.genmodel.GenEnumLiteral; import org.eclipse.emf.codegen.ecore.genmodel.GenJDKLevel; import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage; import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; import org.eclipse.emf.codegen.util.CodeGenUtil; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EEnumLiteral; import org.eclipse.emf.ecore.EModelElement; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EcoreUtil; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Gen Enum Literal</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenEnumLiteralImpl#getGenEnum <em>Gen Enum</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenEnumLiteralImpl#getEcoreEnumLiteral <em>Ecore Enum Literal</em>}</li> * </ul> * </p> * * @generated */ public class GenEnumLiteralImpl extends GenBaseImpl implements GenEnumLiteral { /** * The cached value of the '{@link #getEcoreEnumLiteral() <em>Ecore Enum Literal</em>}' reference. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getEcoreEnumLiteral() * @generated * @ordered */ protected EEnumLiteral ecoreEnumLiteral; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated modifiable */ protected GenEnumLiteralImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return GenModelPackage.Literals.GEN_ENUM_LITERAL; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public GenEnum getGenEnum() { if (eContainerFeatureID() != GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM) return null; return (GenEnum)eContainer(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public NotificationChain basicSetGenEnum(GenEnum newGenEnum, NotificationChain msgs) { msgs = eBasicSetContainer((InternalEObject)newGenEnum, GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM, msgs); return msgs; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setGenEnum(GenEnum newGenEnum) { if (newGenEnum != eInternalContainer() || (eContainerFeatureID() != GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM && newGenEnum != null)) { if (EcoreUtil.isAncestor(this, newGenEnum)) throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); NotificationChain msgs = null; if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); if (newGenEnum != null) msgs = ((InternalEObject)newGenEnum).eInverseAdd(this, GenModelPackage.GEN_ENUM__GEN_ENUM_LITERALS, GenEnum.class, msgs); msgs = basicSetGenEnum(newGenEnum, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM, newGenEnum, newGenEnum)); } @Override public EModelElement getEcoreModelElement() { return getEcoreEnumLiteral(); } @Override protected EModelElement basicGetEcoreModelElement() { return ecoreEnumLiteral; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EEnumLiteral getEcoreEnumLiteral() { if (ecoreEnumLiteral != null && ecoreEnumLiteral.eIsProxy()) { InternalEObject oldEcoreEnumLiteral = (InternalEObject)ecoreEnumLiteral; ecoreEnumLiteral = (EEnumLiteral)eResolveProxy(oldEcoreEnumLiteral); if (ecoreEnumLiteral != oldEcoreEnumLiteral) { if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenModelPackage.GEN_ENUM_LITERAL__ECORE_ENUM_LITERAL, oldEcoreEnumLiteral, ecoreEnumLiteral)); } } return ecoreEnumLiteral; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EEnumLiteral basicGetEcoreEnumLiteral() { return ecoreEnumLiteral; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setEcoreEnumLiteral(EEnumLiteral newEcoreEnumLiteral) { EEnumLiteral oldEcoreEnumLiteral = ecoreEnumLiteral; ecoreEnumLiteral = newEcoreEnumLiteral; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_ENUM_LITERAL__ECORE_ENUM_LITERAL, oldEcoreEnumLiteral, ecoreEnumLiteral)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); return basicSetGenEnum((GenEnum)otherEnd, msgs); } return super.eInverseAdd(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: return basicSetGenEnum(null, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { switch (eContainerFeatureID()) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: return eInternalContainer().eInverseRemove(this, GenModelPackage.GEN_ENUM__GEN_ENUM_LITERALS, GenEnum.class, msgs); } return super.eBasicRemoveFromContainerFeature(msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: return getGenEnum(); case GenModelPackage.GEN_ENUM_LITERAL__ECORE_ENUM_LITERAL: if (resolve) return getEcoreEnumLiteral(); return basicGetEcoreEnumLiteral(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: setGenEnum((GenEnum)newValue); return; case GenModelPackage.GEN_ENUM_LITERAL__ECORE_ENUM_LITERAL: setEcoreEnumLiteral((EEnumLiteral)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: setGenEnum((GenEnum)null); return; case GenModelPackage.GEN_ENUM_LITERAL__ECORE_ENUM_LITERAL: setEcoreEnumLiteral((EEnumLiteral)null); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case GenModelPackage.GEN_ENUM_LITERAL__GEN_ENUM: return getGenEnum() != null; case GenModelPackage.GEN_ENUM_LITERAL__ECORE_ENUM_LITERAL: return ecoreEnumLiteral != null; } return super.eIsSet(featureID); } @Override public String getName() { return getEcoreEnumLiteral().getName(); } public String getCapName() { return capName(getName()); } public String getLiteral() { return getEcoreEnumLiteral().getLiteral(); } public String getFormattedName() { return format(getCapName(), ' ', null, false, false); } public int getValue() { return getEcoreEnumLiteral().getValue(); } public String getEnumLiteralID() { String name = getName(); return name == null ? null : CodeGenUtil.upperName(name, getGenModel().getLocale()); } public String getEnumLiteralInstanceConstantName() { String enumLiteralID = getEnumLiteralID(); return enumLiteralID != null && (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50 || getGenEnum().isTypeSafeEnumCompatible()) ? ensureUniqueness(enumLiteralID + "_LITERAL") : enumLiteralID; } protected String ensureUniqueness(String string) { for (GenEnumLiteral genEnumLiteral : getGenEnum().getGenEnumLiterals()) { if (string.equals(genEnumLiteral.getEnumLiteralID())) { return string + "_"; } } return string; } public String getEnumLiteralValueConstantName() { return getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50 || getGenEnum().isTypeSafeEnumCompatible() ? getEnumLiteralID() : ensureUniqueness(getEnumLiteralID() + "_VALUE"); } public GenPackage getGenPackage() { return getGenEnum().getGenPackage(); } public String getEnumLiteralAccessorName() { return getGenEnum().getName() + "_" + getCapName(); } public void initialize(EEnumLiteral eEnumLiteral) { setEcoreEnumLiteral(eEnumLiteral); } @Override public String getModelInfo() { StringBuffer result = new StringBuffer(); if (!getEnumLiteralID().equals(getName())) { appendModelSetting(result, "name", getName()); } if (!getName().equals(getLiteral())) { appendModelSetting(result, "literal", escapeString(getLiteral(), "")); } appendAnnotationInfo(result, getEcoreEnumLiteral()); return result.toString().trim(); } public boolean reconcile(GenEnumLiteral oldGenEnumLiteralVersion) { if (getEcoreEnumLiteral().getName().equals(oldGenEnumLiteralVersion.getEcoreEnumLiteral().getName())) { reconcileSettings(oldGenEnumLiteralVersion); return true; } else { return false; } } protected void reconcileSettings(GenEnumLiteral oldGenEnumLiteralVersion) { reconcileGenAnnotations(oldGenEnumLiteralVersion); } public boolean reconcile() { EEnumLiteral eEnumLiteral = getEcoreEnumLiteral(); if (eEnumLiteral == null || eEnumLiteral.eIsProxy() || eEnumLiteral.eResource() == null) { return false; } else { return true; } } }