/** * Copyright (c) 2002-2010 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 java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.emf.codegen.ecore.genmodel.GenClass; import org.eclipse.emf.codegen.ecore.genmodel.GenDataType; import org.eclipse.emf.codegen.ecore.genmodel.GenFeature; import org.eclipse.emf.codegen.ecore.genmodel.GenJDKLevel; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage; import org.eclipse.emf.codegen.ecore.genmodel.GenOperation; import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; import org.eclipse.emf.codegen.ecore.genmodel.GenPropertyKind; 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.common.util.EList; import org.eclipse.emf.ecore.EAnnotation; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EGenericType; import org.eclipse.emf.ecore.EModelElement; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.ETypeParameter; import org.eclipse.emf.ecore.ETypedElement; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.util.ExtendedMetaData; import org.eclipse.emf.ecore.xml.type.XMLTypePackage; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Gen Feature</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#getProperty <em>Property</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#isNotify <em>Notify</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#isChildren <em>Children</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#isCreateChild <em>Create Child</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#getPropertyCategory <em>Property Category</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#getPropertyFilterFlags <em>Property Filter Flags</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#getPropertyDescription <em>Property Description</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#isPropertyMultiLine <em>Property Multi Line</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#isPropertySortChoices <em>Property Sort Choices</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#getGenClass <em>Gen Class</em>}</li> * <li>{@link org.eclipse.emf.codegen.ecore.genmodel.impl.GenFeatureImpl#getEcoreFeature <em>Ecore Feature</em>}</li> * </ul> * </p> * * @generated */ public class GenFeatureImpl extends GenTypedElementImpl implements GenFeature { /** * The default value of the '{@link #getProperty() <em>Property</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getProperty() * @generated * @ordered */ protected static final GenPropertyKind PROPERTY_EDEFAULT = GenPropertyKind.EDITABLE_LITERAL; /** * The cached value of the '{@link #getProperty() <em>Property</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getProperty() * @generated * @ordered */ protected GenPropertyKind property = PROPERTY_EDEFAULT; /** * The default value of the '{@link #isNotify() <em>Notify</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isNotify() * @generated * @ordered */ protected static final boolean NOTIFY_EDEFAULT = true; /** * The cached value of the '{@link #isNotify() <em>Notify</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isNotify() * @generated * @ordered */ protected boolean notify = NOTIFY_EDEFAULT; /** * The default value of the '{@link #isChildren() <em>Children</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isChildren() * @generated * @ordered */ protected static final boolean CHILDREN_EDEFAULT = false; /** * The cached value of the '{@link #isChildren() <em>Children</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isChildren() * @generated * @ordered */ protected boolean children = CHILDREN_EDEFAULT; /** * The default value of the '{@link #isCreateChild() <em>Create Child</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isCreateChild() * @generated * @ordered */ protected static final boolean CREATE_CHILD_EDEFAULT = false; /** * The cached value of the '{@link #isCreateChild() <em>Create Child</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isCreateChild() * @generated * @ordered */ protected boolean createChild = CREATE_CHILD_EDEFAULT; /** * This is true if the Create Child attribute has been set. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ protected boolean createChildESet; /** * The default value of the '{@link #getPropertyCategory() <em>Property Category</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPropertyCategory() * @generated * @ordered */ protected static final String PROPERTY_CATEGORY_EDEFAULT = null; /** * The cached value of the '{@link #getPropertyCategory() <em>Property Category</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPropertyCategory() * @generated * @ordered */ protected String propertyCategory = PROPERTY_CATEGORY_EDEFAULT; /** * The cached value of the '{@link #getPropertyFilterFlags() <em>Property Filter Flags</em>}' attribute list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPropertyFilterFlags() * @generated * @ordered */ protected EList<String> propertyFilterFlags; /** * The default value of the '{@link #getPropertyDescription() <em>Property Description</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPropertyDescription() * @generated * @ordered */ protected static final String PROPERTY_DESCRIPTION_EDEFAULT = null; /** * The cached value of the '{@link #getPropertyDescription() <em>Property Description</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPropertyDescription() * @generated * @ordered */ protected String propertyDescription = PROPERTY_DESCRIPTION_EDEFAULT; /** * The default value of the '{@link #isPropertyMultiLine() <em>Property Multi Line</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isPropertyMultiLine() * @generated * @ordered */ protected static final boolean PROPERTY_MULTI_LINE_EDEFAULT = false; /** * The cached value of the '{@link #isPropertyMultiLine() <em>Property Multi Line</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isPropertyMultiLine() * @generated * @ordered */ protected boolean propertyMultiLine = PROPERTY_MULTI_LINE_EDEFAULT; /** * The default value of the '{@link #isPropertySortChoices() <em>Property Sort Choices</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isPropertySortChoices() * @generated * @ordered */ protected static final boolean PROPERTY_SORT_CHOICES_EDEFAULT = false; /** * The cached value of the '{@link #isPropertySortChoices() <em>Property Sort Choices</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #isPropertySortChoices() * @generated * @ordered */ protected boolean propertySortChoices = PROPERTY_SORT_CHOICES_EDEFAULT; /** * The cached value of the '{@link #getEcoreFeature() <em>Ecore Feature</em>}' reference. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getEcoreFeature() * @generated * @ordered */ protected EStructuralFeature ecoreFeature; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated modifiable */ protected GenFeatureImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return GenModelPackage.Literals.GEN_FEATURE; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public GenPropertyKind getProperty() { return property; } public boolean isProperty() { return property != GenPropertyKind.NONE_LITERAL; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setProperty(GenPropertyKind newProperty) { GenPropertyKind oldProperty = property; property = newProperty == null ? PROPERTY_EDEFAULT : newProperty; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__PROPERTY, oldProperty, property)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isNotify() { return notify; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setNotify(boolean newNotify) { boolean oldNotify = notify; notify = newNotify; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__NOTIFY, oldNotify, notify)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isChildren() { return children; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setChildren(boolean newChildren) { boolean oldChildren = children; children = newChildren; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__CHILDREN, oldChildren, children)); } /* * Set from {@link #isChildren children} if unset, and return value. */ public boolean isCreateChild() { autoSetCreateChild(); return isCreateChildGen(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isCreateChildGen() { return createChild; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setCreateChild(boolean newCreateChild) { boolean oldCreateChild = createChild; createChild = newCreateChild; boolean oldCreateChildESet = createChildESet; createChildESet = true; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__CREATE_CHILD, oldCreateChild, createChild, !oldCreateChildESet)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void unsetCreateChild() { boolean oldCreateChild = createChild; boolean oldCreateChildESet = createChildESet; createChild = CREATE_CHILD_EDEFAULT; createChildESet = false; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.UNSET, GenModelPackage.GEN_FEATURE__CREATE_CHILD, oldCreateChild, CREATE_CHILD_EDEFAULT, oldCreateChildESet)); } /** * Set from {@link #isChildren children} if necessary, and return true. */ public boolean isSetCreateChild() { autoSetCreateChild(); return isSetCreateChildGen(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isSetCreateChildGen() { return createChildESet; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getPropertyCategory() { return propertyCategory; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setPropertyCategory(String newPropertyCategory) { String oldPropertyCategory = propertyCategory; propertyCategory = newPropertyCategory; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__PROPERTY_CATEGORY, oldPropertyCategory, propertyCategory)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<String> getPropertyFilterFlags() { if (propertyFilterFlags == null) { propertyFilterFlags = new EDataTypeUniqueEList<String>(String.class, this, GenModelPackage.GEN_FEATURE__PROPERTY_FILTER_FLAGS); } return propertyFilterFlags; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getPropertyDescription() { return propertyDescription; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setPropertyDescription(String newPropertyDescription) { String oldPropertyDescription = propertyDescription; propertyDescription = newPropertyDescription; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__PROPERTY_DESCRIPTION, oldPropertyDescription, propertyDescription)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isPropertyMultiLine() { return propertyMultiLine; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setPropertyMultiLine(boolean newPropertyMultiLine) { boolean oldPropertyMultiLine = propertyMultiLine; propertyMultiLine = newPropertyMultiLine; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__PROPERTY_MULTI_LINE, oldPropertyMultiLine, propertyMultiLine)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isPropertySortChoices() { return propertySortChoices; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setPropertySortChoices(boolean newPropertySortChoices) { boolean oldPropertySortChoices = propertySortChoices; propertySortChoices = newPropertySortChoices; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__PROPERTY_SORT_CHOICES, oldPropertySortChoices, propertySortChoices)); } protected void autoSetCreateChild() { if (!isSetCreateChildGen()) { setCreateChild(isChildren()); } } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public GenClass getGenClass() { if (eContainerFeatureID() != GenModelPackage.GEN_FEATURE__GEN_CLASS) return null; return (GenClass)eContainer(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public NotificationChain basicSetGenClass(GenClass newGenClass, NotificationChain msgs) { msgs = eBasicSetContainer((InternalEObject)newGenClass, GenModelPackage.GEN_FEATURE__GEN_CLASS, msgs); return msgs; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setGenClass(GenClass newGenClass) { if (newGenClass != eInternalContainer() || (eContainerFeatureID() != GenModelPackage.GEN_FEATURE__GEN_CLASS && newGenClass != null)) { if (EcoreUtil.isAncestor(this, newGenClass)) throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); NotificationChain msgs = null; if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); if (newGenClass != null) msgs = ((InternalEObject)newGenClass).eInverseAdd(this, GenModelPackage.GEN_CLASS__GEN_FEATURES, GenClass.class, msgs); msgs = basicSetGenClass(newGenClass, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__GEN_CLASS, newGenClass, newGenClass)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EStructuralFeature getEcoreFeature() { if (ecoreFeature != null && ecoreFeature.eIsProxy()) { InternalEObject oldEcoreFeature = (InternalEObject)ecoreFeature; ecoreFeature = (EStructuralFeature)eResolveProxy(oldEcoreFeature); if (ecoreFeature != oldEcoreFeature) { if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenModelPackage.GEN_FEATURE__ECORE_FEATURE, oldEcoreFeature, ecoreFeature)); } } return ecoreFeature; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EStructuralFeature basicGetEcoreFeature() { return ecoreFeature; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setEcoreFeature(EStructuralFeature newEcoreFeature) { EStructuralFeature oldEcoreFeature = ecoreFeature; ecoreFeature = newEcoreFeature; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GenModelPackage.GEN_FEATURE__ECORE_FEATURE, oldEcoreFeature, ecoreFeature)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case GenModelPackage.GEN_FEATURE__GEN_CLASS: if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); return basicSetGenClass((GenClass)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_FEATURE__GEN_CLASS: return basicSetGenClass(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_FEATURE__GEN_CLASS: return eInternalContainer().eInverseRemove(this, GenModelPackage.GEN_CLASS__GEN_FEATURES, GenClass.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_FEATURE__PROPERTY: return getProperty(); case GenModelPackage.GEN_FEATURE__NOTIFY: return isNotify(); case GenModelPackage.GEN_FEATURE__CHILDREN: return isChildren(); case GenModelPackage.GEN_FEATURE__CREATE_CHILD: return isCreateChild(); case GenModelPackage.GEN_FEATURE__PROPERTY_CATEGORY: return getPropertyCategory(); case GenModelPackage.GEN_FEATURE__PROPERTY_FILTER_FLAGS: return getPropertyFilterFlags(); case GenModelPackage.GEN_FEATURE__PROPERTY_DESCRIPTION: return getPropertyDescription(); case GenModelPackage.GEN_FEATURE__PROPERTY_MULTI_LINE: return isPropertyMultiLine(); case GenModelPackage.GEN_FEATURE__PROPERTY_SORT_CHOICES: return isPropertySortChoices(); case GenModelPackage.GEN_FEATURE__GEN_CLASS: return getGenClass(); case GenModelPackage.GEN_FEATURE__ECORE_FEATURE: if (resolve) return getEcoreFeature(); return basicGetEcoreFeature(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case GenModelPackage.GEN_FEATURE__PROPERTY: setProperty((GenPropertyKind)newValue); return; case GenModelPackage.GEN_FEATURE__NOTIFY: setNotify((Boolean)newValue); return; case GenModelPackage.GEN_FEATURE__CHILDREN: setChildren((Boolean)newValue); return; case GenModelPackage.GEN_FEATURE__CREATE_CHILD: setCreateChild((Boolean)newValue); return; case GenModelPackage.GEN_FEATURE__PROPERTY_CATEGORY: setPropertyCategory((String)newValue); return; case GenModelPackage.GEN_FEATURE__PROPERTY_FILTER_FLAGS: getPropertyFilterFlags().clear(); getPropertyFilterFlags().addAll((Collection<? extends String>)newValue); return; case GenModelPackage.GEN_FEATURE__PROPERTY_DESCRIPTION: setPropertyDescription((String)newValue); return; case GenModelPackage.GEN_FEATURE__PROPERTY_MULTI_LINE: setPropertyMultiLine((Boolean)newValue); return; case GenModelPackage.GEN_FEATURE__PROPERTY_SORT_CHOICES: setPropertySortChoices((Boolean)newValue); return; case GenModelPackage.GEN_FEATURE__GEN_CLASS: setGenClass((GenClass)newValue); return; case GenModelPackage.GEN_FEATURE__ECORE_FEATURE: setEcoreFeature((EStructuralFeature)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case GenModelPackage.GEN_FEATURE__PROPERTY: setProperty(PROPERTY_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__NOTIFY: setNotify(NOTIFY_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__CHILDREN: setChildren(CHILDREN_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__CREATE_CHILD: unsetCreateChild(); return; case GenModelPackage.GEN_FEATURE__PROPERTY_CATEGORY: setPropertyCategory(PROPERTY_CATEGORY_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__PROPERTY_FILTER_FLAGS: getPropertyFilterFlags().clear(); return; case GenModelPackage.GEN_FEATURE__PROPERTY_DESCRIPTION: setPropertyDescription(PROPERTY_DESCRIPTION_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__PROPERTY_MULTI_LINE: setPropertyMultiLine(PROPERTY_MULTI_LINE_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__PROPERTY_SORT_CHOICES: setPropertySortChoices(PROPERTY_SORT_CHOICES_EDEFAULT); return; case GenModelPackage.GEN_FEATURE__GEN_CLASS: setGenClass((GenClass)null); return; case GenModelPackage.GEN_FEATURE__ECORE_FEATURE: setEcoreFeature((EStructuralFeature)null); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case GenModelPackage.GEN_FEATURE__PROPERTY: return property != PROPERTY_EDEFAULT; case GenModelPackage.GEN_FEATURE__NOTIFY: return notify != NOTIFY_EDEFAULT; case GenModelPackage.GEN_FEATURE__CHILDREN: return children != CHILDREN_EDEFAULT; case GenModelPackage.GEN_FEATURE__CREATE_CHILD: return isSetCreateChild(); case GenModelPackage.GEN_FEATURE__PROPERTY_CATEGORY: return PROPERTY_CATEGORY_EDEFAULT == null ? propertyCategory != null : !PROPERTY_CATEGORY_EDEFAULT.equals(propertyCategory); case GenModelPackage.GEN_FEATURE__PROPERTY_FILTER_FLAGS: return propertyFilterFlags != null && !propertyFilterFlags.isEmpty(); case GenModelPackage.GEN_FEATURE__PROPERTY_DESCRIPTION: return PROPERTY_DESCRIPTION_EDEFAULT == null ? propertyDescription != null : !PROPERTY_DESCRIPTION_EDEFAULT.equals(propertyDescription); case GenModelPackage.GEN_FEATURE__PROPERTY_MULTI_LINE: return propertyMultiLine != PROPERTY_MULTI_LINE_EDEFAULT; case GenModelPackage.GEN_FEATURE__PROPERTY_SORT_CHOICES: return propertySortChoices != PROPERTY_SORT_CHOICES_EDEFAULT; case GenModelPackage.GEN_FEATURE__GEN_CLASS: return getGenClass() != null; case GenModelPackage.GEN_FEATURE__ECORE_FEATURE: return ecoreFeature != null; } return super.eIsSet(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (property: "); result.append(property); result.append(", notify: "); result.append(notify); result.append(", children: "); result.append(children); result.append(", createChild: "); if (createChildESet) result.append(createChild); else result.append("<unset>"); result.append(", propertyCategory: "); result.append(propertyCategory); result.append(", propertyFilterFlags: "); result.append(propertyFilterFlags); result.append(", propertyDescription: "); result.append(propertyDescription); result.append(", propertyMultiLine: "); result.append(propertyMultiLine); result.append(", propertySortChoices: "); result.append(propertySortChoices); result.append(')'); return result.toString(); } @Override public ETypedElement getEcoreTypedElement() { return getEcoreFeature(); } @Override protected EModelElement basicGetEcoreModelElement() { return ecoreFeature; } @Override public String getName() { return getEcoreFeature().getName(); } public String getCapName() { return capName(getName()); } public String getAccessorName() { return isMapEntryFeature() ? "Typed" + getCapName() : getCapName(); } public String getGetArrayAccessor() { String result = getGetAccessor(); if (isListType() && !isFeatureMapType() && !isMapType() && getGenModel().isArrayAccessors()) { result = result.substring(0, result.length() - 4); } return result; } public String getGetAccessor() { String capName = getCapName(); if (isMapEntryFeature()) return "getTyped" + capName; String result = isBooleanType() ? "is" + capName : "get" + ("Class".equals(capName) ? "Class_" : capName); if (isListType() && !isFeatureMapType() && !isMapType() && getGenModel().isArrayAccessors()) { result += "List"; } GenClass rootImplementsInterface = getGenModel().getRootImplementsInterfaceGenClass(); GenClass context = getContext(); if (rootImplementsInterface != null && !rootImplementsInterface.isEObject()) { for (GenOperation genOperation : rootImplementsInterface.getAllGenOperations()) { if (genOperation.getName().equals(result) && genOperation.getGenParameters().isEmpty() && !genOperation.getType(context).equals(getType(context))) { result = result + "_"; break; } } } return result; } public String getSafeName() { return safeName(uncapPrefixedName(getName())); } public String getSafeNameAsEObject() { String result = getSafeName(); if (!isEObjectExtensionType()) { result = "((" + getGenModel().getImportedName("org.eclipse.emf.ecore.EObject") + ")" + result + ")"; } return result; } public String getFormattedName() { return format(getCapName(), ' ', null, false, false); } public String getUpperName() { return CodeGenUtil.upperName(getName(), getGenModel().getLocale()); } public String getUncapName() { return uncapPrefixedName(getName()); } public String getIsName() { String name = getName(); if (name.startsWith("is") && name.length() > 2 && Character.isUpperCase(name.charAt(2))) { return name.substring(2); } else { return capName(name); } } public GenPackage getGenPackage() { return getGenClass().getGenPackage(); } public String getFeatureAccessorName() { return getGenClass().getName() + "_" + getCapName(); } public String getQualifiedFeatureAccessorName() { return getGenPackage().getImportedPackageInterfaceName() + ".eINSTANCE.get" + getFeatureAccessorName(); } public String getQualifiedFeatureAccessor() { return getGenPackage().isLiteralsInterface() ? getGenPackage().getImportedPackageInterfaceName() + ".Literals." + getGenClass().getFeatureID(this) : getQualifiedFeatureAccessorName() + "()"; } public String getMetaType() { String importedName = getImportedMetaType(); return importedName.substring(importedName.lastIndexOf(".") + 1); } public String getImportedMetaType() { if (getEcoreFeature() instanceof EReference) return getGenModel().getImportedName("org.eclipse.emf.ecore.EReference"); else return getGenModel().getImportedName("org.eclipse.emf.ecore.EAttribute"); } public String getFeatureKind() { String kind = getEcoreFeature() instanceof EReference ? isContains() ? isJavaUtilMapEntry(getEcoreFeature().getEType().getInstanceClassName()) ? "map" : "containment reference" : isContainer() ? "container reference" : "reference" : "attribute"; return !"map".equals(kind) && getEcoreFeature().isMany() ? kind + " list" : kind; } public boolean isReferenceType() { return getEcoreFeature() instanceof EReference; } @Override protected boolean isEObjectExtensionType() { return isReferenceType() && super.isEObjectExtensionType(); } @Override protected boolean isEObjectType() { return isReferenceType() && super.isEObjectType(); } @Override public boolean isMapType() { return isContains() && super.isMapType(); } public boolean isFlag() { return isBooleanType() && !isVolatile(); } public boolean isESetFlag() { return isUnsettable() && !isListType() && !isVolatile(); } public boolean isSetDefaultValue() { return getEcoreFeature().getDefaultValueLiteral() != null; } public String getDefaultValue() { if (!isSetDefaultValue()) return null; return Literals.toStringLiteral(getEcoreFeature().getDefaultValueLiteral(), getGenModel()); } public String getStaticDefaultValue() { String defaultString = getEcoreFeature().getDefaultValueLiteral(); EClassifier eType = getEcoreFeature().getEType(); if (eType instanceof EDataType) { GenDataType genDataType = (GenDataType)findGenClassifier(eType); return genDataType.getStaticValue(defaultString); } return "null"; } protected boolean isMapEntryFeature() { return getGenClass().isMapEntry() && ("key".equals(getName()) || "value".equals(getName())); } public boolean isContainer() { if (isReferenceType()) { EReference opposite = ((EReference)getEcoreFeature()).getEOpposite(); return opposite != null && opposite.isContainment(); } return false; } public boolean isContains() { return isReferenceType() && ((EReference)getEcoreFeature()).isContainment(); } public boolean isBidirectional() { if (isReferenceType()) { EReference eReverseFeature = ((EReference)getEcoreFeature()).getEOpposite(); return eReverseFeature != null; // && eReverseFeature.isNavigable(); } return false; } public GenFeature getReverse() { if (isBidirectional()) { EReference eReverseFeature = ((EReference)getEcoreFeature()).getEOpposite(); if (eReverseFeature != null) { EClass eReverseClass = (EClass)eReverseFeature.eContainer(); GenClass genClass = findGenClass(eReverseClass); if (genClass != null) { for (GenFeature genFeature : genClass.getGenFeatures()) { if (genFeature.getEcoreFeature() == eReverseFeature) { return genFeature; } } } } } return null; } public List<GenFeature> getKeys() { List<GenFeature> result = new ArrayList<GenFeature>(); for (EAttribute eAttribute : ((EReference)getEcoreFeature()).getEKeys()) { GenClass genClass = getTypeGenClass(); for (GenFeature genFeature : genClass.getAllGenFeatures()) { if (genFeature.getEcoreFeature() == eAttribute) { result.add(genFeature); } } } return result; } public String getContainerClass() { GenClass genClass = getGenClass(); return genClass.isDocumentRoot() || genClass.isDynamic() ? "null" : genClass.getImportedInterfaceName() + ".class"; } public String getDerivedFlag() { String result = !getEcoreFeature().isDerived() ? "!" : ""; return result + "IS_DERIVED"; } public String getTransientFlag() { String result = !getEcoreFeature().isTransient() ? "!" : ""; return result + "IS_TRANSIENT"; } public String getVolatileFlag() { String result = !getEcoreFeature().isVolatile() ? "!" : ""; return result + "IS_VOLATILE"; } public String getChangeableFlag() { String result = !getEcoreFeature().isChangeable() ? "!" : ""; return result + "IS_CHANGEABLE"; } public String getUnsettableFlag() { String result = !isUnsettable() ? "!" : ""; return result + "IS_UNSETTABLE"; } public String getIDFlag() { String result = !isID() ? "!" : ""; return result + "IS_ID"; } public String getContainmentFlag() { String result = !((EReference)getEcoreFeature()).isContainment() ? "!" : ""; return result + "IS_COMPOSITE"; } public String getResolveProxiesFlag() { String result = !isResolveProxies() ? "!" : ""; return result + "IS_RESOLVE_PROXIES"; } public boolean isResolveProxies() { EStructuralFeature eStructuralFeature = getEcoreFeature(); return (!isContainer() && !isContains() || getGenModel().isContainmentProxies())&& eStructuralFeature instanceof EReference && ((EReference)eStructuralFeature).isResolveProxies(); } public boolean isVolatile() { // We treat the feature as volatile if it is volatile itself or if it is // a reference whose opposite end is volatile, // unless that opposite volatile reference delegates to a feature map, // in which case, a full implementation of the references can be generated. // EReference eReverseFeature = isReferenceType() ? ((EReference)getEcoreFeature()).getEOpposite() : null; return (getEcoreFeature().isVolatile() || (eReverseFeature != null && eReverseFeature.isVolatile() && !getReverse().hasDelegateFeature())); } public boolean isChangeable() { return getEcoreFeature().isChangeable(); } public boolean isUnsettable() { if (getGenModel().isSuppressUnsettable()) { return false; } else { EStructuralFeature eStructuralFeature = getEcoreFeature(); return eStructuralFeature.isUnsettable() && !isContainer(); } } public boolean isID() { EStructuralFeature eStructuralFeature = getEcoreFeature(); return eStructuralFeature instanceof EAttribute && ((EAttribute)eStructuralFeature).isID(); } public boolean isDerived() { return getEcoreFeature().isDerived(); } public boolean hasDelegateFeature() { EStructuralFeature ecoreFeature = getEcoreFeature(); EClass ecoreClass = ecoreFeature.getEContainingClass(); EStructuralFeature mixedFeature = getExtendedMetaData().getMixedFeature(ecoreClass); return (mixedFeature != null && mixedFeature != ecoreFeature && isPotentialDelegatingFeatureKind(getExtendedMetaData().getFeatureKind(ecoreFeature))) || getExtendedMetaData().getGroup(ecoreFeature) != null; } private boolean isPotentialDelegatingFeatureKind(int featureKind) { switch (featureKind) { case ExtendedMetaData.SIMPLE_FEATURE: case ExtendedMetaData.ELEMENT_FEATURE: case ExtendedMetaData.ELEMENT_WILDCARD_FEATURE: case ExtendedMetaData.GROUP_FEATURE: { return true; } default: { return false; } } } public GenFeature getDelegateFeature() { EStructuralFeature ecoreFeature = getEcoreFeature(); EClass ecoreClass = ecoreFeature.getEContainingClass(); EStructuralFeature eStructuralFeature = getExtendedMetaData().getGroup(ecoreFeature); if (eStructuralFeature == null && isPotentialDelegatingFeatureKind(getExtendedMetaData().getFeatureKind(ecoreFeature))) { eStructuralFeature = getExtendedMetaData().getMixedFeature(ecoreClass); } if (eStructuralFeature != null && eStructuralFeature != ecoreFeature) { return findGenFeature(eStructuralFeature); } else { return null; } } /** * It considers mixed types, model groups, substitution groups and wildcards. */ public List<GenFeature> getDelegatedFeatures() { return getDelegatedFeatures(getGenModel()); } public List<GenFeature> getDelegatedFeatures(GenModel genModel) { if (!isFeatureMapType()) return Collections.emptyList(); GenClass genClass = getGenClass(); List<GenFeature> delegated = new ArrayList<GenFeature>(); ExtendedMetaData extendedMetaData = genModel.getExtendedMetaData(); if (genClass.getMixedGenFeature() == this) { delegated.add(findGenFeature(XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__COMMENT)); delegated.add(findGenFeature(XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__TEXT)); delegated.add(findGenFeature(XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__PROCESSING_INSTRUCTION)); if (!genClass.isDocumentRoot()) { delegated.add(findGenFeature(XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__CDATA)); } for (GenFeature otherFeature : genClass.getGenFeatures()) { if (otherFeature != this && otherFeature.isDerived() && extendedMetaData.getGroup(otherFeature.getEcoreFeature()) == null) { delegated.add(otherFeature); } } } else { switch (extendedMetaData.getFeatureKind(getEcoreFeature())) { case ExtendedMetaData.GROUP_FEATURE: { Set<EStructuralFeature> allDelegated = new HashSet<EStructuralFeature>(); Set<String> qNames = new HashSet<String>(); for (GenFeature otherFeature : genClass.getGenFeatures()) { if (otherFeature != this && otherFeature.isDerived() && extendedMetaData.getGroup(otherFeature.getEcoreFeature()) == getEcoreFeature()) { if (otherFeature.isChangeable()) { delegated.add(otherFeature); qNames.add (extendedMetaData.getNamespace(otherFeature.getEcoreFeature()) + "#" + extendedMetaData.getName(otherFeature.getEcoreFeature())); } allDelegated.add(otherFeature.getEcoreFeature()); } } for (GenPackage genPackage : genModel.getAllGenAndUsedGenPackagesWithClassifiers()) { if (genPackage.hasDocumentRoot()) { GenClass documentRoot = genPackage.getDocumentRoot(); for (GenFeature otherFeature : documentRoot.getGenFeatures()) { if (otherFeature != this && otherFeature.isChangeable() && otherFeature.isDerived() && allDelegated.contains(extendedMetaData.getAffiliation(genClass.getEcoreClass(), otherFeature.getEcoreFeature()))) { if (qNames.add (extendedMetaData.getNamespace(otherFeature.getEcoreFeature()) + "#" + extendedMetaData.getName(otherFeature.getEcoreFeature()))) { delegated.add(otherFeature); } } } } } break; } case ExtendedMetaData.ATTRIBUTE_WILDCARD_FEATURE: case ExtendedMetaData.ELEMENT_WILDCARD_FEATURE: { for (GenPackage genPackage : genModel.getAllGenAndUsedGenPackagesWithClassifiers()) { if (genPackage.hasDocumentRoot()) { GenClass documentRoot = genPackage.getDocumentRoot(); for (GenFeature otherFeature : documentRoot.getGenFeatures()) { if (otherFeature != this && otherFeature.isChangeable() && otherFeature.isDerived() && extendedMetaData.getAffiliation(genClass.getEcoreClass(), otherFeature.getEcoreFeature()) == getEcoreFeature()) { delegated.add(otherFeature); } } } } break; } } } /* else if (extendedMetaData.getFeatureKind(getEcoreFeature()) == ExtendedMetaData.GROUP_FEATURE) { for (Iterator iter = genClass.getGenFeatures().iterator(); iter.hasNext(); ) { GenFeature otherFeature = (GenFeature)iter.next(); if (otherFeature != this && otherFeature.isDerived() && otherFeature.isChangeable() && extendedMetaData.getGroup(otherFeature.getEcoreFeature()) == getEcoreFeature()) { delegated.add(otherFeature); } } } */ List<GenFeature> result = new ArrayList<GenFeature>(); for (GenFeature feature : delegated) { if (feature.isFeatureMapType()) { result.addAll(feature.getDelegatedFeatures(genModel)); } else { result.add(feature); } } return result; } public String getCreateChildValueLiteral() { String result = getDefaultValue(); if (result == null) { Class<?> c = getEcoreFeature().getEType().getInstanceClass(); if (c == Boolean.TYPE || c == Boolean.class) { result = "\"false\""; } else if (c == String.class) { result = "\"\""; } else if (c == Character.class) { result = "\"0\""; } else if (c == Byte.TYPE || c == Short.TYPE || c == Integer.TYPE || c == Long.TYPE || c == Float.TYPE || c == Double.TYPE || (c != null && Number.class.isAssignableFrom(c))) { result = "\"0\""; } } return result; } public boolean isSuppressedGetVisibility() { return EcoreUtil.isSuppressedVisibility(getEcoreFeature(), EcoreUtil.GET); } public boolean isSuppressedSetVisibility() { return EcoreUtil.isSuppressedVisibility(getEcoreFeature(), EcoreUtil.SET); } public boolean isSuppressedIsSetVisibility() { return EcoreUtil.isSuppressedVisibility(getEcoreFeature(), EcoreUtil.IS_SET); } public boolean isSuppressedUnsetVisibility() { return EcoreUtil.isSuppressedVisibility(getEcoreFeature(), EcoreUtil.UNSET); } public void initialize(EStructuralFeature eFeature) { if (eFeature != getEcoreFeature()) { setEcoreFeature(eFeature); if (eFeature instanceof EReference) { EReference eReference = (EReference)eFeature; if (!eReference.isContainer() && !eReference.isContainment()) { setProperty(eFeature.isChangeable() ? GenPropertyKind.EDITABLE_LITERAL : GenPropertyKind.READONLY_LITERAL); } else { setProperty(GenPropertyKind.NONE_LITERAL); } setChildren (eReference.isContainment() && (getGenClass().isDocumentRoot() ? getExtendedMetaData().getFeatureKind(eFeature) == ExtendedMetaData.ELEMENT_FEATURE : !hasDelegateFeature())); setCreateChild(isChildren() && isChangeable()); setNotify(isChildren()); } else if (isFeatureMapType()) { setProperty(GenPropertyKind.NONE_LITERAL); setChildren(!getGenClass().isDocumentRoot() && !hasDelegateFeature()); setCreateChild(isChildren() && isChangeable()); setNotify(isChildren()); } else { setProperty(eFeature.isChangeable() ? GenPropertyKind.EDITABLE_LITERAL : GenPropertyKind.READONLY_LITERAL); setChildren(false); setCreateChild(false); setNotify(true); } if (getProperty() == GenPropertyKind.EDITABLE_LITERAL && isReferenceType()) { setPropertySortChoices(true); } } } @Override public String getModelInfo() { return getModelInfo(false); } public String getQualifiedModelInfo() { return getModelInfo(true); } AnnotationFilter DEFAULT_GEN_FEATURE_ANNOTATION_FILTER = new AnnotationFilterImpl() { @Override public boolean accept(EModelElement eModelElement, String source, String key, String value) { return super.accept(eModelElement, source, key, value) && !(GenModelPackage.eNS_URI.equals(source) && ("suppressedSetVisibility".equals(key) || "suppressedGetVisibility".equals(key) || "suppressedIsSetVisibility".equals(key) || "suppressedUnsetVisibility".equals(key))); } }; public String getModelInfo(boolean qualified) { EStructuralFeature eStructuralFeature = getEcoreFeature(); StringBuffer result = new StringBuffer(); boolean defaultTransient = false; if (eStructuralFeature instanceof EReference) { EGenericType eGenericType = eStructuralFeature.getEGenericType(); ETypeParameter eTypeParameter = eGenericType.getETypeParameter(); if (eTypeParameter != null) { boolean needsKindAnnotation = true; for (EGenericType eBound : eTypeParameter.getEBounds()) { if (eBound.getERawType() instanceof EClass) { needsKindAnnotation = false; break; } } if (needsKindAnnotation) { appendModelSetting(result, qualified, "kind", "reference"); } } } // We don't want keyType and valueType on a map type specification in a package interface. // But, we also use qualified model information when defining a feature with suppressed get accessor // on the interface, and we do want to include these properties in that case. // String mapModelInfo = getMapModelInfo(qualified, (!qualified || isSuppressedGetVisibility()) && !isContainer()); if (mapModelInfo != null) { result.append(mapModelInfo); } else { if (eStructuralFeature instanceof EReference) { if (qualified || eStructuralFeature.isMany() && getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50 || hasReferenceToClassifierWithInstanceTypeName(eStructuralFeature.getEGenericType())) { appendModelSetting(result, qualified, "type", getEcoreType(eStructuralFeature.getEGenericType())); } EReference reference = (EReference) eStructuralFeature; EReference opposite = reference.getEOpposite(); if (opposite != null) { appendModelSetting(result, qualified, "opposite", opposite.getName()); if (opposite.isContainment()) { defaultTransient = true; } } if (reference.isContainment()) { appendModelSetting(result, qualified, "containment", "true"); if (reference.isResolveProxies() && getGenModel().isContainmentProxies()) { appendModelSetting(result, qualified, "resolveProxies", "true"); } } else if (!reference.isResolveProxies()) { appendModelSetting(result, qualified, "resolveProxies", "false"); } if (reference.isUnsettable()) { appendModelSetting(result, qualified, "unsettable", "true"); } if (!reference.getEKeys().isEmpty()) { StringBuilder keys = new StringBuilder(); for (EAttribute eKey : reference.getEKeys()) { keys.append(eKey.getName()); keys.append(' '); } appendModelSetting(result, qualified, "keys", keys.toString().trim()); } } else if (eStructuralFeature instanceof EAttribute) { EAttribute attribute = (EAttribute) eStructuralFeature; if (eStructuralFeature.getDefaultValueLiteral() != null) { String literal = Literals.toStringLiteral(eStructuralFeature.getDefaultValueLiteral(), getGenModel()); appendModelSetting(result, qualified, "default", literal.substring(1, literal.length() - 1)); } if (!eStructuralFeature.isUnique()) { appendModelSetting(result, qualified, "unique", "false"); } if (attribute.isUnsettable()) { appendModelSetting(result, qualified, "unsettable", "true"); } if (attribute.isID()) { appendModelSetting(result, qualified, "id", "true"); } EDataType eDataType = attribute.getEAttributeType(); if (qualified || eStructuralFeature.isMany() && getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50 || hasReferenceToClassifierWithInstanceTypeName(eStructuralFeature.getEGenericType())) { GenPackage genPackage = findGenPackage(eDataType.getEPackage()); if (genPackage != null && (isFeatureMapType() || !genPackage.isEcorePackage() || qualified)) { appendModelSetting(result, qualified, "dataType", getEcoreType(eStructuralFeature.getEGenericType())); } } } result.append(getMultiplicityModelInfo(qualified)); } if (eStructuralFeature.isTransient() && !defaultTransient) { appendModelSetting(result, qualified, "transient", "true"); } else if (!eStructuralFeature.isTransient() && defaultTransient) { appendModelSetting(result, qualified, "transient", "false"); } if (!eStructuralFeature.isChangeable()) { appendModelSetting(result, qualified, "changeable", "false"); } if (eStructuralFeature.isVolatile()) { appendModelSetting(result, qualified, "volatile", "true"); } if (eStructuralFeature.isDerived()) { appendModelSetting(result, qualified, "derived", "true"); } if (!eStructuralFeature.isOrdered()) { appendModelSetting(result, qualified, "ordered", "false"); } if (isSuppressedGetVisibility()) { appendModelSetting(result, qualified, "suppressedGetVisibility", "true"); } if (isSuppressedSetVisibility()) { appendModelSetting(result, qualified, "suppressedSetVisibility", "true"); } if (isSuppressedIsSetVisibility()) { appendModelSetting(result, qualified, "suppressedIsSetVisibility", "true"); } if (isSuppressedUnsetVisibility()) { appendModelSetting(result, qualified, "suppressedUnsetVisibility", "true"); } appendAnnotationInfo(result, qualified, eStructuralFeature, DEFAULT_GEN_FEATURE_ANNOTATION_FILTER); return result.toString().trim(); } // // EMFEdit generation // public String getPropertyImageName() { EClassifier eType = getEcoreFeature().getEType(); if (isPrimitiveType(eType)) { Class<?> instanceClass = eType.getInstanceClass(); if (instanceClass == Boolean.TYPE || instanceClass == Boolean.class) { return "BOOLEAN_VALUE_IMAGE"; } else if (instanceClass == Byte.TYPE || instanceClass == Byte.class || instanceClass == Integer.TYPE || instanceClass == Integer.class || instanceClass == Long.TYPE || instanceClass == Long.class || instanceClass == Short.TYPE || instanceClass == Short.class) { return "INTEGRAL_VALUE_IMAGE"; } else if (instanceClass == Character.TYPE || instanceClass == Character.class || instanceClass == String.class) { return "TEXT_VALUE_IMAGE"; } else if (instanceClass == Double.TYPE || instanceClass == Double.class || instanceClass == Float.TYPE || instanceClass == Float.class) { return "REAL_VALUE_IMAGE"; } } return "GENERIC_VALUE_IMAGE"; } public boolean reconcile(GenFeature oldGenFeatureVersion) { if (getEcoreFeature().getName().equals(oldGenFeatureVersion.getEcoreFeature().getName())) { reconcileSettings(oldGenFeatureVersion); return true; } else { return false; } } protected void reconcileSettings(GenFeature oldGenFeatureVersion) { setProperty(oldGenFeatureVersion.getProperty()); setNotify(oldGenFeatureVersion.isNotify()); setChildren(oldGenFeatureVersion.isChildren()); setCreateChild(oldGenFeatureVersion.isCreateChild()); setPropertyCategory(oldGenFeatureVersion.getPropertyCategory()); setPropertyDescription(oldGenFeatureVersion.getPropertyDescription()); setPropertyMultiLine(oldGenFeatureVersion.isPropertyMultiLine()); setPropertySortChoices(oldGenFeatureVersion.isPropertySortChoices()); getPropertyFilterFlags().addAll(oldGenFeatureVersion.getPropertyFilterFlags()); reconcileGenAnnotations(oldGenFeatureVersion); } public boolean reconcile() { EStructuralFeature eFeature = getEcoreFeature(); if (eFeature == null || eFeature.eIsProxy() || eFeature.eResource() == null) { return false; } else { return true; } } public boolean isField() { return !isContainer() && !isVolatile() && !hasSettingDelegate(); } public boolean isESetField() { return !isContainer() && !isListType() && isUnsettable() && !isVolatile() && !hasSettingDelegate(); } public boolean isGet() { return true; } public boolean isBasicGet() { return !getGenModel().isReflectiveDelegation() && isResolveProxies() && !isListType(); } public boolean isBasicSet() { return !getGenModel().isReflectiveDelegation() && !isListType() && (isChangeable() || !isContainer()) && (isBidirectional() && !isVolatile() || isEffectiveContains()); } public boolean isSet() { return !isListType() && isChangeable(); } public boolean isBasicUnset() { return isUnsettable() && isChangeable() && !isListType() && isReferenceType() && (isBidirectional() || isEffectiveContains()); } public boolean isUnset() { return isUnsettable() && isChangeable(); } public boolean isIsSet() { return isUnsettable(); } public boolean isEffectiveContains() { return isContains() && !getGenModel().isSuppressContainment(); } public boolean hasEDefault() { return getEcoreFeature() instanceof EAttribute && (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50 || (getEcoreFeature().getEType() != null && getEcoreFeature().getEType().getETypeParameters().isEmpty() && getEcoreFeature().getEGenericType().getETypeParameter() == null && getEcoreFeature().getEType().getInstanceTypeName() == getEcoreFeature().getEType().getInstanceClassName())); } public String getEDefault() { return hasEDefault() ? getUpperName() + "_" + "EDEFAULT" : "null"; } public boolean isTested() { return isVolatile() || isDerived(); } public boolean hasSettingDelegate() { EStructuralFeature ecoreFeature = getEcoreFeature(); for (String settingDelegate : EcoreUtil.getSettingDelegates(getGenPackage().getEcorePackage())) { if (ecoreFeature.getEAnnotation(settingDelegate) != null) return true; } return false; } protected String getGetterBody() { EStructuralFeature eStructuralFeature = getEcoreFeature(); EAnnotation eAnnotation = eStructuralFeature.getEAnnotation(GenModelPackage.eNS_URI); return eAnnotation == null ? null : (String)eAnnotation.getDetails().get("get"); } public boolean hasGetterBody() { return getGetterBody() != null; } public String getGetterBody(String indentation) { return indentAndImport(getGetterBody(), indentation); } } //GenFeatureImpl