blob: 97c9fb67cf4e90a997cd8785dac00b98bc4def7b [file] [log] [blame]
/**
* Copyright (c) 2002-2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.xsd.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
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.util.UniqueEList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.EObjectEList;
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.xsd.XSDAnnotation;
import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDAttributeGroupContent;
import org.eclipse.xsd.XSDAttributeGroupDefinition;
import org.eclipse.xsd.XSDAttributeUse;
import org.eclipse.xsd.XSDAttributeUseCategory;
import org.eclipse.xsd.XSDComponent;
import org.eclipse.xsd.XSDConcreteComponent;
import org.eclipse.xsd.XSDDiagnosticSeverity;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDNamedComponent;
import org.eclipse.xsd.XSDNamespaceConstraintCategory;
import org.eclipse.xsd.XSDPackage;
import org.eclipse.xsd.XSDRedefine;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDWildcard;
import org.eclipse.xsd.util.XSDConstants;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Attribute Group Definition</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* </p>
* <ul>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#isAttributeGroupDefinitionReference <em>Attribute Group Definition Reference</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getAnnotation <em>Annotation</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getContents <em>Contents</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getAttributeUses <em>Attribute Uses</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getAttributeWildcardContent <em>Attribute Wildcard Content</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getAttributeWildcard <em>Attribute Wildcard</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getResolvedAttributeGroupDefinition <em>Resolved Attribute Group Definition</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDAttributeGroupDefinitionImpl#getSyntheticWildcard <em>Synthetic Wildcard</em>}</li>
* </ul>
*
* @generated
*/
public class XSDAttributeGroupDefinitionImpl
extends XSDRedefinableComponentImpl
implements XSDAttributeGroupDefinition
{
/**
* The default value of the '{@link #isAttributeGroupDefinitionReference() <em>Attribute Group Definition Reference</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAttributeGroupDefinitionReference()
* @generated
* @ordered
*/
protected static final boolean ATTRIBUTE_GROUP_DEFINITION_REFERENCE_EDEFAULT = false;
/**
* The cached value of the '{@link #getAnnotation() <em>Annotation</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getAnnotation()
* @generated
* @ordered
*/
protected XSDAnnotation annotation;
/**
* The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getContents()
* @generated
* @ordered
*/
protected EList<XSDAttributeGroupContent> contents;
/**
* The cached value of the '{@link #getAttributeUses() <em>Attribute Uses</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getAttributeUses()
* @generated
* @ordered
*/
protected EList<XSDAttributeUse> attributeUses;
/**
* The cached value of the '{@link #getAttributeWildcardContent() <em>Attribute Wildcard Content</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getAttributeWildcardContent()
* @generated
* @ordered
*/
protected XSDWildcard attributeWildcardContent;
/**
* The cached value of the '{@link #getAttributeWildcard() <em>Attribute Wildcard</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getAttributeWildcard()
* @generated
* @ordered
*/
protected XSDWildcard attributeWildcard;
/**
* The cached value of the '{@link #getResolvedAttributeGroupDefinition() <em>Resolved Attribute Group Definition</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getResolvedAttributeGroupDefinition()
* @generated
* @ordered
*/
protected XSDAttributeGroupDefinition resolvedAttributeGroupDefinition;
/**
* The cached value of the '{@link #getSyntheticWildcard() <em>Synthetic Wildcard</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSyntheticWildcard()
* @generated
* @ordered
*/
protected XSDWildcard syntheticWildcard;
public static XSDAttributeGroupDefinition createAttributeGroupDefinition(Node node)
{
if (XSDConstants.nodeType(node) == XSDConstants.ATTRIBUTEGROUP_ELEMENT)
{
XSDAttributeGroupDefinition xsdAttributeGroupDefinition = XSDFactory.eINSTANCE.createXSDAttributeGroupDefinition();
xsdAttributeGroupDefinition.setElement((Element)node);
return xsdAttributeGroupDefinition;
}
return null;
}
protected int analysisState;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
protected XSDAttributeGroupDefinitionImpl()
{
super();
this.resolvedAttributeGroupDefinition = this;
// this.setResolvedAttributeGroupDefinition = true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass()
{
return XSDPackage.Literals.XSD_ATTRIBUTE_GROUP_DEFINITION;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated modifiable
*/
public Boolean getAttributeGroupDefinitionReference()
{
return isAttributeGroupDefinitionReference() ? Boolean.TRUE : Boolean.FALSE;
}
@Override
public Element createElement()
{
Element newElement = createElement(XSDConstants.ATTRIBUTEGROUP_ELEMENT);
setElement(newElement);
for (XSDAttributeGroupContent xsdAttributeGroupContent : getContents())
{
if (xsdAttributeGroupContent instanceof XSDAttributeGroupDefinition)
{
XSDAttributeGroupDefinition xsdAttributeGroupDefinition = (XSDAttributeGroupDefinition)xsdAttributeGroupContent;
Element attributeGroupDefinitionElement = ((XSDConcreteComponentImpl)xsdAttributeGroupDefinition).createElement();
newElement.appendChild(attributeGroupDefinitionElement);
}
else
{
XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)xsdAttributeGroupContent;
Element attributeUseElement = ((XSDConcreteComponentImpl)xsdAttributeUse).createElement();
newElement.appendChild(attributeUseElement);
}
}
return newElement;
}
@Override
protected void patch()
{
analysisState = UNANALYZED;
super.patch();
XSDAttributeGroupDefinition theResolvedAttributeGroupDefinition = getResolvedAttributeGroupDefinition();
if (theResolvedAttributeGroupDefinition != this &&
(forceResolve || theResolvedAttributeGroupDefinition.getContainer() == null))
{
XSDAttributeGroupDefinition newResolvedAttributeGroupDefinition =
resolveAttributeGroupDefinition
(theResolvedAttributeGroupDefinition.getTargetNamespace(), theResolvedAttributeGroupDefinition.getName());
if (forceResolve || newResolvedAttributeGroupDefinition.getContainer() != null)
{
handleNewResolvedAttributeGroupDefinition(newResolvedAttributeGroupDefinition);
}
}
}
@Override
protected void traverseToRootForAnalysis()
{
analysisState = UNANALYZED;
super.traverseToRootForAnalysis();
}
@Override
protected boolean analyze()
{
switch (analysisState)
{
case UNANALYZED:
{
analysisState = ANALYZING;
super.analyze();
handleAnalysis();
if (analysisState == ANALYZING)
{
analysisState = ANALYZED;
return true;
}
else
{
return false;
}
}
case ANALYZED:
{
return true;
}
case ANALYZING:
case CIRCULAR:
default:
{
analysisState = CIRCULAR;
return false;
}
}
}
protected XSDWildcardImpl effectiveWildcard;
protected void handleAnalysis()
{
List<XSDAttributeUse> newAttributeUses = getAttributeUses(getContents(), Collections.<XSDAttributeUse>emptyList());
List<XSDAttributeUse> remainingAttributeUses = new ArrayList<XSDAttributeUse>(getAttributeUses());
remainingAttributeUses.removeAll(newAttributeUses);
if (!remainingAttributeUses.isEmpty())
{
getAttributeUses().removeAll(remainingAttributeUses);
}
setListContentAndOrder(getAttributeUses(), newAttributeUses);
XSDWildcard newAttributeWildcard = getAttributeWildcard(null, getAttributeWildcardContent(), getContents());
if (newAttributeWildcard != null && newAttributeWildcard.getContainer() == null)
{
if (effectiveWildcard == null)
{
effectiveWildcard = (XSDWildcardImpl)getXSDFactory().createXSDWildcard();
// effectiveWildcard.setOwner(this);
setSyntheticWildcard(effectiveWildcard);
}
effectiveWildcard.setLike(newAttributeWildcard);
newAttributeWildcard = effectiveWildcard;
}
if (newAttributeWildcard != getAttributeWildcard())
{
setAttributeWildcard(newAttributeWildcard);
}
}
@Override
public void validate()
{
super.validate();
Element theElement = getElement();
if (theElement != null)
{
if (getContainer() instanceof XSDSchema || getContainer() instanceof XSDRedefine)
{
checkAttributes
(XSDConstants.PART1,
"element-attributeGroup",
theElement,
new String []
{
XSDConstants.ID_ATTRIBUTE,
XSDConstants.NAME_ATTRIBUTE
});
checkComplexContent("namedAttributeGroup", XSDConstants.PART1, "element-attributeGroup", theElement);
}
else
{
checkAttributes
(XSDConstants.PART1,
"element-attributeGroup",
theElement,
new String []
{
XSDConstants.ID_ATTRIBUTE,
XSDConstants.REF_ATTRIBUTE
});
checkComplexContent("attributeGroupRef", XSDConstants.PART1, "element-attributeGroup", theElement);
}
checkBuiltInTypeConstraint
("ID",
null,
XSDConstants.PART1,
"element-attributeGroup",
theElement,
XSDConstants.ID_ATTRIBUTE,
false);
}
if (getContainer() instanceof XSDSchema || getContainer() instanceof XSDRedefine)
{
if (isAttributeGroupDefinitionReference())
{
if (theElement == null)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cvc-complex-type.3", "ref");
}
}
else
{
checkBuiltInTypeConstraint
("NCName",
getName(),
XSDConstants.PART1,
"element-attributeGroup",
theElement,
XSDConstants.NAME_ATTRIBUTE,
true);
XSDWildcard theAttributeWildcard = getAttributeWildcard();
if (theAttributeWildcard != null &&
theAttributeWildcard.getNamespaceConstraint().isEmpty() &&
theAttributeWildcard.getNamespaceConstraintCategory() == XSDNamespaceConstraintCategory.NOT_LITERAL)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-attribute_group.2");
}
if (isCircular())
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-attribute_group.3");
}
XSDAttributeDeclaration idAttribute = null;
Set<String> uris = new HashSet<String>();
for (XSDAttributeUse xsdAttributeUse : getAttributeUses())
{
XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
if (!uris.add(xsdAttributeDeclaration.getURI()))
{
getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "coss-attrGroup.2", xsdAttributeDeclaration.getURI());
}
if (XSDConstants.isOrIsDerivedFromID(xsdAttributeDeclaration.getTypeDefinition()))
{
if (idAttribute != null)
{
getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "coss-attrGroup.3", xsdAttributeDeclaration.getURI(), idAttribute.getURI());
}
else
{
idAttribute = xsdAttributeDeclaration;
}
}
}
}
}
else
{
if (isAttributeGroupDefinitionReference())
{
XSDAttributeGroupDefinition theResolvedAttributeGroupDefinition = getResolvedAttributeGroupDefinition();
if (theResolvedAttributeGroupDefinition.getContainer() == null)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"_UI_UnresolvedAttributeGroupDefinition_message",
theResolvedAttributeGroupDefinition.getURI());
}
}
else
{
if (theElement == null)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cvc-complex-type.3", "name");
}
}
}
}
public static List<XSDAttributeUse> getAttributeUses
(Collection<XSDAttributeGroupContent> xsdAttributeGroupContents, Collection<XSDAttributeUse> xsdAttributeUses)
{
List<XSDAttributeUse> result = new UniqueEList<XSDAttributeUse>();
Set<String> localAttributeUses = new HashSet<String>();
for (XSDAttributeGroupContent xsdAttributeGroupContent : xsdAttributeGroupContents)
{
((XSDConcreteComponentImpl)xsdAttributeGroupContent).analyze();
if (xsdAttributeGroupContent instanceof XSDAttributeUse)
{
XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)xsdAttributeGroupContent;
if (xsdAttributeUse.getUse() != XSDAttributeUseCategory.PROHIBITED_LITERAL)
{
result.add(xsdAttributeUse);
}
localAttributeUses.add(xsdAttributeUse.getAttributeDeclaration().getURI());
}
else
{
XSDAttributeGroupDefinition xsdAttributeGroupDefinition =
((XSDAttributeGroupDefinition)xsdAttributeGroupContent).getResolvedAttributeGroupDefinition();
((XSDConcreteComponentImpl)xsdAttributeGroupDefinition).analyze();
result.addAll(xsdAttributeGroupDefinition.getAttributeUses());
}
}
for (XSDAttributeUse xsdAttributeUse : xsdAttributeUses)
{
if (!localAttributeUses.contains(xsdAttributeUse.getAttributeDeclaration().getURI()))
{
result.add(xsdAttributeUse);
}
}
return XSDAttributeUseImpl.sortAttributeUses(result);
}
public static XSDWildcard getAttributeWildcard
(XSDWildcard baseWildcard, XSDWildcard localWildcard, Collection<XSDAttributeGroupContent> xsdAttributeGroupContents)
{
for (XSDAttributeGroupContent xsdAttributeGroupContent : xsdAttributeGroupContents)
{
((XSDConcreteComponentImpl)xsdAttributeGroupContent).analyze();
if (xsdAttributeGroupContent instanceof XSDAttributeGroupDefinition)
{
XSDAttributeGroupDefinition xsdAttributeGroupDefinition =
((XSDAttributeGroupDefinition)xsdAttributeGroupContent).getResolvedAttributeGroupDefinition();
((XSDConcreteComponentImpl)xsdAttributeGroupDefinition).analyze();
XSDWildcard attributeGroupWildcard = xsdAttributeGroupDefinition.getAttributeWildcard();
if (attributeGroupWildcard != null)
{
if (localWildcard == null)
{
localWildcard = attributeGroupWildcard;
}
else
{
localWildcard = localWildcard.attributeWildcardIntersection(attributeGroupWildcard);
if (localWildcard == null)
{
return null;
}
else if (localWildcard.getNamespaceConstraint().isEmpty() &&
localWildcard.getNamespaceConstraintCategory() == XSDNamespaceConstraintCategory.NOT_LITERAL)
{
// Failure
//
return localWildcard;
}
}
}
}
}
if (localWildcard == null)
{
localWildcard = baseWildcard;
}
else if (baseWildcard != null)
{
localWildcard = localWildcard.attributeWildcardUnion(baseWildcard);
}
return localWildcard;
}
@Override
protected void patchTargetNamespaceAttribute(XSDSchema xsdSchema)
{
if (!isAttributeGroupDefinitionReference())
{
super.patchTargetNamespaceAttribute(xsdSchema);
}
}
@Override
protected void reconcileAttributes(Element changedElement)
{
super.reconcileAttributes(changedElement);
XSDAttributeGroupDefinition newResolvedAttributeGroupDefinition = this;
if (changedElement.hasAttributeNS(null, XSDConstants.REF_ATTRIBUTE))
{
newResolvedAttributeGroupDefinition =
resolveAttributeGroupDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.REF_ATTRIBUTE));
}
handleNewResolvedAttributeGroupDefinition(newResolvedAttributeGroupDefinition);
}
protected void handleNewResolvedAttributeGroupDefinition(XSDAttributeGroupDefinition newResolvedAttributeGroupDefinition)
{
if (eContainer != null)
{
EObject parent = eContainer.eContainer();
if (parent instanceof XSDRedefine)
{
XSDSchema redefinedSchema = ((XSDRedefine)parent).getIncorporatedSchema();
if (redefinedSchema != null)
{
Map<XSDComponent, XSDComponent> redefinitionMap = ((XSDSchemaImpl)redefinedSchema).getRedefinitionMap();
if (redefinitionMap.containsKey(newResolvedAttributeGroupDefinition))
{
XSDComponent replacement = redefinitionMap.get(newResolvedAttributeGroupDefinition);
if (replacement != null)
{
newResolvedAttributeGroupDefinition = (XSDAttributeGroupDefinition)replacement;
}
}
}
}
}
if (newResolvedAttributeGroupDefinition != getResolvedAttributeGroupDefinition())
{
setResolvedAttributeGroupDefinition(newResolvedAttributeGroupDefinition);
}
}
@Override
protected void handleUnreconciledElement(Element child, List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
{
XSDAnnotation xsdAnnotation = XSDAnnotationImpl.createAnnotation(child);
if (xsdAnnotation != null)
{
newContents.add(xsdAnnotation);
}
else
{
XSDAttributeGroupContent xsdAttributeGroupContent = XSDAttributeGroupContentImpl.createAttributeGroupContent(child);
if (xsdAttributeGroupContent != null)
{
newContents.add(xsdAttributeGroupContent);
}
else
{
XSDWildcard xsdWildcard = XSDWildcardImpl.createWildcard(child);
if (xsdWildcard != null)
{
newContents.add(xsdWildcard);
}
}
}
}
@Override
protected void handleReconciliation(List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
{
handleAnnotationReconciliation(XSDPackage.Literals.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION, newContents, remainingContents);
XSDWildcard newAttributeWildcard = null;
if (!newContents.isEmpty())
{
int lastIndex = newContents.size() - 1;
Object last = newContents.get(lastIndex);
if (last instanceof XSDWildcard)
{
newAttributeWildcard = (XSDWildcard)last;
if (XSDConstants.nodeType(newAttributeWildcard.getElement()) == XSDConstants.ANYATTRIBUTE_ELEMENT)
{
newContents.remove(lastIndex);
}
else
{
newAttributeWildcard = null;
}
}
}
if (newAttributeWildcard != getAttributeWildcardContent())
{
remainingContents.remove(getAttributeWildcardContent());
setAttributeWildcardContent(newAttributeWildcard);
}
if (!remainingContents.isEmpty())
{
getContents().removeAll(remainingContents);
}
if (!newContents.isEmpty())
{
for (Iterator<XSDConcreteComponent> i = newContents.iterator(); i.hasNext(); )
{
if (!(i.next() instanceof XSDAttributeGroupContent))
{
i.remove();
}
}
@SuppressWarnings("unchecked") List<XSDAttributeGroupContent> list = (List<XSDAttributeGroupContent>)(List<?>)newContents;
setListContentAndOrder(getContents(), list);
}
}
@Override
protected void changeReference(EReference eReference)
{
if (isReconciling)
{
return;
}
super.changeReference(eReference);
Element theElement = getElement();
if (theElement != null)
{
if (eReference == null || eReference == XSDPackage.Literals.XSD_ATTRIBUTE_GROUP_DEFINITION__RESOLVED_ATTRIBUTE_GROUP_DEFINITION)
{
XSDAttributeGroupDefinition theResolvedAttributeGroupDefinition = getResolvedAttributeGroupDefinition();
if (theResolvedAttributeGroupDefinition != this)
{
niceSetAttributeURIValue(theElement, XSDConstants.REF_ATTRIBUTE, theResolvedAttributeGroupDefinition.getURI());
}
}
}
}
@Override
protected void adoptContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
{
super.adoptContent(eReference, xsdConcreteComponent);
if (eReference == XSDPackage.Literals.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS)
{
traverseToRootForPatching();
}
}
@Override
protected void orphanContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
{
super.orphanContent(eReference, xsdConcreteComponent);
if (eReference == XSDPackage.Literals.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS)
{
traverseToRootForPatching();
}
}
public boolean isAttributeGroupDefinitionReference()
{
return this != getResolvedAttributeGroupDefinition();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDAnnotation getAnnotation()
{
return annotation;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setAnnotation(XSDAnnotation newAnnotation)
{
if (newAnnotation != annotation)
{
NotificationChain msgs = null;
if (annotation != null)
msgs = ((InternalEObject)annotation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION, null, msgs);
if (newAnnotation != null)
msgs = ((InternalEObject)newAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION, null, msgs);
msgs = basicSetAnnotation(newAnnotation, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION, newAnnotation, newAnnotation));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetAnnotation(XSDAnnotation newAnnotation, NotificationChain msgs)
{
XSDAnnotation oldAnnotation = annotation;
annotation = newAnnotation;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION, oldAnnotation, newAnnotation);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDAttributeGroupContent> getContents()
{
if (contents == null)
{
contents = new EObjectContainmentEList<XSDAttributeGroupContent>(XSDAttributeGroupContent.class, this, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS);
}
return contents;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDAttributeUse> getAttributeUses()
{
if (attributeUses == null)
{
attributeUses = new EObjectEList<XSDAttributeUse>(XSDAttributeUse.class, this, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_USES);
}
return attributeUses;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDWildcard getAttributeWildcardContent()
{
return attributeWildcardContent;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setAttributeWildcardContent(XSDWildcard newAttributeWildcardContent)
{
if (newAttributeWildcardContent != attributeWildcardContent)
{
NotificationChain msgs = null;
if (attributeWildcardContent != null)
msgs = ((InternalEObject)attributeWildcardContent).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT, null, msgs);
if (newAttributeWildcardContent != null)
msgs = ((InternalEObject)newAttributeWildcardContent).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT, null, msgs);
msgs = basicSetAttributeWildcardContent(newAttributeWildcardContent, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT, newAttributeWildcardContent, newAttributeWildcardContent));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetAttributeWildcardContent(XSDWildcard newAttributeWildcardContent, NotificationChain msgs)
{
XSDWildcard oldAttributeWildcardContent = attributeWildcardContent;
attributeWildcardContent = newAttributeWildcardContent;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT, oldAttributeWildcardContent, newAttributeWildcardContent);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDWildcard getAttributeWildcard()
{
return attributeWildcard;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setAttributeWildcard(XSDWildcard newAttributeWildcard)
{
XSDWildcard oldAttributeWildcard = attributeWildcard;
attributeWildcard = newAttributeWildcard;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD, oldAttributeWildcard, attributeWildcard));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDAttributeGroupDefinition getResolvedAttributeGroupDefinition()
{
return resolvedAttributeGroupDefinition;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setResolvedAttributeGroupDefinition(XSDAttributeGroupDefinition newResolvedAttributeGroupDefinition)
{
XSDAttributeGroupDefinition oldResolvedAttributeGroupDefinition = resolvedAttributeGroupDefinition;
resolvedAttributeGroupDefinition = newResolvedAttributeGroupDefinition;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__RESOLVED_ATTRIBUTE_GROUP_DEFINITION, oldResolvedAttributeGroupDefinition, resolvedAttributeGroupDefinition));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDWildcard getSyntheticWildcard()
{
return syntheticWildcard;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetSyntheticWildcard(XSDWildcard newSyntheticWildcard, NotificationChain msgs)
{
XSDWildcard oldSyntheticWildcard = syntheticWildcard;
syntheticWildcard = newSyntheticWildcard;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD, oldSyntheticWildcard, newSyntheticWildcard);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setSyntheticWildcard(XSDWildcard newSyntheticWildcard)
{
if (newSyntheticWildcard != syntheticWildcard)
{
NotificationChain msgs = null;
if (syntheticWildcard != null)
msgs = ((InternalEObject)syntheticWildcard).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD, null, msgs);
if (newSyntheticWildcard != null)
msgs = ((InternalEObject)newSyntheticWildcard).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD, null, msgs);
msgs = basicSetSyntheticWildcard(newSyntheticWildcard, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD, newSyntheticWildcard, newSyntheticWildcard));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
{
switch (featureID)
{
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION:
return basicSetAnnotation(null, msgs);
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS:
return ((InternalEList<?>)getContents()).basicRemove(otherEnd, msgs);
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
return basicSetAttributeWildcardContent(null, msgs);
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD:
return basicSetSyntheticWildcard(null, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType)
{
switch (featureID)
{
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_GROUP_DEFINITION_REFERENCE:
return isAttributeGroupDefinitionReference();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION:
return getAnnotation();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS:
return getContents();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_USES:
return getAttributeUses();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
return getAttributeWildcardContent();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD:
return getAttributeWildcard();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__RESOLVED_ATTRIBUTE_GROUP_DEFINITION:
return getResolvedAttributeGroupDefinition();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD:
return getSyntheticWildcard();
}
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 XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION:
setAnnotation((XSDAnnotation)newValue);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS:
getContents().clear();
getContents().addAll((Collection<? extends XSDAttributeGroupContent>)newValue);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_USES:
getAttributeUses().clear();
getAttributeUses().addAll((Collection<? extends XSDAttributeUse>)newValue);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
setAttributeWildcardContent((XSDWildcard)newValue);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD:
setAttributeWildcard((XSDWildcard)newValue);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__RESOLVED_ATTRIBUTE_GROUP_DEFINITION:
setResolvedAttributeGroupDefinition((XSDAttributeGroupDefinition)newValue);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD:
setSyntheticWildcard((XSDWildcard)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID)
{
switch (featureID)
{
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION:
setAnnotation((XSDAnnotation)null);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS:
getContents().clear();
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_USES:
getAttributeUses().clear();
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
setAttributeWildcardContent((XSDWildcard)null);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD:
setAttributeWildcard((XSDWildcard)null);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__RESOLVED_ATTRIBUTE_GROUP_DEFINITION:
setResolvedAttributeGroupDefinition((XSDAttributeGroupDefinition)null);
return;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD:
setSyntheticWildcard((XSDWildcard)null);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID)
{
switch (featureID)
{
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_GROUP_DEFINITION_REFERENCE:
return isAttributeGroupDefinitionReference() != ATTRIBUTE_GROUP_DEFINITION_REFERENCE_EDEFAULT;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ANNOTATION:
return annotation != null;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__CONTENTS:
return contents != null && !contents.isEmpty();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_USES:
return attributeUses != null && !attributeUses.isEmpty();
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
return attributeWildcardContent != null;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__ATTRIBUTE_WILDCARD:
return attributeWildcard != null;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__RESOLVED_ATTRIBUTE_GROUP_DEFINITION:
return resolvedAttributeGroupDefinition != null;
case XSDPackage.XSD_ATTRIBUTE_GROUP_DEFINITION__SYNTHETIC_WILDCARD:
return syntheticWildcard != null;
}
return super.eIsSet(featureID);
}
@Override
public String getQName()
{
XSDAttributeGroupDefinition resolvedAttributeGroupDefinition = getResolvedAttributeGroupDefinition();
if (resolvedAttributeGroupDefinition == this)
{
return super.getQName();
}
else
{
return resolvedAttributeGroupDefinition.getQName(this);
}
}
@Override
public boolean isNamedComponentReference()
{
return isAttributeGroupDefinitionReference();
}
@Override
public XSDNamedComponent getResolvedNamedComponent()
{
return getResolvedAttributeGroupDefinition();
}
@Override
public boolean isCircular()
{
return analysisState == CIRCULAR;
}
@Override
public XSDConcreteComponent cloneConcreteComponent(boolean deep, boolean shareDOM)
{
XSDAttributeGroupDefinitionImpl clonedAttributeGroupDefinition =
(XSDAttributeGroupDefinitionImpl)getXSDFactory().createXSDAttributeGroupDefinition();
clonedAttributeGroupDefinition.isReconciling = true;
if (isAttributeGroupDefinitionReference())
{
XSDAttributeGroupDefinition theResolvedAttributeGroupDefinition = getResolvedAttributeGroupDefinition();
clonedAttributeGroupDefinition.setResolvedAttributeGroupDefinition
(createUnresolvedAttributeGroupDefinition
(theResolvedAttributeGroupDefinition.getTargetNamespace(), theResolvedAttributeGroupDefinition.getName()));
}
else
{
if (getName() != null)
{
clonedAttributeGroupDefinition.setName(getName());
}
}
if (deep)
{
if (getAnnotation() != null)
{
clonedAttributeGroupDefinition.setAnnotation((XSDAnnotation)getAnnotation().cloneConcreteComponent(true, shareDOM));
}
if (!getContents().isEmpty())
{
clonedAttributeGroupDefinition.getContents().addAll(cloneConcreteComponents(getContents(), true, shareDOM));
}
if (getAttributeWildcardContent() != null)
{
clonedAttributeGroupDefinition.setAttributeWildcardContent
((XSDWildcard)getAttributeWildcardContent().cloneConcreteComponent(true, shareDOM));
}
}
if (shareDOM && getElement() != null)
{
clonedAttributeGroupDefinition.setElement(getElement());
}
clonedAttributeGroupDefinition.isReconciling = shareDOM;
return clonedAttributeGroupDefinition;
}
}