blob: e4507e32aa8cc5a5bae04da2a20389361bebdb38 [file] [log] [blame]
/**
* Copyright (c) 2002-2007 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.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
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.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
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.EDataTypeUniqueEList;
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.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDConcreteComponent;
import org.eclipse.xsd.XSDConstraint;
import org.eclipse.xsd.XSDContentTypeCategory;
import org.eclipse.xsd.XSDDiagnostic;
import org.eclipse.xsd.XSDDiagnosticSeverity;
import org.eclipse.xsd.XSDDisallowedSubstitutions;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDFeature;
import org.eclipse.xsd.XSDForm;
import org.eclipse.xsd.XSDIdentityConstraintDefinition;
import org.eclipse.xsd.XSDNamedComponent;
import org.eclipse.xsd.XSDPackage;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDProhibitedSubstitutions;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.eclipse.xsd.XSDSubstitutionGroupExclusions;
import org.eclipse.xsd.XSDTypeDefinition;
import org.eclipse.xsd.util.XSDConstants;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Element Declaration</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* </p>
* <ul>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#isNillable <em>Nillable</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getDisallowedSubstitutions <em>Disallowed Substitutions</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getSubstitutionGroupExclusions <em>Substitution Group Exclusions</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#isAbstract <em>Abstract</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getLexicalFinal <em>Lexical Final</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getBlock <em>Block</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#isElementDeclarationReference <em>Element Declaration Reference</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#isCircular <em>Circular</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getAnnotation <em>Annotation</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getAnonymousTypeDefinition <em>Anonymous Type Definition</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getTypeDefinition <em>Type Definition</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getIdentityConstraintDefinitions <em>Identity Constraint Definitions</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getResolvedElementDeclaration <em>Resolved Element Declaration</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getSubstitutionGroupAffiliation <em>Substitution Group Affiliation</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDElementDeclarationImpl#getSubstitutionGroup <em>Substitution Group</em>}</li>
* </ul>
*
* @generated
*/
public class XSDElementDeclarationImpl
extends XSDFeatureImpl
implements XSDElementDeclaration
{
/**
* The default value of the '{@link #isNillable() <em>Nillable</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isNillable()
* @generated
* @ordered
*/
protected static final boolean NILLABLE_EDEFAULT = false;
/**
* The flag representing the value of the '{@link #isNillable() <em>Nillable</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isNillable()
* @generated
* @ordered
*/
protected static final int NILLABLE_EFLAG = 1 << 12;
/**
* The flag representing whether the Nillable attribute has been set.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int NILLABLE_ESETFLAG = 1 << 13;
/**
* The cached value of the '{@link #getDisallowedSubstitutions() <em>Disallowed Substitutions</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getDisallowedSubstitutions()
* @generated
* @ordered
*/
protected EList<XSDDisallowedSubstitutions> disallowedSubstitutions;
/**
* The cached value of the '{@link #getSubstitutionGroupExclusions() <em>Substitution Group Exclusions</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSubstitutionGroupExclusions()
* @generated
* @ordered
*/
protected EList<XSDSubstitutionGroupExclusions> substitutionGroupExclusions;
/**
* The default value of the '{@link #isAbstract() <em>Abstract</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAbstract()
* @generated
* @ordered
*/
protected static final boolean ABSTRACT_EDEFAULT = false;
/**
* The flag representing the value of the '{@link #isAbstract() <em>Abstract</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAbstract()
* @generated
* @ordered
*/
protected static final int ABSTRACT_EFLAG = 1 << 14;
/**
* The flag representing whether the Abstract attribute has been set.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int ABSTRACT_ESETFLAG = 1 << 15;
/**
* The cached value of the '{@link #getLexicalFinal() <em>Lexical Final</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getLexicalFinal()
* @generated
* @ordered
*/
protected EList<XSDProhibitedSubstitutions> lexicalFinal;
/**
* The cached value of the '{@link #getBlock() <em>Block</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getBlock()
* @generated
* @ordered
*/
protected EList<XSDDisallowedSubstitutions> block;
/**
* The default value of the '{@link #isElementDeclarationReference() <em>Element Declaration Reference</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isElementDeclarationReference()
* @generated
* @ordered
*/
protected static final boolean ELEMENT_DECLARATION_REFERENCE_EDEFAULT = false;
/**
* The default value of the '{@link #isCircular() <em>Circular</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isCircular()
* @generated
* @ordered
*/
protected static final boolean CIRCULAR_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 #getAnonymousTypeDefinition() <em>Anonymous Type Definition</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getAnonymousTypeDefinition()
* @generated
* @ordered
*/
protected XSDTypeDefinition anonymousTypeDefinition;
/**
* The cached value of the '{@link #getTypeDefinition() <em>Type Definition</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTypeDefinition()
* @generated
* @ordered
*/
protected XSDTypeDefinition typeDefinition;
/**
* The cached value of the '{@link #getIdentityConstraintDefinitions() <em>Identity Constraint Definitions</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getIdentityConstraintDefinitions()
* @generated
* @ordered
*/
protected EList<XSDIdentityConstraintDefinition> identityConstraintDefinitions;
/**
* The cached value of the '{@link #getResolvedElementDeclaration() <em>Resolved Element Declaration</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getResolvedElementDeclaration()
* @generated
* @ordered
*/
protected XSDElementDeclaration resolvedElementDeclaration;
/**
* The cached value of the '{@link #getSubstitutionGroupAffiliation() <em>Substitution Group Affiliation</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSubstitutionGroupAffiliation()
* @generated
* @ordered
*/
protected XSDElementDeclaration substitutionGroupAffiliation;
/**
* The cached value of the '{@link #getSubstitutionGroup() <em>Substitution Group</em>}' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSubstitutionGroup()
* @generated
* @ordered
*/
protected EList<XSDElementDeclaration> substitutionGroup;
public static XSDElementDeclaration createElementDeclaration(Node node)
{
if (XSDConstants.nodeType(node) == XSDConstants.ELEMENT_ELEMENT)
{
XSDElementDeclaration xsdElementDeclaration = XSDFactory.eINSTANCE.createXSDElementDeclaration();
xsdElementDeclaration.setElement((Element)node);
return xsdElementDeclaration;
}
return null;
}
protected int analysisState;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
protected XSDElementDeclarationImpl()
{
super();
this.resolvedElementDeclaration = this;
// this.setResolvedElementDeclaration = true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass()
{
return XSDPackage.Literals.XSD_ELEMENT_DECLARATION;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isNillable()
{
return (eFlags & NILLABLE_EFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setNillable(boolean newNillable)
{
boolean oldNillable = (eFlags & NILLABLE_EFLAG) != 0;
if (newNillable) eFlags |= NILLABLE_EFLAG; else eFlags &= ~NILLABLE_EFLAG;
boolean oldNillableESet = (eFlags & NILLABLE_ESETFLAG) != 0;
eFlags |= NILLABLE_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__NILLABLE, oldNillable, newNillable, !oldNillableESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetNillable()
{
boolean oldNillable = (eFlags & NILLABLE_EFLAG) != 0;
boolean oldNillableESet = (eFlags & NILLABLE_ESETFLAG) != 0;
if (NILLABLE_EDEFAULT) eFlags |= NILLABLE_EFLAG; else eFlags &= ~NILLABLE_EFLAG;
eFlags &= ~NILLABLE_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.UNSET, XSDPackage.XSD_ELEMENT_DECLARATION__NILLABLE, oldNillable, NILLABLE_EDEFAULT, oldNillableESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetNillable()
{
return (eFlags & NILLABLE_ESETFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDDisallowedSubstitutions> getDisallowedSubstitutions()
{
if (disallowedSubstitutions == null)
{
disallowedSubstitutions = new EDataTypeUniqueEList<XSDDisallowedSubstitutions>(XSDDisallowedSubstitutions.class, this, XSDPackage.XSD_ELEMENT_DECLARATION__DISALLOWED_SUBSTITUTIONS);
}
return disallowedSubstitutions;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDSubstitutionGroupExclusions> getSubstitutionGroupExclusions()
{
if (substitutionGroupExclusions == null)
{
substitutionGroupExclusions = new EDataTypeUniqueEList<XSDSubstitutionGroupExclusions>(XSDSubstitutionGroupExclusions.class, this, XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_EXCLUSIONS);
}
return substitutionGroupExclusions;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isAbstract()
{
return (eFlags & ABSTRACT_EFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setAbstract(boolean newAbstract)
{
boolean oldAbstract = (eFlags & ABSTRACT_EFLAG) != 0;
if (newAbstract) eFlags |= ABSTRACT_EFLAG; else eFlags &= ~ABSTRACT_EFLAG;
boolean oldAbstractESet = (eFlags & ABSTRACT_ESETFLAG) != 0;
eFlags |= ABSTRACT_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__ABSTRACT, oldAbstract, newAbstract, !oldAbstractESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetAbstract()
{
boolean oldAbstract = (eFlags & ABSTRACT_EFLAG) != 0;
boolean oldAbstractESet = (eFlags & ABSTRACT_ESETFLAG) != 0;
if (ABSTRACT_EDEFAULT) eFlags |= ABSTRACT_EFLAG; else eFlags &= ~ABSTRACT_EFLAG;
eFlags &= ~ABSTRACT_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.UNSET, XSDPackage.XSD_ELEMENT_DECLARATION__ABSTRACT, oldAbstract, ABSTRACT_EDEFAULT, oldAbstractESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetAbstract()
{
return (eFlags & ABSTRACT_ESETFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDProhibitedSubstitutions> getLexicalFinal()
{
if (lexicalFinal == null)
{
lexicalFinal = new EDataTypeUniqueEList.Unsettable<XSDProhibitedSubstitutions>(XSDProhibitedSubstitutions.class, this, XSDPackage.XSD_ELEMENT_DECLARATION__LEXICAL_FINAL);
}
return lexicalFinal;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetLexicalFinal()
{
if (lexicalFinal != null) ((InternalEList.Unsettable<?>)lexicalFinal).unset();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetLexicalFinal()
{
return lexicalFinal != null && ((InternalEList.Unsettable<?>)lexicalFinal).isSet();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDDisallowedSubstitutions> getBlock()
{
if (block == null)
{
block = new EDataTypeUniqueEList.Unsettable<XSDDisallowedSubstitutions>(XSDDisallowedSubstitutions.class, this, XSDPackage.XSD_ELEMENT_DECLARATION__BLOCK);
}
return block;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetBlock()
{
if (block != null) ((InternalEList.Unsettable<?>)block).unset();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetBlock()
{
return block != null && ((InternalEList.Unsettable<?>)block).isSet();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated modifiable
*/
public Boolean getElementDeclarationReference()
{
return isElementDeclarationReference() ? Boolean.TRUE : Boolean.FALSE;
}
@Override
public Element createElement()
{
Element newElement = createElement(XSDConstants.ELEMENT_ELEMENT);
setElement(newElement);
XSDTypeDefinition anonymousTypeDefinition = getAnonymousTypeDefinition();
if (anonymousTypeDefinition != null)
{
Element child = ((XSDConcreteComponentImpl)anonymousTypeDefinition).createElement();
newElement.appendChild(child);
}
return newElement;
}
@Override
protected void patch()
{
analysisState = UNANALYZED;
super.patch();
XSDElementDeclaration theResolvedElementDeclaration = getResolvedElementDeclaration();
if (theResolvedElementDeclaration == this)
{
XSDTypeDefinition typeDefinition = getTypeDefinition();
if (typeDefinition != null && (forceResolve && typeDefinition.getName() != null || typeDefinition.getContainer() == null))
{
XSDTypeDefinition newTypeDefinition = resolveTypeDefinition(typeDefinition.getTargetNamespace(), typeDefinition.getName());
if (forceResolve || newTypeDefinition.getContainer() != null && newTypeDefinition != typeDefinition)
{
setTypeDefinitionGen(newTypeDefinition);
}
}
XSDElementDeclaration theSubstitutionGroupAffiliation = getSubstitutionGroupAffiliation();
if (theSubstitutionGroupAffiliation != null && theSubstitutionGroupAffiliation.getContainer() == null)
{
XSDElementDeclaration newSubstitutionGroupAffiliation =
resolveElementDeclaration(theSubstitutionGroupAffiliation.getTargetNamespace(), theSubstitutionGroupAffiliation.getName());
if (newSubstitutionGroupAffiliation.getContainer() != null && newSubstitutionGroupAffiliation != theSubstitutionGroupAffiliation)
{
setSubstitutionGroupAffiliation(newSubstitutionGroupAffiliation);
}
}
if (!isAbstract() && !getSubstitutionGroup().contains(this))
{
getSubstitutionGroup().add(this);
}
XSDSchema xsdSchema = getSchema();
if (xsdSchema != null)
{
//
//
List<XSDDisallowedSubstitutions> theBlock = getBlock();
if (!isSetBlock())
{
theBlock = getSchema().getBlockDefault();
}
List<XSDDisallowedSubstitutions> newDisallowedSubstitutions = new ArrayList<XSDDisallowedSubstitutions>();
for (XSDDisallowedSubstitutions value : theBlock)
{
if (value.toString().equals("all"))
{
newDisallowedSubstitutions.add(XSDDisallowedSubstitutions.EXTENSION_LITERAL);
newDisallowedSubstitutions.add(XSDDisallowedSubstitutions.RESTRICTION_LITERAL);
newDisallowedSubstitutions.add(XSDDisallowedSubstitutions.SUBSTITUTION_LITERAL);
break;
}
else
{
newDisallowedSubstitutions.add(value);
}
}
Collection<XSDDisallowedSubstitutions> oldDisallowedSubstitutions = new ArrayList<XSDDisallowedSubstitutions>(getDisallowedSubstitutions());
oldDisallowedSubstitutions.removeAll(newDisallowedSubstitutions);
if (!oldDisallowedSubstitutions.isEmpty())
{
getDisallowedSubstitutions().removeAll(oldDisallowedSubstitutions);
}
setListContentAndOrder(getDisallowedSubstitutions(), newDisallowedSubstitutions);
//
//
List<XSDProhibitedSubstitutions> theLexicalFinal = getLexicalFinal();
if (!isSetLexicalFinal())
{
theLexicalFinal = getSchema().getFinalDefault();
}
List<XSDSubstitutionGroupExclusions> newSubstitutionGroupExclusions = new ArrayList<XSDSubstitutionGroupExclusions>();
for (Object value : theLexicalFinal)
{
if (value.toString().equals("all"))
{
newSubstitutionGroupExclusions.add(XSDSubstitutionGroupExclusions.EXTENSION_LITERAL);
newSubstitutionGroupExclusions.add(XSDSubstitutionGroupExclusions.RESTRICTION_LITERAL);
break;
}
else if (value.toString().equals("restriction"))
{
newSubstitutionGroupExclusions.add(XSDSubstitutionGroupExclusions.RESTRICTION_LITERAL);
}
else
{
newSubstitutionGroupExclusions.add(XSDSubstitutionGroupExclusions.EXTENSION_LITERAL);
}
}
Collection<XSDSubstitutionGroupExclusions> oldSubstitutionGroupExclusions =
new ArrayList<XSDSubstitutionGroupExclusions>(getSubstitutionGroupExclusions());
oldSubstitutionGroupExclusions.removeAll(newSubstitutionGroupExclusions);
if (!oldSubstitutionGroupExclusions.isEmpty())
{
getSubstitutionGroupExclusions().removeAll(oldSubstitutionGroupExclusions);
}
setListContentAndOrder(getSubstitutionGroupExclusions(), newSubstitutionGroupExclusions);
}
}
else
{
XSDElementDeclaration newResolvedElementDeclaration =
resolveElementDeclaration(theResolvedElementDeclaration.getTargetNamespace(), theResolvedElementDeclaration.getName());
if (newResolvedElementDeclaration != theResolvedElementDeclaration)
{
setResolvedElementDeclaration(newResolvedElementDeclaration);
}
}
}
@Override
protected void traverseToRootForAnalysis()
{
analysisState = UNANALYZED;
super.traverseToRootForAnalysis();
}
@Override
protected boolean analyze()
{
switch (analysisState)
{
case UNANALYZED:
{
analysisState = ANALYZING;
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 boolean isTypeExplicit = false;
protected void handleAnalysis()
{
if (!isElementDeclarationReference())
{
XSDElementDeclaration theSubstitutionGroupAffiliation = getSubstitutionGroupAffiliation();
if (theSubstitutionGroupAffiliation != null && theSubstitutionGroupAffiliation.getContainer() != null)
{
((XSDConcreteComponentImpl)theSubstitutionGroupAffiliation).analyze();
}
XSDTypeDefinition theTypeDefinition = getTypeDefinition();
if (!isTypeExplicit || theTypeDefinition == null)
{
XSDTypeDefinition newTypeDefinition =
theSubstitutionGroupAffiliation == null || theSubstitutionGroupAffiliation.getTypeDefinition() == null ?
getSchema().getSchemaForSchema().resolveTypeDefinition("anyType") :
theSubstitutionGroupAffiliation.getTypeDefinition();
if (newTypeDefinition != theTypeDefinition)
{
isTypeExplicit = false;
setTypeDefinitionGen(newTypeDefinition);
}
}
}
super.analyze();
}
@Override
protected void patchTargetNamespaceAttribute()
{
if (!isElementDeclarationReference())
{
XSDSchema xsdSchema = getSchema();
if (xsdSchema != null)
{
patchTargetNamespaceAttributeHelper(xsdSchema);
}
}
}
@Override
protected void patchTargetNamespaceAttribute(XSDSchema xsdSchema)
{
if (!isElementDeclarationReference())
{
patchTargetNamespaceAttributeHelper(xsdSchema);
}
}
protected void patchTargetNamespaceAttributeHelper(XSDSchema xsdSchema)
{
if (getScope() instanceof XSDSchema)
{
if (!isSetForm() || XSDForm.QUALIFIED_LITERAL != getForm())
{
setForm(XSDForm.QUALIFIED_LITERAL);
}
}
if (isSetForm() ? XSDForm.UNQUALIFIED_LITERAL == getForm() : XSDForm.UNQUALIFIED_LITERAL == xsdSchema.getElementFormDefault())
{
if (getTargetNamespace() != null)
{
setTargetNamespace(null);
}
}
else
{
String newTargetNamespace = xsdSchema.getTargetNamespace();
if (newTargetNamespace == null ? getTargetNamespace() != null : !newTargetNamespace.equals(getTargetNamespace()))
{
setTargetNamespace(newTargetNamespace);
}
}
}
@Override
public void validate()
{
super.validate();
Element theElement = getElement();
if (theElement != null)
{
if (getContainer() instanceof XSDSchema)
{
checkAttributes
(XSDConstants.PART1,
"element-element",
theElement,
new String []
{
XSDConstants.ABSTRACT_ATTRIBUTE,
XSDConstants.BLOCK_ATTRIBUTE,
XSDConstants.DEFAULT_ATTRIBUTE,
XSDConstants.FINAL_ATTRIBUTE,
XSDConstants.FIXED_ATTRIBUTE,
XSDConstants.ID_ATTRIBUTE,
XSDConstants.NAME_ATTRIBUTE,
XSDConstants.NILLABLE_ATTRIBUTE,
XSDConstants.SUBSTITUTIONGROUP_ATTRIBUTE,
XSDConstants.TYPE_ATTRIBUTE
});
checkComplexContent("topLevelElement", XSDConstants.PART1, "element-element", theElement);
checkBuiltInTypeConstraint
("boolean",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.ABSTRACT_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("derivationSet",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.FINAL_ATTRIBUTE,
false);
}
else
{
checkAttributes
(XSDConstants.PART1,
"element-element",
theElement,
new String []
{
XSDConstants.BLOCK_ATTRIBUTE,
XSDConstants.DEFAULT_ATTRIBUTE,
XSDConstants.FIXED_ATTRIBUTE,
XSDConstants.FORM_ATTRIBUTE,
XSDConstants.ID_ATTRIBUTE,
XSDConstants.MAXOCCURS_ATTRIBUTE,
XSDConstants.MINOCCURS_ATTRIBUTE,
XSDConstants.NAME_ATTRIBUTE,
XSDConstants.NILLABLE_ATTRIBUTE,
XSDConstants.REF_ATTRIBUTE,
XSDConstants.TYPE_ATTRIBUTE
});
checkComplexContent("localElement", XSDConstants.PART1, "element-element", theElement);
checkBuiltInTypeConstraint
("formChoice",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.FORM_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("allNNI",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.MAXOCCURS_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("nonNegativeInteger",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.MINOCCURS_ATTRIBUTE,
false);
}
if (theElement.hasAttributeNS(null, XSDConstants.FIXED_ATTRIBUTE) &&
theElement.hasAttributeNS(null, XSDConstants.DEFAULT_ATTRIBUTE))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.1");
}
checkBuiltInTypeConstraint
("ID",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.ID_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("boolean",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.NILLABLE_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("blockSet",
null,
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.BLOCK_ATTRIBUTE,
false);
if (theElement.hasAttributeNS(null, XSDConstants.TYPE_ATTRIBUTE))
{
for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.COMPLEXTYPE_ELEMENT:
case XSDConstants.SIMPLETYPE_ELEMENT:
{
XSDDiagnostic xsdDiagnostic = createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.3");
xsdDiagnostic.setNode(child);
break;
}
}
}
}
}
if (isElementDeclarationReference())
{
XSDElementDeclaration theResolvedElementDeclaration = getResolvedElementDeclaration();
if (theResolvedElementDeclaration.getContainer() == null)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedElementDeclaration_message", theResolvedElementDeclaration.getURI());
}
if (theElement != null)
{
if (theElement.hasAttributeNS(null, XSDConstants.NAME_ATTRIBUTE))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.2.1");
}
if (theElement.hasAttributeNS(null, XSDConstants.NILLABLE_ATTRIBUTE) ||
theElement.hasAttributeNS(null, XSDConstants.DEFAULT_ATTRIBUTE) ||
theElement.hasAttributeNS(null, XSDConstants.FIXED_ATTRIBUTE) ||
theElement.hasAttributeNS(null, XSDConstants.BLOCK_ATTRIBUTE))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.2.2.1");
}
}
if (isSetForm() || theElement != null && theElement.hasAttributeNS(null, XSDConstants.FORM_ATTRIBUTE))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.2.2.1");
}
if (getType() != null || theElement != null && theElement.hasAttributeNS(null, XSDConstants.TYPE_ATTRIBUTE))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.2.2.1");
}
else if (theElement != null)
{
for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.COMPLEXTYPE_ELEMENT:
case XSDConstants.SIMPLETYPE_ELEMENT:
case XSDConstants.KEY_ELEMENT:
case XSDConstants.KEYREF_ELEMENT:
case XSDConstants.UNIQUE_ELEMENT:
{
XSDDiagnostic xsdDiagnostic = createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-element.2.2.2");
xsdDiagnostic.setNode(child);
break;
}
}
}
}
}
else
{
checkBuiltInTypeConstraint
("NCName",
getName(),
XSDConstants.PART1,
"element-element",
theElement,
XSDConstants.NAME_ATTRIBUTE,
true);
XSDTypeDefinition theTypeDefinition = getTypeDefinition();
if (theTypeDefinition == null || theTypeDefinition.getContainer() == null)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"_UI_UnresolvedTypeDefinition_message",
theTypeDefinition == null ? "" : theTypeDefinition.getURI());
}
if (theTypeDefinition != null)
{
if (getLexicalValue() != null)
{
XSDSimpleTypeDefinition xsdSimpleTypeDefinition;
if (theTypeDefinition instanceof XSDComplexTypeDefinition)
{
XSDComplexTypeDefinition xsdComplexTypeDefinition = (XSDComplexTypeDefinition)theTypeDefinition;
xsdSimpleTypeDefinition = ((XSDComplexTypeDefinition)theTypeDefinition).getSimpleType();
if (xsdSimpleTypeDefinition == null)
{
if (xsdComplexTypeDefinition.getContentTypeCategory() != XSDContentTypeCategory.MIXED_LITERAL ||
!xsdComplexTypeDefinition.getComplexType().isEmptiable())
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-valid-default.2.2.2");
}
}
}
else
{
xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)theTypeDefinition;
}
if (xsdSimpleTypeDefinition != null)
{
if (XSDConstants.isOrIsDerivedFromID(xsdSimpleTypeDefinition))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "e-props-correct.4");
}
else
{
checkSimpleTypeConstraint
(xsdSimpleTypeDefinition,
getLexicalValue(),
XSDConstants.PART1,
"element-element",
theElement,
getConstraint() == XSDConstraint.FIXED_LITERAL ? XSDConstants.FIXED_ATTRIBUTE : XSDConstants.DEFAULT_ATTRIBUTE,
false);
}
}
}
}
XSDElementDeclaration substitutionGroupAffiliation = getSubstitutionGroupAffiliation();
if (substitutionGroupAffiliation != null)
{
if (substitutionGroupAffiliation.getResolvedElementDeclaration().getContainer() == null)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedElementDeclaration_message", substitutionGroupAffiliation.getURI());
}
else if (theTypeDefinition != null)
{
EList<XSDSubstitutionGroupExclusions> substitutionGroupExclusions = substitutionGroupAffiliation.getSubstitutionGroupExclusions();
XSDTypeDefinition badTypeDefinition =
theTypeDefinition.getBadTypeDerivation
(substitutionGroupAffiliation.getTypeDefinition(),
!substitutionGroupExclusions.contains(XSDSubstitutionGroupExclusions.EXTENSION_LITERAL),
!substitutionGroupExclusions.contains(XSDSubstitutionGroupExclusions.RESTRICTION_LITERAL));
if (badTypeDefinition != null)
{
if (XSDConstants.isURType(badTypeDefinition) && substitutionGroupAffiliation.getTypeDefinition() != null)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "e-props-correct.3", substitutionGroupAffiliation.getTypeDefinition().getURI());
}
else
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-ct-derived-ok", badTypeDefinition.getURI());
}
}
}
}
}
}
@Override
protected void reconcileAttributes(Element changedElement)
{
super.reconcileAttributes(changedElement);
if (changedElement == getElement())
{
XSDElementDeclaration newResolvedElementDeclaration = this;
if (changedElement.hasAttributeNS(null, XSDConstants.REF_ATTRIBUTE))
{
newResolvedElementDeclaration =
resolveElementDeclarationURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.REF_ATTRIBUTE));
}
/*
else if (!changedElement.hasAttributeNS(null, XSDConstants.NAME_ATTRIBUTE))
{
newResolvedElementDeclaration = resolveElementDeclaration(null, "undefined");
}
*/
if (newResolvedElementDeclaration != getResolvedElementDeclaration())
{
setResolvedElementDeclaration(newResolvedElementDeclaration);
}
if (this == newResolvedElementDeclaration)
{
if (changedElement.hasAttributeNS(null, XSDConstants.TYPE_ATTRIBUTE))
{
isTypeExplicit = true;
XSDTypeDefinition newTypeDefinition =
resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.TYPE_ATTRIBUTE));
if (newTypeDefinition != getTypeDefinition())
{
setTypeDefinition(newTypeDefinition);
}
}
else if (getAnonymousTypeDefinition() != getTypeDefinition())
{
isTypeExplicit = false;
setTypeDefinitionGen(resolveSimpleTypeDefinition(changedElement.getNamespaceURI(), "anyType"));
}
if (changedElement.hasAttributeNS(null, XSDConstants.NILLABLE_ATTRIBUTE))
{
String newNillable = changedElement.getAttributeNS(null, XSDConstants.NILLABLE_ATTRIBUTE);
setNillable(convertToBoolean(newNillable));
}
else
{
unsetNillable();
}
if (changedElement.hasAttributeNS(null, XSDConstants.ABSTRACT_ATTRIBUTE))
{
String newAbstract = changedElement.getAttributeNS(null, XSDConstants.ABSTRACT_ATTRIBUTE);
setAbstract(convertToBoolean(newAbstract));
}
else
{
unsetAbstract();
}
if (getScope() instanceof XSDSchema)
{
if (XSDForm.QUALIFIED_LITERAL != getForm())
{
setForm(XSDForm.QUALIFIED_LITERAL);
}
}
else
{
if (changedElement.hasAttributeNS(null, XSDConstants.FORM_ATTRIBUTE))
{
XSDForm newForm = XSDForm.get(changedElement.getAttributeNS(null, XSDConstants.FORM_ATTRIBUTE));
if (!isSetForm() || newForm != getForm())
{
setForm(newForm);
}
}
else if (isSetForm())
{
unsetForm();
}
}
if (changedElement.hasAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE))
{
setStringLexicalFinal(changedElement.getAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE));
}
else if (isSetLexicalFinal())
{
unsetLexicalFinal();
}
if (changedElement.hasAttributeNS(null, XSDConstants.BLOCK_ATTRIBUTE))
{
setStringBlock(changedElement.getAttributeNS(null, XSDConstants.BLOCK_ATTRIBUTE));
}
else if (isSetBlock())
{
unsetBlock();
}
XSDElementDeclaration newSubstituionGroupAffiliation = null;
if (changedElement.hasAttributeNS(null, XSDConstants.SUBSTITUTIONGROUP_ATTRIBUTE))
{
newSubstituionGroupAffiliation =
resolveElementDeclarationURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.SUBSTITUTIONGROUP_ATTRIBUTE));
}
if (newSubstituionGroupAffiliation != getSubstitutionGroupAffiliation())
{
setSubstitutionGroupAffiliation(newSubstituionGroupAffiliation);
}
}
}
}
@Override
protected void reconcileNameAttribute()
{
if (!isElementDeclarationReference())
{
super.reconcileNameAttribute();
}
}
@Override
protected void reconcileContents(Element changedElement)
{
super.reconcileContents(changedElement);
}
@Override
protected void handleUnreconciledElement(Element child, List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
{
XSDAnnotation xsdAnnotation = XSDAnnotationImpl.createAnnotation(child);
if (xsdAnnotation != null)
{
if (newContents.isEmpty())
{
newContents.add(xsdAnnotation);
}
}
else
{
XSDTypeDefinition xsdTypeDefinition = XSDTypeDefinitionImpl.createTypeDefinition(child);
if (xsdTypeDefinition != null)
{
newContents.add(xsdTypeDefinition);
}
else
{
XSDIdentityConstraintDefinition xsdIdentityConstraintDefinition =
XSDIdentityConstraintDefinitionImpl.createIdentityConstraintDefinition(child);
if (xsdIdentityConstraintDefinition != null)
{
newContents.add(xsdIdentityConstraintDefinition);
}
}
}
}
@Override
protected void handleReconciliation(List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
{
handleAnnotationReconciliation(XSDPackage.Literals.XSD_ELEMENT_DECLARATION__ANNOTATION, newContents, remainingContents);
if (!isElementDeclarationReference())
{
Element theElement = getElement();
XSDTypeDefinition newTypeDefinition = null;
XSDTypeDefinition newAnonymousTypeDefinition = null;
if (!newContents.isEmpty())
{
XSDConcreteComponent newComponent = newContents.get(0);
if (newComponent instanceof XSDTypeDefinition)
{
newTypeDefinition = newAnonymousTypeDefinition = (XSDTypeDefinition)newComponent;
newContents.remove(0);
}
}
if (newAnonymousTypeDefinition != getAnonymousTypeDefinition())
{
remainingContents.remove(getAnonymousTypeDefinition());
setAnonymousTypeDefinition(newAnonymousTypeDefinition);
}
for (Iterator<XSDConcreteComponent> i = newContents.iterator(); i.hasNext(); )
{
if (!(i.next() instanceof XSDIdentityConstraintDefinition))
{
i.remove();
}
}
if (!remainingContents.isEmpty())
{
getIdentityConstraintDefinitions().removeAll(remainingContents);
}
if (!newContents.isEmpty())
{
@SuppressWarnings("unchecked") List<XSDIdentityConstraintDefinition> list = (List<XSDIdentityConstraintDefinition>)(List<?>)newContents;
setListContentAndOrder(getIdentityConstraintDefinitions(), list);
}
if (theElement.hasAttributeNS(null, XSDConstants.TYPE_ATTRIBUTE))
{
isTypeExplicit = true;
newTypeDefinition = resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(theElement, XSDConstants.TYPE_ATTRIBUTE));
}
if (newTypeDefinition != null && newTypeDefinition != getTypeDefinition())
{
setTypeDefinitionGen(newTypeDefinition);
}
}
}
@Override
protected void changeAttribute(EAttribute eAttribute)
{
super.changeAttribute(eAttribute);
if (!isElementDeclarationReference())
{
if (eAttribute == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__ABSTRACT)
{
EList<XSDElementDeclaration> substitutionGroup = getSubstitutionGroup();
Collection<XSDElementDeclaration> visited = new HashSet<XSDElementDeclaration>();
if (isAbstract())
{
substitutionGroup.remove(this);
for (XSDElementDeclaration oldSubstitutionGroupAffiliation = substitutionGroupAffiliation;
oldSubstitutionGroupAffiliation != null;
oldSubstitutionGroupAffiliation = oldSubstitutionGroupAffiliation.getSubstitutionGroupAffiliation())
{
if (visited.add(oldSubstitutionGroupAffiliation))
{
oldSubstitutionGroupAffiliation.getSubstitutionGroup().remove(this);
}
else
{
break;
}
}
}
else
{
substitutionGroup.add(this);
for (XSDElementDeclaration newSubstitutionGroupAffiliation = substitutionGroupAffiliation;
newSubstitutionGroupAffiliation != null;
newSubstitutionGroupAffiliation = newSubstitutionGroupAffiliation.getSubstitutionGroupAffiliation())
{
if (visited.add(newSubstitutionGroupAffiliation))
{
newSubstitutionGroupAffiliation.getSubstitutionGroup().add(this);
}
else
{
break;
}
}
}
}
if (!isReconciling)
{
Element theElement = getElement();
if (theElement != null)
{
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__ABSTRACT)
{
niceSetAttribute(theElement, XSDConstants.ABSTRACT_ATTRIBUTE, isSetAbstract() ? isAbstract() ? "true" : "false" : null);
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__NILLABLE)
{
niceSetAttribute(theElement, XSDConstants.NILLABLE_ATTRIBUTE, isSetNillable() ? isNillable() ? "true" : "false" : null);
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_FEATURE__FORM)
{
if (!(getScope() instanceof XSDSchema))
{
niceSetAttribute(theElement, XSDConstants.FORM_ATTRIBUTE, isSetForm() ? getForm().getName() : null);
}
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__LEXICAL_FINAL)
{
niceSetAttribute
(theElement,
XSDConstants.FINAL_ATTRIBUTE,
getStringLexicalFinal());
if (eAttribute != null)
{
traverseToRootForPatching();
}
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__BLOCK)
{
niceSetAttribute
(theElement,
XSDConstants.BLOCK_ATTRIBUTE,
getStringBlock());
if (eAttribute != null)
{
traverseToRootForPatching();
}
}
}
}
if (eAttribute == XSDPackage.Literals.XSD_FEATURE__FORM)
{
patchTargetNamespaceAttribute();
}
}
}
@Override
public void eNotify(Notification msg)
{
int eventType = msg.getEventType();
Object feature = msg.getFeature();
Object oldValue = msg.getOldValue();
Object newValue = msg.getNewValue();
if (feature == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION)
{
switch (eventType)
{
case Notification.SET:
case Notification.UNSET:
{
Collection<XSDElementDeclaration> substitutionGroup = new ArrayList<XSDElementDeclaration>(getSubstitutionGroup());
if (!isAbstract())
{
substitutionGroup.add(this);
}
if (oldValue != null)
{
Collection<XSDElementDeclaration> visited = new HashSet<XSDElementDeclaration>();
for (XSDElementDeclaration oldSubstitutionGroupAffiliation = (XSDElementDeclaration)oldValue;
oldSubstitutionGroupAffiliation != null;
oldSubstitutionGroupAffiliation = oldSubstitutionGroupAffiliation.getSubstitutionGroupAffiliation())
{
if (visited.add(oldSubstitutionGroupAffiliation))
{
oldSubstitutionGroupAffiliation.getSubstitutionGroup().removeAll(substitutionGroup);
}
else
{
break;
}
}
}
if (newValue != null)
{
Collection<XSDElementDeclaration> visited = new HashSet<XSDElementDeclaration>();
for (XSDElementDeclaration newSubstitutionGroupAffiliation = (XSDElementDeclaration)newValue;
newSubstitutionGroupAffiliation != null;
newSubstitutionGroupAffiliation = newSubstitutionGroupAffiliation.getSubstitutionGroupAffiliation())
{
if (visited.add(newSubstitutionGroupAffiliation))
{
newSubstitutionGroupAffiliation.getSubstitutionGroup().addAll(substitutionGroup);
}
else
{
break;
}
}
}
break;
}
}
}
super.eNotify(msg);
}
@Override
protected void eBasicSetContainer(InternalEObject newContainer, int newContainerFeatureID)
{
if (substitutionGroupAffiliation != null)
{
EList<XSDElementDeclaration> substitutionGroup = getSubstitutionGroup();
Collection<XSDElementDeclaration> visited = new HashSet<XSDElementDeclaration>();
if (newContainer == null)
{
for (XSDElementDeclaration oldSubstitutionGroupAffiliation = substitutionGroupAffiliation;
oldSubstitutionGroupAffiliation != null;
oldSubstitutionGroupAffiliation = oldSubstitutionGroupAffiliation.getSubstitutionGroupAffiliation())
{
if (visited.add(oldSubstitutionGroupAffiliation))
{
oldSubstitutionGroupAffiliation.getSubstitutionGroup().removeAll(substitutionGroup);
}
else
{
break;
}
}
}
else
{
for (XSDElementDeclaration newSubstitutionGroupAffiliation = substitutionGroupAffiliation;
newSubstitutionGroupAffiliation != null;
newSubstitutionGroupAffiliation = newSubstitutionGroupAffiliation.getSubstitutionGroupAffiliation())
{
if (visited.add(newSubstitutionGroupAffiliation))
{
newSubstitutionGroupAffiliation.getSubstitutionGroup().addAll(substitutionGroup);
}
else
{
break;
}
}
}
}
super.eBasicSetContainer(newContainer, newContainerFeatureID);
}
@Override
protected void changeReference(EReference eReference)
{
super.changeReference(eReference);
Element theElement = getElement();
if (isElementDeclarationReference())
{
if (eReference == null || eReference == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION)
{
XSDElementDeclaration theResolvedElementDeclaration = getResolvedElementDeclaration();
if (theElement != null)
{
niceSetAttributeURIValue(theElement, XSDConstants.REF_ATTRIBUTE, theResolvedElementDeclaration.getURI());
}
if (eReference != null && getContainer() instanceof XSDParticle)
{
((XSDParticle)getContainer()).setTerm(theResolvedElementDeclaration);
}
}
}
else
{
if (theElement != null && eReference == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION)
{
niceSetAttributeURIValue(theElement, XSDConstants.REF_ATTRIBUTE, null);
}
if (eReference == null || eReference == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__TYPE_DEFINITION)
{
XSDTypeDefinition theTypeDefinition = getTypeDefinition();
XSDTypeDefinition theAnonymousTypeDefinition = getAnonymousTypeDefinition();
if (!isTypeExplicit ||
theTypeDefinition == null ||
theTypeDefinition == theAnonymousTypeDefinition)
{
if (theElement != null)
{
niceSetAttribute(theElement, XSDConstants.TYPE_ATTRIBUTE, null);
}
}
else
{
if (theElement != null)
{
niceSetAttributeURIValue(theElement, XSDConstants.TYPE_ATTRIBUTE, theTypeDefinition.getURI());
}
if (eReference != null && theAnonymousTypeDefinition != null)
{
setAnonymousTypeDefinition(null);
}
}
}
if (eReference == null || eReference == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION)
{
if (theElement != null)
{
XSDElementDeclaration theSubstitutionGroupAffiliation = getSubstitutionGroupAffiliation();
if (theSubstitutionGroupAffiliation == null)
{
niceSetAttribute(theElement, XSDConstants.SUBSTITUTIONGROUP_ATTRIBUTE, null);
}
else
{
niceSetAttributeURIValue(theElement, XSDConstants.SUBSTITUTIONGROUP_ATTRIBUTE, theSubstitutionGroupAffiliation.getURI());
}
}
}
}
}
@Override
protected void adoptContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
{
super.adoptContent(eReference, xsdConcreteComponent);
if (eReference == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION)
{
setTypeDefinition((XSDTypeDefinition)xsdConcreteComponent);
traverseToRootForPatching();
}
}
@Override
protected void orphanContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
{
super.orphanContent(eReference, xsdConcreteComponent);
if (eReference == XSDPackage.Literals.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION)
{
if (getTypeDefinition() == xsdConcreteComponent)
{
setTypeDefinition(null);
}
}
}
public boolean isElementDeclarationReference()
{
return this != getResolvedElementDeclaration();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated modifiable
*/
public Boolean getCircular()
{
return isCircular() ? Boolean.TRUE : Boolean.FALSE;
}
@Override
public String getQName()
{
XSDElementDeclaration resolvedElementDeclaration = getResolvedElementDeclaration();
if (resolvedElementDeclaration == this)
{
return super.getQName();
}
else
{
return resolvedElementDeclaration.getQName(this);
}
}
@Override
public boolean isNamedComponentReference()
{
return isElementDeclarationReference();
}
@Override
public XSDNamedComponent getResolvedNamedComponent()
{
return getResolvedElementDeclaration();
}
@Override
public boolean isFeatureReference()
{
return isElementDeclarationReference();
}
@Override
public XSDFeature getResolvedFeature()
{
return getResolvedElementDeclaration();
}
@Override
public XSDTypeDefinition getType()
{
return getTypeDefinition();
}
public String getStringLexicalFinal()
{
if (isSetLexicalFinal())
{
StringBuffer result = new StringBuffer();
for (Object literal : getLexicalFinal())
{
if (result.length() != 0)
{
result.append(' ');
}
if (literal.toString().equals("all"))
{
result.append("#all");
}
else
{
result.append(literal);
}
}
return result.toString();
}
else
{
return null;
}
}
public void setStringLexicalFinal(String finalDefault)
{
if (finalDefault == null)
{
unsetLexicalFinal();
}
else
{
List<XSDProhibitedSubstitutions> newLexicalFinal = new ArrayList<XSDProhibitedSubstitutions>();
for (StringTokenizer stringTokenizer = new StringTokenizer(finalDefault); stringTokenizer.hasMoreTokens(); )
{
String token = stringTokenizer.nextToken();
if (token.equals("#all"))
{
token = "all";
}
XSDProhibitedSubstitutions literal = XSDProhibitedSubstitutions.get(token);
if (literal != null)
{
newLexicalFinal.add(literal);
}
}
if (!newLexicalFinal.equals(getLexicalFinal()))
{
Collection<XSDProhibitedSubstitutions> oldContents = new ArrayList<XSDProhibitedSubstitutions>(getLexicalFinal());
oldContents.removeAll(newLexicalFinal);
if (!oldContents.isEmpty())
{
getLexicalFinal().removeAll(oldContents);
}
setListContentAndOrder(getLexicalFinal(), newLexicalFinal);
}
else if (newLexicalFinal.isEmpty() && !isSetLexicalFinal())
{
getLexicalFinal().clear();
}
}
}
public String getStringBlock()
{
if (isSetBlock())
{
StringBuffer result = new StringBuffer();
for (Object literal : getBlock())
{
if (result.length() != 0)
{
result.append(' ');
}
if (literal.toString().equals("all"))
{
result.append("#all");
}
else
{
result.append(literal);
}
}
return result.toString();
}
else
{
return null;
}
}
public void setStringBlock(String block)
{
if (block == null)
{
unsetBlock();
}
else
{
List<XSDDisallowedSubstitutions> newBlock = new ArrayList<XSDDisallowedSubstitutions>();
for (StringTokenizer stringTokenizer = new StringTokenizer(block); stringTokenizer.hasMoreTokens(); )
{
String token = stringTokenizer.nextToken();
if (token.equals("#all"))
{
token = "all";
}
XSDDisallowedSubstitutions literal = XSDDisallowedSubstitutions.get(token);
if (literal != null)
{
newBlock.add(literal);
}
}
if (!newBlock.equals(getBlock()))
{
Collection<XSDDisallowedSubstitutions> oldContents = new ArrayList<XSDDisallowedSubstitutions>(getBlock());
oldContents.removeAll(newBlock);
if (!oldContents.isEmpty())
{
getBlock().removeAll(oldContents);
}
setListContentAndOrder(getBlock(), newBlock);
}
else if (newBlock.isEmpty() && !isSetBlock())
{
getBlock().clear();
}
}
}
public String getStringDisallowedSubstitutions()
{
StringBuffer result = new StringBuffer();
for (Object literal : getDisallowedSubstitutions())
{
if (result.length() != 0)
{
result.append(' ');
}
result.append(literal);
}
return result.toString();
}
public String getStringSubstitutionGroupExclusions()
{
StringBuffer result = new StringBuffer();
for (Object literal : getSubstitutionGroupExclusions())
{
if (result.length() != 0)
{
result.append(' ');
}
result.append(literal);
}
return result.toString();
}
public boolean isCircular()
{
return analysisState == CIRCULAR;
}
/**
* <!-- 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_ELEMENT_DECLARATION__ANNOTATION, null, msgs);
if (newAnnotation != null)
msgs = ((InternalEObject)newAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ELEMENT_DECLARATION__ANNOTATION, null, msgs);
msgs = basicSetAnnotation(newAnnotation, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__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_ELEMENT_DECLARATION__ANNOTATION, oldAnnotation, newAnnotation);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDTypeDefinition getAnonymousTypeDefinition()
{
return anonymousTypeDefinition;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setAnonymousTypeDefinition(XSDTypeDefinition newAnonymousTypeDefinition)
{
if (newAnonymousTypeDefinition != anonymousTypeDefinition)
{
NotificationChain msgs = null;
if (anonymousTypeDefinition != null)
msgs = ((InternalEObject)anonymousTypeDefinition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION, null, msgs);
if (newAnonymousTypeDefinition != null)
msgs = ((InternalEObject)newAnonymousTypeDefinition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION, null, msgs);
msgs = basicSetAnonymousTypeDefinition(newAnonymousTypeDefinition, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION, newAnonymousTypeDefinition, newAnonymousTypeDefinition));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetAnonymousTypeDefinition(XSDTypeDefinition newAnonymousTypeDefinition, NotificationChain msgs)
{
XSDTypeDefinition oldAnonymousTypeDefinition = anonymousTypeDefinition;
anonymousTypeDefinition = newAnonymousTypeDefinition;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION, oldAnonymousTypeDefinition, newAnonymousTypeDefinition);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDTypeDefinition getTypeDefinition()
{
return typeDefinition;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setTypeDefinitionGen(XSDTypeDefinition newTypeDefinition)
{
XSDTypeDefinition oldTypeDefinition = typeDefinition;
typeDefinition = newTypeDefinition;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__TYPE_DEFINITION, oldTypeDefinition, typeDefinition));
}
public void setTypeDefinition(XSDTypeDefinition newTypeDefinition)
{
isTypeExplicit = newTypeDefinition != null;
setTypeDefinitionGen(newTypeDefinition);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDIdentityConstraintDefinition> getIdentityConstraintDefinitions()
{
if (identityConstraintDefinitions == null)
{
identityConstraintDefinitions = new EObjectContainmentEList<XSDIdentityConstraintDefinition>(XSDIdentityConstraintDefinition.class, this, XSDPackage.XSD_ELEMENT_DECLARATION__IDENTITY_CONSTRAINT_DEFINITIONS);
}
return identityConstraintDefinitions;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDElementDeclaration getResolvedElementDeclaration()
{
return resolvedElementDeclaration;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setResolvedElementDeclaration(XSDElementDeclaration newResolvedElementDeclaration)
{
XSDElementDeclaration oldResolvedElementDeclaration = resolvedElementDeclaration;
resolvedElementDeclaration = newResolvedElementDeclaration;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION, oldResolvedElementDeclaration, resolvedElementDeclaration));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDElementDeclaration getSubstitutionGroupAffiliation()
{
return substitutionGroupAffiliation;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setSubstitutionGroupAffiliation(XSDElementDeclaration newSubstitutionGroupAffiliation)
{
XSDElementDeclaration oldSubstitutionGroupAffiliation = substitutionGroupAffiliation;
substitutionGroupAffiliation = newSubstitutionGroupAffiliation;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION, oldSubstitutionGroupAffiliation, substitutionGroupAffiliation));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDElementDeclaration> getSubstitutionGroup()
{
if (substitutionGroup == null)
{
substitutionGroup = new EObjectEList<XSDElementDeclaration>(XSDElementDeclaration.class, this, XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP);
}
return substitutionGroup;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
{
switch (featureID)
{
case XSDPackage.XSD_ELEMENT_DECLARATION__ANNOTATION:
return basicSetAnnotation(null, msgs);
case XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION:
return basicSetAnonymousTypeDefinition(null, msgs);
case XSDPackage.XSD_ELEMENT_DECLARATION__IDENTITY_CONSTRAINT_DEFINITIONS:
return ((InternalEList<?>)getIdentityConstraintDefinitions()).basicRemove(otherEnd, 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_ELEMENT_DECLARATION__NILLABLE:
return isNillable();
case XSDPackage.XSD_ELEMENT_DECLARATION__DISALLOWED_SUBSTITUTIONS:
return getDisallowedSubstitutions();
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_EXCLUSIONS:
return getSubstitutionGroupExclusions();
case XSDPackage.XSD_ELEMENT_DECLARATION__ABSTRACT:
return isAbstract();
case XSDPackage.XSD_ELEMENT_DECLARATION__LEXICAL_FINAL:
return getLexicalFinal();
case XSDPackage.XSD_ELEMENT_DECLARATION__BLOCK:
return getBlock();
case XSDPackage.XSD_ELEMENT_DECLARATION__ELEMENT_DECLARATION_REFERENCE:
return isElementDeclarationReference();
case XSDPackage.XSD_ELEMENT_DECLARATION__CIRCULAR:
return isCircular();
case XSDPackage.XSD_ELEMENT_DECLARATION__ANNOTATION:
return getAnnotation();
case XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION:
return getAnonymousTypeDefinition();
case XSDPackage.XSD_ELEMENT_DECLARATION__TYPE_DEFINITION:
return getTypeDefinition();
case XSDPackage.XSD_ELEMENT_DECLARATION__IDENTITY_CONSTRAINT_DEFINITIONS:
return getIdentityConstraintDefinitions();
case XSDPackage.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION:
return getResolvedElementDeclaration();
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION:
return getSubstitutionGroupAffiliation();
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP:
return getSubstitutionGroup();
}
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_ELEMENT_DECLARATION__NILLABLE:
setNillable((Boolean)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__DISALLOWED_SUBSTITUTIONS:
getDisallowedSubstitutions().clear();
getDisallowedSubstitutions().addAll((Collection<? extends XSDDisallowedSubstitutions>)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_EXCLUSIONS:
getSubstitutionGroupExclusions().clear();
getSubstitutionGroupExclusions().addAll((Collection<? extends XSDSubstitutionGroupExclusions>)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__ABSTRACT:
setAbstract((Boolean)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__LEXICAL_FINAL:
getLexicalFinal().clear();
getLexicalFinal().addAll((Collection<? extends XSDProhibitedSubstitutions>)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__BLOCK:
getBlock().clear();
getBlock().addAll((Collection<? extends XSDDisallowedSubstitutions>)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__ANNOTATION:
setAnnotation((XSDAnnotation)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION:
setAnonymousTypeDefinition((XSDTypeDefinition)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__TYPE_DEFINITION:
setTypeDefinition((XSDTypeDefinition)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__IDENTITY_CONSTRAINT_DEFINITIONS:
getIdentityConstraintDefinitions().clear();
getIdentityConstraintDefinitions().addAll((Collection<? extends XSDIdentityConstraintDefinition>)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION:
setResolvedElementDeclaration((XSDElementDeclaration)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION:
setSubstitutionGroupAffiliation((XSDElementDeclaration)newValue);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP:
getSubstitutionGroup().clear();
getSubstitutionGroup().addAll((Collection<? extends XSDElementDeclaration>)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID)
{
switch (featureID)
{
case XSDPackage.XSD_ELEMENT_DECLARATION__NILLABLE:
unsetNillable();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__DISALLOWED_SUBSTITUTIONS:
getDisallowedSubstitutions().clear();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_EXCLUSIONS:
getSubstitutionGroupExclusions().clear();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__ABSTRACT:
unsetAbstract();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__LEXICAL_FINAL:
unsetLexicalFinal();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__BLOCK:
unsetBlock();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__ANNOTATION:
setAnnotation((XSDAnnotation)null);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION:
setAnonymousTypeDefinition((XSDTypeDefinition)null);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__TYPE_DEFINITION:
setTypeDefinition((XSDTypeDefinition)null);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__IDENTITY_CONSTRAINT_DEFINITIONS:
getIdentityConstraintDefinitions().clear();
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION:
setResolvedElementDeclaration((XSDElementDeclaration)null);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION:
setSubstitutionGroupAffiliation((XSDElementDeclaration)null);
return;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP:
getSubstitutionGroup().clear();
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID)
{
switch (featureID)
{
case XSDPackage.XSD_ELEMENT_DECLARATION__NILLABLE:
return isSetNillable();
case XSDPackage.XSD_ELEMENT_DECLARATION__DISALLOWED_SUBSTITUTIONS:
return disallowedSubstitutions != null && !disallowedSubstitutions.isEmpty();
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_EXCLUSIONS:
return substitutionGroupExclusions != null && !substitutionGroupExclusions.isEmpty();
case XSDPackage.XSD_ELEMENT_DECLARATION__ABSTRACT:
return isSetAbstract();
case XSDPackage.XSD_ELEMENT_DECLARATION__LEXICAL_FINAL:
return isSetLexicalFinal();
case XSDPackage.XSD_ELEMENT_DECLARATION__BLOCK:
return isSetBlock();
case XSDPackage.XSD_ELEMENT_DECLARATION__ELEMENT_DECLARATION_REFERENCE:
return isElementDeclarationReference() != ELEMENT_DECLARATION_REFERENCE_EDEFAULT;
case XSDPackage.XSD_ELEMENT_DECLARATION__CIRCULAR:
return isCircular() != CIRCULAR_EDEFAULT;
case XSDPackage.XSD_ELEMENT_DECLARATION__ANNOTATION:
return annotation != null;
case XSDPackage.XSD_ELEMENT_DECLARATION__ANONYMOUS_TYPE_DEFINITION:
return anonymousTypeDefinition != null;
case XSDPackage.XSD_ELEMENT_DECLARATION__TYPE_DEFINITION:
return typeDefinition != null;
case XSDPackage.XSD_ELEMENT_DECLARATION__IDENTITY_CONSTRAINT_DEFINITIONS:
return identityConstraintDefinitions != null && !identityConstraintDefinitions.isEmpty();
case XSDPackage.XSD_ELEMENT_DECLARATION__RESOLVED_ELEMENT_DECLARATION:
return resolvedElementDeclaration != null;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP_AFFILIATION:
return substitutionGroupAffiliation != null;
case XSDPackage.XSD_ELEMENT_DECLARATION__SUBSTITUTION_GROUP:
return substitutionGroup != null && !substitutionGroup.isEmpty();
}
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(" (nillable: ");
if ((eFlags & NILLABLE_ESETFLAG) != 0) result.append((eFlags & NILLABLE_EFLAG) != 0); else result.append("<unset>");
result.append(", disallowedSubstitutions: ");
result.append(disallowedSubstitutions);
result.append(", substitutionGroupExclusions: ");
result.append(substitutionGroupExclusions);
result.append(", abstract: ");
if ((eFlags & ABSTRACT_ESETFLAG) != 0) result.append((eFlags & ABSTRACT_EFLAG) != 0); else result.append("<unset>");
result.append(", lexicalFinal: ");
result.append(lexicalFinal);
result.append(", block: ");
result.append(block);
result.append(')');
return result.toString();
}
@Override
public XSDConcreteComponent cloneConcreteComponent(boolean deep, boolean shareDOM)
{
XSDElementDeclarationImpl clonedElementDeclaration =
(XSDElementDeclarationImpl)getXSDFactory().createXSDElementDeclaration();
clonedElementDeclaration.isReconciling = true;
if (isElementDeclarationReference())
{
XSDElementDeclaration theResolvedElementDeclaration = getResolvedElementDeclaration();
clonedElementDeclaration.setResolvedElementDeclaration
(createUnresolvedElementDeclaration
(theResolvedElementDeclaration.getTargetNamespace(), theResolvedElementDeclaration.getName()));
}
else
{
if (getName() != null)
{
clonedElementDeclaration.setName(getName());
}
if (isSetForm())
{
clonedElementDeclaration.setForm(getForm());
}
if (isSetConstraint())
{
clonedElementDeclaration.setConstraint(getConstraint());
}
if (getLexicalValue() != null)
{
clonedElementDeclaration.setLexicalValue(getLexicalValue());
}
if (isSetNillable())
{
clonedElementDeclaration.setNillable(isNillable());
}
if (isSetAbstract())
{
clonedElementDeclaration.setAbstract(isAbstract());
}
if (isSetBlock())
{
if (!getBlock().isEmpty())
{
clonedElementDeclaration.getBlock().addAll(getBlock());
}
else
{
clonedElementDeclaration.getBlock().clear();
}
}
if (isSetLexicalFinal())
{
if (!getLexicalFinal().isEmpty())
{
clonedElementDeclaration.getLexicalFinal().addAll(getLexicalFinal());
}
else
{
clonedElementDeclaration.getLexicalFinal().clear();
}
}
if (getTypeDefinition() != null && getTypeDefinition() != getAnonymousTypeDefinition())
{
XSDTypeDefinition theTypeDefinition = getTypeDefinition();
clonedElementDeclaration.setTypeDefinition
(createUnresolvedTypeDefinition
(theTypeDefinition.getTargetNamespace(), theTypeDefinition.getName()));
}
if (deep)
{
if (getAnonymousTypeDefinition() != null)
{
clonedElementDeclaration.setAnonymousTypeDefinition
((XSDTypeDefinition)getAnonymousTypeDefinition().cloneConcreteComponent(deep, shareDOM));
}
if (!getIdentityConstraintDefinitions().isEmpty())
{
clonedElementDeclaration.getIdentityConstraintDefinitions().addAll
(cloneConcreteComponents(getIdentityConstraintDefinitions(), true, shareDOM));
}
XSDElementDeclaration theSubstitutionGroupAffiliation = getSubstitutionGroupAffiliation();
if (theSubstitutionGroupAffiliation != null)
{
clonedElementDeclaration.setSubstitutionGroupAffiliation
(createUnresolvedElementDeclaration
(theSubstitutionGroupAffiliation.getTargetNamespace(), theSubstitutionGroupAffiliation.getName()));
}
}
}
if (deep)
{
if (getAnnotation() != null)
{
clonedElementDeclaration.setAnnotation((XSDAnnotation)getAnnotation().cloneConcreteComponent(deep, shareDOM));
}
}
if (shareDOM && getElement() != null)
{
clonedElementDeclaration.setElement(getElement());
}
clonedElementDeclaration.isReconciling = shareDOM;
return clonedElementDeclaration;
}
}