/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.metamodels.xml.impl; 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.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.xsd.XSDAttributeUseCategory; import org.eclipse.xsd.XSDComponent; import org.teiid.designer.metamodels.xml.BuildStatus; import org.teiid.designer.metamodels.xml.ValueType; import org.teiid.designer.metamodels.xml.XmlAttribute; import org.teiid.designer.metamodels.xml.XmlDocumentPackage; import org.teiid.designer.metamodels.xml.XmlElement; import org.teiid.designer.metamodels.xml.XmlNamespace; import org.teiid.designer.metamodels.xml.XmlValueHolder; import org.teiid.designer.metamodels.xsd.XsdUtil; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Xml Attribute</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link org.teiid.designer.metamodels.xml.impl.XmlAttributeImpl#getValue <em>Value</em>}</li> * <li>{@link org.teiid.designer.metamodels.xml.impl.XmlAttributeImpl#getValueType <em>Value Type</em>}</li> * <li>{@link org.teiid.designer.metamodels.xml.impl.XmlAttributeImpl#getUse <em>Use</em>}</li> * <li>{@link org.teiid.designer.metamodels.xml.impl.XmlAttributeImpl#getElement <em>Element</em>}</li> * </ul> * </p> * * @generated * * @since 8.0 */ public class XmlAttributeImpl extends XmlDocumentNodeImpl implements XmlAttribute { /** * The default value of the '{@link #getValue() <em>Value</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getValue() * @generated * @ordered */ protected static final String VALUE_EDEFAULT = null; /** * The cached value of the '{@link #getValue() <em>Value</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getValue() * @generated * @ordered */ protected String value = VALUE_EDEFAULT; /** * The default value of the '{@link #getValueType() <em>Value Type</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getValueType() * @generated * @ordered */ protected static final ValueType VALUE_TYPE_EDEFAULT = ValueType.IGNORED_LITERAL; /** * The cached value of the '{@link #getValueType() <em>Value Type</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getValueType() * @generated * @ordered */ protected ValueType valueType = VALUE_TYPE_EDEFAULT; /** * The default value of the '{@link #getUse() <em>Use</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getUse() * @generated * @ordered */ protected static final XSDAttributeUseCategory USE_EDEFAULT = XSDAttributeUseCategory.OPTIONAL_LITERAL; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ protected XmlAttributeImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return XmlDocumentPackage.eINSTANCE.getXmlAttribute(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public String getValue() { return value; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void setValue(String newValue) { String oldValue = value; value = newValue; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, XmlDocumentPackage.XML_ATTRIBUTE__VALUE, oldValue, value)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public ValueType getValueType() { return valueType; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void setValueType(ValueType newValueType) { ValueType oldValueType = valueType; valueType = newValueType == null ? VALUE_TYPE_EDEFAULT : newValueType; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE, oldValueType, valueType)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ @Override public XSDAttributeUseCategory getUse() { final XSDComponent schemaComp = getXsdComponent(); if (schemaComp != null) { return XsdUtil.getUse(schemaComp); } return USE_EDEFAULT; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public XSDAttributeUseCategory getUseGen() { // TODO: implement this method to return the 'Use' attribute // Ensure that you remove @generated or mark it @generated NOT throw new UnsupportedOperationException(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public XmlElement getElement() { if (eContainerFeatureID != XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT) return null; return (XmlElement)eContainer; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void setElement(XmlElement newElement) { if (newElement != eContainer || (eContainerFeatureID != XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT && newElement != null)) { if (EcoreUtil.isAncestor(this, newElement)) throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$ NotificationChain msgs = null; if (eContainer != null) msgs = eBasicRemoveFromContainer(msgs); if (newElement != null) msgs = ((InternalEObject)newElement).eInverseAdd(this, XmlDocumentPackage.XML_ELEMENT__ATTRIBUTES, XmlElement.class, msgs); msgs = eBasicSetContainer((InternalEObject)newElement, XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT, newElement, newElement)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ @Override public boolean isValueFixed() { final ValueType valueType = getValueType(); return ValueType.FIXED == valueType.getValue(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isValueFixedGen() { // TODO: implement this method // Ensure that you remove @generated or mark it @generated NOT throw new UnsupportedOperationException(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ @Override public boolean isValueDefault() { final ValueType valueType = getValueType(); return ValueType.DEFAULT == valueType.getValue(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public boolean isValueDefaultGen() { // TODO: implement this method // Ensure that you remove @generated or mark it @generated NOT throw new UnsupportedOperationException(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) { if (featureID >= 0) { switch (eDerivedStructuralFeatureID(featureID, baseClass)) { case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: if (eContainer != null) msgs = eBasicRemoveFromContainer(msgs); return eBasicSetContainer(otherEnd, XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT, msgs); default: return eDynamicInverseAdd(otherEnd, featureID, baseClass, msgs); } } if (eContainer != null) msgs = eBasicRemoveFromContainer(msgs); return eBasicSetContainer(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) { if (featureID >= 0) { switch (eDerivedStructuralFeatureID(featureID, baseClass)) { case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: return eBasicSetContainer(null, XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT, msgs); default: return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs); } } return eBasicSetContainer(null, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eBasicRemoveFromContainer(NotificationChain msgs) { if (eContainerFeatureID >= 0) { switch (eContainerFeatureID) { case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: return eContainer.eInverseRemove(this, XmlDocumentPackage.XML_ELEMENT__ATTRIBUTES, XmlElement.class, msgs); default: return eDynamicBasicRemoveFromContainer(msgs); } } return eContainer.eInverseRemove(this, EOPPOSITE_FEATURE_BASE - eContainerFeatureID, null, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object eGet(EStructuralFeature eFeature, boolean resolve) { switch (eDerivedStructuralFeatureID(eFeature)) { case XmlDocumentPackage.XML_ATTRIBUTE__BUILD_STATE: return getBuildState(); case XmlDocumentPackage.XML_ATTRIBUTE__NAME: return getName(); case XmlDocumentPackage.XML_ATTRIBUTE__EXCLUDE_FROM_DOCUMENT: return isExcludeFromDocument() ? Boolean.TRUE : Boolean.FALSE; case XmlDocumentPackage.XML_ATTRIBUTE__MIN_OCCURS: return new Integer(getMinOccurs()); case XmlDocumentPackage.XML_ATTRIBUTE__MAX_OCCURS: return new Integer(getMaxOccurs()); case XmlDocumentPackage.XML_ATTRIBUTE__XSD_COMPONENT: if (resolve) return getXsdComponent(); return basicGetXsdComponent(); case XmlDocumentPackage.XML_ATTRIBUTE__NAMESPACE: if (resolve) return getNamespace(); return basicGetNamespace(); case XmlDocumentPackage.XML_ATTRIBUTE__VALUE: return getValue(); case XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE: return getValueType(); case XmlDocumentPackage.XML_ATTRIBUTE__USE: return getUse(); case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: return getElement(); } return eDynamicGet(eFeature, resolve); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eSet(EStructuralFeature eFeature, Object newValue) { switch (eDerivedStructuralFeatureID(eFeature)) { case XmlDocumentPackage.XML_ATTRIBUTE__BUILD_STATE: setBuildState((BuildStatus)newValue); return; case XmlDocumentPackage.XML_ATTRIBUTE__NAME: setName((String)newValue); return; case XmlDocumentPackage.XML_ATTRIBUTE__EXCLUDE_FROM_DOCUMENT: setExcludeFromDocument(((Boolean)newValue).booleanValue()); return; case XmlDocumentPackage.XML_ATTRIBUTE__XSD_COMPONENT: setXsdComponent((XSDComponent)newValue); return; case XmlDocumentPackage.XML_ATTRIBUTE__NAMESPACE: setNamespace((XmlNamespace)newValue); return; case XmlDocumentPackage.XML_ATTRIBUTE__VALUE: setValue((String)newValue); return; case XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE: setValueType((ValueType)newValue); return; case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: setElement((XmlElement)newValue); return; } eDynamicSet(eFeature, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(EStructuralFeature eFeature) { switch (eDerivedStructuralFeatureID(eFeature)) { case XmlDocumentPackage.XML_ATTRIBUTE__BUILD_STATE: setBuildState(BUILD_STATE_EDEFAULT); return; case XmlDocumentPackage.XML_ATTRIBUTE__NAME: setName(NAME_EDEFAULT); return; case XmlDocumentPackage.XML_ATTRIBUTE__EXCLUDE_FROM_DOCUMENT: setExcludeFromDocument(EXCLUDE_FROM_DOCUMENT_EDEFAULT); return; case XmlDocumentPackage.XML_ATTRIBUTE__XSD_COMPONENT: setXsdComponent((XSDComponent)null); return; case XmlDocumentPackage.XML_ATTRIBUTE__NAMESPACE: setNamespace((XmlNamespace)null); return; case XmlDocumentPackage.XML_ATTRIBUTE__VALUE: setValue(VALUE_EDEFAULT); return; case XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE: setValueType(VALUE_TYPE_EDEFAULT); return; case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: setElement((XmlElement)null); return; } eDynamicUnset(eFeature); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(EStructuralFeature eFeature) { switch (eDerivedStructuralFeatureID(eFeature)) { case XmlDocumentPackage.XML_ATTRIBUTE__BUILD_STATE: return buildState != BUILD_STATE_EDEFAULT; case XmlDocumentPackage.XML_ATTRIBUTE__NAME: return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); case XmlDocumentPackage.XML_ATTRIBUTE__EXCLUDE_FROM_DOCUMENT: return excludeFromDocument != EXCLUDE_FROM_DOCUMENT_EDEFAULT; case XmlDocumentPackage.XML_ATTRIBUTE__MIN_OCCURS: return getMinOccurs() != MIN_OCCURS_EDEFAULT; case XmlDocumentPackage.XML_ATTRIBUTE__MAX_OCCURS: return getMaxOccurs() != MAX_OCCURS_EDEFAULT; case XmlDocumentPackage.XML_ATTRIBUTE__XSD_COMPONENT: return xsdComponent != null; case XmlDocumentPackage.XML_ATTRIBUTE__NAMESPACE: return namespace != null; case XmlDocumentPackage.XML_ATTRIBUTE__VALUE: return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value); case XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE: return valueType != VALUE_TYPE_EDEFAULT; case XmlDocumentPackage.XML_ATTRIBUTE__USE: return getUse() != USE_EDEFAULT; case XmlDocumentPackage.XML_ATTRIBUTE__ELEMENT: return getElement() != null; } return eDynamicIsSet(eFeature); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) { if (baseClass == XmlValueHolder.class) { switch (derivedFeatureID) { case XmlDocumentPackage.XML_ATTRIBUTE__VALUE: return XmlDocumentPackage.XML_VALUE_HOLDER__VALUE; case XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE: return XmlDocumentPackage.XML_VALUE_HOLDER__VALUE_TYPE; default: return -1; } } return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) { if (baseClass == XmlValueHolder.class) { switch (baseFeatureID) { case XmlDocumentPackage.XML_VALUE_HOLDER__VALUE: return XmlDocumentPackage.XML_ATTRIBUTE__VALUE; case XmlDocumentPackage.XML_VALUE_HOLDER__VALUE_TYPE: return XmlDocumentPackage.XML_ATTRIBUTE__VALUE_TYPE; default: return -1; } } return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (value: "); //$NON-NLS-1$ result.append(value); result.append(", valueType: "); //$NON-NLS-1$ result.append(valueType); result.append(')'); return result.toString(); } } //XmlAttributeImpl