blob: e121607d3fb3d279205ab7913e131488a8ae0136 [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 v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.xsd.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
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.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.XSDComplexFinal;
import org.eclipse.xsd.XSDComplexTypeContent;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDComponent;
import org.eclipse.xsd.XSDCompositor;
import org.eclipse.xsd.XSDConcreteComponent;
import org.eclipse.xsd.XSDContentTypeCategory;
import org.eclipse.xsd.XSDDerivationMethod;
import org.eclipse.xsd.XSDDiagnosticSeverity;
import org.eclipse.xsd.XSDDisallowedSubstitutions;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDModelGroup;
import org.eclipse.xsd.XSDNamespaceConstraintCategory;
import org.eclipse.xsd.XSDPackage;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDParticleContent;
import org.eclipse.xsd.XSDProhibitedSubstitutions;
import org.eclipse.xsd.XSDRedefine;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.eclipse.xsd.XSDTypeDefinition;
import org.eclipse.xsd.XSDWildcard;
import org.eclipse.xsd.util.XSDConstants;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Complex Type Definition</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* </p>
* <ul>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getDerivationMethod <em>Derivation Method</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getFinal <em>Final</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#isAbstract <em>Abstract</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getContentTypeCategory <em>Content Type Category</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getProhibitedSubstitutions <em>Prohibited Substitutions</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getLexicalFinal <em>Lexical Final</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getBlock <em>Block</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#isMixed <em>Mixed</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getContentAnnotation <em>Content Annotation</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getBaseTypeDefinition <em>Base Type Definition</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getContent <em>Content</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getContentType <em>Content Type</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getAttributeUses <em>Attribute Uses</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getAttributeContents <em>Attribute Contents</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getAttributeWildcard <em>Attribute Wildcard</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getAttributeWildcardContent <em>Attribute Wildcard Content</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getRootTypeDefinition <em>Root Type Definition</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getSyntheticParticle <em>Synthetic Particle</em>}</li>
* <li>{@link org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl#getSyntheticWildcard <em>Synthetic Wildcard</em>}</li>
* </ul>
*
* @generated
*/
public class XSDComplexTypeDefinitionImpl
extends XSDTypeDefinitionImpl
implements XSDComplexTypeDefinition
{
/**
* The default value of the '{@link #getDerivationMethod() <em>Derivation Method</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getDerivationMethod()
* @generated
* @ordered
*/
protected static final XSDDerivationMethod DERIVATION_METHOD_EDEFAULT = XSDDerivationMethod.RESTRICTION_LITERAL;
/**
* The offset of the flags representing the value of the '{@link #getDerivationMethod() <em>Derivation Method</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int DERIVATION_METHOD_EFLAG_OFFSET = 8;
/**
* The flags representing the default value of the '{@link #getDerivationMethod() <em>Derivation Method</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int DERIVATION_METHOD_EFLAG_DEFAULT = DERIVATION_METHOD_EDEFAULT.ordinal() << DERIVATION_METHOD_EFLAG_OFFSET;
/**
* The array of enumeration values for '{@link XSDDerivationMethod Derivation Method}'
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
private static final XSDDerivationMethod[] DERIVATION_METHOD_EFLAG_VALUES = XSDDerivationMethod.values();
/**
* The flag representing the value of the '{@link #getDerivationMethod() <em>Derivation Method</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getDerivationMethod()
* @generated
* @ordered
*/
protected static final int DERIVATION_METHOD_EFLAG = 1 << DERIVATION_METHOD_EFLAG_OFFSET;
/**
* The flag representing whether the Derivation Method attribute has been set.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int DERIVATION_METHOD_ESETFLAG = 1 << 9;
/**
* The cached value of the '{@link #getFinal() <em>Final</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getFinal()
* @generated
* @ordered
*/
protected EList<XSDComplexFinal> final_;
/**
* 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 << 10;
/**
* 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 << 11;
/**
* The default value of the '{@link #getContentTypeCategory() <em>Content Type Category</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getContentTypeCategory()
* @generated
* @ordered
*/
protected static final XSDContentTypeCategory CONTENT_TYPE_CATEGORY_EDEFAULT = XSDContentTypeCategory.EMPTY_LITERAL;
/**
* The offset of the flags representing the value of the '{@link #getContentTypeCategory() <em>Content Type Category</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int CONTENT_TYPE_CATEGORY_EFLAG_OFFSET = 12;
/**
* The flags representing the default value of the '{@link #getContentTypeCategory() <em>Content Type Category</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int CONTENT_TYPE_CATEGORY_EFLAG_DEFAULT = CONTENT_TYPE_CATEGORY_EDEFAULT.ordinal() << CONTENT_TYPE_CATEGORY_EFLAG_OFFSET;
/**
* The array of enumeration values for '{@link XSDContentTypeCategory Content Type Category}'
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
private static final XSDContentTypeCategory[] CONTENT_TYPE_CATEGORY_EFLAG_VALUES = XSDContentTypeCategory.values();
/**
* The flags representing the value of the '{@link #getContentTypeCategory() <em>Content Type Category</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getContentTypeCategory()
* @generated
* @ordered
*/
protected static final int CONTENT_TYPE_CATEGORY_EFLAG = 0x3 << CONTENT_TYPE_CATEGORY_EFLAG_OFFSET;
/**
* The cached value of the '{@link #getProhibitedSubstitutions() <em>Prohibited Substitutions</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getProhibitedSubstitutions()
* @generated
* @ordered
*/
protected EList<XSDProhibitedSubstitutions> prohibitedSubstitutions;
/**
* 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<XSDComplexFinal> 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<XSDProhibitedSubstitutions> block;
/**
* The default value of the '{@link #isMixed() <em>Mixed</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isMixed()
* @generated
* @ordered
*/
protected static final boolean MIXED_EDEFAULT = false;
/**
* The flag representing the value of the '{@link #isMixed() <em>Mixed</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isMixed()
* @generated
* @ordered
*/
protected static final int MIXED_EFLAG = 1 << 14;
/**
* The flag representing whether the Mixed attribute has been set.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
protected static final int MIXED_ESETFLAG = 1 << 15;
/**
* The cached value of the '{@link #getContentAnnotation() <em>Content Annotation</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getContentAnnotation()
* @generated
* @ordered
*/
protected XSDAnnotation contentAnnotation;
/**
* The cached value of the '{@link #getBaseTypeDefinition() <em>Base Type Definition</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getBaseTypeDefinition()
* @generated
* @ordered
*/
protected XSDTypeDefinition baseTypeDefinition;
/**
* The cached value of the '{@link #getContent() <em>Content</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getContent()
* @generated
* @ordered
*/
protected XSDComplexTypeContent content;
/**
* The cached value of the '{@link #getContentType() <em>Content Type</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getContentType()
* @generated
* @ordered
*/
protected XSDComplexTypeContent contentType;
/**
* 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 #getAttributeContents() <em>Attribute Contents</em>}' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getAttributeContents()
* @generated
* @ordered
*/
protected EList<XSDAttributeGroupContent> attributeContents;
/**
* 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 #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 #getSyntheticParticle() <em>Synthetic Particle</em>}' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSyntheticParticle()
* @generated
* @ordered
*/
protected XSDParticle syntheticParticle;
/**
* 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 XSDComplexTypeDefinition createComplexTypeDefinition(Node node)
{
if (XSDConstants.nodeType(node) == XSDConstants.COMPLEXTYPE_ELEMENT)
{
XSDComplexTypeDefinition xsdComplexTypeDefinition = XSDFactory.eINSTANCE.createXSDComplexTypeDefinition();
xsdComplexTypeDefinition.setElement((Element)node);
return xsdComplexTypeDefinition;
}
return null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected XSDComplexTypeDefinitionImpl()
{
super();
eFlags |= DERIVATION_METHOD_EFLAG_DEFAULT;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass()
{
return XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDDerivationMethod getDerivationMethod()
{
return DERIVATION_METHOD_EFLAG_VALUES[(eFlags & DERIVATION_METHOD_EFLAG) >>> DERIVATION_METHOD_EFLAG_OFFSET];
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setDerivationMethod(XSDDerivationMethod newDerivationMethod)
{
XSDDerivationMethod oldDerivationMethod = DERIVATION_METHOD_EFLAG_VALUES[(eFlags & DERIVATION_METHOD_EFLAG) >>> DERIVATION_METHOD_EFLAG_OFFSET];
if (newDerivationMethod == null) newDerivationMethod = DERIVATION_METHOD_EDEFAULT;
eFlags = eFlags & ~DERIVATION_METHOD_EFLAG | newDerivationMethod.ordinal() << DERIVATION_METHOD_EFLAG_OFFSET;
boolean oldDerivationMethodESet = (eFlags & DERIVATION_METHOD_ESETFLAG) != 0;
eFlags |= DERIVATION_METHOD_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD, oldDerivationMethod, newDerivationMethod, !oldDerivationMethodESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetDerivationMethod()
{
XSDDerivationMethod oldDerivationMethod = DERIVATION_METHOD_EFLAG_VALUES[(eFlags & DERIVATION_METHOD_EFLAG) >>> DERIVATION_METHOD_EFLAG_OFFSET];
boolean oldDerivationMethodESet = (eFlags & DERIVATION_METHOD_ESETFLAG) != 0;
eFlags = eFlags & ~DERIVATION_METHOD_EFLAG | DERIVATION_METHOD_EFLAG_DEFAULT;
eFlags &= ~DERIVATION_METHOD_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.UNSET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD, oldDerivationMethod, DERIVATION_METHOD_EDEFAULT, oldDerivationMethodESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetDerivationMethod()
{
return (eFlags & DERIVATION_METHOD_ESETFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDComplexFinal> getFinal()
{
if (final_ == null)
{
final_ = new EDataTypeUniqueEList<XSDComplexFinal>(XSDComplexFinal.class, this, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__FINAL);
}
return final_;
}
/**
* <!-- 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_COMPLEX_TYPE_DEFINITION__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_COMPLEX_TYPE_DEFINITION__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 XSDContentTypeCategory getContentTypeCategory()
{
return CONTENT_TYPE_CATEGORY_EFLAG_VALUES[(eFlags & CONTENT_TYPE_CATEGORY_EFLAG) >>> CONTENT_TYPE_CATEGORY_EFLAG_OFFSET];
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setContentTypeCategory(XSDContentTypeCategory newContentTypeCategory)
{
XSDContentTypeCategory oldContentTypeCategory = CONTENT_TYPE_CATEGORY_EFLAG_VALUES[(eFlags & CONTENT_TYPE_CATEGORY_EFLAG) >>> CONTENT_TYPE_CATEGORY_EFLAG_OFFSET];
if (newContentTypeCategory == null) newContentTypeCategory = CONTENT_TYPE_CATEGORY_EDEFAULT;
eFlags = eFlags & ~CONTENT_TYPE_CATEGORY_EFLAG | newContentTypeCategory.ordinal() << CONTENT_TYPE_CATEGORY_EFLAG_OFFSET;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE_CATEGORY, oldContentTypeCategory, newContentTypeCategory));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDProhibitedSubstitutions> getProhibitedSubstitutions()
{
if (prohibitedSubstitutions == null)
{
prohibitedSubstitutions = new EDataTypeUniqueEList<XSDProhibitedSubstitutions>(XSDProhibitedSubstitutions.class, this, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__PROHIBITED_SUBSTITUTIONS);
}
return prohibitedSubstitutions;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDComplexFinal> getLexicalFinal()
{
if (lexicalFinal == null)
{
lexicalFinal = new EDataTypeUniqueEList.Unsettable<XSDComplexFinal>(XSDComplexFinal.class, this, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__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<XSDProhibitedSubstitutions> getBlock()
{
if (block == null)
{
block = new EDataTypeUniqueEList.Unsettable<XSDProhibitedSubstitutions>(XSDProhibitedSubstitutions.class, this, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__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
*/
public boolean isMixed()
{
return (eFlags & MIXED_EFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setMixed(boolean newMixed)
{
boolean oldMixed = (eFlags & MIXED_EFLAG) != 0;
if (newMixed) eFlags |= MIXED_EFLAG; else eFlags &= ~MIXED_EFLAG;
boolean oldMixedESet = (eFlags & MIXED_ESETFLAG) != 0;
eFlags |= MIXED_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__MIXED, oldMixed, newMixed, !oldMixedESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void unsetMixed()
{
boolean oldMixed = (eFlags & MIXED_EFLAG) != 0;
boolean oldMixedESet = (eFlags & MIXED_ESETFLAG) != 0;
if (MIXED_EDEFAULT) eFlags |= MIXED_EFLAG; else eFlags &= ~MIXED_EFLAG;
eFlags &= ~MIXED_ESETFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.UNSET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__MIXED, oldMixed, MIXED_EDEFAULT, oldMixedESet));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSetMixed()
{
return (eFlags & MIXED_ESETFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDAnnotation getContentAnnotation()
{
return contentAnnotation;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setContentAnnotation(XSDAnnotation newContentAnnotation)
{
if (newContentAnnotation != contentAnnotation)
{
NotificationChain msgs = null;
if (contentAnnotation != null)
msgs = ((InternalEObject)contentAnnotation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION, null, msgs);
if (newContentAnnotation != null)
msgs = ((InternalEObject)newContentAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION, null, msgs);
msgs = basicSetContentAnnotation(newContentAnnotation, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION, newContentAnnotation, newContentAnnotation));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetContentAnnotation(XSDAnnotation newContentAnnotation, NotificationChain msgs)
{
XSDAnnotation oldContentAnnotation = contentAnnotation;
contentAnnotation = newContentAnnotation;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION, oldContentAnnotation, newContentAnnotation);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDTypeDefinition getBaseTypeDefinition()
{
return baseTypeDefinition;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setBaseTypeDefinition(XSDTypeDefinition newBaseTypeDefinition)
{
XSDTypeDefinition oldBaseTypeDefinition = baseTypeDefinition;
baseTypeDefinition = newBaseTypeDefinition;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION, oldBaseTypeDefinition, baseTypeDefinition));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDComplexTypeContent getContent()
{
return content;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setContent(XSDComplexTypeContent newContent)
{
if (newContent != content)
{
NotificationChain msgs = null;
if (content != null)
msgs = ((InternalEObject)content).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT, null, msgs);
if (newContent != null)
msgs = ((InternalEObject)newContent).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT, null, msgs);
msgs = basicSetContent(newContent, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT, newContent, newContent));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetContent(XSDComplexTypeContent newContent, NotificationChain msgs)
{
XSDComplexTypeContent oldContent = content;
content = newContent;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT, oldContent, newContent);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDComplexTypeContent getContentType()
{
return contentType;
}
@Override
public XSDParticle getComplexType()
{
return getContentType() instanceof XSDParticle ? (XSDParticle)getContentType() : null;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setContentType(XSDComplexTypeContent newContentType)
{
XSDComplexTypeContent oldContentType = contentType;
contentType = newContentType;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE, oldContentType, contentType));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDAttributeUse> getAttributeUses()
{
if (attributeUses == null)
{
attributeUses = new EObjectEList<XSDAttributeUse>(XSDAttributeUse.class, this, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_USES);
}
return attributeUses;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<XSDAttributeGroupContent> getAttributeContents()
{
if (attributeContents == null)
{
attributeContents = new EObjectContainmentEList<XSDAttributeGroupContent>(XSDAttributeGroupContent.class, this, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS);
}
return attributeContents;
}
/**
* <!-- 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_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD, oldAttributeWildcard, attributeWildcard));
}
/**
* <!-- 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_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT, null, msgs);
if (newAttributeWildcardContent != null)
msgs = ((InternalEObject)newAttributeWildcardContent).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_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_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT, oldAttributeWildcardContent, newAttributeWildcardContent);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
@Override
public Element createElement()
{
Element newElement = createElement(XSDConstants.COMPLEXTYPE_ELEMENT);
setElement(newElement);
Element attributeParentElement = newElement;
XSDComplexTypeContent theContent = getContent();
if (theContent == null || theContent instanceof XSDParticle)
{
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if (theBaseTypeDefinition != null &&
(!XSDConstants.isURType(theBaseTypeDefinition) ||
XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod()))
{
Element [] contentElementPair = createContentElementPair();
attributeParentElement = contentElementPair[1];
newElement.appendChild(contentElementPair[0]);
}
if (theContent != null)
{
Element simpleContentElement = ((XSDConcreteComponentImpl)theContent).createElement();
attributeParentElement.appendChild(simpleContentElement);
}
}
else
{
Element simpleContentElement = ((XSDConcreteComponentImpl)theContent).createElement();
newElement.appendChild(simpleContentElement);
LOOP:
for (Node child = simpleContentElement.getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.EXTENSION_ELEMENT:
case XSDConstants.RESTRICTION_ELEMENT:
{
attributeParentElement = (Element)child;
break LOOP;
}
}
}
}
for (XSDAttributeGroupContent xsdAttributeGroupContent : getAttributeContents())
{
Element attributeElement = ((XSDConcreteComponentImpl)xsdAttributeGroupContent).createElement();
attributeParentElement.appendChild(attributeElement);
}
return newElement;
}
protected Element [] createContentElementPair()
{
Element [] contentElementPair = new Element [2];
contentElementPair[0] = createElement(XSDConstants.COMPLEXCONTENT_ELEMENT);
contentElementPair[1] =
createElement
(XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod() ?
XSDConstants.EXTENSION_ELEMENT :
XSDConstants.RESTRICTION_ELEMENT);
contentElementPair[0].appendChild(contentElementPair[1]);
return contentElementPair;
}
protected Element createDerivationElement()
{
return
createElement
(XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod() ?
XSDConstants.EXTENSION_ELEMENT :
XSDConstants.RESTRICTION_ELEMENT);
}
@Override
protected boolean considerAllContainsForBestConcreteComponent()
{
return true;
}
@Override
protected void patch()
{
super.patch();
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if (theBaseTypeDefinition != null && (forceResolve || theBaseTypeDefinition.getContainer() == null))
{
theBaseTypeDefinition = resolveTypeDefinition(theBaseTypeDefinition.getTargetNamespace(), theBaseTypeDefinition.getName());
}
theBaseTypeDefinition = handleNewBaseTypeDefinition(theBaseTypeDefinition);
XSDSchema xsdSchema = getSchema();
if (xsdSchema != null)
{
List<XSDComplexFinal> newFinal = new ArrayList<XSDComplexFinal>();
if (!isSetLexicalFinal())
{
for (XSDProhibitedSubstitutions value : getSchema().getFinalDefault())
{
switch (value.getValue())
{
case XSDProhibitedSubstitutions.ALL:
{
newFinal.add(XSDComplexFinal.EXTENSION_LITERAL);
newFinal.add(XSDComplexFinal.RESTRICTION_LITERAL);
break;
}
case XSDProhibitedSubstitutions.EXTENSION:
{
newFinal.add(XSDComplexFinal.EXTENSION_LITERAL);
break;
}
case XSDProhibitedSubstitutions.RESTRICTION:
{
newFinal.add(XSDComplexFinal.RESTRICTION_LITERAL);
break;
}
}
}
}
else
{
for (XSDComplexFinal value : getLexicalFinal())
{
switch (value.getValue())
{
case XSDComplexFinal.ALL:
{
newFinal.add(XSDComplexFinal.EXTENSION_LITERAL);
newFinal.add(XSDComplexFinal.RESTRICTION_LITERAL);
break;
}
case XSDComplexFinal.EXTENSION:
case XSDComplexFinal.RESTRICTION:
{
newFinal.add(value);
break;
}
}
}
}
Collection<XSDComplexFinal> oldFinal = new ArrayList<XSDComplexFinal>(getFinal());
oldFinal.removeAll(newFinal);
if (!oldFinal.isEmpty())
{
getFinal().removeAll(oldFinal);
}
setListContentAndOrder(getFinal(), newFinal);
List<XSDProhibitedSubstitutions> newProhibitedSubstitutions = new ArrayList<XSDProhibitedSubstitutions>();
if (!isSetBlock())
{
for (XSDDisallowedSubstitutions value : getSchema().getBlockDefault())
{
switch (value.getValue())
{
case XSDDisallowedSubstitutions.ALL:
{
newProhibitedSubstitutions.add(XSDProhibitedSubstitutions.EXTENSION_LITERAL);
newProhibitedSubstitutions.add(XSDProhibitedSubstitutions.RESTRICTION_LITERAL);
break;
}
case XSDDisallowedSubstitutions.RESTRICTION:
{
newProhibitedSubstitutions.add(XSDProhibitedSubstitutions.RESTRICTION_LITERAL);
break;
}
case XSDDisallowedSubstitutions.EXTENSION:
{
newProhibitedSubstitutions.add(XSDProhibitedSubstitutions.EXTENSION_LITERAL);
break;
}
}
}
}
else
{
for (XSDProhibitedSubstitutions value : getBlock())
{
switch (value.getValue())
{
case XSDProhibitedSubstitutions.ALL:
{
newProhibitedSubstitutions.add(XSDProhibitedSubstitutions.EXTENSION_LITERAL);
newProhibitedSubstitutions.add(XSDProhibitedSubstitutions.RESTRICTION_LITERAL);
break;
}
case XSDProhibitedSubstitutions.EXTENSION:
case XSDProhibitedSubstitutions.RESTRICTION:
{
newProhibitedSubstitutions.add(value);
break;
}
}
}
}
Collection<XSDProhibitedSubstitutions> oldProhibitedSubstitutions = new ArrayList<XSDProhibitedSubstitutions>(getProhibitedSubstitutions());
oldProhibitedSubstitutions.removeAll(newProhibitedSubstitutions);
if (!oldProhibitedSubstitutions.isEmpty())
{
getProhibitedSubstitutions().removeAll(oldProhibitedSubstitutions);
}
setListContentAndOrder(getProhibitedSubstitutions(), newProhibitedSubstitutions);
}
}
@Override
protected void traverseToRootForAnalysis()
{
analysisState = UNANALYZED;
super.traverseToRootForAnalysis();
}
protected XSDParticle extensionParticle;
protected XSDWildcardImpl effectiveWildcard;
@Override
protected void handleAnalysis()
{
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
XSDComplexTypeContent newContentType = null;
XSDContentTypeCategory newContentTypeCategory = XSDContentTypeCategory.EMPTY_LITERAL;
XSDWildcard localWildcard = getAttributeWildcardContent();
XSDWildcard baseWildcard = null;
if (theBaseTypeDefinition != null && theBaseTypeDefinition.getContainer() != null)
{
if (!((XSDConcreteComponentImpl)theBaseTypeDefinition).analyze() && !XSDConstants.isURType(theBaseTypeDefinition) && theBaseTypeDefinition.isCircular())
{
analysisState = CIRCULAR;
}
if (theBaseTypeDefinition != this)
{
List<XSDAttributeUse> baseAttributeUses = Collections.emptyList();
if (theBaseTypeDefinition instanceof XSDComplexTypeDefinition)
{
baseAttributeUses = ((XSDComplexTypeDefinition)theBaseTypeDefinition).getAttributeUses();
}
EList<XSDAttributeUse> theAttributeUses = getAttributeUses();
List<XSDAttributeUse> newAttributeUses = XSDAttributeGroupDefinitionImpl.getAttributeUses(getAttributeContents(), baseAttributeUses);
List<XSDAttributeUse> remainingAttributeUses = new ArrayList<XSDAttributeUse>(theAttributeUses);
remainingAttributeUses.removeAll(newAttributeUses);
theAttributeUses.removeAll(remainingAttributeUses);
setListContentAndOrder(theAttributeUses, newAttributeUses);
if (XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod() &&
theBaseTypeDefinition instanceof XSDComplexTypeDefinition)
{
baseWildcard = ((XSDComplexTypeDefinition)theBaseTypeDefinition).getAttributeWildcard();
}
}
}
if (localWildcard != null)
{
((XSDConcreteComponentImpl)localWildcard).analyze();
}
XSDWildcard newAttributeWildcard =
XSDAttributeGroupDefinitionImpl.getAttributeWildcard(baseWildcard, localWildcard, getAttributeContents());
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);
}
newContentType = getContent();
if (newContentType instanceof XSDSimpleTypeDefinition)
{
((XSDConcreteComponentImpl)newContentType).analyze();
newContentTypeCategory = XSDContentTypeCategory.SIMPLE_LITERAL;
if (XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod())
{
newContentType = ((XSDSimpleTypeDefinition)newContentType).getBaseTypeDefinition();
}
}
else
{
newContentTypeCategory = isMixed() ? XSDContentTypeCategory.MIXED_LITERAL : XSDContentTypeCategory.ELEMENT_ONLY_LITERAL;
boolean isEmptyContent = isEmptyContent((XSDParticle)newContentType);
if (XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod())
{
if (theBaseTypeDefinition instanceof XSDComplexTypeDefinition)
{
XSDComplexTypeDefinition complexBaseTypeDefinition = (XSDComplexTypeDefinition)theBaseTypeDefinition;
if (isEmptyContent)
{
if (!isMixed())
{
newContentTypeCategory = complexBaseTypeDefinition.getContentTypeCategory();
}
newContentType = complexBaseTypeDefinition.getContentType();
}
else
{
XSDComplexTypeContent baseContentType = complexBaseTypeDefinition.getContentType();
if (baseContentType instanceof XSDParticle)
{
if (extensionParticle == null)
{
extensionParticle = getXSDFactory().createXSDParticle();
setSyntheticParticle(extensionParticle);
extensionParticle.setMinOccurs(1);
extensionParticle.setMaxOccurs(1);
XSDModelGroup xsdModelGroup = getXSDFactory().createXSDModelGroup();
xsdModelGroup.setCompositor(XSDCompositor.SEQUENCE_LITERAL);
extensionParticle.setContent(xsdModelGroup);
}
XSDModelGroup extensionGroup = (XSDModelGroup)extensionParticle.getTerm();
List<XSDParticle> newParticles = new ArrayList<XSDParticle>();
newParticles.add((XSDParticle)baseContentType);
if (getContent() != null)
{
newParticles.add((XSDParticle)getContent());
}
List<XSDParticle> remainingParticles = new ArrayList<XSDParticle>(extensionGroup.getParticles());
remainingParticles.removeAll(newParticles);
if (!remainingParticles.isEmpty())
{
extensionGroup.getParticles().removeAll(remainingParticles);
}
setListContentAndOrder(extensionGroup.getParticles(), newParticles);
if (isEmptyContent((XSDParticle)baseContentType))
{
newContentType = getContent();
}
else
{
newContentType = extensionParticle;
}
}
}
}
else if (isEmptyContent)
{
newContentTypeCategory = XSDContentTypeCategory.EMPTY_LITERAL;
}
}
else
{
if (isEmptyContent)
{
if (isMixed())
{
if (extensionParticle == null)
{
extensionParticle = getXSDFactory().createXSDParticle();
setSyntheticParticle(extensionParticle);
extensionParticle.setMinOccurs(1);
extensionParticle.setMaxOccurs(1);
XSDModelGroup xsdModelGroup = getXSDFactory().createXSDModelGroup();
xsdModelGroup.setCompositor(XSDCompositor.SEQUENCE_LITERAL);
extensionParticle.setContent(xsdModelGroup);
}
newContentType = extensionParticle;
}
else
{
newContentTypeCategory = XSDContentTypeCategory.EMPTY_LITERAL;
}
}
}
}
if (newContentTypeCategory != getContentTypeCategory())
{
setContentTypeCategory(newContentTypeCategory);
}
if (newContentType != getContentType())
{
setContentType(newContentType);
}
if (newAttributeWildcard != getAttributeWildcard())
{
setAttributeWildcard(newAttributeWildcard);
}
if (analysisState == ANALYZING)
{
analysisState = ANALYZED;
}
super.handleAnalysis();
}
protected boolean isEmptyContent(XSDParticle xsdParticle)
{
if (xsdParticle == null)
{
return true;
}
else
{
XSDParticleContent xsdParticleContent = xsdParticle.getContent();
if (xsdParticleContent instanceof XSDModelGroup)
{
XSDModelGroup xsdModelGroup = (XSDModelGroup)xsdParticleContent;
switch (xsdModelGroup.getCompositor().getValue())
{
case XSDCompositor.SEQUENCE:
case XSDCompositor.ALL:
{
return xsdModelGroup.getParticles().isEmpty();
}
case XSDCompositor.CHOICE:
{
return xsdModelGroup.getParticles().isEmpty() && xsdParticle.getMinOccurs() == 0;
}
default:
{
return false;
}
}
}
else
{
return false;
}
}
}
@Override
public void validate()
{
super.validate();
if (getComplexType() != null && getComplexType().getTerm() instanceof XSDModelGroupImpl)
{
((XSDModelGroupImpl)getComplexType().getTerm()).validateRoot();
}
Element theElement = getElement();
if (theElement != null)
{
if (getContainer() instanceof XSDElementDeclaration)
{
checkAttributes
(XSDConstants.PART1,
"element-complexType",
theElement,
new String []
{
XSDConstants.ID_ATTRIBUTE,
XSDConstants.MIXED_ATTRIBUTE
});
checkComplexContent("localComplexType", XSDConstants.PART1, "element-complexType", theElement);
}
else
{
checkAttributes
(XSDConstants.PART1,
"element-complexType",
theElement,
new String []
{
XSDConstants.ABSTRACT_ATTRIBUTE,
XSDConstants.BLOCK_ATTRIBUTE,
XSDConstants.FINAL_ATTRIBUTE,
XSDConstants.ID_ATTRIBUTE,
XSDConstants.NAME_ATTRIBUTE,
XSDConstants.MIXED_ATTRIBUTE
});
checkComplexContent("topLevelComplexType", XSDConstants.PART1, "element-complexType", theElement);
checkBuiltInTypeConstraint
("boolean",
null,
XSDConstants.PART1,
"element-complexType",
theElement,
XSDConstants.ABSTRACT_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("derivationSet",
null,
XSDConstants.PART1,
"element-complexType",
theElement,
XSDConstants.BLOCK_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("derivationSet",
null,
XSDConstants.PART1,
"element-complexType",
theElement,
XSDConstants.FINAL_ATTRIBUTE,
false);
}
checkBuiltInTypeConstraint
("ID",
null,
XSDConstants.PART1,
"element-complexType",
theElement,
XSDConstants.ID_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("boolean",
null,
XSDConstants.PART1,
"element-complexType",
theElement,
XSDConstants.MIXED_ATTRIBUTE,
false);
for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.COMPLEXCONTENT_ELEMENT:
{
Element childElement = (Element)child;
checkAttributes
(XSDConstants.PART1,
"element-complexContent",
childElement,
new String []
{
XSDConstants.ID_ATTRIBUTE,
XSDConstants.MIXED_ATTRIBUTE
});
checkElementComplexContent("complexContent", XSDConstants.PART1, "element-complexContent", childElement);
checkBuiltInTypeConstraint
("ID",
null,
XSDConstants.PART1,
"element-complexContent",
childElement,
XSDConstants.ID_ATTRIBUTE,
false);
checkBuiltInTypeConstraint
("boolean",
null,
XSDConstants.PART1,
"element-complexContent",
childElement,
XSDConstants.MIXED_ATTRIBUTE,
false);
for (Node grandChild = childElement.getFirstChild(); grandChild != null; grandChild = grandChild.getNextSibling())
{
switch (XSDConstants.nodeType(grandChild))
{
case XSDConstants.EXTENSION_ELEMENT:
{
Element grandChildElement = (Element)grandChild;
checkAttributes
(XSDConstants.PART1,
"element-complexContent::extension",
grandChildElement,
new String []
{
XSDConstants.ID_ATTRIBUTE,
XSDConstants.BASE_ATTRIBUTE
});
checkBuiltInTypeConstraint
("ID",
null,
XSDConstants.PART1,
"element-complexContent::extension",
theElement,
XSDConstants.ID_ATTRIBUTE,
false);
checkComplexContent("extensionType", XSDConstants.PART1, "element-complexContent::extension", grandChildElement);
break;
}
case XSDConstants.RESTRICTION_ELEMENT:
{
Element grandChildElement = (Element)grandChild;
checkAttributes
(XSDConstants.PART1,
"element-complexContent::restriction",
grandChildElement,
new String []
{
XSDConstants.ID_ATTRIBUTE,
XSDConstants.BASE_ATTRIBUTE
});
checkBuiltInTypeConstraint
("ID",
null,
XSDConstants.PART1,
"element-complexContent::restriction",
theElement,
XSDConstants.ID_ATTRIBUTE,
false);
checkComplexContent
("complexRestrictionType", XSDConstants.PART1, "element-complexContent::restriction", grandChildElement);
break;
}
}
}
break;
}
}
}
}
if (!(getContainer() instanceof XSDElementDeclaration))
{
checkBuiltInTypeConstraint
("NCName",
getName(),
XSDConstants.PART1,
"element-complexType",
theElement,
XSDConstants.NAME_ATTRIBUTE,
true);
}
Map<String, XSDAttributeDeclaration> prohibitedAttributeURIs = null;
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if (theBaseTypeDefinition == null)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", "");
}
else if (theBaseTypeDefinition.getContainer() == null)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", theBaseTypeDefinition.getURI());
}
else
{
XSDComplexTypeDefinition xsdComplexTypeDefinition = null;
XSDSimpleTypeDefinition xsdSimpleTypeDefinition = null;
switch (getContentTypeCategory().getValue())
{
case XSDContentTypeCategory.SIMPLE:
{
if (theBaseTypeDefinition instanceof XSDComplexTypeDefinition)
{
xsdComplexTypeDefinition = (XSDComplexTypeDefinition)theBaseTypeDefinition;
xsdSimpleTypeDefinition = xsdComplexTypeDefinition.getSimpleType();
// EATM this contradicts the more relaxed constraint of derivation-ok-restriction.5.1.2
// if (xsdSimpleTypeDefinition == null)
// {
// createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-ct.2.1", theBaseTypeDefinition.getURI());
// }
}
else
{
xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)theBaseTypeDefinition;
if (getDerivationMethod() == XSDDerivationMethod.RESTRICTION_LITERAL)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-ct.2.2", theBaseTypeDefinition.getURI());
}
// else if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
// XSDConstants.isAnySimpleType(xsdSimpleTypeDefinition))
// {
// createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-ct-retricts.0", theBaseTypeDefinition.getURI());
// }
}
break;
}
case XSDContentTypeCategory.EMPTY:
case XSDContentTypeCategory.MIXED:
case XSDContentTypeCategory.ELEMENT_ONLY:
{
if (theBaseTypeDefinition instanceof XSDComplexTypeDefinition)
{
xsdComplexTypeDefinition = (XSDComplexTypeDefinition)theBaseTypeDefinition;
}
else
{
xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)theBaseTypeDefinition;
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-ct.1", theBaseTypeDefinition.getURI());
}
break;
}
}
if (getDerivationMethod() == XSDDerivationMethod.EXTENSION_LITERAL)
{
if (xsdComplexTypeDefinition != null)
{
prohibitedAttributeURIs = getProhibitedAttributeURIs(xsdComplexTypeDefinition);
if (xsdComplexTypeDefinition.getFinal().contains(XSDComplexFinal.EXTENSION_LITERAL))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-ct-extends.1.1", theBaseTypeDefinition.getURI());
}
else
{
for (XSDAttributeUse baseXSDAttributeUse : xsdComplexTypeDefinition.getAttributeUses())
{
boolean matched = false;
XSDAttributeDeclaration baseXSDAttributeDeclaration = baseXSDAttributeUse.getAttributeDeclaration();
for (XSDAttributeUse xsdAttributeUse : getAttributeUses())
{
XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
if (xsdAttributeDeclaration.hasSameNameAndTargetNamespace(baseXSDAttributeDeclaration))
{
if (xsdAttributeDeclaration.getTypeDefinition() != baseXSDAttributeDeclaration.getTypeDefinition())
{
getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"cos-ct-extends.1.2.2",
xsdAttributeDeclaration.getURI(),
baseXSDAttributeDeclaration.getTypeDefinition().getURI());
}
matched = true;
break;
}
}
if (!matched)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"cos-ct-extends.1.2.1",
baseXSDAttributeDeclaration.getURI());
}
}
// EATM this is impossible to hit by virtue of how the wildcard is constructed.
//
XSDWildcard baseXSDWildcard = xsdComplexTypeDefinition.getAttributeWildcard();
if (baseXSDWildcard != null)
{
XSDWildcard xsdWildcard = getAttributeWildcard();
if (xsdWildcard == null || !baseXSDWildcard.isWildcardSubset(xsdWildcard))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-ct-extends.1.3");
}
}
switch (xsdComplexTypeDefinition.getContentTypeCategory().getValue())
{
case XSDContentTypeCategory.SIMPLE:
{
if (getContentType() != xsdComplexTypeDefinition.getContentType())
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"cos-ct-extends.1.4.1",
xsdComplexTypeDefinition.getSimpleType().getURI());
}
break;
}
case XSDContentTypeCategory.EMPTY:
{
break;
}
case XSDContentTypeCategory.MIXED:
case XSDContentTypeCategory.ELEMENT_ONLY:
{
// EATM problems in spec since definition ignores "mixed" attribute we can't validate it here.
//
if (getContentTypeCategory() != xsdComplexTypeDefinition.getContentTypeCategory() ||
isSetMixed() && isMixed() != xsdComplexTypeDefinition.isMixed())
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"cos-ct-extends.1.4.2.2.2.1",
xsdComplexTypeDefinition.getContentTypeCategory().toString());
}
break;
}
}
}
}
else
{
// EATM can this happen?
//
if (theBaseTypeDefinition != getContentType())
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-ct-extends.2.1");
}
// else if the base isn't final for extension, EATM but we can't test for that because it's not in the spec...
}
}
else
{
// The null cases are already diagnosed; EATM except for errors above
//
if (xsdComplexTypeDefinition != null)
{
if (xsdComplexTypeDefinition.getFinal().contains(XSDComplexFinal.RESTRICTION_LITERAL))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.1", xsdComplexTypeDefinition.getURI());
}
XSDComplexTypeDefinitionImpl.validateAttributeGroup
(this,
getAttributeWildcardContent(),
xsdComplexTypeDefinition.getAttributeUses(),
getAttributeUses(),
xsdComplexTypeDefinition.getAttributeWildcard(),
getAttributeWildcard());
if (getSimpleType() != null)
{
if (xsdSimpleTypeDefinition != null)
{
XSDTypeDefinition badType = getSimpleType().getBadTypeDerivation(xsdSimpleTypeDefinition, true, true);
if (badType != null)
{
createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"derivation-ok-restriction.5.1.1",
getSimpleType().getURI(),
xsdSimpleTypeDefinition.getURI());
}
}
else if (xsdComplexTypeDefinition.getContentTypeCategory() != XSDContentTypeCategory.MIXED_LITERAL ||
!xsdComplexTypeDefinition.getComplexType().isEmptiable())
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.5.1.2");
}
}
else if (getComplexType() == null || getContentTypeCategory() == XSDContentTypeCategory.EMPTY_LITERAL)
{
if (xsdComplexTypeDefinition.getContentTypeCategory() == XSDContentTypeCategory.SIMPLE_LITERAL ||
xsdComplexTypeDefinition.getContentTypeCategory() != XSDContentTypeCategory.EMPTY_LITERAL &&
!xsdComplexTypeDefinition.getComplexType().isEmptiable())
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.5.2");
}
}
else
{
// EATM the spec kind of trails off here without adequate diagnostics for explanation.
//
if (xsdComplexTypeDefinition.getComplexType() == null)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.5.3.1");
}
else if (getContentTypeCategory() == XSDContentTypeCategory.MIXED_LITERAL &&
xsdComplexTypeDefinition.getContentTypeCategory() != XSDContentTypeCategory.MIXED_LITERAL)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.5.3.2");
}
else if (!((XSDParticleImpl)getComplexType()).isSubset(xsdComplexTypeDefinition.getComplexType(), true))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.5.3.3");
}
}
}
}
}
XSDWildcard theAttributeWildcard = getAttributeWildcard();
if (theAttributeWildcard != null &&
theAttributeWildcard.getNamespaceConstraint().isEmpty() &&
theAttributeWildcard.getNamespaceConstraintCategory() == XSDNamespaceConstraintCategory.NOT_LITERAL)
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-ct.4");
}
if (isCircular() && !XSDConstants.isURType(this))
{
createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "ct-props-correct.3");
}
XSDAttributeDeclaration idAttribute = null;
Set<String> uris = new HashSet<String>();
for (XSDAttributeUse xsdAttributeUse : getAttributeUses())
{
XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
String uri = xsdAttributeDeclaration.getURI();
if (prohibitedAttributeURIs != null && prohibitedAttributeURIs.containsKey(uri))
{
getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-ct-extends.1.5.1", uri);
}
if (!uris.add(uri))
{
getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "ct-props-correct.4", uri);
}
if (XSDConstants.isOrIsDerivedFromID(xsdAttributeDeclaration.getTypeDefinition()))
{
if (idAttribute != null)
{
getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "ct-props-correct.5", xsdAttributeDeclaration.getURI(), idAttribute.getURI());
}
else
{
idAttribute = xsdAttributeDeclaration;
}
}
}
}
protected static Map<String, XSDAttributeDeclaration> getProhibitedAttributeURIs(XSDComplexTypeDefinition xsdComplexTypeDefinition)
{
Map<String, XSDAttributeDeclaration> result = getProhibitedAttributes(xsdComplexTypeDefinition.getAttributeContents());
if (xsdComplexTypeDefinition.getBaseTypeDefinition() instanceof XSDComplexTypeDefinition &&
!xsdComplexTypeDefinition.isCircular())
{
result.putAll
(getProhibitedAttributes
(((XSDComplexTypeDefinition)xsdComplexTypeDefinition.getBaseTypeDefinition()).getAttributeContents()));
}
return result;
}
protected static Map<String, XSDAttributeDeclaration> getProhibitedAttributes(Collection<XSDAttributeGroupContent> xsdAttributeContents)
{
Map<String, XSDAttributeDeclaration> result = new HashMap<String, XSDAttributeDeclaration>();
for (XSDAttributeGroupContent xsdAttributeGroupContent : xsdAttributeContents)
{
if (xsdAttributeGroupContent instanceof XSDAttributeGroupDefinition)
{
XSDAttributeGroupDefinition xsdAttributeGroupDefinition = (XSDAttributeGroupDefinition)xsdAttributeGroupContent;
result.putAll(getProhibitedAttributes(xsdAttributeGroupDefinition.getContents()));
}
else
{
XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)xsdAttributeGroupContent;
if (xsdAttributeUse.getUse() == XSDAttributeUseCategory.PROHIBITED_LITERAL)
{
XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
result.put(xsdAttributeDeclaration.getURI(), xsdAttributeDeclaration);
}
}
}
return result;
}
public static void validateAttributeGroup
(XSDConcreteComponentImpl xsdConcreteComponent,
XSDWildcard containedWildcard,
EList<XSDAttributeUse> baseXSDAttributeUses,
EList<XSDAttributeUse> xsdAttributeUses,
XSDWildcard baseXSDWildcard,
XSDWildcard xsdWildcard)
{
List<XSDAttributeUse> unmatchedBaseAttributeUses = new ArrayList<XSDAttributeUse>(baseXSDAttributeUses);
for (XSDAttributeUse xsdAttributeUse : xsdAttributeUses)
{
XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
boolean matched = false;
for (XSDAttributeUse baseXSDAttributeUse : baseXSDAttributeUses)
{
XSDAttributeDeclaration baseXSDAttributeDeclaration = baseXSDAttributeUse.getAttributeDeclaration();
if (xsdAttributeDeclaration.hasSameNameAndTargetNamespace(baseXSDAttributeDeclaration))
{
if (xsdAttributeDeclaration.getTypeDefinition() != null)
{
XSDTypeDefinition badType =
xsdAttributeDeclaration.getTypeDefinition().getBadTypeDerivation
(baseXSDAttributeDeclaration.getTypeDefinition(), true, true);
if (badType != null)
{
xsdConcreteComponent.getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"derivation-ok-restriction.2.1.2",
xsdAttributeDeclaration.getURI(),
baseXSDAttributeDeclaration.getTypeDefinition().getURI());
}
}
if (baseXSDAttributeUse.isRequired() && !xsdAttributeUse.isRequired())
{
xsdConcreteComponent.getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.2.1.1", xsdAttributeDeclaration.getURI());
}
unmatchedBaseAttributeUses.remove(baseXSDAttributeUse);
matched = true;
break;
}
}
if (!matched)
{
if (baseXSDWildcard == null || !baseXSDWildcard.allows(xsdAttributeDeclaration.getTargetNamespace()))
{
xsdConcreteComponent.getDiagnosticTarget(xsdAttributeUse).createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.2.2", xsdAttributeDeclaration.getURI());
}
}
}
for (XSDAttributeUse baseXSDAttributeUse : unmatchedBaseAttributeUses)
{
if (baseXSDAttributeUse.isRequired())
{
xsdConcreteComponent.createDiagnostic
(XSDDiagnosticSeverity.ERROR_LITERAL,
"derivation-ok-restriction.3",
baseXSDAttributeUse.getAttributeDeclaration().getURI());
}
}
if (xsdWildcard != null)
{
if (baseXSDWildcard == null || !xsdWildcard.isWildcardSubset(baseXSDWildcard))
{
XSDConcreteComponentImpl target = xsdConcreteComponent;
if (containedWildcard != null)
{
target = (XSDConcreteComponentImpl)containedWildcard;
}
target.createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "derivation-ok-restriction.4");
}
}
}
@Override
protected void reconcileAttributes(Element changedElement)
{
super.reconcileAttributes(changedElement);
switch (XSDConstants.nodeType(changedElement))
{
case XSDConstants.COMPLEXTYPE_ELEMENT:
{
if (changedElement.hasAttributeNS(null, XSDConstants.ABSTRACT_ATTRIBUTE))
{
String newAbstract = changedElement.getAttributeNS(null, XSDConstants.ABSTRACT_ATTRIBUTE);
setAbstract(convertToBoolean(newAbstract));
}
else
{
unsetAbstract();
}
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();
}
if (changedElement.hasAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE))
{
String newAbstract = changedElement.getAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE);
setMixed(convertToBoolean(newAbstract));
}
else
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair != null &&
contentElementPair[0] != null &&
contentElementPair[0].hasAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE))
{
String newAbstract = contentElementPair[0].getAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE);
setMixed(convertToBoolean(newAbstract));
}
else
{
unsetMixed();
}
}
break;
}
case XSDConstants.COMPLEXCONTENT_ELEMENT:
{
if (changedElement.hasAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE))
{
String newMixed = changedElement.getAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE);
setMixed(convertToBoolean(newMixed));
}
else
{
Element theElement = getElement();
if (!theElement.hasAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE))
{
unsetMixed();
}
}
break;
}
case XSDConstants.EXTENSION_ELEMENT:
case XSDConstants.RESTRICTION_ELEMENT:
{
XSDTypeDefinition newBaseTypeDefinition = getBaseTypeDefinition();
if (changedElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
{
newBaseTypeDefinition =
resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.BASE_ATTRIBUTE));
}
handleNewBaseTypeDefinition(newBaseTypeDefinition);
break;
}
}
}
protected XSDTypeDefinition handleNewBaseTypeDefinition(XSDTypeDefinition newBaseTypeDefinition)
{
if (newBaseTypeDefinition == null)
{
XSDSchema xsdSchema = getSchema();
if (xsdSchema == null)
{
Element theElement = getElement();
if (theElement != null)
{
newBaseTypeDefinition =
XSDSchemaImpl.getSchemaForSchema(theElement.getNamespaceURI()).resolveComplexTypeDefinition("anyType");
}
else
{
newBaseTypeDefinition = this;
}
}
else
{
newBaseTypeDefinition = xsdSchema.getSchemaForSchema().resolveComplexTypeDefinition("anyType");
}
}
if (eContainer instanceof XSDRedefine)
{
XSDSchema redefinedSchema = ((XSDRedefine)eContainer).getIncorporatedSchema();
if (redefinedSchema != null)
{
Map<XSDComponent, XSDComponent> redefinitionMap = ((XSDSchemaImpl)redefinedSchema).getRedefinitionMap();
if (redefinitionMap.containsKey(newBaseTypeDefinition))
{
XSDComponent replacement = redefinitionMap.get(this);
if (replacement != null)
{
newBaseTypeDefinition = (XSDTypeDefinition)replacement;
}
}
}
}
if (newBaseTypeDefinition != getBaseTypeDefinition())
{
setBaseTypeDefinition(newBaseTypeDefinition);
}
return newBaseTypeDefinition;
}
@Override
protected Node getAdoptionParentNode(EReference eReference)
{
if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT ||
eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS ||
eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT)
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair[1] != null)
{
return contentElementPair[1];
}
}
return super.getAdoptionParentNode(eReference);
}
@Override
protected Collection<Element> getContentNodes(Element changedElement)
{
Collection<Element> result = new ArrayList<Element>();
for (Node child = getElement().getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.SIMPLECONTENT_ELEMENT:
{
result.add((Element)child);
// DROP to case
}
case XSDConstants.COMPLEXCONTENT_ELEMENT:
{
for (Node grandChild = child.getFirstChild(); grandChild != null; grandChild = grandChild.getNextSibling())
{
switch (XSDConstants.nodeType(grandChild))
{
case XSDConstants.ANNOTATION_ELEMENT:
{
result.add((Element)grandChild);
break;
}
case XSDConstants.EXTENSION_ELEMENT:
case XSDConstants.RESTRICTION_ELEMENT:
{
for (Node greatGrandChild = grandChild.getFirstChild();
greatGrandChild != null;
greatGrandChild = greatGrandChild.getNextSibling())
{
switch (XSDConstants.nodeType(greatGrandChild))
{
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
case XSDConstants.ANYATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
case XSDConstants.ANNOTATION_ELEMENT:
{
result.add((Element)greatGrandChild);
break;
}
}
}
break;
}
}
}
break;
}
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
case XSDConstants.ANYATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
case XSDConstants.ANNOTATION_ELEMENT:
{
result.add((Element)child);
break;
}
}
}
return result;
}
@Override
protected void handleUnreconciledElement(Element child, List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
{
XSDParticle xsdParticle = XSDParticleImpl.createParticle(child);
if (xsdParticle != null)
{
newContents.add(xsdParticle);
}
break;
}
case XSDConstants.SIMPLECONTENT_ELEMENT:
{
XSDSimpleTypeDefinition xsdSimpleTypeDefinition = XSDSimpleTypeDefinitionImpl.createSimpleTypeDefinition(child);
if (xsdSimpleTypeDefinition != null)
{
newContents.add(xsdSimpleTypeDefinition);
}
break;
}
case XSDConstants.ATTRIBUTE_ELEMENT:
{
XSDAttributeUse xsdAttributeUse = XSDAttributeUseImpl.createAttributeUse(child);
if (xsdAttributeUse != null)
{
newContents.add(xsdAttributeUse);
}
break;
}
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
{
XSDAttributeGroupDefinition xsdAttributeGroupDefinition = XSDAttributeGroupDefinitionImpl.createAttributeGroupDefinition(child);
if (xsdAttributeGroupDefinition != null)
{
newContents.add(xsdAttributeGroupDefinition);
}
break;
}
case XSDConstants.ANYATTRIBUTE_ELEMENT:
{
XSDWildcard xsdWildcard = XSDWildcardImpl.createWildcard(child);
if (xsdWildcard != null)
{
newContents.add(xsdWildcard);
}
break;
}
case XSDConstants.ANNOTATION_ELEMENT:
{
XSDAnnotation xsdAnnotation = XSDAnnotationImpl.createAnnotation(child);
if (xsdAnnotation != null)
{
newContents.add(xsdAnnotation);
}
break;
}
}
}
@Override
protected void handleReconciliation(List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
{
handleAnnotationReconciliation(XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION, newContents, remainingContents);
handleAnnotationReconciliation(XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION, newContents, remainingContents);
handleAnnotationReconciliation(XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION, newContents, remainingContents);
XSDTypeDefinition newBaseTypeDefinition = null;
XSDComplexTypeContent newContent = null;
if (!newContents.isEmpty() && newContents.get(0) instanceof XSDComplexTypeContent)
{
newContent = (XSDComplexTypeContent)newContents.get(0);
newContents.remove(0);
}
if (newContent != getContent())
{
remainingContents.remove(getContent());
setContent(newContent);
}
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())
{
getAttributeContents().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(getAttributeContents(), list);
}
XSDDerivationMethod newDerivationMethod = null;
Element theElement = getElement();
LOOP:
for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
{
int childNodeType = XSDConstants.nodeType(child);
switch (childNodeType)
{
case XSDConstants.SIMPLECONTENT_ELEMENT:
case XSDConstants.COMPLEXCONTENT_ELEMENT:
{
for (Node grandChild = child.getFirstChild(); grandChild != null; grandChild = grandChild.getNextSibling())
{
int grandChildNodeType = XSDConstants.nodeType(grandChild);
switch (grandChildNodeType)
{
case XSDConstants.EXTENSION_ELEMENT:
case XSDConstants.RESTRICTION_ELEMENT:
{
newDerivationMethod =
grandChildNodeType == XSDConstants.EXTENSION_ELEMENT ?
XSDDerivationMethod.EXTENSION_LITERAL :
XSDDerivationMethod.RESTRICTION_LITERAL;
Element elementGrandChild = (Element)grandChild;
if (elementGrandChild.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
{
newBaseTypeDefinition =
resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(elementGrandChild, XSDConstants.BASE_ATTRIBUTE));
}
break LOOP;
}
}
}
break LOOP;
}
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
{
break LOOP;
}
}
}
handleNewBaseTypeDefinition(newBaseTypeDefinition);
if (newDerivationMethod == null)
{
unsetDerivationMethod();
}
else if (!isSetDerivationMethod() || newDerivationMethod != getDerivationMethod())
{
setDerivationMethod(newDerivationMethod);
}
}
@Override
protected void changeAttribute(EAttribute eAttribute)
{
super.changeAttribute(eAttribute);
Element theElement = getElement();
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ABSTRACT)
{
if (theElement != null)
{
niceSetAttribute(theElement, XSDConstants.ABSTRACT_ATTRIBUTE, isSetAbstract() ? isAbstract() ? "true" : "false" : null);
}
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__MIXED)
{
if (theElement != null)
{
Element targetElement = theElement;
if (!theElement.hasAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE))
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair != null &&
contentElementPair[0] != null &&
contentElementPair[0].hasAttributeNS(null, XSDConstants.MIXED_ATTRIBUTE))
{
targetElement = contentElementPair[0];
}
}
niceSetAttribute(targetElement, XSDConstants.MIXED_ATTRIBUTE, isSetMixed() ? isMixed() ? "true" : "false" : null);
}
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__LEXICAL_FINAL)
{
if (theElement != null)
{
niceSetAttribute
(theElement,
XSDConstants.FINAL_ATTRIBUTE,
getStringLexicalFinal());
}
if (eAttribute != null)
{
traverseToRootForPatching();
}
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__BLOCK)
{
if (theElement != null)
{
niceSetAttribute
(theElement,
XSDConstants.BLOCK_ATTRIBUTE,
getStringBlock());
}
if (eAttribute != null)
{
traverseToRootForPatching();
}
}
if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD)
{
if (theElement != null && !isReconciling && (eAttribute == null || !abbreviate()))
{
Element [] contentElementPair = findOrCreateContentElementPair();
if (contentElementPair[1] != null &&
isSetDerivationMethod() &&
!contentElementPair[1].getLocalName().equals(getDerivationMethod().getName()))
{
Element newElement = createDerivationElement();
forceReplace(newElement, contentElementPair[1]);
}
}
}
}
@Override
protected void changeReference(EReference eReference)
{
super.changeReference(eReference);
Element theElement = getElement();
if (eReference == null || eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION)
{
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if (theElement != null && !isReconciling && (eReference == null || !abbreviate()))
{
Element [] contentElementPair = findOrCreateContentElementPair();
if (contentElementPair[1] != null)
{
XSDSimpleTypeDefinitionImpl theSimpleType = (XSDSimpleTypeDefinitionImpl)getSimpleType();
if (theSimpleType != null)
{
theSimpleType.updatingDOM = true;
}
niceSetAttributeURIValue
(contentElementPair[1],
XSDConstants.BASE_ATTRIBUTE,
theBaseTypeDefinition == null ?
theElement.getNamespaceURI() + "#anyType" :
theBaseTypeDefinition.getURI());
if (theSimpleType != null)
{
theSimpleType.updatingDOM = false;
}
}
}
}
}
protected boolean abbreviate()
{
Element theElement = getElement();
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if ((theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)) &&
XSDDerivationMethod.EXTENSION_LITERAL != getDerivationMethod() &&
!(getContent() instanceof XSDSimpleTypeDefinition) &&
getDerivationAnnotation() == null &&
getContentAnnotation() == null)
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair[1] != null)
{
for (Node child = contentElementPair[1].getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
case XSDConstants.ANYATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
{
forceEngulf(child, theElement, null);
niceRemoveChild(theElement, contentElementPair[0]);
return true;
}
}
}
}
}
return false;
}
protected Element [] findOrCreateContentElementPair()
{
Element theElement = getElement();
if (theElement != null && !isReconciling)
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair[0] == null || contentElementPair[1] == null)
{
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if (((theBaseTypeDefinition != null && !XSDConstants.isURType(theBaseTypeDefinition)) ||
XSDDerivationMethod.EXTENSION_LITERAL == getDerivationMethod()) &&
!(getContent() instanceof XSDSimpleTypeDefinition))
{
contentElementPair = createContentElementPair();
Node startingNode = theElement.getFirstChild();
for (Node child = startingNode; child != null; child = child.getNextSibling())
{
if (XSDConstants.nodeType(child) == XSDConstants.ANNOTATION_ELEMENT)
{
startingNode = child.getNextSibling();
}
}
forceEngulf(contentElementPair[0], contentElementPair[1], theElement, startingNode);
changeReference(XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION);
}
}
return contentElementPair;
}
else
{
return null;
}
}
protected Element [] getContentElementPair()
{
Element theElement = getElement();
if (theElement != null)
{
Element [] result = new Element [2];
LOOP:
for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.SIMPLECONTENT_ELEMENT:
case XSDConstants.COMPLEXCONTENT_ELEMENT:
{
result[0] = (Element)child;
for (Node grandChild = child.getFirstChild(); grandChild != null; grandChild = grandChild.getNextSibling())
{
switch (XSDConstants.nodeType(grandChild))
{
case XSDConstants.EXTENSION_ELEMENT:
case XSDConstants.RESTRICTION_ELEMENT:
{
result[1] = (Element)grandChild;
break LOOP;
}
}
}
break LOOP;
}
}
}
return result;
}
else
{
return null;
}
}
@Override
protected void adoptContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
{
Node firstAdoptee = null;
if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT)
{
if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair != null)
{
if (contentElementPair[0] != null)
{
if (XSDConstants.nodeType(contentElementPair[0]) == XSDConstants.COMPLEXCONTENT_ELEMENT)
{
niceRemoveChild(getElement(), contentElementPair[0]);
}
if (contentElementPair[1] != null)
{
for (Node child = contentElementPair[1].getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
case XSDConstants.ANYATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
{
firstAdoptee = child;
break;
}
}
}
}
}
}
}
}
super.adoptContent(eReference, xsdConcreteComponent);
if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT)
{
Element theElement = getElement();
if (theElement != null && !isReconciling)
{
if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
{
changeReference(XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION);
}
Element [] contentElementPair = getContentElementPair();
if (contentElementPair != null && contentElementPair[1] != null)
{
if (firstAdoptee == null)
{
for (Node child = getElement().getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
case XSDConstants.ANYATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
{
firstAdoptee = child;
break;
}
}
}
}
if (firstAdoptee != null)
{
forceEngulf(firstAdoptee, contentElementPair[1], null);
}
}
}
traverseToRootForPatching();
}
else if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS)
{
traverseToRootForPatching();
}
else if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT)
{
traverseToRootForPatching();
}
else if (eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION)
{
getAnnotations().add(0, (XSDAnnotation)xsdConcreteComponent);
}
else if (eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION)
{
getAnnotations().add(getAnnotation() == null ? 0 : 1, (XSDAnnotation)xsdConcreteComponent);
}
else if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION)
{
getAnnotations().add((XSDAnnotation)xsdConcreteComponent);
}
}
@Override
protected void orphanContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
{
Node firstAdoptee = null;
if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT)
{
if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
{
Element [] contentElementPair = getContentElementPair();
if (contentElementPair != null)
{
if (contentElementPair[1] != null)
{
for (Node child = contentElementPair[1].getFirstChild(); child != null; child = child.getNextSibling())
{
switch (XSDConstants.nodeType(child))
{
case XSDConstants.GROUP_ELEMENT:
case XSDConstants.ALL_ELEMENT:
case XSDConstants.CHOICE_ELEMENT:
case XSDConstants.SEQUENCE_ELEMENT:
case XSDConstants.ANYATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTE_ELEMENT:
case XSDConstants.ATTRIBUTEGROUP_ELEMENT:
{
firstAdoptee = child;
break;
}
}
}
}
}
}
}
super.orphanContent(eReference, xsdConcreteComponent);
if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT)
{
if (firstAdoptee != null)
{
Element theElement = getElement();
if (theElement != null && !isReconciling)
{
Element [] contentElementPair = findOrCreateContentElementPair();
if (contentElementPair != null && contentElementPair[1] != null)
{
forceEngulf(firstAdoptee, contentElementPair[1], null);
}
else
{
forceEngulf(firstAdoptee, theElement, null);
}
}
}
traverseToRootForPatching();
}
else if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS)
{
traverseToRootForPatching();
}
else if (eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT)
{
traverseToRootForPatching();
}
else if (eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION ||
eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION ||
eReference == XSDPackage.Literals.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION)
{
getAnnotations().remove(xsdConcreteComponent);
}
}
@Override
public XSDTypeDefinition getBaseType()
{
return getBaseTypeDefinition();
}
@Override
public XSDTypeDefinition getRootType()
{
return getRootTypeDefinition();
}
public XSDTypeDefinition getRootTypeDefinition()
{
XSDTypeDefinition result = this;
if (!isCircular())
{
for (XSDTypeDefinition theBaseType= result.getBaseType();
theBaseType!= null && !XSDConstants.isURType(theBaseType);
theBaseType = theBaseType.getBaseType())
{
result = theBaseType;
}
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public XSDParticle getSyntheticParticle()
{
return syntheticParticle;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetSyntheticParticle(XSDParticle newSyntheticParticle, NotificationChain msgs)
{
XSDParticle oldSyntheticParticle = syntheticParticle;
syntheticParticle = newSyntheticParticle;
if (eNotificationRequired())
{
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE, oldSyntheticParticle, newSyntheticParticle);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setSyntheticParticle(XSDParticle newSyntheticParticle)
{
if (newSyntheticParticle != syntheticParticle)
{
NotificationChain msgs = null;
if (syntheticParticle != null)
msgs = ((InternalEObject)syntheticParticle).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE, null, msgs);
if (newSyntheticParticle != null)
msgs = ((InternalEObject)newSyntheticParticle).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE, null, msgs);
msgs = basicSetSyntheticParticle(newSyntheticParticle, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE, newSyntheticParticle, newSyntheticParticle));
}
/**
* <!-- 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_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__SYNTHETIC_WILDCARD, null, msgs);
if (newSyntheticWildcard != null)
msgs = ((InternalEObject)newSyntheticWildcard).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - XSDPackage.XSD_COMPLEX_TYPE_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_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION:
return basicSetContentAnnotation(null, msgs);
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT:
return basicSetContent(null, msgs);
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS:
return ((InternalEList<?>)getAttributeContents()).basicRemove(otherEnd, msgs);
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
return basicSetAttributeWildcardContent(null, msgs);
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE:
return basicSetSyntheticParticle(null, msgs);
case XSDPackage.XSD_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD:
return getDerivationMethod();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__FINAL:
return getFinal();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ABSTRACT:
return isAbstract();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE_CATEGORY:
return getContentTypeCategory();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__PROHIBITED_SUBSTITUTIONS:
return getProhibitedSubstitutions();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__LEXICAL_FINAL:
return getLexicalFinal();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BLOCK:
return getBlock();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__MIXED:
return isMixed();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION:
return getContentAnnotation();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
return getBaseTypeDefinition();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT:
return getContent();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE:
return getContentType();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_USES:
return getAttributeUses();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS:
return getAttributeContents();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD:
return getAttributeWildcard();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
return getAttributeWildcardContent();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ROOT_TYPE_DEFINITION:
return getRootTypeDefinition();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE:
return getSyntheticParticle();
case XSDPackage.XSD_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD:
setDerivationMethod((XSDDerivationMethod)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__FINAL:
getFinal().clear();
getFinal().addAll((Collection<? extends XSDComplexFinal>)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ABSTRACT:
setAbstract((Boolean)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE_CATEGORY:
setContentTypeCategory((XSDContentTypeCategory)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__PROHIBITED_SUBSTITUTIONS:
getProhibitedSubstitutions().clear();
getProhibitedSubstitutions().addAll((Collection<? extends XSDProhibitedSubstitutions>)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__LEXICAL_FINAL:
getLexicalFinal().clear();
getLexicalFinal().addAll((Collection<? extends XSDComplexFinal>)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BLOCK:
getBlock().clear();
getBlock().addAll((Collection<? extends XSDProhibitedSubstitutions>)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__MIXED:
setMixed((Boolean)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION:
setContentAnnotation((XSDAnnotation)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
setBaseTypeDefinition((XSDTypeDefinition)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT:
setContent((XSDComplexTypeContent)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE:
setContentType((XSDComplexTypeContent)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_USES:
getAttributeUses().clear();
getAttributeUses().addAll((Collection<? extends XSDAttributeUse>)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS:
getAttributeContents().clear();
getAttributeContents().addAll((Collection<? extends XSDAttributeGroupContent>)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD:
setAttributeWildcard((XSDWildcard)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
setAttributeWildcardContent((XSDWildcard)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE:
setSyntheticParticle((XSDParticle)newValue);
return;
case XSDPackage.XSD_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD:
unsetDerivationMethod();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__FINAL:
getFinal().clear();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ABSTRACT:
unsetAbstract();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE_CATEGORY:
setContentTypeCategory(CONTENT_TYPE_CATEGORY_EDEFAULT);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__PROHIBITED_SUBSTITUTIONS:
getProhibitedSubstitutions().clear();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__LEXICAL_FINAL:
unsetLexicalFinal();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BLOCK:
unsetBlock();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__MIXED:
unsetMixed();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION:
setContentAnnotation((XSDAnnotation)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
setBaseTypeDefinition((XSDTypeDefinition)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT:
setContent((XSDComplexTypeContent)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE:
setContentType((XSDComplexTypeContent)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_USES:
getAttributeUses().clear();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS:
getAttributeContents().clear();
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD:
setAttributeWildcard((XSDWildcard)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
setAttributeWildcardContent((XSDWildcard)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE:
setSyntheticParticle((XSDParticle)null);
return;
case XSDPackage.XSD_COMPLEX_TYPE_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_COMPLEX_TYPE_DEFINITION__DERIVATION_METHOD:
return isSetDerivationMethod();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__FINAL:
return final_ != null && !final_.isEmpty();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ABSTRACT:
return isSetAbstract();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE_CATEGORY:
return (eFlags & CONTENT_TYPE_CATEGORY_EFLAG) != CONTENT_TYPE_CATEGORY_EFLAG_DEFAULT;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__PROHIBITED_SUBSTITUTIONS:
return prohibitedSubstitutions != null && !prohibitedSubstitutions.isEmpty();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__LEXICAL_FINAL:
return isSetLexicalFinal();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BLOCK:
return isSetBlock();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__MIXED:
return isSetMixed();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_ANNOTATION:
return contentAnnotation != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
return baseTypeDefinition != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT:
return content != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__CONTENT_TYPE:
return contentType != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_USES:
return attributeUses != null && !attributeUses.isEmpty();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_CONTENTS:
return attributeContents != null && !attributeContents.isEmpty();
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD:
return attributeWildcard != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ATTRIBUTE_WILDCARD_CONTENT:
return attributeWildcardContent != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__ROOT_TYPE_DEFINITION:
return getRootTypeDefinition() != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_PARTICLE:
return syntheticParticle != null;
case XSDPackage.XSD_COMPLEX_TYPE_DEFINITION__SYNTHETIC_WILDCARD:
return syntheticWildcard != null;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString()
{
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (derivationMethod: ");
if ((eFlags & DERIVATION_METHOD_ESETFLAG) != 0) result.append(DERIVATION_METHOD_EFLAG_VALUES[(eFlags & DERIVATION_METHOD_EFLAG) >>> DERIVATION_METHOD_EFLAG_OFFSET]); else result.append("<unset>");
result.append(", final: ");
result.append(final_);
result.append(", abstract: ");
if ((eFlags & ABSTRACT_ESETFLAG) != 0) result.append((eFlags & ABSTRACT_EFLAG) != 0); else result.append("<unset>");
result.append(", contentTypeCategory: ");
result.append(CONTENT_TYPE_CATEGORY_EFLAG_VALUES[(eFlags & CONTENT_TYPE_CATEGORY_EFLAG) >>> CONTENT_TYPE_CATEGORY_EFLAG_OFFSET]);
result.append(", prohibitedSubstitutions: ");
result.append(prohibitedSubstitutions);
result.append(", lexicalFinal: ");
result.append(lexicalFinal);
result.append(", block: ");
result.append(block);
result.append(", mixed: ");
if ((eFlags & MIXED_ESETFLAG) != 0) result.append((eFlags & MIXED_EFLAG) != 0); else result.append("<unset>");
result.append(')');
return result.toString();
}
@Override
public XSDSimpleTypeDefinition getSimpleType()
{
return
getContentType() instanceof XSDSimpleTypeDefinition ?
(XSDSimpleTypeDefinition)getContentType() :
null;
}
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<XSDComplexFinal> newLexicalFinal = new ArrayList<XSDComplexFinal>();
for (StringTokenizer stringTokenizer = new StringTokenizer(finalDefault); stringTokenizer.hasMoreTokens(); )
{
String token = stringTokenizer.nextToken();
if (token.equals("#all"))
{
token = "all";
}
XSDComplexFinal literal = XSDComplexFinal.get(token);
if (literal != null)
{
newLexicalFinal.add(literal);
}
}
if (!newLexicalFinal.equals(getLexicalFinal()))
{
Collection<XSDComplexFinal> oldContents = new ArrayList<XSDComplexFinal>(getLexicalFinal());
oldContents.removeAll(newLexicalFinal);
if (!oldContents.isEmpty())
{
getLexicalFinal().removeAll(oldContents);
}
setListContentAndOrder(getLexicalFinal(), newLexicalFinal);
}
else if (newLexicalFinal.isEmpty() && !isSetLexicalFinal())
{
getLexicalFinal().clear();
}
}
}
public String getStringFinal()
{
StringBuffer result = new StringBuffer();
for (Object literal : getFinal())
{
if (result.length() != 0)
{
result.append(' ');
}
result.append(literal);
}
return result.toString();
}
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<XSDProhibitedSubstitutions> newBlock = new ArrayList<XSDProhibitedSubstitutions>();
for (StringTokenizer stringTokenizer = new StringTokenizer(block); stringTokenizer.hasMoreTokens(); )
{
String token = stringTokenizer.nextToken();
if (token.equals("#all"))
{
token = "all";
}
XSDProhibitedSubstitutions literal = XSDProhibitedSubstitutions.get(token);
if (literal != null)
{
newBlock.add(literal);
}
}
if (!newBlock.equals(getBlock()))
{
Collection<XSDProhibitedSubstitutions> oldContents = new ArrayList<XSDProhibitedSubstitutions>(getBlock());
oldContents.removeAll(newBlock);
if (!oldContents.isEmpty())
{
getBlock().removeAll(oldContents);
}
setListContentAndOrder(getBlock(), newBlock);
}
else if (newBlock.isEmpty() && !isSetBlock())
{
getBlock().clear();
}
}
}
public String getStringProhibitedSubstitutions()
{
StringBuffer result = new StringBuffer();
for (Object literal : getProhibitedSubstitutions())
{
if (result.length() != 0)
{
result.append(' ');
}
result.append(literal);
}
return result.toString();
}
@Override
public XSDTypeDefinition getBadTypeDerivation(XSDTypeDefinition xsdTypeDefinition, boolean extension, boolean restriction)
{
if (xsdTypeDefinition == this || isCircular())
{
return null;
}
else if (getDerivationMethod() == XSDDerivationMethod.EXTENSION_LITERAL ? !extension : !restriction)
{
return this;
}
else
{
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
if (xsdTypeDefinition == theBaseTypeDefinition)
{
return null;
}
else if (theBaseTypeDefinition == null)
{
return this;
}
else if (XSDConstants.isURType(theBaseTypeDefinition))
{
return theBaseTypeDefinition;
}
else
{
return theBaseTypeDefinition.getBadTypeDerivation(xsdTypeDefinition, extension, restriction);
}
}
}
@Override
public XSDConcreteComponent cloneConcreteComponent(boolean deep, boolean shareDOM)
{
XSDComplexTypeDefinitionImpl clonedComplexTypeDefinition =
(XSDComplexTypeDefinitionImpl)getXSDFactory().createXSDComplexTypeDefinition();
clonedComplexTypeDefinition.isReconciling = true;
if (getName() != null)
{
clonedComplexTypeDefinition.setName(getName());
}
if (isSetMixed())
{
clonedComplexTypeDefinition.setMixed(isMixed());
}
if (isSetDerivationMethod())
{
clonedComplexTypeDefinition.setDerivationMethod(getDerivationMethod());
}
if (isSetAbstract())
{
clonedComplexTypeDefinition.setAbstract(isAbstract());
}
if (isSetBlock())
{
if (!getBlock().isEmpty())
{
clonedComplexTypeDefinition.getBlock().addAll(getBlock());
}
else
{
clonedComplexTypeDefinition.getBlock().clear();
}
}
if (isSetLexicalFinal())
{
if (!getLexicalFinal().isEmpty())
{
clonedComplexTypeDefinition.getLexicalFinal().addAll(getLexicalFinal());
}
else
{
clonedComplexTypeDefinition.getLexicalFinal().clear();
}
}
if (getBaseTypeDefinition() != null)
{
XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
clonedComplexTypeDefinition.setBaseTypeDefinition
(createUnresolvedTypeDefinition
(theBaseTypeDefinition.getTargetNamespace(), theBaseTypeDefinition.getName()));
}
if (deep)
{
if (getAnnotation() != null)
{
clonedComplexTypeDefinition.setAnnotation((XSDAnnotation)getAnnotation().cloneConcreteComponent(deep, shareDOM));
}
if (getDerivationAnnotation() != null)
{
clonedComplexTypeDefinition.setDerivationAnnotation
((XSDAnnotation)getDerivationAnnotation().cloneConcreteComponent(deep, shareDOM));
}
if (getContentAnnotation() != null)
{
clonedComplexTypeDefinition.setContentAnnotation((XSDAnnotation)getContentAnnotation().cloneConcreteComponent(deep, shareDOM));
}
if (getContent() != null)
{
clonedComplexTypeDefinition.setContent((XSDComplexTypeContent)getContent().cloneConcreteComponent(deep, shareDOM));
}
if (!getAttributeContents().isEmpty())
{
clonedComplexTypeDefinition.getAttributeContents().addAll(cloneConcreteComponents(getAttributeContents(), deep, shareDOM));
}
if (getAttributeWildcardContent() != null)
{
clonedComplexTypeDefinition.setAttributeWildcardContent
((XSDWildcard)getAttributeWildcardContent().cloneConcreteComponent(deep, shareDOM));
}
}
if (shareDOM && getElement() != null)
{
clonedComplexTypeDefinition.setElement(getElement());
}
clonedComplexTypeDefinition.isReconciling = shareDOM;
return clonedComplexTypeDefinition;
}
}