[368320] Eliminate warnings
diff --git a/plugins/org.eclipse.xsd/src/org/eclipse/xsd/impl/XSDSimpleTypeDefinitionImpl.java b/plugins/org.eclipse.xsd/src/org/eclipse/xsd/impl/XSDSimpleTypeDefinitionImpl.java
index f29fc08..7d562ba 100644
--- a/plugins/org.eclipse.xsd/src/org/eclipse/xsd/impl/XSDSimpleTypeDefinitionImpl.java
+++ b/plugins/org.eclipse.xsd/src/org/eclipse/xsd/impl/XSDSimpleTypeDefinitionImpl.java
@@ -1,4293 +1,4291 @@
-/**
- * Copyright (c) 2002-2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 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.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-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.BasicEList;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.UniqueEList;
-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.EcoreEList;
-import org.eclipse.emf.ecore.util.InternalEList;
-
-import org.eclipse.xsd.XSDAnnotation;
-import org.eclipse.xsd.XSDBoundedFacet;
-import org.eclipse.xsd.XSDCardinality;
-import org.eclipse.xsd.XSDCardinalityFacet;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDComponent;
-import org.eclipse.xsd.XSDConcreteComponent;
-import org.eclipse.xsd.XSDConstrainingFacet;
-import org.eclipse.xsd.XSDDerivationMethod;
-import org.eclipse.xsd.XSDDiagnostic;
-import org.eclipse.xsd.XSDDiagnosticSeverity;
-import org.eclipse.xsd.XSDEnumerationFacet;
-import org.eclipse.xsd.XSDFacet;
-import org.eclipse.xsd.XSDFactory;
-import org.eclipse.xsd.XSDFeature;
-import org.eclipse.xsd.XSDFractionDigitsFacet;
-import org.eclipse.xsd.XSDFundamentalFacet;
-import org.eclipse.xsd.XSDLengthFacet;
-import org.eclipse.xsd.XSDMaxExclusiveFacet;
-import org.eclipse.xsd.XSDMaxFacet;
-import org.eclipse.xsd.XSDMaxInclusiveFacet;
-import org.eclipse.xsd.XSDMaxLengthFacet;
-import org.eclipse.xsd.XSDMinExclusiveFacet;
-import org.eclipse.xsd.XSDMinFacet;
-import org.eclipse.xsd.XSDMinInclusiveFacet;
-import org.eclipse.xsd.XSDMinLengthFacet;
-import org.eclipse.xsd.XSDNumericFacet;
-import org.eclipse.xsd.XSDOrdered;
-import org.eclipse.xsd.XSDOrderedFacet;
-import org.eclipse.xsd.XSDPackage;
-import org.eclipse.xsd.XSDParticle;
-import org.eclipse.xsd.XSDPatternFacet;
-import org.eclipse.xsd.XSDPlugin;
-import org.eclipse.xsd.XSDProhibitedSubstitutions;
-import org.eclipse.xsd.XSDRedefine;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSimpleFinal;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-import org.eclipse.xsd.XSDTotalDigitsFacet;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.eclipse.xsd.XSDVariety;
-import org.eclipse.xsd.XSDWhiteSpaceFacet;
-import org.eclipse.xsd.impl.type.XSDAnySimpleType;
-import org.eclipse.xsd.impl.type.XSDTypeRegister;
-import org.eclipse.xsd.util.XSDConstants;
-
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Simple Type Definition</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getVariety <em>Variety</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFinal <em>Final</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getLexicalFinal <em>Lexical Final</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getValidFacets <em>Valid Facets</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getContents <em>Contents</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFacetContents <em>Facet Contents</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFacets <em>Facets</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMemberTypeDefinitions <em>Member Type Definitions</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFundamentalFacets <em>Fundamental Facets</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getBaseTypeDefinition <em>Base Type Definition</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getPrimitiveTypeDefinition <em>Primitive Type Definition</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getItemTypeDefinition <em>Item Type Definition</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getRootTypeDefinition <em>Root Type Definition</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinFacet <em>Min Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxFacet <em>Max Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxInclusiveFacet <em>Max Inclusive Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinInclusiveFacet <em>Min Inclusive Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinExclusiveFacet <em>Min Exclusive Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxExclusiveFacet <em>Max Exclusive Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getLengthFacet <em>Length Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getWhiteSpaceFacet <em>White Space Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEnumerationFacets <em>Enumeration Facets</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getPatternFacets <em>Pattern Facets</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getCardinalityFacet <em>Cardinality Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getNumericFacet <em>Numeric Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxLengthFacet <em>Max Length Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinLengthFacet <em>Min Length Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getTotalDigitsFacet <em>Total Digits Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFractionDigitsFacet <em>Fraction Digits Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getOrderedFacet <em>Ordered Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getBoundedFacet <em>Bounded Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMaxFacet <em>Effective Max Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveWhiteSpaceFacet <em>Effective White Space Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMaxLengthFacet <em>Effective Max Length Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveFractionDigitsFacet <em>Effective Fraction Digits Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectivePatternFacet <em>Effective Pattern Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveEnumerationFacet <em>Effective Enumeration Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveTotalDigitsFacet <em>Effective Total Digits Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMinLengthFacet <em>Effective Min Length Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveLengthFacet <em>Effective Length Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMinFacet <em>Effective Min Facet</em>}</li>
- * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getSyntheticFacets <em>Synthetic Facets</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class XSDSimpleTypeDefinitionImpl
- extends XSDTypeDefinitionImpl
- implements XSDSimpleTypeDefinition
-{
- /**
- * The default value of the '{@link #getVariety() <em>Variety</em>}' attribute.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getVariety()
- * @generated
- * @ordered
- */
- protected static final XSDVariety VARIETY_EDEFAULT = XSDVariety.ATOMIC_LITERAL;
-
- /**
- * The offset of the flags representing the value of the '{@link #getVariety() <em>Variety</em>}' attribute.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- * @ordered
- */
- protected static final int VARIETY_EFLAG_OFFSET = 8;
-
- /**
- * The flags representing the default value of the '{@link #getVariety() <em>Variety</em>}' attribute.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- * @ordered
- */
- protected static final int VARIETY_EFLAG_DEFAULT = VARIETY_EDEFAULT.ordinal() << VARIETY_EFLAG_OFFSET;
-
- /**
- * The array of enumeration values for '{@link XSDVariety Variety}'
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- * @ordered
- */
- private static final XSDVariety[] VARIETY_EFLAG_VALUES = XSDVariety.values();
-
- /**
- * The flags representing the value of the '{@link #getVariety() <em>Variety</em>}' attribute.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getVariety()
- * @generated
- * @ordered
- */
- protected static final int VARIETY_EFLAG = 0x3 << VARIETY_EFLAG_OFFSET;
-
- /**
- * The flag representing whether the Variety attribute has been set.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- * @ordered
- */
- protected static final int VARIETY_ESETFLAG = 1 << 10;
-
- /**
- * The cached value of the '{@link #getFinal() <em>Final</em>}' attribute list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getFinal()
- * @generated
- * @ordered
- */
- protected EList<XSDSimpleFinal> final_;
-
- /**
- * 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<XSDSimpleFinal> lexicalFinal;
-
- /**
- * The cached value of the '{@link #getValidFacets() <em>Valid Facets</em>}' attribute list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getValidFacets()
- * @generated
- * @ordered
- */
- protected EList<String> validFacets;
-
- /**
- * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getContents()
- * @generated
- * @ordered
- */
- protected EList<XSDSimpleTypeDefinition> contents;
-
- /**
- * The cached value of the '{@link #getFacetContents() <em>Facet Contents</em>}' containment reference list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getFacetContents()
- * @generated NOT
- * @ordered
- */
- protected EcoreEList<XSDConstrainingFacet> facetContents = null;
-
- /**
- * The cached value of the '{@link #getFacets() <em>Facets</em>}' reference list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getFacets()
- * @generated NOT
- * @ordered
- */
- protected EcoreEList<XSDConstrainingFacet> facets = null;
-
- /**
- * The cached value of the '{@link #getMemberTypeDefinitions() <em>Member Type Definitions</em>}' reference list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getMemberTypeDefinitions()
- * @generated
- * @ordered
- */
- protected EList<XSDSimpleTypeDefinition> memberTypeDefinitions;
-
- /**
- * The cached value of the '{@link #getFundamentalFacets() <em>Fundamental Facets</em>}' containment reference list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getFundamentalFacets()
- * @generated
- * @ordered
- */
- protected EList<XSDFundamentalFacet> fundamentalFacets;
-
- /**
- * The cached value of the '{@link #getBaseTypeDefinition() <em>Base Type Definition</em>}' reference.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getBaseTypeDefinition()
- * @generated
- * @ordered
- */
- protected XSDSimpleTypeDefinition baseTypeDefinition;
-
- /**
- * The cached value of the '{@link #getPrimitiveTypeDefinition() <em>Primitive Type Definition</em>}' reference.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getPrimitiveTypeDefinition()
- * @generated
- * @ordered
- */
- protected XSDSimpleTypeDefinition primitiveTypeDefinition;
-
- /**
- * The cached value of the '{@link #getItemTypeDefinition() <em>Item Type Definition</em>}' reference.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getItemTypeDefinition()
- * @generated
- * @ordered
- */
- protected XSDSimpleTypeDefinition itemTypeDefinition;
-
- /**
- * The cached value of the '{@link #getSyntheticFacets() <em>Synthetic Facets</em>}' containment reference list.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @see #getSyntheticFacets()
- * @generated
- * @ordered
- */
- protected EList<XSDFacet> syntheticFacets;
-
- public static XSDSimpleTypeDefinition createSimpleTypeDefinition(Node node)
- {
- switch (XSDConstants.nodeType(node))
- {
- case XSDConstants.SIMPLETYPE_ELEMENT:
- case XSDConstants.SIMPLECONTENT_ELEMENT:
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = XSDFactory.eINSTANCE.createXSDSimpleTypeDefinition();
- xsdSimpleTypeDefinition.setElement((Element)node);
- return xsdSimpleTypeDefinition;
- }
- }
-
- return null;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected XSDSimpleTypeDefinitionImpl()
- {
- super();
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- protected EClass eStaticClass()
- {
- return XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public XSDVariety getVariety()
- {
- return VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET];
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public void setVariety(XSDVariety newVariety)
- {
- XSDVariety oldVariety = VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET];
- if (newVariety == null) newVariety = VARIETY_EDEFAULT;
- eFlags = eFlags & ~VARIETY_EFLAG | newVariety.ordinal() << VARIETY_EFLAG_OFFSET;
- boolean oldVarietyESet = (eFlags & VARIETY_ESETFLAG) != 0;
- eFlags |= VARIETY_ESETFLAG;
- if (eNotificationRequired())
- eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY, oldVariety, newVariety, !oldVarietyESet));
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public void unsetVariety()
- {
- XSDVariety oldVariety = VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET];
- boolean oldVarietyESet = (eFlags & VARIETY_ESETFLAG) != 0;
- eFlags = eFlags & ~VARIETY_EFLAG | VARIETY_EFLAG_DEFAULT;
- eFlags &= ~VARIETY_ESETFLAG;
- if (eNotificationRequired())
- eNotify(new ENotificationImpl(this, Notification.UNSET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY, oldVariety, VARIETY_EDEFAULT, oldVarietyESet));
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public boolean isSetVariety()
- {
- return (eFlags & VARIETY_ESETFLAG) != 0;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDSimpleFinal> getFinal()
- {
- if (final_ == null)
- {
- final_ = new EDataTypeUniqueEList<XSDSimpleFinal>(XSDSimpleFinal.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL);
- }
- return final_;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDSimpleFinal> getLexicalFinal()
- {
- if (lexicalFinal == null)
- {
- lexicalFinal = new EDataTypeUniqueEList.Unsettable<XSDSimpleFinal>(XSDSimpleFinal.class, this, XSDPackage.XSD_SIMPLE_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<String> getValidFacets()
- {
- if (validFacets == null)
- {
- validFacets = new EDataTypeUniqueEList<String>(String.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS);
- }
- return validFacets;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDSimpleTypeDefinition> getContents()
- {
- if (contents == null)
- {
- contents = new EObjectContainmentEList<XSDSimpleTypeDefinition>(XSDSimpleTypeDefinition.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS);
- }
- return contents;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDConstrainingFacet> getFacetContents()
- {
- if (facetContents == null)
- {
- facetContents = new EObjectContainmentEList<XSDConstrainingFacet>(XSDConstrainingFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS);
- }
- return facetContents;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDConstrainingFacet> getFacets()
- {
- if (facets == null)
- {
- facets = new EObjectEList<XSDConstrainingFacet>(XSDConstrainingFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS);
- }
- return facets;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDSimpleTypeDefinition> getMemberTypeDefinitions()
- {
- if (memberTypeDefinitions == null)
- {
- memberTypeDefinitions = new EObjectEList<XSDSimpleTypeDefinition>(XSDSimpleTypeDefinition.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS);
- }
- return memberTypeDefinitions;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDFundamentalFacet> getFundamentalFacets()
- {
- if (fundamentalFacets == null)
- {
- fundamentalFacets = new EObjectContainmentEList<XSDFundamentalFacet>(XSDFundamentalFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS);
- }
- return fundamentalFacets;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public XSDSimpleTypeDefinition getBaseTypeDefinition()
- {
- return baseTypeDefinition;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public void setBaseTypeDefinition(XSDSimpleTypeDefinition newBaseTypeDefinition)
- {
- XSDSimpleTypeDefinition oldBaseTypeDefinition = baseTypeDefinition;
- baseTypeDefinition = newBaseTypeDefinition;
- if (eNotificationRequired())
- eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION, oldBaseTypeDefinition, baseTypeDefinition));
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public XSDSimpleTypeDefinition getPrimitiveTypeDefinition()
- {
- return primitiveTypeDefinition;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public void setPrimitiveTypeDefinition(XSDSimpleTypeDefinition newPrimitiveTypeDefinition)
- {
- XSDSimpleTypeDefinition oldPrimitiveTypeDefinition = primitiveTypeDefinition;
- primitiveTypeDefinition = newPrimitiveTypeDefinition;
- if (eNotificationRequired())
- eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION, oldPrimitiveTypeDefinition, primitiveTypeDefinition));
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public XSDSimpleTypeDefinition getItemTypeDefinition()
- {
- return itemTypeDefinition;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public void setItemTypeDefinition(XSDSimpleTypeDefinition newItemTypeDefinition)
- {
- XSDSimpleTypeDefinition oldItemTypeDefinition = itemTypeDefinition;
- itemTypeDefinition = newItemTypeDefinition;
- if (eNotificationRequired())
- eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION, oldItemTypeDefinition, itemTypeDefinition));
- }
-
- @Override
- public Element createElement()
- {
- XSDComplexTypeDefinition xsdComplexTypeDefinition =
- getContainer() instanceof XSDComplexTypeDefinition ?
- (XSDComplexTypeDefinition)getContainer() :
- null;
-
- Element newElement =
- createElement
- (xsdComplexTypeDefinition != null ?
- XSDConstants.SIMPLECONTENT_ELEMENT :
- XSDConstants.SIMPLETYPE_ELEMENT);
- setElement(newElement);
-
- Element childElement = createChildElement();
- newElement.appendChild(childElement);
- return newElement;
- }
-
- protected Element createChildElement()
- {
- return createElement(getRequiredChildElementNodeType());
- }
-
- protected int getRequiredChildElementNodeType()
- {
- XSDComplexTypeDefinition xsdComplexTypeDefinition =
- getContainer() instanceof XSDComplexTypeDefinition ?
- (XSDComplexTypeDefinition)getContainer() :
- null;
-
- XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
- if (getItemTypeDefinition() != null && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
- {
- return XSDConstants.LIST_ELEMENT;
- }
- else if (!getMemberTypeDefinitions().isEmpty() && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
- {
- return XSDConstants.UNION_ELEMENT;
- }
- else
- {
- return
- xsdComplexTypeDefinition == null || XSDDerivationMethod.EXTENSION_LITERAL != xsdComplexTypeDefinition.getDerivationMethod() ?
- XSDConstants.RESTRICTION_ELEMENT :
- XSDConstants.EXTENSION_ELEMENT;
- }
- }
-
- @Override
- protected void patch()
- {
- super.patch();
-
- if (!(getContainer() instanceof XSDComplexTypeDefinition))
- {
- XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
- if (theBaseTypeDefinition != null && (forceResolve || theBaseTypeDefinition.getContainer() == null))
- {
- theBaseTypeDefinition = resolveSimpleTypeDefinition(theBaseTypeDefinition.getTargetNamespace(), theBaseTypeDefinition.getName());
- }
- theBaseTypeDefinition = handleNewBaseTypeDefinition(theBaseTypeDefinition);
- if (theBaseTypeDefinition == null || !theBaseTypeDefinition.isSetVariety() || theBaseTypeDefinition.getVariety() != getVariety())
- {
- XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
- if (theItemTypeDefinition != null)
- {
- if (forceResolve || theItemTypeDefinition.getContainer() == null)
- {
- XSDSimpleTypeDefinition newItemTypeDefinition =
- resolveSimpleTypeDefinition(theItemTypeDefinition.getTargetNamespace(), theItemTypeDefinition.getName());
- if ((forceResolve || newItemTypeDefinition.getContainer() != null) && newItemTypeDefinition != theItemTypeDefinition)
- {
- setItemTypeDefinition(newItemTypeDefinition);
- }
- }
- }
- else
- {
- for (ListIterator<XSDSimpleTypeDefinition> theMemberTypeDefinitions = getMemberTypeDefinitions().listIterator();
- theMemberTypeDefinitions.hasNext(); )
- {
- XSDSimpleTypeDefinition theMemberTypeDefinition = theMemberTypeDefinitions.next();
- if (forceResolve || theMemberTypeDefinition.getContainer() == null)
- {
- XSDSimpleTypeDefinition newMemberTypeDefinition =
- resolveSimpleTypeDefinition(theMemberTypeDefinition.getTargetNamespace(), theMemberTypeDefinition.getName());
- if ((forceResolve || newMemberTypeDefinition.getContainer() != null) && newMemberTypeDefinition != theMemberTypeDefinition)
- {
- theMemberTypeDefinitions.set(newMemberTypeDefinition);
- }
- }
- }
- }
- }
- }
-
- XSDSchema xsdSchema = getSchema();
- if (xsdSchema != null)
- {
- List<XSDSimpleFinal> newFinal = new ArrayList<XSDSimpleFinal>();
- if (!isSetLexicalFinal())
- {
- for (XSDProhibitedSubstitutions value : xsdSchema.getFinalDefault())
- {
- switch (value.getValue())
- {
- case XSDProhibitedSubstitutions.ALL:
- {
- newFinal.add(XSDSimpleFinal.RESTRICTION_LITERAL);
- newFinal.add(XSDSimpleFinal.LIST_LITERAL);
- newFinal.add(XSDSimpleFinal.UNION_LITERAL);
- break;
- }
- case XSDProhibitedSubstitutions.RESTRICTION:
- {
- newFinal.add(XSDSimpleFinal.RESTRICTION_LITERAL);
- break;
- }
- }
- }
- }
- else
- {
- for (XSDSimpleFinal value : getLexicalFinal())
- {
- switch (value.getValue())
- {
- case XSDSimpleFinal.ALL:
- {
- newFinal.add(XSDSimpleFinal.RESTRICTION_LITERAL);
- newFinal.add(XSDSimpleFinal.LIST_LITERAL);
- newFinal.add(XSDSimpleFinal.UNION_LITERAL);
- break;
- }
- default:
- {
- newFinal.add(value);
- break;
- }
- }
- }
- }
-
- Collection<XSDSimpleFinal> oldFinal = new ArrayList<XSDSimpleFinal>(getFinal());
- oldFinal.removeAll(newFinal);
- if (!oldFinal.isEmpty())
- {
- getFinal().removeAll(oldFinal);
- }
- setListContentAndOrder(getFinal(), newFinal);
- }
- }
-
- @Override
- protected void traverseToRootForAnalysis()
- {
- analysisState = UNANALYZED;
- super.traverseToRootForAnalysis();
- }
-
- protected XSDWhiteSpaceFacet effectiveWhiteSpaceFacet;
- @Override
- protected void handleAnalysis()
- {
- XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
-
- XSDConcreteComponent container = getContainer();
- if (container instanceof XSDComplexTypeDefinition)
- {
- if (!getContents().contains(theBaseTypeDefinition))
- {
- XSDComplexTypeDefinition xsdComplexTypeDefinition = (XSDComplexTypeDefinitionImpl)container;
- XSDTypeDefinition complexBaseTypeDefinition = xsdComplexTypeDefinition.getBaseTypeDefinition();
- if (complexBaseTypeDefinition != null)
- {
- ((XSDConcreteComponentImpl)complexBaseTypeDefinition).analyze();
- theBaseTypeDefinition = handleNewBaseTypeDefinition(complexBaseTypeDefinition.getSimpleType());
- }
- }
- }
-
- if (getFundamentalFacets().isEmpty())
- {
- createFundamentalFacets();
- }
-
- List<XSDConstrainingFacet> newFacets = null;
- boolean newBounded = false;
- XSDCardinality newCardinality = XSDCardinality.FINITE_LITERAL;
- boolean newNumeric = false;
- XSDOrdered newOrdered = XSDOrdered.FALSE_LITERAL;
- XSDSimpleTypeDefinition newPrimitiveTypeDefinition = null;
- XSDVariety newVariety = null;
- EList<String> newValidFacets = null;
-
- if (theBaseTypeDefinition != null && theBaseTypeDefinition.getContainer() != null)
- {
- if (!((XSDConcreteComponentImpl)theBaseTypeDefinition).analyze() && !XSDConstants.isURType(theBaseTypeDefinition) && theBaseTypeDefinition.isCircular())
- {
- analysisState = CIRCULAR;
- }
- if (theBaseTypeDefinition != this)
- {
- if (!XSDConstants.isURType(this))
- {
- newVariety = XSDVariety.ATOMIC_LITERAL;
- newPrimitiveTypeDefinition = this;
- }
-
- if (!XSDConstants.isURType(theBaseTypeDefinition))
- {
- newVariety = theBaseTypeDefinition.getVariety();
- newPrimitiveTypeDefinition = theBaseTypeDefinition.getPrimitiveTypeDefinition();
- newBounded = theBaseTypeDefinition.getBoundedFacet().isValue();
- newCardinality = theBaseTypeDefinition.getCardinalityFacet().getValue();
- newNumeric = theBaseTypeDefinition.getNumericFacet().isValue();
- newOrdered = theBaseTypeDefinition.getOrderedFacet().getValue();
- newValidFacets = theBaseTypeDefinition.getValidFacets();
-
- if (XSDVariety.LIST_LITERAL == theBaseTypeDefinition.getVariety())
- {
- XSDSimpleTypeDefinition newItemTypeDefinition = theBaseTypeDefinition.getItemTypeDefinition();
- if (newItemTypeDefinition != getItemTypeDefinition())
- {
- setItemTypeDefinition(newItemTypeDefinition);
- }
- }
- else if (XSDVariety.UNION_LITERAL == theBaseTypeDefinition.getVariety())
- {
- List<XSDSimpleTypeDefinition> newMemberTypeDefinitions = theBaseTypeDefinition.getMemberTypeDefinitions();
- List<XSDSimpleTypeDefinition> remainingMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions());
- remainingMemberTypeDefinitions.removeAll(newMemberTypeDefinitions);
- if (!remainingMemberTypeDefinitions.isEmpty())
- {
- getMemberTypeDefinitions().removeAll(remainingMemberTypeDefinitions);
- }
- if (!newMemberTypeDefinitions.isEmpty())
- {
- setListContentAndOrder(getMemberTypeDefinitions(), newMemberTypeDefinitions);
- }
- }
- }
- else
- {
- newFacets = new ArrayList<XSDConstrainingFacet>(getFacetContents());
- }
- }
- else
- {
- newFacets = new ArrayList<XSDConstrainingFacet>(getFacetContents());
- }
- }
- else
- {
- newFacets = new ArrayList<XSDConstrainingFacet>(getFacetContents());
- }
-
- if (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition))
- {
- XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
- if (theItemTypeDefinition != null && theItemTypeDefinition.getContainer() != null)
- {
- newVariety = XSDVariety.LIST_LITERAL;
- newPrimitiveTypeDefinition = null;
- if (!((XSDConcreteComponentImpl)theItemTypeDefinition).analyze() && !XSDConstants.isURType(theItemTypeDefinition) && theItemTypeDefinition.isCircular())
- {
- analysisState = CIRCULAR;
- }
- newValidFacets = getValidFacetsForList();
- if (effectiveWhiteSpaceFacet == null)
- {
- effectiveWhiteSpaceFacet = getXSDFactory().createXSDWhiteSpaceFacet();
- effectiveWhiteSpaceFacet.setLexicalValue("collapse");
- effectiveWhiteSpaceFacet.setFixed(true);
- getSyntheticFacets().add(effectiveWhiteSpaceFacet);
- }
- if (newFacets != null)
- {
- newFacets.add(effectiveWhiteSpaceFacet);
- }
- }
- else if (!getMemberTypeDefinitions().isEmpty())
- {
- newVariety = XSDVariety.UNION_LITERAL;
- newPrimitiveTypeDefinition = null;
- newNumeric = true;
- for (XSDSimpleTypeDefinition theMemberTypeDefinition : getMemberTypeDefinitions())
- {
- if (theMemberTypeDefinition.getContainer() != null)
- {
- if (!((XSDConcreteComponentImpl)theMemberTypeDefinition).analyze() && !XSDConstants.isURType(theMemberTypeDefinition) && theMemberTypeDefinition.isCircular())
- {
- analysisState = CIRCULAR;
- }
- if (!theMemberTypeDefinition.getNumericFacet().isValue())
- {
- newNumeric = false;
- }
- }
- }
-
- XSDTypeDefinition lowestCommonAncestor = getLowestCommonAncestor(getMemberTypeDefinitions());
- if (lowestCommonAncestor instanceof XSDSimpleTypeDefinition && lowestCommonAncestor.getContainer() != null)
- {
- newOrdered = ((XSDSimpleTypeDefinition)lowestCommonAncestor).getOrderedFacet().getValue();
- }
- newValidFacets = getValidFacetsForUnion();
- }
- else if (getElement() != null)
- {
- LOOP:
- for (Node child = getElement().getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.UNION_ELEMENT:
- {
- newVariety = XSDVariety.UNION_LITERAL;
- newPrimitiveTypeDefinition = null;
- newValidFacets = getValidFacetsForUnion();
- break LOOP;
- }
- case XSDConstants.LIST_ELEMENT:
- {
- newVariety = XSDVariety.LIST_LITERAL;
- newPrimitiveTypeDefinition = null;
- newValidFacets = getValidFacetsForList();
- break LOOP;
- }
- }
- }
- }
- }
-
- if (newVariety != null)
- {
- if (!isSetVariety() || newVariety != getVariety())
- {
- setVariety(newVariety);
- }
- }
- else if (isSetVariety())
- {
- unsetVariety();
- }
-
- if (newPrimitiveTypeDefinition != getPrimitiveTypeDefinition())
- {
- setPrimitiveTypeDefinition(newPrimitiveTypeDefinition);
- }
-
- // This ensures the the facets are analyzed when the containing type is relatively well-analyzed.
- //
- super.handleAnalysis();
-
- if (newFacets == null)
- {
- newFacets = mergeFacets();
- }
-
- XSDAnnotation theAnnotation = getAnnotation();
- if (theAnnotation != null)
- {
- for (Element applicationInformationElement : theAnnotation.getApplicationInformation())
- {
- for (Node child = applicationInformationElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.hfpNodeType(child))
- {
- case XSDConstants.HFP_HASFACET_ELEMENT:
- {
- Element childElement = (Element)child;
- String facetName = childElement.getAttributeNS(null, XSDConstants.HFP_NAME_ATTRIBUTE);
- if (newValidFacets == null)
- {
- newValidFacets = new BasicEList<String>();
- }
- newValidFacets.add(facetName);
- break;
- }
- case XSDConstants.HFP_HASPROPERTY_ELEMENT:
- {
- Element childElement = (Element)child;
- String propertyName = childElement.getAttributeNS(null, XSDConstants.HFP_NAME_ATTRIBUTE);
- String propertyValue = childElement.getAttributeNS(null, XSDConstants.HFP_VALUE_ATTRIBUTE);
- if ("bounded".equals(propertyName))
- {
- newBounded = "true".equals(propertyValue);
- }
- else if ("cardinality".equals(propertyName))
- {
- newCardinality =
- "countably infinite".equals(propertyValue) ?
- XSDCardinality.COUNTABLY_INFINITE_LITERAL :
- XSDCardinality.get(propertyValue);
- }
- else if ("numeric".equals(propertyName))
- {
- newNumeric = "true".equals(propertyValue);
- }
- else if ("ordered".equals(propertyName))
- {
- newOrdered = XSDOrdered.get(propertyValue);
- }
- break;
- }
- }
- }
- }
- }
-
-
- if (!XSDConstants.isURType(this))
- {
- if (newBounded != getBoundedFacet().isValue() /* || !getBoundedFacet().isSetValue()*/)
- {
- getBoundedFacet().setValue(newBounded);
- }
- if (newCardinality != getCardinalityFacet().getValue() /* || !getCardinalityFacet().isSetValue()*/)
- {
- getCardinalityFacet().setValue(newCardinality);
- }
- if (newNumeric != getNumericFacet().isValue() /* || !getNumericFacet().isSetValue()*/)
- {
- getNumericFacet().setValue(newNumeric);
- }
- if (newOrdered == null)
- {
- newOrdered = XSDOrdered.FALSE_LITERAL;
- }
- if (newOrdered != getOrderedFacet().getValue() /* || !getOrderedFacet().isSetValue()*/)
- {
- getOrderedFacet().setValue(newOrdered);
- }
- }
-
- if (newFacets == null)
- {
- if (!getFacets().isEmpty())
- {
- getFacets().clear();
- }
- }
- else
- {
- List<XSDFacet> remainingFacets = new ArrayList<XSDFacet>(getFacets());
- remainingFacets.removeAll(newFacets);
- getFacets().removeAll(remainingFacets);
- if (!newFacets.isEmpty())
- {
- setListContentAndOrder(getFacets(), newFacets);
- }
- }
-
- if (newValidFacets == null)
- {
- if (!getValidFacets().isEmpty())
- {
- getValidFacets().clear();
- }
- }
- else
- {
- List<String> remainingValidFacets = new ArrayList<String>(getValidFacets());
- remainingValidFacets.removeAll(newValidFacets);
- getValidFacets().removeAll(remainingValidFacets);
- if (!newValidFacets.isEmpty())
- {
- setListContentAndOrder(getValidFacets(), newValidFacets);
- }
- }
- }
-
- @Override
- public void validate()
- {
- super.validate();
-
- Element theElement = getElement();
- Element theRestrictionElement = null;
- if (theElement != null)
- {
- String anchor;
- if (getContainer() instanceof XSDComplexTypeDefinition)
- {
- checkAttributes
- (XSDConstants.PART2,
- anchor = "element-simpleContent",
- theElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE
- });
-
- XSDComplexTypeDefinition xsdComplexTypeDefinition =
- (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("simpleContent").getTypeDefinition();
-
- checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-simpleContent", theElement);
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.RESTRICTION_ELEMENT:
- {
- Element childElement = (Element)child;
- theRestrictionElement = childElement;
-
- checkAttributes
- (XSDConstants.PART2,
- "element-simpleContent::restriction",
- childElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE,
- XSDConstants.BASE_ATTRIBUTE
- });
-
- checkBuiltInTypeConstraint
- ("ID",
- null,
- XSDConstants.PART2,
- "element-simpleContent::restriction",
- childElement,
- XSDConstants.ID_ATTRIBUTE,
- false);
-
- checkComplexContent("simpleRestrictionType", XSDConstants.PART2, "element-simpleContent::restriction", childElement);
-
- // This is allowed https://bugs.eclipse.org/bugs/show_bug.cgi?id=177035
- //
- // if (childElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE) && !getContents().isEmpty())
- // {
- // createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType");
- // }
-
- break;
- }
- case XSDConstants.EXTENSION_ELEMENT:
- {
- Element childElement = (Element)child;
-
- checkAttributes
- (XSDConstants.PART2,
- "element-simpleContent::extension",
- childElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE,
- XSDConstants.BASE_ATTRIBUTE
- });
-
- checkBuiltInTypeConstraint
- ("ID",
- null,
- XSDConstants.PART2,
- "element-simpleContent::extension",
- childElement,
- XSDConstants.ID_ATTRIBUTE,
- false);
-
- checkComplexContent("simpleExtensionType", XSDConstants.PART2, "element-simpleContent::extension", childElement);
-
- if (childElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE) && !getContents().isEmpty())
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType");
- }
-
- break;
- }
- }
- }
- }
- else
- {
- if (getContainer() instanceof XSDFeature || getContainer() instanceof XSDSimpleTypeDefinition)
- {
- checkAttributes
- (XSDConstants.PART2,
- anchor = "element-simpleType",
- theElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE,
- });
- }
- else
- {
- checkAttributes
- (XSDConstants.PART2,
- anchor = "element-simpleType",
- theElement,
- new String []
- {
- XSDConstants.FINAL_ATTRIBUTE,
- XSDConstants.ID_ATTRIBUTE,
- XSDConstants.NAME_ATTRIBUTE
- });
-
- // EATM this is an error in the spec, I believe.
- //
- if (theElement.hasAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE))
- {
- String value = theElement.getAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE);
- for (StringTokenizer values = new StringTokenizer(value, " "); values.hasMoreTokens(); )
- {
- String token = values.nextToken();
-
- checkBuiltInTypeConstraint
- ("simpleDerivationSet",
- token,
- XSDConstants.PART2,
- anchor,
- theElement,
- XSDConstants.FINAL_ATTRIBUTE,
- false);
- }
- }
- }
-
- checkComplexContent("simpleType", XSDConstants.PART2, "element-simpleType", theElement);
-
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.RESTRICTION_ELEMENT:
- {
- Element childElement = (Element)child;
- theRestrictionElement = childElement;
-
- checkAttributes
- (XSDConstants.PART2,
- "element-restriction",
- childElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE,
- XSDConstants.BASE_ATTRIBUTE
- });
-
- checkBuiltInTypeConstraint
- ("ID",
- null,
- XSDConstants.PART2,
- "element-restriction",
- childElement,
- XSDConstants.ID_ATTRIBUTE,
- false);
-
- XSDComplexTypeDefinition xsdComplexTypeDefinition =
- (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("restriction").getTypeDefinition();
-
- checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-restriction", childElement);
-
- if (childElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
- {
- if (!getContents().isEmpty())
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType");
- }
- }
- else if (getContents().isEmpty())
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType.0");
- }
-
- break;
- }
- case XSDConstants.UNION_ELEMENT:
- {
- Element childElement = (Element)child;
-
- checkAttributes
- (XSDConstants.PART2,
- "element-union",
- childElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE,
- XSDConstants.MEMBERTYPES_ATTRIBUTE
- });
-
- checkBuiltInTypeConstraint
- ("ID",
- null,
- XSDConstants.PART2,
- "element-union",
- childElement,
- XSDConstants.ID_ATTRIBUTE,
- false);
-
- XSDComplexTypeDefinition xsdComplexTypeDefinition =
- (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("union").getTypeDefinition();
-
- checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-union", childElement);
-
- if (getMemberTypeDefinitions().isEmpty())
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-union-memberTypes-or-simpleTypes");
- }
-
- break;
- }
- case XSDConstants.LIST_ELEMENT:
- {
- Element childElement = (Element)child;
-
- checkAttributes
- (XSDConstants.PART2,
- "element-list",
- childElement,
- new String []
- {
- XSDConstants.ID_ATTRIBUTE,
- XSDConstants.ITEMTYPE_ATTRIBUTE
- });
-
- checkBuiltInTypeConstraint
- ("ID",
- null,
- XSDConstants.PART2,
- "element-list",
- childElement,
- XSDConstants.ID_ATTRIBUTE,
- false);
-
- XSDComplexTypeDefinition xsdComplexTypeDefinition =
- (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("list").getTypeDefinition();
-
- checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-list", childElement);
-
- if (childElement.hasAttributeNS(null, XSDConstants.ITEMTYPE_ATTRIBUTE))
- {
- if (!getContents().isEmpty())
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-list-itemType-or-simpleType");
- }
- }
- else
- {
- if (getContents().isEmpty())
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-list-itemType-or-simpleType.0");
- }
- }
-
- break;
- }
- }
- }
- }
-
- checkBuiltInTypeConstraint
- ("ID",
- null,
- XSDConstants.PART2,
- anchor,
- theElement,
- XSDConstants.ID_ATTRIBUTE,
- false);
- }
-
- if (!(getContainer() instanceof XSDFeature) && !(getContainer() instanceof XSDTypeDefinition))
- {
- checkBuiltInTypeConstraint
- ("NCName",
- getName(),
- XSDConstants.PART2,
- "element-simpleType",
- theElement,
- XSDConstants.NAME_ATTRIBUTE,
- true);
- }
-
- XSDSimpleTypeDefinition 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 if (isSetVariety())
- {
- switch (getVariety().getValue())
- {
- case XSDVariety.ATOMIC:
- {
- if (theBaseTypeDefinition.getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.1.2", theBaseTypeDefinition.getURI());
- }
- if (isCircular())
- {
- reportConstraintViolation
- (XSDConstants.PART2,
- "st-props-correct.2",
- getElement(),
- XSDConstants.BASE_ATTRIBUTE,
- new Object [] {});
- }
- if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
- XSDConstants.isAnySimpleType(theBaseTypeDefinition) &&
- (theElement == null ||
- theRestrictionElement != null && theRestrictionElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE)))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-retricts.0.0", theBaseTypeDefinition.getURI());
- }
- break;
- }
- case XSDVariety.LIST:
- {
- if (!XSDConstants.isURType(theBaseTypeDefinition))
- {
- if (theBaseTypeDefinition.getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.1.2", theBaseTypeDefinition.getURI());
- }
- }
- else
- {
- XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
- if (theItemTypeDefinition == null)
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", "");
- }
- else if (theItemTypeDefinition.getContainer() == null)
- {
- createDiagnostic
- (XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", theItemTypeDefinition.getURI());
- }
- else if (XSDVariety.ATOMIC_LITERAL != theItemTypeDefinition.getVariety() &&
- XSDVariety.UNION_LITERAL != theItemTypeDefinition.getVariety())
- {
- reportConstraintViolation
- (XSDConstants.PART2,
- "cos-list-of-atomic",
- getElement(),
- XSDConstants.ITEMTYPE_ATTRIBUTE,
- new Object [] {});
- }
- else if (theItemTypeDefinition.getFinal().contains(XSDSimpleFinal.LIST_LITERAL))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.2.0", theBaseTypeDefinition.getURI());
- }
- else if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
- XSDConstants.isAnySimpleType(theItemTypeDefinition))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-retricts.0.1", theItemTypeDefinition.getURI());
- }
- }
- if (isCircular())
- {
- reportConstraintViolation
- (XSDConstants.PART2,
- "st-props-correct.2",
- getElement(),
- XSDConstants.ITEMTYPE_ATTRIBUTE,
- new Object [] {});
- }
- break;
- }
- case XSDVariety.UNION:
- {
- if (!XSDConstants.isURType(theBaseTypeDefinition))
- {
- if (theBaseTypeDefinition.getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.1.2", theBaseTypeDefinition.getURI());
- }
- }
- else
- {
- for (XSDSimpleTypeDefinition theMemberTypeDefinition : getMemberTypeDefinitions())
- {
- if (theMemberTypeDefinition == null)
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", "");
- }
- else if (theMemberTypeDefinition.getContainer() == null)
- {
- createDiagnostic
- (XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", theMemberTypeDefinition.getURI());
- }
- else if (theMemberTypeDefinition.getFinal().contains(XSDSimpleFinal.UNION_LITERAL))
- {
- createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.3.0", theBaseTypeDefinition.getURI());
- }
- // Apparently this is allowed now.
- // else if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
- // XSDConstants.isAnySimpleType(theMemberTypeDefinition))
- // {
- // createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-retricts.0.2", theMemberTypeDefinition.getURI());
- // }
- }
- }
- if (isCircular())
- {
- reportConstraintViolation
- (XSDConstants.PART2,
- "cos-no-circular-unions",
- getElement(),
- XSDConstants.MEMBERTYPES_ATTRIBUTE,
- new Object [] {});
- }
- break;
- }
- }
- }
- else if (isCircular())
- {
- reportConstraintViolation
- (XSDConstants.PART2,
- "st-props-correct.2",
- getElement(),
- XSDConstants.BASE_ATTRIBUTE,
- new Object [] {});
- }
- }
-
- @Override
- protected void reconcileAttributes(Element changedElement)
- {
- switch (XSDConstants.nodeType(changedElement))
- {
- case XSDConstants.EXTENSION_ELEMENT:
- case XSDConstants.RESTRICTION_ELEMENT:
- {
- if (!(getContainer() instanceof XSDComplexTypeDefinition))
- {
- XSDSimpleTypeDefinition newBaseTypeDefinition = null;
- if (changedElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
- {
- newBaseTypeDefinition =
- resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.BASE_ATTRIBUTE));
- }
- else if (getContents().contains(getBaseTypeDefinition()))
- {
- newBaseTypeDefinition = getBaseTypeDefinition();
- }
-
- handleNewBaseTypeDefinition(newBaseTypeDefinition);
- }
- else
- {
- XSDTypeDefinition newBaseTypeDefinition = null;
- if (changedElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
- {
- newBaseTypeDefinition =
- resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.BASE_ATTRIBUTE));
- }
- else if (getContents().contains(getBaseTypeDefinition()))
- {
- newBaseTypeDefinition = getBaseTypeDefinition();
- }
-
- handleNewComplexBaseTypeDefinition(newBaseTypeDefinition);
- }
-
- break;
- }
- case XSDConstants.LIST_ELEMENT:
- {
- XSDSimpleTypeDefinition newItemTypeDefinition = getItemTypeDefinition();
- if (changedElement.hasAttributeNS(null, XSDConstants.ITEMTYPE_ATTRIBUTE))
- {
- newItemTypeDefinition =
- resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.ITEMTYPE_ATTRIBUTE));
- }
- else if (!getContents().contains(newItemTypeDefinition))
- {
- newItemTypeDefinition = resolveSimpleTypeDefinition(null, "undefined");
- }
-
- if (newItemTypeDefinition != getItemTypeDefinition())
- {
- setItemTypeDefinition(newItemTypeDefinition);
- }
-
- handleNewBaseTypeDefinition(null);
- break;
- }
- case XSDConstants.UNION_ELEMENT:
- {
- List<XSDSimpleTypeDefinition> newMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>();
- if (changedElement.hasAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE))
- {
- String memberTypes = changedElement.getAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE);
- if (memberTypes != null)
- {
- for (StringTokenizer tokens = new StringTokenizer(memberTypes, " "); tokens.hasMoreTokens(); )
- {
- String memberTypeQName = tokens.nextToken();
- XSDSimpleTypeDefinition newMemberTypeDefinition =
- resolveSimpleTypeDefinitionURI(XSDConstants.lookupQName(changedElement, memberTypeQName));
- newMemberTypeDefinitions.add(newMemberTypeDefinition);
- }
- }
- }
-
- newMemberTypeDefinitions.addAll(getContents());
-
- List<XSDSimpleTypeDefinition> remainingMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions());
- remainingMemberTypeDefinitions.removeAll(newMemberTypeDefinitions);
- getMemberTypeDefinitions().removeAll(remainingMemberTypeDefinitions);
- if (!newMemberTypeDefinitions.isEmpty())
- {
- setListContentAndOrder(getMemberTypeDefinitions(), newMemberTypeDefinitions);
- }
-
- handleNewBaseTypeDefinition(null);
- break;
- }
- case XSDConstants.SIMPLETYPE_ELEMENT:
- case XSDConstants.SIMPLECONTENT_ELEMENT:
- {
- super.reconcileAttributes(changedElement);
-
- if (changedElement.hasAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE))
- {
- setStringLexicalFinal(changedElement.getAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE));
- }
- else if (isSetLexicalFinal())
- {
- unsetLexicalFinal();
- }
-
- for (Node child = changedElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- if (child.getNodeType() == Node.ELEMENT_NODE)
- {
- reconcileAttributes((Element)child);
- }
- }
- break;
- }
- }
- }
-
- protected void handleNewComplexBaseTypeDefinition(XSDTypeDefinition newComplexBaseTypeDefinition)
- {
- if (getContainer() instanceof XSDComplexTypeDefinition)
- {
- XSDComplexTypeDefinitionImpl xsdComplexTypeDefinition = (XSDComplexTypeDefinitionImpl)getContainer();
- boolean oldIsReconciling = xsdComplexTypeDefinition.isReconciling;
- xsdComplexTypeDefinition.isReconciling = isReconciling;
- xsdComplexTypeDefinition.handleNewBaseTypeDefinition(newComplexBaseTypeDefinition);
- xsdComplexTypeDefinition.isReconciling = oldIsReconciling;
- }
- }
-
- protected XSDSimpleTypeDefinition handleNewBaseTypeDefinition(XSDSimpleTypeDefinition newBaseTypeDefinition)
- {
- if (newBaseTypeDefinition == null)
- {
- XSDSchema xsdSchema = getSchema();
- if (xsdSchema == null)
- {
- Element theElement = getElement();
- if (theElement != null)
- {
- newBaseTypeDefinition =
- XSDSchemaImpl.getSchemaForSchema(theElement.getNamespaceURI()).resolveSimpleTypeDefinition("anySimpleType");
- }
- else
- {
- newBaseTypeDefinition = this;
- }
- }
- else
- {
- newBaseTypeDefinition = xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("anySimpleType");
- }
- }
-
- 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 = (XSDSimpleTypeDefinition)replacement;
- }
- }
- }
- }
-
- if (newBaseTypeDefinition != getBaseTypeDefinition())
- {
- setBaseTypeDefinition(newBaseTypeDefinition);
- }
-
- return newBaseTypeDefinition;
- }
-
- @Override
- protected Node getAdoptionParentNode(EReference eReference)
- {
- if (eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS ||
- eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS ||
- eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION)
- {
- Element element = getElement();
- if (element == null)
- {
- return null;
- }
- else
- {
- for (Node child = element.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.EXTENSION_ELEMENT:
- case XSDConstants.RESTRICTION_ELEMENT:
- case XSDConstants.LIST_ELEMENT:
- case XSDConstants.UNION_ELEMENT:
- {
- return child;
- }
- }
- }
- }
- }
-
- 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.ANNOTATION_ELEMENT:
- {
- result.add((Element)child);
- break;
- }
- case XSDConstants.EXTENSION_ELEMENT:
- case XSDConstants.RESTRICTION_ELEMENT:
- case XSDConstants.LIST_ELEMENT:
- case XSDConstants.UNION_ELEMENT:
- {
- for (Node grandChild = child.getFirstChild(); grandChild != null; grandChild = grandChild.getNextSibling())
- {
- if (grandChild.getNodeType() == Node.ELEMENT_NODE)
- {
- result.add((Element)grandChild);
- }
- }
- break;
- }
- }
- }
- return result;
- }
-
- @Override
- protected void handleUnreconciledElement(Element child, List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.ANNOTATION_ELEMENT:
- {
- XSDAnnotation xsdAnnotation = XSDAnnotationImpl.createAnnotation(child);
- newContents.add(xsdAnnotation);
- break;
- }
- case XSDConstants.SIMPLETYPE_ELEMENT:
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = XSDSimpleTypeDefinitionImpl.createSimpleTypeDefinition(child);
- if (xsdSimpleTypeDefinition != null)
- {
- newContents.add(xsdSimpleTypeDefinition);
- }
- break;
- }
- default:
- {
- XSDConstrainingFacet xsdConstrainingFacet = XSDConstrainingFacetImpl.createConstrainingFacet(child);
- if (xsdConstrainingFacet != null)
- {
- newContents.add(xsdConstrainingFacet);
- }
- }
- }
- }
-
- @Override
- protected void handleReconciliation(List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
- {
- if (!newContents.isEmpty() && newContents.get(0).getElement().getParentNode() == getElement())
- {
- handleAnnotationReconciliation(XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION, newContents, remainingContents);
- }
- handleAnnotationReconciliation(XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION, newContents, remainingContents);
-
- XSDSimpleTypeDefinition newBaseTypeDefinition = null;
- XSDTypeDefinition newComplexBaseTypeDefinition = null;
-
- boolean didContents = false;
- Element theElement = getElement();
- LOOP:
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.LIST_ELEMENT:
- {
- Element elementChild = (Element)child;
- XSDSimpleTypeDefinition newTypeContent = null;
- XSDSimpleTypeDefinition newItemTypeDefinition = null;
- if (!newContents.isEmpty())
- {
- XSDConcreteComponent xsdConcreteComponent = newContents.get(0);
- if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
- {
- newItemTypeDefinition = (XSDSimpleTypeDefinition)xsdConcreteComponent;
- newTypeContent = newItemTypeDefinition;
- newContents.remove(0);
- }
- }
- if (elementChild.hasAttributeNS(null, XSDConstants.ITEMTYPE_ATTRIBUTE) && newItemTypeDefinition == null)
- {
- newItemTypeDefinition =
- resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute((Element)child, XSDConstants.ITEMTYPE_ATTRIBUTE));
- }
- if (newItemTypeDefinition == null)
- {
- newItemTypeDefinition = resolveSimpleTypeDefinition(null, "undefined");
- }
-
- getContents().removeAll(remainingContents);
- if (newTypeContent != null)
- {
- getContents().add(newTypeContent);
- }
-
- if (newItemTypeDefinition != getItemTypeDefinition())
- {
- setItemTypeDefinition(newItemTypeDefinition);
- }
-
- didContents = true;
- break LOOP;
- }
- case XSDConstants.UNION_ELEMENT:
- {
- Element elementChild = (Element)child;
- List<XSDSimpleTypeDefinition> newMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>();
- if (elementChild.hasAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE))
- {
- String memberTypes = elementChild.getAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE);
- if (memberTypes != null)
- {
- for (StringTokenizer tokens = new StringTokenizer(memberTypes, " "); tokens.hasMoreTokens(); )
- {
- String memberTypeQName = tokens.nextToken();
- XSDSimpleTypeDefinition newMemberTypeDefinition =
- resolveSimpleTypeDefinitionURI(XSDConstants.lookupQName(elementChild, memberTypeQName));
- newMemberTypeDefinitions.add(newMemberTypeDefinition);
- }
- }
- }
-
- List<XSDSimpleTypeDefinition> newTypeContents = new ArrayList<XSDSimpleTypeDefinition>();
- for (ListIterator<XSDConcreteComponent> i = newContents.listIterator(); i.hasNext(); )
- {
- XSDConcreteComponent xsdConcreteComponent = i.next();
- if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)xsdConcreteComponent;
- newTypeContents.add(xsdSimpleTypeDefinition);
- newMemberTypeDefinitions.add(xsdSimpleTypeDefinition);
- i.remove();
- }
- else
- {
- break;
- }
- }
-
- getContents().removeAll(remainingContents);
- if (!newTypeContents.isEmpty())
- {
- setListContentAndOrder(getContents(), newTypeContents);
- }
-
- List<XSDSimpleTypeDefinition> remainingMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions());
- remainingMemberTypeDefinitions.removeAll(newMemberTypeDefinitions);
- if (!remainingMemberTypeDefinitions.isEmpty())
- {
- getMemberTypeDefinitions().removeAll(remainingMemberTypeDefinitions);
- }
- if (!newMemberTypeDefinitions.isEmpty())
- {
- setListContentAndOrder(getMemberTypeDefinitions(), newMemberTypeDefinitions);
- }
-
- didContents = true;
- break LOOP;
- }
- case XSDConstants.EXTENSION_ELEMENT:
- case XSDConstants.RESTRICTION_ELEMENT:
- {
- Element elementChild = (Element)child;
- if (!newContents.isEmpty())
- {
- XSDConcreteComponent xsdConcreteComponent = newContents.get(0);
- if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)xsdConcreteComponent;
- List<XSDSimpleTypeDefinition> theContents = getContents();
- if (theContents.size() != 1 || theContents.get(0) != xsdConcreteComponent)
- {
- if (!theContents.isEmpty())
- {
- remainingContents.removeAll(theContents);
- theContents.clear();
- }
- theContents.add(xsdSimpleTypeDefinition);
- }
- newBaseTypeDefinition = xsdSimpleTypeDefinition;
- newContents.remove(0);
- }
- }
-
- if (!(getContainer() instanceof XSDComplexTypeDefinition))
- {
- if (elementChild.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE) && newBaseTypeDefinition == null)
- {
- newBaseTypeDefinition =
- resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(elementChild, XSDConstants.BASE_ATTRIBUTE));
- }
- }
- else
- {
- if (elementChild.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
- {
- newComplexBaseTypeDefinition =
- resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(elementChild, XSDConstants.BASE_ATTRIBUTE));
- }
- }
-
- didContents = true;
- break LOOP;
- }
- }
- }
-
- if (!didContents && !getContents().isEmpty())
- {
- getContents().clear();
- }
-
- if (!remainingContents.isEmpty())
- {
- getFacetContents().removeAll(remainingContents);
- }
-
- if (!newContents.isEmpty())
- {
- for (Iterator<?> i = newContents.iterator(); i.hasNext(); )
- {
- if (!(i.next() instanceof XSDFacet))
- {
- i.remove();
- }
- }
- @SuppressWarnings("unchecked") List<XSDConstrainingFacet> list = (List<XSDConstrainingFacet>)(List<?>)newContents;
- setListContentAndOrder(getFacetContents(), list);
- }
-
- handleNewBaseTypeDefinition(newBaseTypeDefinition);
- handleNewComplexBaseTypeDefinition(newComplexBaseTypeDefinition);
- }
-
- @Override
- protected void changeAttribute(EAttribute eAttribute)
- {
- super.changeAttribute(eAttribute);
- Element theElement = getElement();
- if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL)
- {
- if (theElement != null)
- {
- niceSetAttribute
- (theElement,
- XSDConstants.FINAL_ATTRIBUTE,
- getStringLexicalFinal());
- }
- if (eAttribute != null)
- {
- traverseToRootForPatching();
- }
- }
- if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__VARIETY)
- {
- if (theElement != null && eAttribute != null)
- {
- if (analysisState != ANALYZING)
- {
- LOOP:
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- int childNodeType = XSDConstants.nodeType(child);
- switch (childNodeType)
- {
- case XSDConstants.RESTRICTION_ELEMENT:
- case XSDConstants.EXTENSION_ELEMENT:
- case XSDConstants.UNION_ELEMENT:
- case XSDConstants.LIST_ELEMENT:
- {
- if (childNodeType != getRequiredChildElementNodeType())
- {
- Element newElement = createChildElement();
- forceReplace(newElement, (Element)child);
- }
- break LOOP;
- }
- }
- }
- traverseToRootForAnalysis();
- }
- }
- }
- }
-
- @Override
- protected void changeReference(EReference eReference)
- {
- super.changeReference(eReference);
- Element theElement = getElement();
- if (theElement != null)
- {
- if (eReference == null || eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION)
- {
- if (!isReconciling && eReference != null)
- {
- traverseToRootForPatching();
- }
-
- if (!isReconciling && !(getContainer() instanceof XSDComplexTypeDefinition))
- {
- XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
- if (theBaseTypeDefinition != null && !getContents().contains(theBaseTypeDefinition))
- {
- LOOP:
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.EXTENSION_ELEMENT:
- case XSDConstants.RESTRICTION_ELEMENT:
- {
- niceSetAttributeURIValue((Element)child, XSDConstants.BASE_ATTRIBUTE, theBaseTypeDefinition.getURI());
- break LOOP;
- }
- }
- }
- }
- }
- }
- if (eReference == null || eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION)
- {
- if (!isReconciling && eReference != null)
- {
- traverseToRootForPatching();
- }
-
- XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
- if (!isReconciling && theItemTypeDefinition != null && !getContents().contains(theItemTypeDefinition))
- {
- LOOP:
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.LIST_ELEMENT:
- {
- niceSetAttributeURIValue((Element)child, XSDConstants.ITEMTYPE_ATTRIBUTE, theItemTypeDefinition.getURI());
- break LOOP;
- }
- }
- }
- }
- }
- if (eReference == null || eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS)
- {
- if (!isReconciling && eReference != null)
- {
- traverseToRootForPatching();
- }
-
- if (!isReconciling)
- {
- LOOP:
- for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (XSDConstants.nodeType(child))
- {
- case XSDConstants.UNION_ELEMENT:
- {
- StringBuffer newMemberTypeDefinitions = null;
- for (XSDSimpleTypeDefinition theMemberTypeDefinition : getMemberTypeDefinitions())
- {
- if (getContents().contains(theMemberTypeDefinition))
- {
- break;
- }
- if (newMemberTypeDefinitions == null)
- {
- newMemberTypeDefinitions = new StringBuffer();
- }
- else
- {
- newMemberTypeDefinitions.append(' ');
- }
- newMemberTypeDefinitions.append(theMemberTypeDefinition.getURI());
- }
-
- niceSetAttributeURIValue
- ((Element)child,
- XSDConstants.MEMBERTYPES_ATTRIBUTE,
- newMemberTypeDefinitions == null ? null : newMemberTypeDefinitions.toString());
- break LOOP;
- }
- }
- }
- }
- }
- }
- }
-
- @Override
- protected void adoptContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
- {
- super.adoptContent(eReference, xsdConcreteComponent);
- if (eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS ||
- eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS)
- {
- 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((XSDAnnotation)xsdConcreteComponent);
- }
- }
-
- @Override
- protected void orphanContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
- {
- super.orphanContent(eReference, xsdConcreteComponent);
- if (eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS ||
- eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS)
- {
- traverseToRootForPatching();
- }
- else if (eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION ||
- eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION)
- {
- getAnnotations().remove(xsdConcreteComponent);
- }
- }
-
- public XSDTotalDigitsFacet getTotalDigitsFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDTotalDigitsFacet)
- {
- return (XSDTotalDigitsFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDTotalDigitsFacet getEffectiveTotalDigitsFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDTotalDigitsFacet)
- {
- return (XSDTotalDigitsFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDFractionDigitsFacet getFractionDigitsFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDFractionDigitsFacet)
- {
- return (XSDFractionDigitsFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDFractionDigitsFacet getEffectiveFractionDigitsFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDFractionDigitsFacet)
- {
- return (XSDFractionDigitsFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDLengthFacet getLengthFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDLengthFacet)
- {
- return (XSDLengthFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDLengthFacet getEffectiveLengthFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDLengthFacet)
- {
- return (XSDLengthFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMaxLengthFacet getMaxLengthFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMaxLengthFacet)
- {
- return (XSDMaxLengthFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMaxLengthFacet getEffectiveMaxLengthFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDMaxLengthFacet)
- {
- return (XSDMaxLengthFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMinLengthFacet getMinLengthFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMinLengthFacet)
- {
- return (XSDMinLengthFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMinLengthFacet getEffectiveMinLengthFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDMinLengthFacet)
- {
- return (XSDMinLengthFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMaxExclusiveFacet getMaxExclusiveFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMaxExclusiveFacet)
- {
- return (XSDMaxExclusiveFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMaxInclusiveFacet getMaxInclusiveFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMaxInclusiveFacet)
- {
- return (XSDMaxInclusiveFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMaxFacet getMaxFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMaxFacet)
- {
- return (XSDMaxFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMaxFacet getEffectiveMaxFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDMaxFacet)
- {
- return (XSDMaxFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMinExclusiveFacet getMinExclusiveFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMinExclusiveFacet)
- {
- return (XSDMinExclusiveFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMinInclusiveFacet getMinInclusiveFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMinInclusiveFacet)
- {
- return (XSDMinInclusiveFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMinFacet getMinFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDMinFacet)
- {
- return (XSDMinFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDMinFacet getEffectiveMinFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDMinFacet)
- {
- return (XSDMinFacet)facet;
- }
- }
- }
- return null;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public EList<XSDFacet> getSyntheticFacets()
- {
- if (syntheticFacets == null)
- {
- syntheticFacets = new EObjectContainmentEList<XSDFacet>(XSDFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS);
- }
- return syntheticFacets;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
- {
- switch (featureID)
- {
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
- return ((InternalEList<?>)getContents()).basicRemove(otherEnd, msgs);
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
- return ((InternalEList<?>)getFacetContents()).basicRemove(otherEnd, msgs);
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
- return ((InternalEList<?>)getFundamentalFacets()).basicRemove(otherEnd, msgs);
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
- return ((InternalEList<?>)getSyntheticFacets()).basicRemove(otherEnd, msgs);
- }
- return super.eInverseRemove(otherEnd, featureID, msgs);
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public Object eGet(int featureID, boolean resolve, boolean coreType)
- {
- switch (featureID)
- {
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY:
- return getVariety();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
- return getFinal();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
- return getLexicalFinal();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
- return getValidFacets();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
- return getContents();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
- return getFacetContents();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
- return getFacets();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
- return getMemberTypeDefinitions();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
- return getFundamentalFacets();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
- return getBaseTypeDefinition();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
- return getPrimitiveTypeDefinition();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
- return getItemTypeDefinition();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ROOT_TYPE_DEFINITION:
- return getRootTypeDefinition();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_FACET:
- return getMinFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_FACET:
- return getMaxFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_INCLUSIVE_FACET:
- return getMaxInclusiveFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_INCLUSIVE_FACET:
- return getMinInclusiveFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_EXCLUSIVE_FACET:
- return getMinExclusiveFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_EXCLUSIVE_FACET:
- return getMaxExclusiveFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LENGTH_FACET:
- return getLengthFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__WHITE_SPACE_FACET:
- return getWhiteSpaceFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ENUMERATION_FACETS:
- return getEnumerationFacets();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PATTERN_FACETS:
- return getPatternFacets();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CARDINALITY_FACET:
- return getCardinalityFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__NUMERIC_FACET:
- return getNumericFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_LENGTH_FACET:
- return getMaxLengthFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_LENGTH_FACET:
- return getMinLengthFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__TOTAL_DIGITS_FACET:
- return getTotalDigitsFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FRACTION_DIGITS_FACET:
- return getFractionDigitsFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ORDERED_FACET:
- return getOrderedFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BOUNDED_FACET:
- return getBoundedFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_FACET:
- return getEffectiveMaxFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_WHITE_SPACE_FACET:
- return getEffectiveWhiteSpaceFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_LENGTH_FACET:
- return getEffectiveMaxLengthFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_FRACTION_DIGITS_FACET:
- return getEffectiveFractionDigitsFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_PATTERN_FACET:
- return getEffectivePatternFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_ENUMERATION_FACET:
- return getEffectiveEnumerationFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_TOTAL_DIGITS_FACET:
- return getEffectiveTotalDigitsFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_LENGTH_FACET:
- return getEffectiveMinLengthFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_LENGTH_FACET:
- return getEffectiveLengthFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_FACET:
- return getEffectiveMinFacet();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
- return getSyntheticFacets();
- }
- 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_SIMPLE_TYPE_DEFINITION__VARIETY:
- setVariety((XSDVariety)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
- getFinal().clear();
- getFinal().addAll((Collection<? extends XSDSimpleFinal>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
- getLexicalFinal().clear();
- getLexicalFinal().addAll((Collection<? extends XSDSimpleFinal>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
- getValidFacets().clear();
- getValidFacets().addAll((Collection<? extends String>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
- getContents().clear();
- getContents().addAll((Collection<? extends XSDSimpleTypeDefinition>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
- getFacetContents().clear();
- getFacetContents().addAll((Collection<? extends XSDConstrainingFacet>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
- getFacets().clear();
- getFacets().addAll((Collection<? extends XSDConstrainingFacet>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
- getMemberTypeDefinitions().clear();
- getMemberTypeDefinitions().addAll((Collection<? extends XSDSimpleTypeDefinition>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
- getFundamentalFacets().clear();
- getFundamentalFacets().addAll((Collection<? extends XSDFundamentalFacet>)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
- setBaseTypeDefinition((XSDSimpleTypeDefinition)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
- setPrimitiveTypeDefinition((XSDSimpleTypeDefinition)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
- setItemTypeDefinition((XSDSimpleTypeDefinition)newValue);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
- getSyntheticFacets().clear();
- getSyntheticFacets().addAll((Collection<? extends XSDFacet>)newValue);
- return;
- }
- super.eSet(featureID, newValue);
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public void eUnset(int featureID)
- {
- switch (featureID)
- {
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY:
- unsetVariety();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
- getFinal().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
- unsetLexicalFinal();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
- getValidFacets().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
- getContents().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
- getFacetContents().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
- getFacets().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
- getMemberTypeDefinitions().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
- getFundamentalFacets().clear();
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
- setBaseTypeDefinition((XSDSimpleTypeDefinition)null);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
- setPrimitiveTypeDefinition((XSDSimpleTypeDefinition)null);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
- setItemTypeDefinition((XSDSimpleTypeDefinition)null);
- return;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
- getSyntheticFacets().clear();
- return;
- }
- super.eUnset(featureID);
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public boolean eIsSet(int featureID)
- {
- switch (featureID)
- {
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY:
- return isSetVariety();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
- return final_ != null && !final_.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
- return isSetLexicalFinal();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
- return validFacets != null && !validFacets.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
- return contents != null && !contents.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
- return facetContents != null && !facetContents.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
- return facets != null && !facets.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
- return memberTypeDefinitions != null && !memberTypeDefinitions.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
- return fundamentalFacets != null && !fundamentalFacets.isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
- return baseTypeDefinition != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
- return primitiveTypeDefinition != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
- return itemTypeDefinition != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ROOT_TYPE_DEFINITION:
- return getRootTypeDefinition() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_FACET:
- return getMinFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_FACET:
- return getMaxFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_INCLUSIVE_FACET:
- return getMaxInclusiveFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_INCLUSIVE_FACET:
- return getMinInclusiveFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_EXCLUSIVE_FACET:
- return getMinExclusiveFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_EXCLUSIVE_FACET:
- return getMaxExclusiveFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LENGTH_FACET:
- return getLengthFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__WHITE_SPACE_FACET:
- return getWhiteSpaceFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ENUMERATION_FACETS:
- return !getEnumerationFacets().isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PATTERN_FACETS:
- return !getPatternFacets().isEmpty();
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CARDINALITY_FACET:
- return getCardinalityFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__NUMERIC_FACET:
- return getNumericFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_LENGTH_FACET:
- return getMaxLengthFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_LENGTH_FACET:
- return getMinLengthFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__TOTAL_DIGITS_FACET:
- return getTotalDigitsFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FRACTION_DIGITS_FACET:
- return getFractionDigitsFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ORDERED_FACET:
- return getOrderedFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BOUNDED_FACET:
- return getBoundedFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_FACET:
- return getEffectiveMaxFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_WHITE_SPACE_FACET:
- return getEffectiveWhiteSpaceFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_LENGTH_FACET:
- return getEffectiveMaxLengthFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_FRACTION_DIGITS_FACET:
- return getEffectiveFractionDigitsFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_PATTERN_FACET:
- return getEffectivePatternFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_ENUMERATION_FACET:
- return getEffectiveEnumerationFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_TOTAL_DIGITS_FACET:
- return getEffectiveTotalDigitsFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_LENGTH_FACET:
- return getEffectiveMinLengthFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_LENGTH_FACET:
- return getEffectiveLengthFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_FACET:
- return getEffectiveMinFacet() != null;
- case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
- return syntheticFacets != null && !syntheticFacets.isEmpty();
- }
- return super.eIsSet(featureID);
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public String toString()
- {
- if (eIsProxy()) return super.toString();
-
- StringBuffer result = new StringBuffer(super.toString());
- result.append(" (variety: ");
- if ((eFlags & VARIETY_ESETFLAG) != 0) result.append(VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET]); else result.append("<unset>");
- result.append(", final: ");
- result.append(final_);
- result.append(", lexicalFinal: ");
- result.append(lexicalFinal);
- result.append(", validFacets: ");
- result.append(validFacets);
- result.append(')');
- return result.toString();
- }
-
- public XSDWhiteSpaceFacet getWhiteSpaceFacet()
- {
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDWhiteSpaceFacet)
- {
- return (XSDWhiteSpaceFacet)facet;
- }
- }
- }
- return null;
- }
-
- public XSDWhiteSpaceFacet getEffectiveWhiteSpaceFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDWhiteSpaceFacet)
- {
- return (XSDWhiteSpaceFacet)facet;
- }
- }
- }
- return null;
- }
-
- public EList<XSDEnumerationFacet> getEnumerationFacets()
- {
- EList<XSDEnumerationFacet> result = new BasicEList<XSDEnumerationFacet>();
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDEnumerationFacet)
- {
- result.add((XSDEnumerationFacet)facet);
- }
- }
- }
- return
- new EcoreEList.UnmodifiableEList.FastCompare<XSDEnumerationFacet>
- (this, XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__ENUMERATION_FACETS, result.size(), result.toArray());
- }
-
- public XSDEnumerationFacet getEffectiveEnumerationFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDEnumerationFacet)
- {
- return (XSDEnumerationFacet)facet;
- }
- }
- }
- return null;
- }
-
- public EList<XSDPatternFacet> getPatternFacets()
- {
- EList<XSDPatternFacet> result = new BasicEList<XSDPatternFacet>();
- if (facetContents != null)
- {
- Object [] facets = facetContents.data();
- for (int i = 0, size = facetContents.size(); i < size; ++i)
- {
- Object facet = facets[i];
- if (facet instanceof XSDPatternFacet)
- {
- result.add((XSDPatternFacet)facet);
- }
- }
- }
- return
- new EcoreEList.UnmodifiableEList.FastCompare<XSDPatternFacet>
- (this, XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__PATTERN_FACETS, result.size(), result.toArray());
- }
-
- public XSDPatternFacet getEffectivePatternFacet()
- {
- if (facets != null)
- {
- Object [] facetData = facets.data();
- for (int i = 0, size = facets.size(); i < size; ++i)
- {
- Object facet = facetData[i];
- if (facet instanceof XSDPatternFacet)
- {
- return (XSDPatternFacet)facet;
- }
- }
- }
- return null;
- }
-
- protected XSDBoundedFacet boundedFacet;
- public XSDBoundedFacet getBoundedFacet()
- {
- if (boundedFacet == null)
- {
- createFundamentalFacets();
- }
- return boundedFacet;
- }
-
- protected XSDCardinalityFacet cardinalityFacet;
- public XSDCardinalityFacet getCardinalityFacet()
- {
- if (cardinalityFacet == null)
- {
- createFundamentalFacets();
- }
- return cardinalityFacet;
- }
-
- protected XSDNumericFacet numericFacet;
- public XSDNumericFacet getNumericFacet()
- {
- if (numericFacet == null)
- {
- createFundamentalFacets();
- }
- return numericFacet;
- }
-
- protected XSDOrderedFacet orderedFacet;
- public XSDOrderedFacet getOrderedFacet()
- {
- if (orderedFacet == null)
- {
- createFundamentalFacets();
- }
- return orderedFacet;
- }
-
- protected void createFundamentalFacets()
- {
- List<XSDFundamentalFacet> theFundamentalFacets = getFundamentalFacets();
- boundedFacet = getXSDFactory().createXSDBoundedFacet();
- cardinalityFacet = getXSDFactory().createXSDCardinalityFacet();
- numericFacet = getXSDFactory().createXSDNumericFacet();
- orderedFacet = getXSDFactory().createXSDOrderedFacet();
- List<XSDFundamentalFacet> list = new ArrayList<XSDFundamentalFacet>(4);
- list.add(boundedFacet);
- list.add(cardinalityFacet);
- list.add(numericFacet);
- list.add(orderedFacet);
- theFundamentalFacets.addAll(list);
- }
-
- protected static EList<String> validFacetsForList;
- public EList<String> getValidFacetsForList()
- {
- if (validFacetsForList == null)
- {
- validFacetsForList = new BasicEList<String>();
- validFacetsForList.add("length");
- validFacetsForList.add("maxLength");
- validFacetsForList.add("minLength");
- validFacetsForList.add("whiteSpace");
- validFacetsForList.add("enumeration");
- validFacetsForList.add("pattern");
- }
- return validFacetsForList;
- }
-
- protected static EList<String> validFacetsForUnion;
- public EList<String> getValidFacetsForUnion()
- {
- if (validFacetsForUnion == null)
- {
- validFacetsForUnion = new BasicEList<String>();
- validFacetsForUnion.add("enumeration");
- validFacetsForUnion.add("pattern");
- }
- return validFacetsForUnion;
- }
-
- @Override
- public XSDTypeDefinition getBaseType()
- {
- XSDTypeDefinition result = getBaseTypeDefinition();
- if (result == this && XSDConstants.isAnyType(this))
- {
- XSDSchema xsdSchema = getSchema();
- if (xsdSchema != null)
- {
- String schemaForSchemaNamespace = xsdSchema.getSchemaForSchemaNamespace();
- XSDSchemaImpl.getSchemaForSchema(schemaForSchemaNamespace).resolveComplexTypeDefinition("anyType");
- }
- }
- return result;
- }
-
- @Override
- public XSDTypeDefinition getRootType()
- {
- return getRootTypeDefinition();
- }
-
- public XSDSimpleTypeDefinition getRootTypeDefinition()
- {
- XSDSimpleTypeDefinition result = this;
- if (!isCircular())
- {
- for (XSDSimpleTypeDefinition theBaseTypeDefinition = result.getBaseTypeDefinition();
- theBaseTypeDefinition != null && !XSDConstants.isURType(theBaseTypeDefinition);
- theBaseTypeDefinition = theBaseTypeDefinition.getBaseTypeDefinition())
- {
- result = theBaseTypeDefinition;
- }
- }
- return result;
- }
-
- @Override
- public XSDSimpleTypeDefinition getSimpleType()
- {
- return this;
- }
-
- @Override
- public XSDParticle getComplexType()
- {
- return null;
- }
-
- protected XSDEnumerationFacetImpl effectiveEnumerationFacet;
- protected XSDPatternFacetImpl effectivePatternFacet;
-
- protected List<XSDConstrainingFacet> mergeFacets()
- {
- List<XSDConstrainingFacet> result = new ArrayList<XSDConstrainingFacet>();
-
- XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
-
- XSDWhiteSpaceFacet xsdWhiteSpaceFacet = getWhiteSpaceFacet();
- if (xsdWhiteSpaceFacet == null)
- {
- xsdWhiteSpaceFacet = theBaseTypeDefinition.getEffectiveWhiteSpaceFacet();
- }
- if (xsdWhiteSpaceFacet != null)
- {
- result.add(xsdWhiteSpaceFacet);
- }
-
- XSDTotalDigitsFacet xsdTotalDigitsFacet = getTotalDigitsFacet();
- if (xsdTotalDigitsFacet == null)
- {
- xsdTotalDigitsFacet = theBaseTypeDefinition.getEffectiveTotalDigitsFacet();
- }
- if (xsdTotalDigitsFacet != null)
- {
- result.add(xsdTotalDigitsFacet);
- }
-
- XSDFractionDigitsFacet xsdFractionDigitsFacet = getFractionDigitsFacet();
- if (xsdFractionDigitsFacet == null)
- {
- xsdFractionDigitsFacet = theBaseTypeDefinition.getEffectiveFractionDigitsFacet();
- }
- if (xsdFractionDigitsFacet != null)
- {
- result.add(xsdFractionDigitsFacet);
- }
-
- XSDLengthFacet xsdLengthFacet = getLengthFacet();
- if (xsdLengthFacet == null)
- {
- xsdLengthFacet = theBaseTypeDefinition.getEffectiveLengthFacet();
- }
- if (xsdLengthFacet != null)
- {
- result.add(xsdLengthFacet);
- }
-
- XSDMinLengthFacet xsdMinLengthFacet = getMinLengthFacet();
- if (xsdMinLengthFacet == null)
- {
- xsdMinLengthFacet = theBaseTypeDefinition.getEffectiveMinLengthFacet();
- }
- if (xsdMinLengthFacet != null)
- {
- result.add(xsdMinLengthFacet);
- }
-
- XSDMaxLengthFacet xsdMaxLengthFacet = getMaxLengthFacet();
- if (xsdMaxLengthFacet == null)
- {
- xsdMaxLengthFacet = theBaseTypeDefinition.getEffectiveMaxLengthFacet();
- }
- if (xsdMaxLengthFacet != null)
- {
- result.add(xsdMaxLengthFacet);
- }
-
- XSDConstrainingFacet maxFacet = getMaxFacet();
- if (maxFacet == null)
- {
- maxFacet = theBaseTypeDefinition.getEffectiveMaxFacet();
- }
- if (maxFacet != null)
- {
- result.add(maxFacet);
- }
-
- XSDConstrainingFacet minFacet = getMinFacet();
- if (minFacet == null)
- {
- minFacet = theBaseTypeDefinition.getEffectiveMinFacet();
- }
- if (minFacet != null)
- {
- result.add(minFacet);
- }
-
- List<XSDEnumerationFacet> enumerationFacets = getEnumerationFacets();
- if (enumerationFacets.isEmpty())
- {
- XSDEnumerationFacet baseEnumerationFacet = theBaseTypeDefinition.getEffectiveEnumerationFacet();
- if (baseEnumerationFacet != null)
- {
- result.add(baseEnumerationFacet);
- }
- }
- else
- {
- if (effectiveEnumerationFacet == null)
- {
- effectiveEnumerationFacet = (XSDEnumerationFacetImpl)getXSDFactory().createXSDEnumerationFacet();
- getSyntheticFacets().add(effectiveEnumerationFacet);
- }
-
- StringBuffer newLexicalValue = new StringBuffer();
- List<Object> newValue = new UniqueEList<Object>();
- List<XSDAnnotation> newAnnotations = new ArrayList<XSDAnnotation>();
-
- for (XSDEnumerationFacet enumerationFacet : enumerationFacets)
- {
- XSDAnnotation xsdAnnotation = enumerationFacet.getAnnotation();
- if (xsdAnnotation != null)
- {
- newAnnotations.add(xsdAnnotation);
- }
-
- if (newValue.addAll(enumerationFacet.getValue()))
- {
- if (newLexicalValue.length() != 0)
- {
- newLexicalValue.append(", ");
- }
- newLexicalValue.append(enumerationFacet.getLexicalValue());
- }
- }
- String newLexicalValueString = newLexicalValue.toString();
-
- List<Object> remainingValues = new ArrayList<Object>(effectiveEnumerationFacet.getValue());
- remainingValues.removeAll(newValue);
- if (!remainingValues.isEmpty())
- {
- effectiveEnumerationFacet.getValue().removeAll(remainingValues);
- }
- if (!newValue.isEmpty())
- {
- setListContentAndOrder(effectiveEnumerationFacet.getValue(), newValue);
- }
-
- List<XSDAnnotation> remainingAnnotations = new ArrayList<XSDAnnotation>(effectiveEnumerationFacet.getAnnotations());
- remainingAnnotations.removeAll(newAnnotations);
- if (!remainingAnnotations.isEmpty())
- {
- effectiveEnumerationFacet.getAnnotations().removeAll(remainingAnnotations);
- }
- if (!newAnnotations.isEmpty())
- {
- setListContentAndOrder(effectiveEnumerationFacet.getAnnotations(), newAnnotations);
- }
-
- if (!newLexicalValueString.equals(effectiveEnumerationFacet.getLexicalValue()))
- {
- effectiveEnumerationFacet.isReconciling = true;
- effectiveEnumerationFacet.setLexicalValue(newLexicalValueString);
- effectiveEnumerationFacet.isReconciling = false;
- }
-
- result.add(effectiveEnumerationFacet);
- }
-
- List<XSDPatternFacet> patternFacets = getPatternFacets();
- if (patternFacets.isEmpty())
- {
- XSDPatternFacet basePatternFacet = theBaseTypeDefinition.getEffectivePatternFacet();
- if (basePatternFacet != null)
- {
- result.add(basePatternFacet);
- }
- }
- else
- {
- if (effectivePatternFacet == null)
- {
- effectivePatternFacet = (XSDPatternFacetImpl)getXSDFactory().createXSDPatternFacet();
- getSyntheticFacets().add(effectivePatternFacet);
- }
-
- List<String> newValue = new ArrayList<String>();
- List<XSDAnnotation> newAnnotations = new ArrayList<XSDAnnotation>();
- XSDPatternFacet effectiveBasePatternFacet = theBaseTypeDefinition.getEffectivePatternFacet();
- if (effectiveBasePatternFacet != null)
- {
- newValue.addAll(effectiveBasePatternFacet.getValue());
- }
-
- StringBuffer combinedPattern = new StringBuffer();
- if (patternFacets.size() == 1)
- {
- XSDPatternFacet xsdPatternFacet = patternFacets.get(0);
- combinedPattern.append(xsdPatternFacet.getLexicalValue());
- XSDAnnotation xsdAnnotation = xsdPatternFacet.getAnnotation();
- if (xsdAnnotation != null)
- {
- newAnnotations.add(xsdAnnotation);
- }
- }
- else
- {
- for (XSDPatternFacet xsdPatternFacet : patternFacets)
- {
- if (combinedPattern.length() != 0)
- {
- combinedPattern.append("|");
- }
- combinedPattern.append("(");
- combinedPattern.append(xsdPatternFacet.getLexicalValue());
- combinedPattern.append(")");
- XSDAnnotation xsdAnnotation = xsdPatternFacet.getAnnotation();
- if (xsdAnnotation != null)
- {
- newAnnotations.add(xsdAnnotation);
- }
- }
- }
- newValue.add(combinedPattern.toString());
-
- List<String> remainingValues = new ArrayList<String>(effectivePatternFacet.getValue());
- remainingValues.removeAll(newValue);
- if (!remainingValues.isEmpty())
- {
- effectivePatternFacet.getValue().removeAll(remainingValues);
- }
- if (!newValue.isEmpty())
- {
- setListContentAndOrder(effectivePatternFacet.getValue(), newValue);
- }
-
- List<XSDAnnotation> remainingAnnotations = new ArrayList<XSDAnnotation>(effectivePatternFacet.getAnnotations());
- remainingAnnotations.removeAll(newAnnotations);
- if (!remainingAnnotations.isEmpty())
- {
- effectivePatternFacet.getAnnotations().removeAll(remainingAnnotations);
- }
- if (!newAnnotations.isEmpty())
- {
- setListContentAndOrder(effectivePatternFacet.getAnnotations(), newAnnotations);
- }
-
- StringBuffer newLexicalValue = new StringBuffer();
- if (newValue.size() == 1)
- {
- newLexicalValue.append(newValue.get(0));
- }
- else
- {
- for (String string : newValue)
- {
- if (newLexicalValue.length() != 0)
- {
- newLexicalValue.append(" & ");
- }
- newLexicalValue.append("(");
- newLexicalValue.append(string);
- newLexicalValue.append(")");
- }
- }
- String newLexicalValueString = newLexicalValue.toString();
- if (!newLexicalValueString.equals(effectivePatternFacet.getLexicalValue()))
- {
- effectivePatternFacet.isReconciling = true;
- effectivePatternFacet.setLexicalValue(newLexicalValueString);
- effectivePatternFacet.isReconciling = false;
- }
-
- result.add(effectivePatternFacet);
- }
-
- return result;
- }
-
-
- 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<XSDSimpleFinal> newLexicalFinal = new ArrayList<XSDSimpleFinal>();
- for (StringTokenizer stringTokenizer = new StringTokenizer(finalDefault); stringTokenizer.hasMoreTokens(); )
- {
- String token = stringTokenizer.nextToken();
- if (token.equals("#all"))
- {
- token = "all";
- }
- XSDSimpleFinal literal = XSDSimpleFinal.get(token);
- if (literal != null)
- {
- newLexicalFinal.add(literal);
- }
- }
- if (!newLexicalFinal.equals(getLexicalFinal()))
- {
- Collection<XSDSimpleFinal> oldContents = new ArrayList<XSDSimpleFinal>(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();
- }
-
- /**
- * This is used to gather selectively
- * the information determined when assessing a literal string
- * with respect to a {@link XSDSimpleTypeDefinition}.
- * It is intended to be very light-weight and flexible.
- *
- * You may begin assessment with a {@link #node}, which handles three cases:
- * if the node is an attribute, it's value is used to determine the literal;
- * if the node is a text node, it's value is used to determine the literal;
- * if the node is an element, it's (one and only) child text node is used to determine the literal in the preceeding case.
- * You may begin assessment with a {@link #literal} by not setting a node.
- * And you may begin assessment with a {@link #normalizedLiteral} by setting neither the node nor the literal.
- *
- * Unless additional {@link #yield} flags are set,
- * assessment will perform but one function:
- * it will set the {@link #diagnostics} to Collections.EMPTY_LIST when the literal fails to assess as valid.
- * Hence, this most-light-weight invocation will only determine validity.
- *
- * You may choose for assessment to yield additional results,
- * i.e., the {@link #value}, the {@link #canonicalLiteral}, and the {@link #diagnostics},
- * using the flags {@link #YIELD_VALUE}, {@link #YIELD_CANONICAL_LITERAL}, {@link #YIELD_DIAGNOSTICS}.
- */
- public static class AssessmentImpl implements XSDSimpleTypeDefinition.Assessment
- {
- public static final int YIELD_VALUE = 0x01;
- public static final int YIELD_CANONICAL_LITERAL = 0x02;
- public static final int YIELD_DIAGNOSTICS = 0x04;
-
- /**
- * This is the simple type definition doing the assessment.
- */
- public XSDSimpleTypeDefinitionImpl xsdSimpleTypeDefinition;
-
- /**
- * This is the simple type definition doing the assessment for an atomic type.
- */
- public XSDAnySimpleType xsdAnySimpleType;
-
- /**
- * This is the context in which the prefix of QNames are resolved.
- */
- public Element context;
-
- /**
- * This is the node whose literal is being assessed.
- */
- public Node node;
-
- /**
- * This is the literal that is being assessed.
- */
- public String literal;
-
- /**
- * This is the normalized value of the literal being assessed.
- */
- public String normalizedLiteral;
-
- /**
- * This determines the results that will be yielded during assessment.
- */
- public int yield;
-
- /**
- * This is the value of the normalized literal in the Java representation of the value space.
- */
- public Object value;
-
- /**
- * This is the canonical literal representation of the literal.
- */
- public String canonicalLiteral;
-
- /**
- * These are the diagnostics that are collected.
- */
- public Collection<XSDDiagnostic> diagnostics;
-
- /**
- * This records any nested assessments that were performed.
- */
- public Collection<Assessment> assessments;
-
- /**
- * This creates an empty instance;
- * minimally, the node or literal would need to be set before using this.
- */
- public AssessmentImpl()
- {
- super();
- }
-
- /**
- * This creates an instance to assess the given node and to yield the specified results.
- */
- public AssessmentImpl(Node node, int yield)
- {
- this.yield = yield;
- this.node = node;
- }
-
- /**
- * This creates an instance to assess the given node and to yield the specified results.
- */
- public AssessmentImpl(Element context, Node node, int yield)
- {
- this.context = context;
- this.yield = yield;
- this.node = node;
- }
-
- /**
- * This creates an instance to assess the given literal and to yield the specified results.
- */
- public AssessmentImpl(String literal, int yield)
- {
- this.yield = yield;
- this.literal = literal;
- }
-
- /**
- * This creates an instance to assess the given literal and to yield the specified results.
- */
- public AssessmentImpl(Element context, String literal, int yield)
- {
- this.context = context;
- this.yield = yield;
- this.literal = literal;
- }
-
- public XSDSimpleTypeDefinition getTypeDefinition()
- {
- return xsdSimpleTypeDefinition;
- }
-
- public Element getContext()
- {
- return context;
- }
-
- public Node getNode()
- {
- return node;
- }
-
- public String getLiteral()
- {
- return literal;
- }
-
- public String getNormalizedLiteral()
- {
- return normalizedLiteral;
- }
-
- public Object getValue()
- {
- return value;
- }
-
- public String getCanonicalLiteral()
- {
- return normalizedLiteral;
- }
-
- public XSDSimpleTypeDefinition getMemberTypeDefinition()
- {
- return null;
- }
-
- public Collection<XSDDiagnostic> getLocalDiagnostics()
- {
- return diagnostics == null ? Collections.<XSDDiagnostic>emptyList() : diagnostics;
- }
-
- public Collection<Assessment> getAssessments()
- {
- return assessments;
- }
-
- public Collection<XSDDiagnostic> getDiagnostics()
- {
- Collection<XSDDiagnostic> result = new ArrayList<XSDDiagnostic>();
- getAllDiagnostics(result);
- return result;
- }
-
- protected void getAllDiagnostics(Collection<XSDDiagnostic> result)
- {
- if (diagnostics != null)
- {
- result.addAll(diagnostics);
- }
- if (assessments != null)
- {
- for (Assessment assessment : assessments)
- {
- ((AssessmentImpl)assessment).getAllDiagnostics(result);
- }
- }
- }
-
- public void format(String noun, String name)
- {
- if (diagnostics != null)
- {
- for (XSDDiagnostic xsdDiagnostic : diagnostics)
- {
- xsdDiagnostic.setMessage(MessageFormat.format(xsdDiagnostic.getMessage(), new Object [] { noun, name }));
- }
- }
- if (assessments != null)
- {
- for (Assessment assessment : assessments)
- {
- assessment.format(noun, name);
- }
- }
- }
-
- public void assignDiagnostics(XSDConcreteComponent xsdConcreteComponent, Element element, String attributeName)
- {
- Collection<XSDDiagnostic> allDiagnostics = getDiagnostics();
- if (!allDiagnostics.isEmpty())
- {
- Node theNode = element;
- if (element != null && element.hasAttributeNS(null, attributeName))
- {
- theNode = element.getAttributeNodeNS(null, attributeName);
- }
-
- Object [] substitutions = new Object [] { XSDPlugin.INSTANCE.getString("attribute_noun"), attributeName };
- for (XSDDiagnostic xsdDiagnostic : allDiagnostics)
- {
- xsdDiagnostic.setMessage(MessageFormat.format(xsdDiagnostic.getMessage(), substitutions));
- xsdDiagnostic.getComponents().add(0, xsdConcreteComponent);
- xsdDiagnostic.setNode(theNode);
- }
- }
- }
-
- public void validate(XSDConstrainingFacet xsdConstrainingFacet)
- {
- if (xsdConstrainingFacet != null &&
- !(xsdConstrainingFacet instanceof XSDPatternFacet ?
- ((XSDPatternFacet)xsdConstrainingFacet).isConstraintSatisfied(normalizedLiteral) :
- xsdConstrainingFacet.isConstraintSatisfied(value)))
- {
- XSDDiagnostic result = ((XSDConcreteComponentImpl)xsdConstrainingFacet).getXSDFactory().createXSDDiagnostic();
- result.setSeverity(XSDDiagnosticSeverity.ERROR_LITERAL);
- Object [] substitutions = createSubstitutions(5);
- substitutions[3] = xsdConstrainingFacet.getLexicalValue();
- substitutions[4] = xsdConstrainingFacet.getSimpleTypeDefinition().getURI();
-
- String message = populateDiagnostic(result, "cvc-" + xsdConstrainingFacet.getFacetName() + "-valid", substitutions);
- if (node == null || node.getNodeType() == Node.TEXT_NODE)
- {
- message = requote(message);
- }
- result.setMessage(XSDPlugin.INSTANCE.getString("_UI_XSDError_message", new Object [] { message}));
- result.setAnnotationURI(XSDConstants.PART2 + "#" + xsdConstrainingFacet.getFacetName());
- result.setPrimaryComponent(xsdConstrainingFacet);
- result.setNode(node);
-
- if (diagnostics == null)
- {
- diagnostics = new ArrayList<XSDDiagnostic>();
- }
- diagnostics.add(result);
- }
- }
-
- protected Object [] createSubstitutions(int length)
- {
- Object [] substitutions = new Object [length];
- if (normalizedLiteral != null)
- {
- substitutions[0] = normalizedLiteral;
- }
- else if (literal != null)
- {
- substitutions[0] = literal;
- }
- else
- {
- substitutions[0] = value;
- }
-
- if (node == null || node.getNodeType() == Node.TEXT_NODE)
- {
- substitutions[1] = "\000";
- substitutions[2] = "\001";
- }
- else if (node.getNodeType() == Node.ATTRIBUTE_NODE)
- {
- substitutions[1] = XSDPlugin.INSTANCE.getString("attribute_noun");
- substitutions[2] = node.getLocalName();
- }
- else if (node.getNodeType() == Node.ELEMENT_NODE)
- {
- substitutions[1] = XSDPlugin.INSTANCE.getString("element_noun");
- substitutions[2] = node.getLocalName();
- }
-
- return substitutions;
- }
-
- protected static String requote(String message)
- {
- StringBuffer stringBuffer = new StringBuffer(message);
- for (int i = stringBuffer.length() - 1; i > 0; --i)
- {
- switch (stringBuffer.charAt(i))
- {
- case 0:
- {
- stringBuffer.replace(i, i + 1, "{0}");
- break;
- }
- case 1:
- {
- stringBuffer.replace(i, i + 1, "{1}");
- break;
- }
- case '\'':
- {
- stringBuffer.insert(i, '\'');
- break;
- }
- case '{': // }
- {
- stringBuffer.replace(i, i + 1, "'{'"); // }
- break;
- }
- }
- }
- return stringBuffer.toString();
- }
-
- public void reportDatatypeDiagnostic()
- {
- XSDDiagnostic result = xsdSimpleTypeDefinition.getXSDFactory().createXSDDiagnostic();
- result.setSeverity(XSDDiagnosticSeverity.ERROR_LITERAL);
- Object [] substitutions = createSubstitutions(4);
- substitutions[3] = xsdSimpleTypeDefinition.getURI();
- XSDSimpleTypeDefinition primitiveTypeDefinition = xsdSimpleTypeDefinition.getPrimitiveTypeDefinition();
- String message =
- populateDiagnostic
- (result,
- primitiveTypeDefinition == null ?
- "cvc-datatype-valid.1.2.3" :
- "cvc-datatype-valid.1.2.1",
- substitutions);
- if (node == null || node.getNodeType() == Node.TEXT_NODE)
- {
- message = requote(message);
- }
- result.setMessage(XSDPlugin.INSTANCE.getString("_UI_XSDError_message", new Object [] { message }));
- if (primitiveTypeDefinition != null)
- {
- result.setAnnotationURI(XSDConstants.PART2 + "#" + primitiveTypeDefinition.getName());
- }
- result.setPrimaryComponent(primitiveTypeDefinition);
- result.setNode(node);
-
- if (diagnostics == null)
- {
- diagnostics = new ArrayList<XSDDiagnostic>();
- }
- diagnostics.add(result);
- }
- }
-
- public XSDSimpleTypeDefinition.Assessment assess(Node node)
- {
- return assess(null, node);
- }
-
- public XSDSimpleTypeDefinition.Assessment assess(Element context, Node node)
- {
- AssessmentImpl assessment = new AssessmentImpl(context, node, 0);
- return assess(assessment);
- }
-
- public XSDSimpleTypeDefinition.Assessment assess(String literal)
- {
- return assess(null, literal);
- }
-
- public XSDSimpleTypeDefinition.Assessment assess(Element context, String literal)
- {
- AssessmentImpl assessment = new AssessmentImpl(context, literal, 0);
- return assess(assessment);
- }
-
- public AssessmentImpl assess(AssessmentImpl assessment)
- {
- return assess(assessment, true);
- }
-
- public AssessmentImpl assess(AssessmentImpl assessment, boolean validate)
- {
- assessment.xsdSimpleTypeDefinition = this;
-
- // Determine the literal from the node.
- //
- if (assessment.literal == null && assessment.node != null)
- {
- switch (assessment.node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- {
- assessment.literal = assessment.node.getNodeValue();
- break;
- }
- case Node.ELEMENT_NODE:
- {
- Element element = (Element)assessment.node;
- StringBuffer text = new StringBuffer();
- for (Node child = element.getFirstChild(); child != null; child = child.getNextSibling())
- {
- switch (child.getNodeType())
- {
- case Node.TEXT_NODE:
- case Node.CDATA_SECTION_NODE:
- {
- text.append(child.getNodeValue());
- break;
- }
- }
- }
- assessment.literal = text.toString();
- break;
- }
- case Node.TEXT_NODE:
- case Node.CDATA_SECTION_NODE:
- {
- assessment.literal = assessment.node.getNodeValue();
- break;
- }
- }
- }
-
- // Determine the normalized literal from the literal.
- //
- if (assessment.normalizedLiteral == null && assessment.literal != null)
- {
- assessment.normalizedLiteral = assessment.literal;
- XSDWhiteSpaceFacet effectiveWhiteSpaceFacet = getEffectiveWhiteSpaceFacet();
- if (effectiveWhiteSpaceFacet != null)
- {
- assessment.normalizedLiteral = effectiveWhiteSpaceFacet.getNormalizedLiteral(assessment.literal);
- }
- }
-
- if (!isCircular())
- {
- if (validate)
- {
- assessment.validate(getEffectivePatternFacet());
- }
-
- switch (getVariety().getValue())
- {
- case XSDVariety.ATOMIC:
- {
- XSDSimpleTypeDefinition thePrimitiveTypeDefinition = getPrimitiveTypeDefinition();
- if (thePrimitiveTypeDefinition != null)
- {
- XSDAnySimpleType xsdAnySimpleType = XSDTypeRegister.getTypeImplementer(thePrimitiveTypeDefinition.getName());
- xsdAnySimpleType.assess(assessment);
- if (validate && assessment.diagnostics == null)
- {
- assessment.validate(getEffectiveLengthFacet());
- assessment.validate(getEffectiveMinLengthFacet());
- assessment.validate(getEffectiveMaxLengthFacet());
-
- assessment.validate(getEffectiveTotalDigitsFacet());
- assessment.validate(getEffectiveFractionDigitsFacet());
-
- if (XSDOrdered.FALSE_LITERAL != getOrderedFacet().getValue())
- {
- assessment.validate(getEffectiveMinFacet());
- assessment.validate(getEffectiveMaxFacet());
- }
- }
- }
- break;
- }
- case XSDVariety.UNION:
- {
- boolean good = false;
- for (XSDSimpleTypeDefinition memberTypeDefinition : getMemberTypeDefinitions())
- {
- AssessmentImpl nestedAssessment = new AssessmentImpl(assessment.context, assessment.node, assessment.yield);
- nestedAssessment.literal = nestedAssessment.normalizedLiteral = assessment.normalizedLiteral;
-
- ((XSDSimpleTypeDefinitionImpl)memberTypeDefinition).assess(nestedAssessment);
-
- if (nestedAssessment.diagnostics == null)
- {
- if (assessment.assessments == null)
- {
- assessment.assessments = new ArrayList<Assessment>();
- }
- assessment.assessments.add(nestedAssessment);
- assessment.value = nestedAssessment.value;
- good = true;
- break;
- }
- }
-
- if (validate && !good)
- {
- assessment.reportDatatypeDiagnostic();
- }
-
- break;
- }
- case XSDVariety.LIST:
- {
- XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
- if (theItemTypeDefinition != null)
- {
- List<Object> list = new ArrayList<Object>();
- assessment.value = list;
- int length = 0;
- for (StringTokenizer tokens = new StringTokenizer(assessment.normalizedLiteral, " ");
- tokens.hasMoreTokens();
- ++length)
- {
- AssessmentImpl nestedAssessment = new AssessmentImpl(assessment.context, assessment.node, assessment.yield);
- nestedAssessment.literal = nestedAssessment.normalizedLiteral = tokens.nextToken();
- ((XSDSimpleTypeDefinitionImpl)getItemTypeDefinition()).assess(nestedAssessment, validate);
- if (nestedAssessment.value != null)
- {
- list.add(nestedAssessment.value);
- }
- if (assessment.assessments == null)
- {
- assessment.assessments = new ArrayList<Assessment>();
- }
- assessment.assessments.add(nestedAssessment);
- }
-
- if (validate)
- {
- assessment.validate(getEffectiveLengthFacet());
- assessment.validate(getEffectiveMinLengthFacet());
- assessment.validate(getEffectiveMaxLengthFacet());
- }
- }
- break;
- }
- }
-
- if (validate)
- {
- assessment.validate(getEffectiveEnumerationFacet());
- }
- }
-
- return assessment;
- }
-
- public boolean isValidLiteral(String literal)
- {
- return isValidLiteral(null, literal);
- }
-
- public boolean isValidLiteral(Element context, String literal)
- {
- AssessmentImpl assessment = new AssessmentImpl(context, literal, 0);
- assess(assessment);
- return assessment.diagnostics == null;
- }
-
- public Object getValue(String literal)
- {
- return getValue(null, literal);
-
- }
-
- public Object getValue(Element context, String literal)
- {
- AssessmentImpl assessment = new AssessmentImpl(context, literal, 0);
- assess(assessment, false);
- return assessment.value;
- }
-
- public String getCanonicalLiteral(String literal)
- {
- AssessmentImpl assessment = new AssessmentImpl(null, literal, 0);
- assess(assessment, false);
- return assessment.normalizedLiteral;
- }
-
- public String getNormalizedLiteral(String literal)
- {
- String result = literal;
- XSDWhiteSpaceFacet effectiveWhiteSpaceFacet = getEffectiveWhiteSpaceFacet();
- if (effectiveWhiteSpaceFacet != null)
- {
- result = effectiveWhiteSpaceFacet.getNormalizedLiteral(result);
- }
- return result;
- }
-
- public boolean equalValues(Object value1, Object value2)
- {
- return value1 == null ? value2 == null : value1.equals(value2);
- }
-
- public boolean equalLiterals(String literal1, String literal2)
- {
- return equalLiterals(null, literal1, null, literal2);
- }
-
- public boolean equalLiterals(Element context1, String literal1, Element context2, String literal2)
- {
- return equalValues(getValue(context1, literal1), getValue(context2, literal2));
- }
-
- public int compareValues(Object value1, Object value2)
- {
- if (XSDOrdered.FALSE_LITERAL != getOrderedFacet().getValue())
- {
- XSDSimpleTypeDefinition thePrimitiveTypeDefinition = getPrimitiveTypeDefinition();
- if (thePrimitiveTypeDefinition != null)
- {
- XSDAnySimpleType xsdAnySimpleType =
- XSDTypeRegister.getTypeImplementer(thePrimitiveTypeDefinition.getName());
- return
- value1 == null ?
- value2 == null ?
- 0 :
- -1 :
- value2 == null ?
- 1 :
- xsdAnySimpleType.compareValues(value1, value2);
- }
- }
- return 0;
- }
-
- public int compareLiterals(String literal1, String literal2)
- {
- return compareLiterals(null, literal1, null, literal2);
- }
-
- public int compareLiterals(Element context1, String literal1, Element context2, String literal2)
- {
- return compareValues(getValue(context1, literal1), getValue(context2, literal2));
- }
-
- @Override
- public XSDTypeDefinition getBadTypeDerivation(XSDTypeDefinition xsdTypeDefinition, boolean extension, boolean restriction)
- {
- if (xsdTypeDefinition == this)
- {
- return null;
- }
- else if (!restriction ||
- getBaseTypeDefinition() == null ||
- getBaseTypeDefinition().getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
- {
- return this;
- }
- else
- {
- XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
- XSDTypeDefinition result = theBaseTypeDefinition;
- if (theBaseTypeDefinition == xsdTypeDefinition)
- {
- return null;
- }
- else if (!XSDConstants.isURType(theBaseTypeDefinition))
- {
- result = theBaseTypeDefinition.getBadTypeDerivation(xsdTypeDefinition, extension, restriction);
- if (result == null)
- {
- return null;
- }
- }
-
- switch (getVariety().getValue())
- {
- case XSDVariety.LIST:
- case XSDVariety.UNION:
- {
- if (XSDConstants.isURType(xsdTypeDefinition))
- {
- return null;
- }
- }
- }
-
- if (xsdTypeDefinition instanceof XSDSimpleTypeDefinition)
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)xsdTypeDefinition;
- if (xsdSimpleTypeDefinition.getVariety() == XSDVariety.UNION_LITERAL)
- {
- for (XSDSimpleTypeDefinition memberTypeDefinition : xsdSimpleTypeDefinition.getMemberTypeDefinitions())
- {
- XSDTypeDefinition memberResult = getBadTypeDerivation(memberTypeDefinition, extension, restriction);
- if (memberResult == null)
- {
- return null;
- }
- }
- }
- }
- else if (XSDConstants.isAnyType(xsdTypeDefinition))
- {
- return null;
- }
-
- return result;
- }
- }
-
- @Override
- public XSDConcreteComponent cloneConcreteComponent(boolean deep, boolean shareDOM)
- {
- XSDSimpleTypeDefinitionImpl clonedSimpleTypeDefinition =
- (XSDSimpleTypeDefinitionImpl)getXSDFactory().createXSDSimpleTypeDefinition();
- clonedSimpleTypeDefinition.isReconciling = true;
-
- XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
-
- if (getName() != null)
- {
- clonedSimpleTypeDefinition.setName(getName());
- }
- if (isSetLexicalFinal())
- {
- if (!getLexicalFinal().isEmpty())
- {
- clonedSimpleTypeDefinition.getLexicalFinal().addAll(getLexicalFinal());
- }
- else
- {
- clonedSimpleTypeDefinition.getLexicalFinal().clear();
- }
- }
-
- if (!(getContainer() instanceof XSDComplexTypeDefinition))
- {
- if (getItemTypeDefinition() != null && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
- {
- if (!getContents().contains(getItemTypeDefinition()))
- {
- XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
- clonedSimpleTypeDefinition.setItemTypeDefinition
- (createUnresolvedSimpleTypeDefinition
- (theItemTypeDefinition.getTargetNamespace(), theItemTypeDefinition.getName()));
- }
- }
- else if (!getMemberTypeDefinitions().isEmpty() && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
- {
- List<XSDSimpleTypeDefinition> unresolvedMembers = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions().size());
- for (XSDSimpleTypeDefinition memberTypeDefinition : getMemberTypeDefinitions())
- {
- if (getContents().contains(memberTypeDefinition))
- {
- break;
- }
- else
- {
- unresolvedMembers.add
- (createUnresolvedSimpleTypeDefinition
- (memberTypeDefinition.getTargetNamespace(), memberTypeDefinition.getName()));
- }
- }
- if (!unresolvedMembers.isEmpty())
- {
- clonedSimpleTypeDefinition.getMemberTypeDefinitions().addAll(unresolvedMembers);
- }
- }
- else
- {
- if (getBaseTypeDefinition() != null && !getContents().contains(getBaseTypeDefinition()))
- {
- clonedSimpleTypeDefinition.setBaseTypeDefinition
- (createUnresolvedSimpleTypeDefinition
- (theBaseTypeDefinition.getTargetNamespace(), theBaseTypeDefinition.getName()));
- }
- }
- }
-
- if (deep)
- {
- if (getAnnotation() != null)
- {
- clonedSimpleTypeDefinition.setAnnotation((XSDAnnotation)getAnnotation().cloneConcreteComponent(deep, shareDOM));
- }
- if (getDerivationAnnotation() != null)
- {
- clonedSimpleTypeDefinition.setDerivationAnnotation((XSDAnnotation)getDerivationAnnotation().cloneConcreteComponent(deep, shareDOM));
- }
- if (!getContents().isEmpty())
- {
- clonedSimpleTypeDefinition.getContents().addAll(cloneConcreteComponents(getContents(), deep, shareDOM));
- if (getItemTypeDefinition() != null && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
- {
- clonedSimpleTypeDefinition.setItemTypeDefinition(clonedSimpleTypeDefinition.getContents().get(0));
- }
- else if (!getMemberTypeDefinitions().isEmpty() && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
- {
- clonedSimpleTypeDefinition.getMemberTypeDefinitions().addAll(clonedSimpleTypeDefinition.getContents());
- }
- else
- {
- clonedSimpleTypeDefinition.setBaseTypeDefinition(clonedSimpleTypeDefinition.getContents().get(0));
- }
- }
- if (!getFacetContents().isEmpty())
- {
- clonedSimpleTypeDefinition.getFacetContents().addAll(cloneConcreteComponents(getFacetContents(), deep, shareDOM));
- }
- }
-
- if (shareDOM && getElement() != null)
- {
- clonedSimpleTypeDefinition.setElement(getElement());
- }
-
- clonedSimpleTypeDefinition.isReconciling = shareDOM;
- return clonedSimpleTypeDefinition;
- }
-}
+/**
+ * Copyright (c) 2002-2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 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.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+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.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.UniqueEList;
+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.EcoreEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.xsd.XSDAnnotation;
+import org.eclipse.xsd.XSDBoundedFacet;
+import org.eclipse.xsd.XSDCardinality;
+import org.eclipse.xsd.XSDCardinalityFacet;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDComponent;
+import org.eclipse.xsd.XSDConcreteComponent;
+import org.eclipse.xsd.XSDConstrainingFacet;
+import org.eclipse.xsd.XSDDerivationMethod;
+import org.eclipse.xsd.XSDDiagnostic;
+import org.eclipse.xsd.XSDDiagnosticSeverity;
+import org.eclipse.xsd.XSDEnumerationFacet;
+import org.eclipse.xsd.XSDFacet;
+import org.eclipse.xsd.XSDFactory;
+import org.eclipse.xsd.XSDFeature;
+import org.eclipse.xsd.XSDFractionDigitsFacet;
+import org.eclipse.xsd.XSDFundamentalFacet;
+import org.eclipse.xsd.XSDLengthFacet;
+import org.eclipse.xsd.XSDMaxExclusiveFacet;
+import org.eclipse.xsd.XSDMaxFacet;
+import org.eclipse.xsd.XSDMaxInclusiveFacet;
+import org.eclipse.xsd.XSDMaxLengthFacet;
+import org.eclipse.xsd.XSDMinExclusiveFacet;
+import org.eclipse.xsd.XSDMinFacet;
+import org.eclipse.xsd.XSDMinInclusiveFacet;
+import org.eclipse.xsd.XSDMinLengthFacet;
+import org.eclipse.xsd.XSDNumericFacet;
+import org.eclipse.xsd.XSDOrdered;
+import org.eclipse.xsd.XSDOrderedFacet;
+import org.eclipse.xsd.XSDPackage;
+import org.eclipse.xsd.XSDParticle;
+import org.eclipse.xsd.XSDPatternFacet;
+import org.eclipse.xsd.XSDPlugin;
+import org.eclipse.xsd.XSDProhibitedSubstitutions;
+import org.eclipse.xsd.XSDRedefine;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSimpleFinal;
+import org.eclipse.xsd.XSDSimpleTypeDefinition;
+import org.eclipse.xsd.XSDTotalDigitsFacet;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.eclipse.xsd.XSDVariety;
+import org.eclipse.xsd.XSDWhiteSpaceFacet;
+import org.eclipse.xsd.impl.type.XSDAnySimpleType;
+import org.eclipse.xsd.impl.type.XSDTypeRegister;
+import org.eclipse.xsd.util.XSDConstants;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Simple Type Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getVariety <em>Variety</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFinal <em>Final</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getLexicalFinal <em>Lexical Final</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getValidFacets <em>Valid Facets</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getContents <em>Contents</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFacetContents <em>Facet Contents</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFacets <em>Facets</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMemberTypeDefinitions <em>Member Type Definitions</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFundamentalFacets <em>Fundamental Facets</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getBaseTypeDefinition <em>Base Type Definition</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getPrimitiveTypeDefinition <em>Primitive Type Definition</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getItemTypeDefinition <em>Item Type Definition</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getRootTypeDefinition <em>Root Type Definition</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinFacet <em>Min Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxFacet <em>Max Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxInclusiveFacet <em>Max Inclusive Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinInclusiveFacet <em>Min Inclusive Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinExclusiveFacet <em>Min Exclusive Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxExclusiveFacet <em>Max Exclusive Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getLengthFacet <em>Length Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getWhiteSpaceFacet <em>White Space Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEnumerationFacets <em>Enumeration Facets</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getPatternFacets <em>Pattern Facets</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getCardinalityFacet <em>Cardinality Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getNumericFacet <em>Numeric Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMaxLengthFacet <em>Max Length Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getMinLengthFacet <em>Min Length Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getTotalDigitsFacet <em>Total Digits Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getFractionDigitsFacet <em>Fraction Digits Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getOrderedFacet <em>Ordered Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getBoundedFacet <em>Bounded Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMaxFacet <em>Effective Max Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveWhiteSpaceFacet <em>Effective White Space Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMaxLengthFacet <em>Effective Max Length Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveFractionDigitsFacet <em>Effective Fraction Digits Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectivePatternFacet <em>Effective Pattern Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveEnumerationFacet <em>Effective Enumeration Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveTotalDigitsFacet <em>Effective Total Digits Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMinLengthFacet <em>Effective Min Length Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveLengthFacet <em>Effective Length Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getEffectiveMinFacet <em>Effective Min Facet</em>}</li>
+ * <li>{@link org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl#getSyntheticFacets <em>Synthetic Facets</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class XSDSimpleTypeDefinitionImpl
+ extends XSDTypeDefinitionImpl
+ implements XSDSimpleTypeDefinition
+{
+ /**
+ * The default value of the '{@link #getVariety() <em>Variety</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getVariety()
+ * @generated
+ * @ordered
+ */
+ protected static final XSDVariety VARIETY_EDEFAULT = XSDVariety.ATOMIC_LITERAL;
+
+ /**
+ * The offset of the flags representing the value of the '{@link #getVariety() <em>Variety</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected static final int VARIETY_EFLAG_OFFSET = 8;
+
+ /**
+ * The flags representing the default value of the '{@link #getVariety() <em>Variety</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected static final int VARIETY_EFLAG_DEFAULT = VARIETY_EDEFAULT.ordinal() << VARIETY_EFLAG_OFFSET;
+
+ /**
+ * The array of enumeration values for '{@link XSDVariety Variety}'
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ private static final XSDVariety[] VARIETY_EFLAG_VALUES = XSDVariety.values();
+
+ /**
+ * The flags representing the value of the '{@link #getVariety() <em>Variety</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getVariety()
+ * @generated
+ * @ordered
+ */
+ protected static final int VARIETY_EFLAG = 0x3 << VARIETY_EFLAG_OFFSET;
+
+ /**
+ * The flag representing whether the Variety attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ protected static final int VARIETY_ESETFLAG = 1 << 10;
+
+ /**
+ * The cached value of the '{@link #getFinal() <em>Final</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFinal()
+ * @generated
+ * @ordered
+ */
+ protected EList<XSDSimpleFinal> final_;
+
+ /**
+ * 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<XSDSimpleFinal> lexicalFinal;
+
+ /**
+ * The cached value of the '{@link #getValidFacets() <em>Valid Facets</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValidFacets()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> validFacets;
+
+ /**
+ * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getContents()
+ * @generated
+ * @ordered
+ */
+ protected EList<XSDSimpleTypeDefinition> contents;
+
+ /**
+ * The cached value of the '{@link #getFacetContents() <em>Facet Contents</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFacetContents()
+ * @generated NOT
+ * @ordered
+ */
+ protected EcoreEList<XSDConstrainingFacet> facetContents = null;
+
+ /**
+ * The cached value of the '{@link #getFacets() <em>Facets</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFacets()
+ * @generated NOT
+ * @ordered
+ */
+ protected EcoreEList<XSDConstrainingFacet> facets = null;
+
+ /**
+ * The cached value of the '{@link #getMemberTypeDefinitions() <em>Member Type Definitions</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMemberTypeDefinitions()
+ * @generated
+ * @ordered
+ */
+ protected EList<XSDSimpleTypeDefinition> memberTypeDefinitions;
+
+ /**
+ * The cached value of the '{@link #getFundamentalFacets() <em>Fundamental Facets</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFundamentalFacets()
+ * @generated
+ * @ordered
+ */
+ protected EList<XSDFundamentalFacet> fundamentalFacets;
+
+ /**
+ * The cached value of the '{@link #getBaseTypeDefinition() <em>Base Type Definition</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getBaseTypeDefinition()
+ * @generated
+ * @ordered
+ */
+ protected XSDSimpleTypeDefinition baseTypeDefinition;
+
+ /**
+ * The cached value of the '{@link #getPrimitiveTypeDefinition() <em>Primitive Type Definition</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPrimitiveTypeDefinition()
+ * @generated
+ * @ordered
+ */
+ protected XSDSimpleTypeDefinition primitiveTypeDefinition;
+
+ /**
+ * The cached value of the '{@link #getItemTypeDefinition() <em>Item Type Definition</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getItemTypeDefinition()
+ * @generated
+ * @ordered
+ */
+ protected XSDSimpleTypeDefinition itemTypeDefinition;
+
+ /**
+ * The cached value of the '{@link #getSyntheticFacets() <em>Synthetic Facets</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSyntheticFacets()
+ * @generated
+ * @ordered
+ */
+ protected EList<XSDFacet> syntheticFacets;
+
+ public static XSDSimpleTypeDefinition createSimpleTypeDefinition(Node node)
+ {
+ switch (XSDConstants.nodeType(node))
+ {
+ case XSDConstants.SIMPLETYPE_ELEMENT:
+ case XSDConstants.SIMPLECONTENT_ELEMENT:
+ {
+ XSDSimpleTypeDefinition xsdSimpleTypeDefinition = XSDFactory.eINSTANCE.createXSDSimpleTypeDefinition();
+ xsdSimpleTypeDefinition.setElement((Element)node);
+ return xsdSimpleTypeDefinition;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected XSDSimpleTypeDefinitionImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public XSDVariety getVariety()
+ {
+ return VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET];
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setVariety(XSDVariety newVariety)
+ {
+ XSDVariety oldVariety = VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET];
+ if (newVariety == null) newVariety = VARIETY_EDEFAULT;
+ eFlags = eFlags & ~VARIETY_EFLAG | newVariety.ordinal() << VARIETY_EFLAG_OFFSET;
+ boolean oldVarietyESet = (eFlags & VARIETY_ESETFLAG) != 0;
+ eFlags |= VARIETY_ESETFLAG;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY, oldVariety, newVariety, !oldVarietyESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetVariety()
+ {
+ XSDVariety oldVariety = VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET];
+ boolean oldVarietyESet = (eFlags & VARIETY_ESETFLAG) != 0;
+ eFlags = eFlags & ~VARIETY_EFLAG | VARIETY_EFLAG_DEFAULT;
+ eFlags &= ~VARIETY_ESETFLAG;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.UNSET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY, oldVariety, VARIETY_EDEFAULT, oldVarietyESet));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetVariety()
+ {
+ return (eFlags & VARIETY_ESETFLAG) != 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDSimpleFinal> getFinal()
+ {
+ if (final_ == null)
+ {
+ final_ = new EDataTypeUniqueEList<XSDSimpleFinal>(XSDSimpleFinal.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL);
+ }
+ return final_;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDSimpleFinal> getLexicalFinal()
+ {
+ if (lexicalFinal == null)
+ {
+ lexicalFinal = new EDataTypeUniqueEList.Unsettable<XSDSimpleFinal>(XSDSimpleFinal.class, this, XSDPackage.XSD_SIMPLE_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<String> getValidFacets()
+ {
+ if (validFacets == null)
+ {
+ validFacets = new EDataTypeUniqueEList<String>(String.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS);
+ }
+ return validFacets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDSimpleTypeDefinition> getContents()
+ {
+ if (contents == null)
+ {
+ contents = new EObjectContainmentEList<XSDSimpleTypeDefinition>(XSDSimpleTypeDefinition.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS);
+ }
+ return contents;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDConstrainingFacet> getFacetContents()
+ {
+ if (facetContents == null)
+ {
+ facetContents = new EObjectContainmentEList<XSDConstrainingFacet>(XSDConstrainingFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS);
+ }
+ return facetContents;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDConstrainingFacet> getFacets()
+ {
+ if (facets == null)
+ {
+ facets = new EObjectEList<XSDConstrainingFacet>(XSDConstrainingFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS);
+ }
+ return facets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDSimpleTypeDefinition> getMemberTypeDefinitions()
+ {
+ if (memberTypeDefinitions == null)
+ {
+ memberTypeDefinitions = new EObjectEList<XSDSimpleTypeDefinition>(XSDSimpleTypeDefinition.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS);
+ }
+ return memberTypeDefinitions;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDFundamentalFacet> getFundamentalFacets()
+ {
+ if (fundamentalFacets == null)
+ {
+ fundamentalFacets = new EObjectContainmentEList<XSDFundamentalFacet>(XSDFundamentalFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS);
+ }
+ return fundamentalFacets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public XSDSimpleTypeDefinition getBaseTypeDefinition()
+ {
+ return baseTypeDefinition;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setBaseTypeDefinition(XSDSimpleTypeDefinition newBaseTypeDefinition)
+ {
+ XSDSimpleTypeDefinition oldBaseTypeDefinition = baseTypeDefinition;
+ baseTypeDefinition = newBaseTypeDefinition;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION, oldBaseTypeDefinition, baseTypeDefinition));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public XSDSimpleTypeDefinition getPrimitiveTypeDefinition()
+ {
+ return primitiveTypeDefinition;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setPrimitiveTypeDefinition(XSDSimpleTypeDefinition newPrimitiveTypeDefinition)
+ {
+ XSDSimpleTypeDefinition oldPrimitiveTypeDefinition = primitiveTypeDefinition;
+ primitiveTypeDefinition = newPrimitiveTypeDefinition;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION, oldPrimitiveTypeDefinition, primitiveTypeDefinition));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public XSDSimpleTypeDefinition getItemTypeDefinition()
+ {
+ return itemTypeDefinition;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setItemTypeDefinition(XSDSimpleTypeDefinition newItemTypeDefinition)
+ {
+ XSDSimpleTypeDefinition oldItemTypeDefinition = itemTypeDefinition;
+ itemTypeDefinition = newItemTypeDefinition;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION, oldItemTypeDefinition, itemTypeDefinition));
+ }
+
+ @Override
+ public Element createElement()
+ {
+ XSDComplexTypeDefinition xsdComplexTypeDefinition =
+ getContainer() instanceof XSDComplexTypeDefinition ?
+ (XSDComplexTypeDefinition)getContainer() :
+ null;
+
+ Element newElement =
+ createElement
+ (xsdComplexTypeDefinition != null ?
+ XSDConstants.SIMPLECONTENT_ELEMENT :
+ XSDConstants.SIMPLETYPE_ELEMENT);
+ setElement(newElement);
+
+ Element childElement = createChildElement();
+ newElement.appendChild(childElement);
+ return newElement;
+ }
+
+ protected Element createChildElement()
+ {
+ return createElement(getRequiredChildElementNodeType());
+ }
+
+ protected int getRequiredChildElementNodeType()
+ {
+ XSDComplexTypeDefinition xsdComplexTypeDefinition =
+ getContainer() instanceof XSDComplexTypeDefinition ?
+ (XSDComplexTypeDefinition)getContainer() :
+ null;
+
+ XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+ if (getItemTypeDefinition() != null && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
+ {
+ return XSDConstants.LIST_ELEMENT;
+ }
+ else if (!getMemberTypeDefinitions().isEmpty() && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
+ {
+ return XSDConstants.UNION_ELEMENT;
+ }
+ else
+ {
+ return
+ xsdComplexTypeDefinition == null || XSDDerivationMethod.EXTENSION_LITERAL != xsdComplexTypeDefinition.getDerivationMethod() ?
+ XSDConstants.RESTRICTION_ELEMENT :
+ XSDConstants.EXTENSION_ELEMENT;
+ }
+ }
+
+ @Override
+ protected void patch()
+ {
+ super.patch();
+
+ if (!(getContainer() instanceof XSDComplexTypeDefinition))
+ {
+ XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+ if (theBaseTypeDefinition != null && (forceResolve || theBaseTypeDefinition.getContainer() == null))
+ {
+ theBaseTypeDefinition = resolveSimpleTypeDefinition(theBaseTypeDefinition.getTargetNamespace(), theBaseTypeDefinition.getName());
+ }
+ theBaseTypeDefinition = handleNewBaseTypeDefinition(theBaseTypeDefinition);
+ if (theBaseTypeDefinition == null || !theBaseTypeDefinition.isSetVariety() || theBaseTypeDefinition.getVariety() != getVariety())
+ {
+ XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
+ if (theItemTypeDefinition != null)
+ {
+ if (forceResolve || theItemTypeDefinition.getContainer() == null)
+ {
+ XSDSimpleTypeDefinition newItemTypeDefinition =
+ resolveSimpleTypeDefinition(theItemTypeDefinition.getTargetNamespace(), theItemTypeDefinition.getName());
+ if ((forceResolve || newItemTypeDefinition.getContainer() != null) && newItemTypeDefinition != theItemTypeDefinition)
+ {
+ setItemTypeDefinition(newItemTypeDefinition);
+ }
+ }
+ }
+ else
+ {
+ for (ListIterator<XSDSimpleTypeDefinition> theMemberTypeDefinitions = getMemberTypeDefinitions().listIterator();
+ theMemberTypeDefinitions.hasNext(); )
+ {
+ XSDSimpleTypeDefinition theMemberTypeDefinition = theMemberTypeDefinitions.next();
+ if (forceResolve || theMemberTypeDefinition.getContainer() == null)
+ {
+ XSDSimpleTypeDefinition newMemberTypeDefinition =
+ resolveSimpleTypeDefinition(theMemberTypeDefinition.getTargetNamespace(), theMemberTypeDefinition.getName());
+ if ((forceResolve || newMemberTypeDefinition.getContainer() != null) && newMemberTypeDefinition != theMemberTypeDefinition)
+ {
+ theMemberTypeDefinitions.set(newMemberTypeDefinition);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ XSDSchema xsdSchema = getSchema();
+ if (xsdSchema != null)
+ {
+ List<XSDSimpleFinal> newFinal = new ArrayList<XSDSimpleFinal>();
+ if (!isSetLexicalFinal())
+ {
+ for (XSDProhibitedSubstitutions value : xsdSchema.getFinalDefault())
+ {
+ switch (value.getValue())
+ {
+ case XSDProhibitedSubstitutions.ALL:
+ {
+ newFinal.add(XSDSimpleFinal.RESTRICTION_LITERAL);
+ newFinal.add(XSDSimpleFinal.LIST_LITERAL);
+ newFinal.add(XSDSimpleFinal.UNION_LITERAL);
+ break;
+ }
+ case XSDProhibitedSubstitutions.RESTRICTION:
+ {
+ newFinal.add(XSDSimpleFinal.RESTRICTION_LITERAL);
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ for (XSDSimpleFinal value : getLexicalFinal())
+ {
+ switch (value.getValue())
+ {
+ case XSDSimpleFinal.ALL:
+ {
+ newFinal.add(XSDSimpleFinal.RESTRICTION_LITERAL);
+ newFinal.add(XSDSimpleFinal.LIST_LITERAL);
+ newFinal.add(XSDSimpleFinal.UNION_LITERAL);
+ break;
+ }
+ default:
+ {
+ newFinal.add(value);
+ break;
+ }
+ }
+ }
+ }
+
+ Collection<XSDSimpleFinal> oldFinal = new ArrayList<XSDSimpleFinal>(getFinal());
+ oldFinal.removeAll(newFinal);
+ if (!oldFinal.isEmpty())
+ {
+ getFinal().removeAll(oldFinal);
+ }
+ setListContentAndOrder(getFinal(), newFinal);
+ }
+ }
+
+ @Override
+ protected void traverseToRootForAnalysis()
+ {
+ analysisState = UNANALYZED;
+ super.traverseToRootForAnalysis();
+ }
+
+ protected XSDWhiteSpaceFacet effectiveWhiteSpaceFacet;
+ @Override
+ protected void handleAnalysis()
+ {
+ XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+
+ XSDConcreteComponent container = getContainer();
+ if (container instanceof XSDComplexTypeDefinition)
+ {
+ if (!getContents().contains(theBaseTypeDefinition))
+ {
+ XSDComplexTypeDefinition xsdComplexTypeDefinition = (XSDComplexTypeDefinitionImpl)container;
+ XSDTypeDefinition complexBaseTypeDefinition = xsdComplexTypeDefinition.getBaseTypeDefinition();
+ if (complexBaseTypeDefinition != null)
+ {
+ ((XSDConcreteComponentImpl)complexBaseTypeDefinition).analyze();
+ theBaseTypeDefinition = handleNewBaseTypeDefinition(complexBaseTypeDefinition.getSimpleType());
+ }
+ }
+ }
+
+ if (getFundamentalFacets().isEmpty())
+ {
+ createFundamentalFacets();
+ }
+
+ List<XSDConstrainingFacet> newFacets = null;
+ boolean newBounded = false;
+ XSDCardinality newCardinality = XSDCardinality.FINITE_LITERAL;
+ boolean newNumeric = false;
+ XSDOrdered newOrdered = XSDOrdered.FALSE_LITERAL;
+ XSDSimpleTypeDefinition newPrimitiveTypeDefinition = null;
+ XSDVariety newVariety = null;
+ EList<String> newValidFacets = null;
+
+ if (theBaseTypeDefinition != null && theBaseTypeDefinition.getContainer() != null)
+ {
+ if (!((XSDConcreteComponentImpl)theBaseTypeDefinition).analyze() && !XSDConstants.isURType(theBaseTypeDefinition) && theBaseTypeDefinition.isCircular())
+ {
+ analysisState = CIRCULAR;
+ }
+ if (theBaseTypeDefinition != this)
+ {
+ if (!XSDConstants.isURType(this))
+ {
+ newVariety = XSDVariety.ATOMIC_LITERAL;
+ newPrimitiveTypeDefinition = this;
+ }
+
+ if (!XSDConstants.isURType(theBaseTypeDefinition))
+ {
+ newVariety = theBaseTypeDefinition.getVariety();
+ newPrimitiveTypeDefinition = theBaseTypeDefinition.getPrimitiveTypeDefinition();
+ newBounded = theBaseTypeDefinition.getBoundedFacet().isValue();
+ newCardinality = theBaseTypeDefinition.getCardinalityFacet().getValue();
+ newNumeric = theBaseTypeDefinition.getNumericFacet().isValue();
+ newOrdered = theBaseTypeDefinition.getOrderedFacet().getValue();
+ newValidFacets = theBaseTypeDefinition.getValidFacets();
+
+ if (XSDVariety.LIST_LITERAL == theBaseTypeDefinition.getVariety())
+ {
+ XSDSimpleTypeDefinition newItemTypeDefinition = theBaseTypeDefinition.getItemTypeDefinition();
+ if (newItemTypeDefinition != getItemTypeDefinition())
+ {
+ setItemTypeDefinition(newItemTypeDefinition);
+ }
+ }
+ else if (XSDVariety.UNION_LITERAL == theBaseTypeDefinition.getVariety())
+ {
+ List<XSDSimpleTypeDefinition> newMemberTypeDefinitions = theBaseTypeDefinition.getMemberTypeDefinitions();
+ List<XSDSimpleTypeDefinition> remainingMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions());
+ remainingMemberTypeDefinitions.removeAll(newMemberTypeDefinitions);
+ if (!remainingMemberTypeDefinitions.isEmpty())
+ {
+ getMemberTypeDefinitions().removeAll(remainingMemberTypeDefinitions);
+ }
+ if (!newMemberTypeDefinitions.isEmpty())
+ {
+ setListContentAndOrder(getMemberTypeDefinitions(), newMemberTypeDefinitions);
+ }
+ }
+ }
+ else
+ {
+ newFacets = new ArrayList<XSDConstrainingFacet>(getFacetContents());
+ }
+ }
+ else
+ {
+ newFacets = new ArrayList<XSDConstrainingFacet>(getFacetContents());
+ }
+ }
+ else
+ {
+ newFacets = new ArrayList<XSDConstrainingFacet>(getFacetContents());
+ }
+
+ if (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition))
+ {
+ XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
+ if (theItemTypeDefinition != null && theItemTypeDefinition.getContainer() != null)
+ {
+ newVariety = XSDVariety.LIST_LITERAL;
+ newPrimitiveTypeDefinition = null;
+ if (!((XSDConcreteComponentImpl)theItemTypeDefinition).analyze() && !XSDConstants.isURType(theItemTypeDefinition) && theItemTypeDefinition.isCircular())
+ {
+ analysisState = CIRCULAR;
+ }
+ newValidFacets = getValidFacetsForList();
+ if (effectiveWhiteSpaceFacet == null)
+ {
+ effectiveWhiteSpaceFacet = getXSDFactory().createXSDWhiteSpaceFacet();
+ effectiveWhiteSpaceFacet.setLexicalValue("collapse");
+ effectiveWhiteSpaceFacet.setFixed(true);
+ getSyntheticFacets().add(effectiveWhiteSpaceFacet);
+ }
+ if (newFacets != null)
+ {
+ newFacets.add(effectiveWhiteSpaceFacet);
+ }
+ }
+ else if (!getMemberTypeDefinitions().isEmpty())
+ {
+ newVariety = XSDVariety.UNION_LITERAL;
+ newPrimitiveTypeDefinition = null;
+ newNumeric = true;
+ for (XSDSimpleTypeDefinition theMemberTypeDefinition : getMemberTypeDefinitions())
+ {
+ if (theMemberTypeDefinition.getContainer() != null)
+ {
+ if (!((XSDConcreteComponentImpl)theMemberTypeDefinition).analyze() && !XSDConstants.isURType(theMemberTypeDefinition) && theMemberTypeDefinition.isCircular())
+ {
+ analysisState = CIRCULAR;
+ }
+ if (!theMemberTypeDefinition.getNumericFacet().isValue())
+ {
+ newNumeric = false;
+ }
+ }
+ }
+
+ XSDTypeDefinition lowestCommonAncestor = getLowestCommonAncestor(getMemberTypeDefinitions());
+ if (lowestCommonAncestor instanceof XSDSimpleTypeDefinition && lowestCommonAncestor.getContainer() != null)
+ {
+ newOrdered = ((XSDSimpleTypeDefinition)lowestCommonAncestor).getOrderedFacet().getValue();
+ }
+ newValidFacets = getValidFacetsForUnion();
+ }
+ else if (getElement() != null)
+ {
+ LOOP:
+ for (Node child = getElement().getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.UNION_ELEMENT:
+ {
+ newVariety = XSDVariety.UNION_LITERAL;
+ newPrimitiveTypeDefinition = null;
+ newValidFacets = getValidFacetsForUnion();
+ break LOOP;
+ }
+ case XSDConstants.LIST_ELEMENT:
+ {
+ newVariety = XSDVariety.LIST_LITERAL;
+ newPrimitiveTypeDefinition = null;
+ newValidFacets = getValidFacetsForList();
+ break LOOP;
+ }
+ }
+ }
+ }
+ }
+
+ if (newVariety != null)
+ {
+ if (!isSetVariety() || newVariety != getVariety())
+ {
+ setVariety(newVariety);
+ }
+ }
+ else if (isSetVariety())
+ {
+ unsetVariety();
+ }
+
+ if (newPrimitiveTypeDefinition != getPrimitiveTypeDefinition())
+ {
+ setPrimitiveTypeDefinition(newPrimitiveTypeDefinition);
+ }
+
+ // This ensures the the facets are analyzed when the containing type is relatively well-analyzed.
+ //
+ super.handleAnalysis();
+
+ if (newFacets == null)
+ {
+ newFacets = mergeFacets();
+ }
+
+ XSDAnnotation theAnnotation = getAnnotation();
+ if (theAnnotation != null)
+ {
+ for (Element applicationInformationElement : theAnnotation.getApplicationInformation())
+ {
+ for (Node child = applicationInformationElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.hfpNodeType(child))
+ {
+ case XSDConstants.HFP_HASFACET_ELEMENT:
+ {
+ Element childElement = (Element)child;
+ String facetName = childElement.getAttributeNS(null, XSDConstants.HFP_NAME_ATTRIBUTE);
+ if (newValidFacets == null)
+ {
+ newValidFacets = new BasicEList<String>();
+ }
+ newValidFacets.add(facetName);
+ break;
+ }
+ case XSDConstants.HFP_HASPROPERTY_ELEMENT:
+ {
+ Element childElement = (Element)child;
+ String propertyName = childElement.getAttributeNS(null, XSDConstants.HFP_NAME_ATTRIBUTE);
+ String propertyValue = childElement.getAttributeNS(null, XSDConstants.HFP_VALUE_ATTRIBUTE);
+ if ("bounded".equals(propertyName))
+ {
+ newBounded = "true".equals(propertyValue);
+ }
+ else if ("cardinality".equals(propertyName))
+ {
+ newCardinality =
+ "countably infinite".equals(propertyValue) ?
+ XSDCardinality.COUNTABLY_INFINITE_LITERAL :
+ XSDCardinality.get(propertyValue);
+ }
+ else if ("numeric".equals(propertyName))
+ {
+ newNumeric = "true".equals(propertyValue);
+ }
+ else if ("ordered".equals(propertyName))
+ {
+ newOrdered = XSDOrdered.get(propertyValue);
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+
+
+ if (!XSDConstants.isURType(this))
+ {
+ if (newBounded != getBoundedFacet().isValue() /* || !getBoundedFacet().isSetValue()*/)
+ {
+ getBoundedFacet().setValue(newBounded);
+ }
+ if (newCardinality != getCardinalityFacet().getValue() /* || !getCardinalityFacet().isSetValue()*/)
+ {
+ getCardinalityFacet().setValue(newCardinality);
+ }
+ if (newNumeric != getNumericFacet().isValue() /* || !getNumericFacet().isSetValue()*/)
+ {
+ getNumericFacet().setValue(newNumeric);
+ }
+ if (newOrdered == null)
+ {
+ newOrdered = XSDOrdered.FALSE_LITERAL;
+ }
+ if (newOrdered != getOrderedFacet().getValue() /* || !getOrderedFacet().isSetValue()*/)
+ {
+ getOrderedFacet().setValue(newOrdered);
+ }
+ }
+
+ if (newFacets == null)
+ {
+ if (!getFacets().isEmpty())
+ {
+ getFacets().clear();
+ }
+ }
+ else
+ {
+ List<XSDFacet> remainingFacets = new ArrayList<XSDFacet>(getFacets());
+ remainingFacets.removeAll(newFacets);
+ getFacets().removeAll(remainingFacets);
+ if (!newFacets.isEmpty())
+ {
+ setListContentAndOrder(getFacets(), newFacets);
+ }
+ }
+
+ if (newValidFacets == null)
+ {
+ if (!getValidFacets().isEmpty())
+ {
+ getValidFacets().clear();
+ }
+ }
+ else
+ {
+ List<String> remainingValidFacets = new ArrayList<String>(getValidFacets());
+ remainingValidFacets.removeAll(newValidFacets);
+ getValidFacets().removeAll(remainingValidFacets);
+ if (!newValidFacets.isEmpty())
+ {
+ setListContentAndOrder(getValidFacets(), newValidFacets);
+ }
+ }
+ }
+
+ @Override
+ public void validate()
+ {
+ super.validate();
+
+ Element theElement = getElement();
+ Element theRestrictionElement = null;
+ if (theElement != null)
+ {
+ String anchor;
+ if (getContainer() instanceof XSDComplexTypeDefinition)
+ {
+ checkAttributes
+ (XSDConstants.PART2,
+ anchor = "element-simpleContent",
+ theElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE
+ });
+
+ XSDComplexTypeDefinition xsdComplexTypeDefinition =
+ (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("simpleContent").getTypeDefinition();
+
+ checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-simpleContent", theElement);
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.RESTRICTION_ELEMENT:
+ {
+ Element childElement = (Element)child;
+ theRestrictionElement = childElement;
+
+ checkAttributes
+ (XSDConstants.PART2,
+ "element-simpleContent::restriction",
+ childElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE,
+ XSDConstants.BASE_ATTRIBUTE
+ });
+
+ checkBuiltInTypeConstraint
+ ("ID",
+ null,
+ XSDConstants.PART2,
+ "element-simpleContent::restriction",
+ childElement,
+ XSDConstants.ID_ATTRIBUTE,
+ false);
+
+ checkComplexContent("simpleRestrictionType", XSDConstants.PART2, "element-simpleContent::restriction", childElement);
+
+ // This is allowed https://bugs.eclipse.org/bugs/show_bug.cgi?id=177035
+ //
+ // if (childElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE) && !getContents().isEmpty())
+ // {
+ // createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType");
+ // }
+
+ break;
+ }
+ case XSDConstants.EXTENSION_ELEMENT:
+ {
+ Element childElement = (Element)child;
+
+ checkAttributes
+ (XSDConstants.PART2,
+ "element-simpleContent::extension",
+ childElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE,
+ XSDConstants.BASE_ATTRIBUTE
+ });
+
+ checkBuiltInTypeConstraint
+ ("ID",
+ null,
+ XSDConstants.PART2,
+ "element-simpleContent::extension",
+ childElement,
+ XSDConstants.ID_ATTRIBUTE,
+ false);
+
+ checkComplexContent("simpleExtensionType", XSDConstants.PART2, "element-simpleContent::extension", childElement);
+
+ if (childElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE) && !getContents().isEmpty())
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType");
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (getContainer() instanceof XSDFeature || getContainer() instanceof XSDSimpleTypeDefinition)
+ {
+ checkAttributes
+ (XSDConstants.PART2,
+ anchor = "element-simpleType",
+ theElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE,
+ });
+ }
+ else
+ {
+ checkAttributes
+ (XSDConstants.PART2,
+ anchor = "element-simpleType",
+ theElement,
+ new String []
+ {
+ XSDConstants.FINAL_ATTRIBUTE,
+ XSDConstants.ID_ATTRIBUTE,
+ XSDConstants.NAME_ATTRIBUTE
+ });
+
+ // EATM this is an error in the spec, I believe.
+ //
+ if (theElement.hasAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE))
+ {
+ String value = theElement.getAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE);
+ for (StringTokenizer values = new StringTokenizer(value, " "); values.hasMoreTokens(); )
+ {
+ String token = values.nextToken();
+
+ checkBuiltInTypeConstraint
+ ("simpleDerivationSet",
+ token,
+ XSDConstants.PART2,
+ anchor,
+ theElement,
+ XSDConstants.FINAL_ATTRIBUTE,
+ false);
+ }
+ }
+ }
+
+ checkComplexContent("simpleType", XSDConstants.PART2, "element-simpleType", theElement);
+
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.RESTRICTION_ELEMENT:
+ {
+ Element childElement = (Element)child;
+ theRestrictionElement = childElement;
+
+ checkAttributes
+ (XSDConstants.PART2,
+ "element-restriction",
+ childElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE,
+ XSDConstants.BASE_ATTRIBUTE
+ });
+
+ checkBuiltInTypeConstraint
+ ("ID",
+ null,
+ XSDConstants.PART2,
+ "element-restriction",
+ childElement,
+ XSDConstants.ID_ATTRIBUTE,
+ false);
+
+ XSDComplexTypeDefinition xsdComplexTypeDefinition =
+ (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("restriction").getTypeDefinition();
+
+ checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-restriction", childElement);
+
+ if (childElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
+ {
+ if (!getContents().isEmpty())
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType");
+ }
+ }
+ else if (getContents().isEmpty())
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-restriction-base-or-simpleType.0");
+ }
+
+ break;
+ }
+ case XSDConstants.UNION_ELEMENT:
+ {
+ Element childElement = (Element)child;
+
+ checkAttributes
+ (XSDConstants.PART2,
+ "element-union",
+ childElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE,
+ XSDConstants.MEMBERTYPES_ATTRIBUTE
+ });
+
+ checkBuiltInTypeConstraint
+ ("ID",
+ null,
+ XSDConstants.PART2,
+ "element-union",
+ childElement,
+ XSDConstants.ID_ATTRIBUTE,
+ false);
+
+ XSDComplexTypeDefinition xsdComplexTypeDefinition =
+ (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("union").getTypeDefinition();
+
+ checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-union", childElement);
+
+ if (getMemberTypeDefinitions().isEmpty())
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-union-memberTypes-or-simpleTypes");
+ }
+
+ break;
+ }
+ case XSDConstants.LIST_ELEMENT:
+ {
+ Element childElement = (Element)child;
+
+ checkAttributes
+ (XSDConstants.PART2,
+ "element-list",
+ childElement,
+ new String []
+ {
+ XSDConstants.ID_ATTRIBUTE,
+ XSDConstants.ITEMTYPE_ATTRIBUTE
+ });
+
+ checkBuiltInTypeConstraint
+ ("ID",
+ null,
+ XSDConstants.PART2,
+ "element-list",
+ childElement,
+ XSDConstants.ID_ATTRIBUTE,
+ false);
+
+ XSDComplexTypeDefinition xsdComplexTypeDefinition =
+ (XSDComplexTypeDefinition)getSchema().getSchemaForSchema().resolveElementDeclaration("list").getTypeDefinition();
+
+ checkComplexContent(xsdComplexTypeDefinition, XSDConstants.PART2, "element-list", childElement);
+
+ if (childElement.hasAttributeNS(null, XSDConstants.ITEMTYPE_ATTRIBUTE))
+ {
+ if (!getContents().isEmpty())
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-list-itemType-or-simpleType");
+ }
+ }
+ else
+ {
+ if (getContents().isEmpty())
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "src-list-itemType-or-simpleType.0");
+ }
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ checkBuiltInTypeConstraint
+ ("ID",
+ null,
+ XSDConstants.PART2,
+ anchor,
+ theElement,
+ XSDConstants.ID_ATTRIBUTE,
+ false);
+ }
+
+ if (!(getContainer() instanceof XSDFeature) && !(getContainer() instanceof XSDTypeDefinition))
+ {
+ checkBuiltInTypeConstraint
+ ("NCName",
+ getName(),
+ XSDConstants.PART2,
+ "element-simpleType",
+ theElement,
+ XSDConstants.NAME_ATTRIBUTE,
+ true);
+ }
+
+ XSDSimpleTypeDefinition 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 if (isSetVariety())
+ {
+ switch (getVariety().getValue())
+ {
+ case XSDVariety.ATOMIC:
+ {
+ if (theBaseTypeDefinition.getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.1.2", theBaseTypeDefinition.getURI());
+ }
+ if (isCircular())
+ {
+ reportConstraintViolation
+ (XSDConstants.PART2,
+ "st-props-correct.2",
+ getElement(),
+ XSDConstants.BASE_ATTRIBUTE,
+ new Object [] {});
+ }
+ if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
+ XSDConstants.isAnySimpleType(theBaseTypeDefinition) &&
+ (theElement == null ||
+ theRestrictionElement != null && theRestrictionElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE)))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-retricts.0.0", theBaseTypeDefinition.getURI());
+ }
+ break;
+ }
+ case XSDVariety.LIST:
+ {
+ if (!XSDConstants.isURType(theBaseTypeDefinition))
+ {
+ if (theBaseTypeDefinition.getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.1.2", theBaseTypeDefinition.getURI());
+ }
+ }
+ else
+ {
+ XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
+ if (theItemTypeDefinition == null)
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", "");
+ }
+ else if (theItemTypeDefinition.getContainer() == null)
+ {
+ createDiagnostic
+ (XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", theItemTypeDefinition.getURI());
+ }
+ else if (XSDVariety.ATOMIC_LITERAL != theItemTypeDefinition.getVariety() &&
+ XSDVariety.UNION_LITERAL != theItemTypeDefinition.getVariety())
+ {
+ reportConstraintViolation
+ (XSDConstants.PART2,
+ "cos-list-of-atomic",
+ getElement(),
+ XSDConstants.ITEMTYPE_ATTRIBUTE,
+ new Object [] {});
+ }
+ else if (theItemTypeDefinition.getFinal().contains(XSDSimpleFinal.LIST_LITERAL))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.2.0", theBaseTypeDefinition.getURI());
+ }
+ else if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
+ XSDConstants.isAnySimpleType(theItemTypeDefinition))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-retricts.0.1", theItemTypeDefinition.getURI());
+ }
+ }
+ if (isCircular())
+ {
+ reportConstraintViolation
+ (XSDConstants.PART2,
+ "st-props-correct.2",
+ getElement(),
+ XSDConstants.ITEMTYPE_ATTRIBUTE,
+ new Object [] {});
+ }
+ break;
+ }
+ case XSDVariety.UNION:
+ {
+ if (!XSDConstants.isURType(theBaseTypeDefinition))
+ {
+ if (theBaseTypeDefinition.getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.1.2", theBaseTypeDefinition.getURI());
+ }
+ }
+ else
+ {
+ for (XSDSimpleTypeDefinition theMemberTypeDefinition : getMemberTypeDefinitions())
+ {
+ if (theMemberTypeDefinition == null)
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", "");
+ }
+ else if (theMemberTypeDefinition.getContainer() == null)
+ {
+ createDiagnostic
+ (XSDDiagnosticSeverity.ERROR_LITERAL, "_UI_UnresolvedTypeDefinition_message", theMemberTypeDefinition.getURI());
+ }
+ else if (theMemberTypeDefinition.getFinal().contains(XSDSimpleFinal.UNION_LITERAL))
+ {
+ createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-restricts.3.0", theBaseTypeDefinition.getURI());
+ }
+ // Apparently this is allowed now.
+ // else if (!XSDConstants.isSchemaForSchemaNamespace(getTargetNamespace()) &&
+ // XSDConstants.isAnySimpleType(theMemberTypeDefinition))
+ // {
+ // createDiagnostic(XSDDiagnosticSeverity.ERROR_LITERAL, "cos-st-retricts.0.2", theMemberTypeDefinition.getURI());
+ // }
+ }
+ }
+ if (isCircular())
+ {
+ reportConstraintViolation
+ (XSDConstants.PART2,
+ "cos-no-circular-unions",
+ getElement(),
+ XSDConstants.MEMBERTYPES_ATTRIBUTE,
+ new Object [] {});
+ }
+ break;
+ }
+ }
+ }
+ else if (isCircular())
+ {
+ reportConstraintViolation
+ (XSDConstants.PART2,
+ "st-props-correct.2",
+ getElement(),
+ XSDConstants.BASE_ATTRIBUTE,
+ new Object [] {});
+ }
+ }
+
+ @Override
+ protected void reconcileAttributes(Element changedElement)
+ {
+ switch (XSDConstants.nodeType(changedElement))
+ {
+ case XSDConstants.EXTENSION_ELEMENT:
+ case XSDConstants.RESTRICTION_ELEMENT:
+ {
+ if (!(getContainer() instanceof XSDComplexTypeDefinition))
+ {
+ XSDSimpleTypeDefinition newBaseTypeDefinition = null;
+ if (changedElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
+ {
+ newBaseTypeDefinition =
+ resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.BASE_ATTRIBUTE));
+ }
+ else if (getContents().contains(getBaseTypeDefinition()))
+ {
+ newBaseTypeDefinition = getBaseTypeDefinition();
+ }
+
+ handleNewBaseTypeDefinition(newBaseTypeDefinition);
+ }
+ else
+ {
+ XSDTypeDefinition newBaseTypeDefinition = null;
+ if (changedElement.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
+ {
+ newBaseTypeDefinition =
+ resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.BASE_ATTRIBUTE));
+ }
+ else if (getContents().contains(getBaseTypeDefinition()))
+ {
+ newBaseTypeDefinition = getBaseTypeDefinition();
+ }
+
+ handleNewComplexBaseTypeDefinition(newBaseTypeDefinition);
+ }
+
+ break;
+ }
+ case XSDConstants.LIST_ELEMENT:
+ {
+ XSDSimpleTypeDefinition newItemTypeDefinition = getItemTypeDefinition();
+ if (changedElement.hasAttributeNS(null, XSDConstants.ITEMTYPE_ATTRIBUTE))
+ {
+ newItemTypeDefinition =
+ resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(changedElement, XSDConstants.ITEMTYPE_ATTRIBUTE));
+ }
+ else if (!getContents().contains(newItemTypeDefinition))
+ {
+ newItemTypeDefinition = resolveSimpleTypeDefinition(null, "undefined");
+ }
+
+ if (newItemTypeDefinition != getItemTypeDefinition())
+ {
+ setItemTypeDefinition(newItemTypeDefinition);
+ }
+
+ handleNewBaseTypeDefinition(null);
+ break;
+ }
+ case XSDConstants.UNION_ELEMENT:
+ {
+ List<XSDSimpleTypeDefinition> newMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>();
+ if (changedElement.hasAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE))
+ {
+ String memberTypes = changedElement.getAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE);
+ if (memberTypes != null)
+ {
+ for (StringTokenizer tokens = new StringTokenizer(memberTypes, " "); tokens.hasMoreTokens(); )
+ {
+ String memberTypeQName = tokens.nextToken();
+ XSDSimpleTypeDefinition newMemberTypeDefinition =
+ resolveSimpleTypeDefinitionURI(XSDConstants.lookupQName(changedElement, memberTypeQName));
+ newMemberTypeDefinitions.add(newMemberTypeDefinition);
+ }
+ }
+ }
+
+ newMemberTypeDefinitions.addAll(getContents());
+
+ List<XSDSimpleTypeDefinition> remainingMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions());
+ remainingMemberTypeDefinitions.removeAll(newMemberTypeDefinitions);
+ getMemberTypeDefinitions().removeAll(remainingMemberTypeDefinitions);
+ if (!newMemberTypeDefinitions.isEmpty())
+ {
+ setListContentAndOrder(getMemberTypeDefinitions(), newMemberTypeDefinitions);
+ }
+
+ handleNewBaseTypeDefinition(null);
+ break;
+ }
+ case XSDConstants.SIMPLETYPE_ELEMENT:
+ case XSDConstants.SIMPLECONTENT_ELEMENT:
+ {
+ super.reconcileAttributes(changedElement);
+
+ if (changedElement.hasAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE))
+ {
+ setStringLexicalFinal(changedElement.getAttributeNS(null, XSDConstants.FINAL_ATTRIBUTE));
+ }
+ else if (isSetLexicalFinal())
+ {
+ unsetLexicalFinal();
+ }
+
+ for (Node child = changedElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ if (child.getNodeType() == Node.ELEMENT_NODE)
+ {
+ reconcileAttributes((Element)child);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ protected void handleNewComplexBaseTypeDefinition(XSDTypeDefinition newComplexBaseTypeDefinition)
+ {
+ if (getContainer() instanceof XSDComplexTypeDefinition)
+ {
+ XSDComplexTypeDefinitionImpl xsdComplexTypeDefinition = (XSDComplexTypeDefinitionImpl)getContainer();
+ boolean oldIsReconciling = xsdComplexTypeDefinition.isReconciling;
+ xsdComplexTypeDefinition.isReconciling = isReconciling;
+ xsdComplexTypeDefinition.handleNewBaseTypeDefinition(newComplexBaseTypeDefinition);
+ xsdComplexTypeDefinition.isReconciling = oldIsReconciling;
+ }
+ }
+
+ protected XSDSimpleTypeDefinition handleNewBaseTypeDefinition(XSDSimpleTypeDefinition newBaseTypeDefinition)
+ {
+ if (newBaseTypeDefinition == null)
+ {
+ XSDSchema xsdSchema = getSchema();
+ if (xsdSchema == null)
+ {
+ Element theElement = getElement();
+ if (theElement != null)
+ {
+ newBaseTypeDefinition =
+ XSDSchemaImpl.getSchemaForSchema(theElement.getNamespaceURI()).resolveSimpleTypeDefinition("anySimpleType");
+ }
+ else
+ {
+ newBaseTypeDefinition = this;
+ }
+ }
+ else
+ {
+ newBaseTypeDefinition = xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("anySimpleType");
+ }
+ }
+
+ 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 = (XSDSimpleTypeDefinition)replacement;
+ }
+ }
+ }
+ }
+
+ if (newBaseTypeDefinition != getBaseTypeDefinition())
+ {
+ setBaseTypeDefinition(newBaseTypeDefinition);
+ }
+
+ return newBaseTypeDefinition;
+ }
+
+ @Override
+ protected Node getAdoptionParentNode(EReference eReference)
+ {
+ if (eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS ||
+ eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS ||
+ eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION)
+ {
+ Element element = getElement();
+ if (element == null)
+ {
+ return null;
+ }
+ else
+ {
+ for (Node child = element.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.EXTENSION_ELEMENT:
+ case XSDConstants.RESTRICTION_ELEMENT:
+ case XSDConstants.LIST_ELEMENT:
+ case XSDConstants.UNION_ELEMENT:
+ {
+ return child;
+ }
+ }
+ }
+ }
+ }
+
+ 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.ANNOTATION_ELEMENT:
+ {
+ result.add((Element)child);
+ break;
+ }
+ case XSDConstants.EXTENSION_ELEMENT:
+ case XSDConstants.RESTRICTION_ELEMENT:
+ case XSDConstants.LIST_ELEMENT:
+ case XSDConstants.UNION_ELEMENT:
+ {
+ for (Node grandChild = child.getFirstChild(); grandChild != null; grandChild = grandChild.getNextSibling())
+ {
+ if (grandChild.getNodeType() == Node.ELEMENT_NODE)
+ {
+ result.add((Element)grandChild);
+ }
+ }
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ @Override
+ protected void handleUnreconciledElement(Element child, List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.ANNOTATION_ELEMENT:
+ {
+ XSDAnnotation xsdAnnotation = XSDAnnotationImpl.createAnnotation(child);
+ newContents.add(xsdAnnotation);
+ break;
+ }
+ case XSDConstants.SIMPLETYPE_ELEMENT:
+ {
+ XSDSimpleTypeDefinition xsdSimpleTypeDefinition = XSDSimpleTypeDefinitionImpl.createSimpleTypeDefinition(child);
+ if (xsdSimpleTypeDefinition != null)
+ {
+ newContents.add(xsdSimpleTypeDefinition);
+ }
+ break;
+ }
+ default:
+ {
+ XSDConstrainingFacet xsdConstrainingFacet = XSDConstrainingFacetImpl.createConstrainingFacet(child);
+ if (xsdConstrainingFacet != null)
+ {
+ newContents.add(xsdConstrainingFacet);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void handleReconciliation(List<XSDConcreteComponent> newContents, List<XSDConcreteComponent> remainingContents)
+ {
+ if (!newContents.isEmpty() && newContents.get(0).getElement().getParentNode() == getElement())
+ {
+ handleAnnotationReconciliation(XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION, newContents, remainingContents);
+ }
+ handleAnnotationReconciliation(XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION, newContents, remainingContents);
+
+ XSDSimpleTypeDefinition newBaseTypeDefinition = null;
+ XSDTypeDefinition newComplexBaseTypeDefinition = null;
+
+ boolean didContents = false;
+ Element theElement = getElement();
+ LOOP:
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.LIST_ELEMENT:
+ {
+ Element elementChild = (Element)child;
+ XSDSimpleTypeDefinition newTypeContent = null;
+ XSDSimpleTypeDefinition newItemTypeDefinition = null;
+ if (!newContents.isEmpty())
+ {
+ XSDConcreteComponent xsdConcreteComponent = newContents.get(0);
+ if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
+ {
+ newItemTypeDefinition = (XSDSimpleTypeDefinition)xsdConcreteComponent;
+ newTypeContent = newItemTypeDefinition;
+ newContents.remove(0);
+ }
+ }
+ if (elementChild.hasAttributeNS(null, XSDConstants.ITEMTYPE_ATTRIBUTE) && newItemTypeDefinition == null)
+ {
+ newItemTypeDefinition =
+ resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute((Element)child, XSDConstants.ITEMTYPE_ATTRIBUTE));
+ }
+ if (newItemTypeDefinition == null)
+ {
+ newItemTypeDefinition = resolveSimpleTypeDefinition(null, "undefined");
+ }
+
+ getContents().removeAll(remainingContents);
+ if (newTypeContent != null)
+ {
+ getContents().add(newTypeContent);
+ }
+
+ if (newItemTypeDefinition != getItemTypeDefinition())
+ {
+ setItemTypeDefinition(newItemTypeDefinition);
+ }
+
+ didContents = true;
+ break LOOP;
+ }
+ case XSDConstants.UNION_ELEMENT:
+ {
+ Element elementChild = (Element)child;
+ List<XSDSimpleTypeDefinition> newMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>();
+ if (elementChild.hasAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE))
+ {
+ String memberTypes = elementChild.getAttributeNS(null, XSDConstants.MEMBERTYPES_ATTRIBUTE);
+ if (memberTypes != null)
+ {
+ for (StringTokenizer tokens = new StringTokenizer(memberTypes, " "); tokens.hasMoreTokens(); )
+ {
+ String memberTypeQName = tokens.nextToken();
+ XSDSimpleTypeDefinition newMemberTypeDefinition =
+ resolveSimpleTypeDefinitionURI(XSDConstants.lookupQName(elementChild, memberTypeQName));
+ newMemberTypeDefinitions.add(newMemberTypeDefinition);
+ }
+ }
+ }
+
+ List<XSDSimpleTypeDefinition> newTypeContents = new ArrayList<XSDSimpleTypeDefinition>();
+ for (ListIterator<XSDConcreteComponent> i = newContents.listIterator(); i.hasNext(); )
+ {
+ XSDConcreteComponent xsdConcreteComponent = i.next();
+ if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
+ {
+ XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)xsdConcreteComponent;
+ newTypeContents.add(xsdSimpleTypeDefinition);
+ newMemberTypeDefinitions.add(xsdSimpleTypeDefinition);
+ i.remove();
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ getContents().removeAll(remainingContents);
+ if (!newTypeContents.isEmpty())
+ {
+ setListContentAndOrder(getContents(), newTypeContents);
+ }
+
+ List<XSDSimpleTypeDefinition> remainingMemberTypeDefinitions = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions());
+ remainingMemberTypeDefinitions.removeAll(newMemberTypeDefinitions);
+ if (!remainingMemberTypeDefinitions.isEmpty())
+ {
+ getMemberTypeDefinitions().removeAll(remainingMemberTypeDefinitions);
+ }
+ if (!newMemberTypeDefinitions.isEmpty())
+ {
+ setListContentAndOrder(getMemberTypeDefinitions(), newMemberTypeDefinitions);
+ }
+
+ didContents = true;
+ break LOOP;
+ }
+ case XSDConstants.EXTENSION_ELEMENT:
+ case XSDConstants.RESTRICTION_ELEMENT:
+ {
+ Element elementChild = (Element)child;
+ if (!newContents.isEmpty())
+ {
+ XSDConcreteComponent xsdConcreteComponent = newContents.get(0);
+ if (xsdConcreteComponent instanceof XSDSimpleTypeDefinition)
+ {
+ XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)xsdConcreteComponent;
+ List<XSDSimpleTypeDefinition> theContents = getContents();
+ if (theContents.size() != 1 || theContents.get(0) != xsdConcreteComponent)
+ {
+ if (!theContents.isEmpty())
+ {
+ remainingContents.removeAll(theContents);
+ theContents.clear();
+ }
+ theContents.add(xsdSimpleTypeDefinition);
+ }
+ newBaseTypeDefinition = xsdSimpleTypeDefinition;
+ newContents.remove(0);
+ }
+ }
+
+ if (!(getContainer() instanceof XSDComplexTypeDefinition))
+ {
+ if (elementChild.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE) && newBaseTypeDefinition == null)
+ {
+ newBaseTypeDefinition =
+ resolveSimpleTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(elementChild, XSDConstants.BASE_ATTRIBUTE));
+ }
+ }
+ else
+ {
+ if (elementChild.hasAttributeNS(null, XSDConstants.BASE_ATTRIBUTE))
+ {
+ newComplexBaseTypeDefinition =
+ resolveTypeDefinitionURI(XSDConstants.lookupQNameForAttribute(elementChild, XSDConstants.BASE_ATTRIBUTE));
+ }
+ }
+
+ didContents = true;
+ break LOOP;
+ }
+ }
+ }
+
+ if (!didContents && !getContents().isEmpty())
+ {
+ getContents().clear();
+ }
+
+ if (!remainingContents.isEmpty())
+ {
+ getFacetContents().removeAll(remainingContents);
+ }
+
+ if (!newContents.isEmpty())
+ {
+ for (Iterator<?> i = newContents.iterator(); i.hasNext(); )
+ {
+ if (!(i.next() instanceof XSDFacet))
+ {
+ i.remove();
+ }
+ }
+ @SuppressWarnings("unchecked") List<XSDConstrainingFacet> list = (List<XSDConstrainingFacet>)(List<?>)newContents;
+ setListContentAndOrder(getFacetContents(), list);
+ }
+
+ handleNewBaseTypeDefinition(newBaseTypeDefinition);
+ handleNewComplexBaseTypeDefinition(newComplexBaseTypeDefinition);
+ }
+
+ @Override
+ protected void changeAttribute(EAttribute eAttribute)
+ {
+ super.changeAttribute(eAttribute);
+ Element theElement = getElement();
+ if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL)
+ {
+ if (theElement != null)
+ {
+ niceSetAttribute
+ (theElement,
+ XSDConstants.FINAL_ATTRIBUTE,
+ getStringLexicalFinal());
+ }
+ if (eAttribute != null)
+ {
+ traverseToRootForPatching();
+ }
+ }
+ if (eAttribute == null || eAttribute == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__VARIETY)
+ {
+ if (theElement != null && eAttribute != null)
+ {
+ if (analysisState != ANALYZING)
+ {
+ LOOP:
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ int childNodeType = XSDConstants.nodeType(child);
+ switch (childNodeType)
+ {
+ case XSDConstants.RESTRICTION_ELEMENT:
+ case XSDConstants.EXTENSION_ELEMENT:
+ case XSDConstants.UNION_ELEMENT:
+ case XSDConstants.LIST_ELEMENT:
+ {
+ if (childNodeType != getRequiredChildElementNodeType())
+ {
+ Element newElement = createChildElement();
+ forceReplace(newElement, (Element)child);
+ }
+ break LOOP;
+ }
+ }
+ }
+ traverseToRootForAnalysis();
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void changeReference(EReference eReference)
+ {
+ super.changeReference(eReference);
+ Element theElement = getElement();
+ if (theElement != null)
+ {
+ if (eReference == null || eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION)
+ {
+ if (!isReconciling && eReference != null)
+ {
+ traverseToRootForPatching();
+ }
+
+ if (!isReconciling && !(getContainer() instanceof XSDComplexTypeDefinition))
+ {
+ XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+ if (theBaseTypeDefinition != null && !getContents().contains(theBaseTypeDefinition))
+ {
+ LOOP:
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.EXTENSION_ELEMENT:
+ case XSDConstants.RESTRICTION_ELEMENT:
+ {
+ niceSetAttributeURIValue((Element)child, XSDConstants.BASE_ATTRIBUTE, theBaseTypeDefinition.getURI());
+ break LOOP;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (eReference == null || eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION)
+ {
+ if (!isReconciling && eReference != null)
+ {
+ traverseToRootForPatching();
+ }
+
+ XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
+ if (!isReconciling && theItemTypeDefinition != null && !getContents().contains(theItemTypeDefinition))
+ {
+ LOOP:
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.LIST_ELEMENT:
+ {
+ niceSetAttributeURIValue((Element)child, XSDConstants.ITEMTYPE_ATTRIBUTE, theItemTypeDefinition.getURI());
+ break LOOP;
+ }
+ }
+ }
+ }
+ }
+ if (eReference == null || eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS)
+ {
+ if (!isReconciling && eReference != null)
+ {
+ traverseToRootForPatching();
+ }
+
+ if (!isReconciling)
+ {
+ LOOP:
+ for (Node child = theElement.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (XSDConstants.nodeType(child))
+ {
+ case XSDConstants.UNION_ELEMENT:
+ {
+ StringBuffer newMemberTypeDefinitions = null;
+ for (XSDSimpleTypeDefinition theMemberTypeDefinition : getMemberTypeDefinitions())
+ {
+ if (getContents().contains(theMemberTypeDefinition))
+ {
+ break;
+ }
+ if (newMemberTypeDefinitions == null)
+ {
+ newMemberTypeDefinitions = new StringBuffer();
+ }
+ else
+ {
+ newMemberTypeDefinitions.append(' ');
+ }
+ newMemberTypeDefinitions.append(theMemberTypeDefinition.getURI());
+ }
+
+ niceSetAttributeURIValue
+ ((Element)child,
+ XSDConstants.MEMBERTYPES_ATTRIBUTE,
+ newMemberTypeDefinitions == null ? null : newMemberTypeDefinitions.toString());
+ break LOOP;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void adoptContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
+ {
+ super.adoptContent(eReference, xsdConcreteComponent);
+ if (eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS ||
+ eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS)
+ {
+ 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((XSDAnnotation)xsdConcreteComponent);
+ }
+ }
+
+ @Override
+ protected void orphanContent(EReference eReference, XSDConcreteComponent xsdConcreteComponent)
+ {
+ super.orphanContent(eReference, xsdConcreteComponent);
+ if (eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS ||
+ eReference == XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS)
+ {
+ traverseToRootForPatching();
+ }
+ else if (eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__ANNOTATION ||
+ eReference == XSDPackage.Literals.XSD_TYPE_DEFINITION__DERIVATION_ANNOTATION)
+ {
+ getAnnotations().remove(xsdConcreteComponent);
+ }
+ }
+
+ public XSDTotalDigitsFacet getTotalDigitsFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDTotalDigitsFacet)
+ {
+ return (XSDTotalDigitsFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDTotalDigitsFacet getEffectiveTotalDigitsFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDTotalDigitsFacet)
+ {
+ return (XSDTotalDigitsFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDFractionDigitsFacet getFractionDigitsFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDFractionDigitsFacet)
+ {
+ return (XSDFractionDigitsFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDFractionDigitsFacet getEffectiveFractionDigitsFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDFractionDigitsFacet)
+ {
+ return (XSDFractionDigitsFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDLengthFacet getLengthFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDLengthFacet)
+ {
+ return (XSDLengthFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDLengthFacet getEffectiveLengthFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDLengthFacet)
+ {
+ return (XSDLengthFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMaxLengthFacet getMaxLengthFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMaxLengthFacet)
+ {
+ return (XSDMaxLengthFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMaxLengthFacet getEffectiveMaxLengthFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDMaxLengthFacet)
+ {
+ return (XSDMaxLengthFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMinLengthFacet getMinLengthFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMinLengthFacet)
+ {
+ return (XSDMinLengthFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMinLengthFacet getEffectiveMinLengthFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDMinLengthFacet)
+ {
+ return (XSDMinLengthFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMaxExclusiveFacet getMaxExclusiveFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMaxExclusiveFacet)
+ {
+ return (XSDMaxExclusiveFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMaxInclusiveFacet getMaxInclusiveFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMaxInclusiveFacet)
+ {
+ return (XSDMaxInclusiveFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMaxFacet getMaxFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMaxFacet)
+ {
+ return (XSDMaxFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMaxFacet getEffectiveMaxFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDMaxFacet)
+ {
+ return (XSDMaxFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMinExclusiveFacet getMinExclusiveFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMinExclusiveFacet)
+ {
+ return (XSDMinExclusiveFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMinInclusiveFacet getMinInclusiveFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMinInclusiveFacet)
+ {
+ return (XSDMinInclusiveFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMinFacet getMinFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDMinFacet)
+ {
+ return (XSDMinFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDMinFacet getEffectiveMinFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDMinFacet)
+ {
+ return (XSDMinFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<XSDFacet> getSyntheticFacets()
+ {
+ if (syntheticFacets == null)
+ {
+ syntheticFacets = new EObjectContainmentEList<XSDFacet>(XSDFacet.class, this, XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS);
+ }
+ return syntheticFacets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
+ return ((InternalEList<?>)getContents()).basicRemove(otherEnd, msgs);
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
+ return ((InternalEList<?>)getFacetContents()).basicRemove(otherEnd, msgs);
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
+ return ((InternalEList<?>)getFundamentalFacets()).basicRemove(otherEnd, msgs);
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
+ return ((InternalEList<?>)getSyntheticFacets()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY:
+ return getVariety();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
+ return getFinal();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
+ return getLexicalFinal();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
+ return getValidFacets();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
+ return getContents();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
+ return getFacetContents();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
+ return getFacets();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
+ return getMemberTypeDefinitions();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
+ return getFundamentalFacets();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
+ return getBaseTypeDefinition();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
+ return getPrimitiveTypeDefinition();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
+ return getItemTypeDefinition();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ROOT_TYPE_DEFINITION:
+ return getRootTypeDefinition();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_FACET:
+ return getMinFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_FACET:
+ return getMaxFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_INCLUSIVE_FACET:
+ return getMaxInclusiveFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_INCLUSIVE_FACET:
+ return getMinInclusiveFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_EXCLUSIVE_FACET:
+ return getMinExclusiveFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_EXCLUSIVE_FACET:
+ return getMaxExclusiveFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LENGTH_FACET:
+ return getLengthFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__WHITE_SPACE_FACET:
+ return getWhiteSpaceFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ENUMERATION_FACETS:
+ return getEnumerationFacets();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PATTERN_FACETS:
+ return getPatternFacets();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CARDINALITY_FACET:
+ return getCardinalityFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__NUMERIC_FACET:
+ return getNumericFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_LENGTH_FACET:
+ return getMaxLengthFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_LENGTH_FACET:
+ return getMinLengthFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__TOTAL_DIGITS_FACET:
+ return getTotalDigitsFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FRACTION_DIGITS_FACET:
+ return getFractionDigitsFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ORDERED_FACET:
+ return getOrderedFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BOUNDED_FACET:
+ return getBoundedFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_FACET:
+ return getEffectiveMaxFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_WHITE_SPACE_FACET:
+ return getEffectiveWhiteSpaceFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_LENGTH_FACET:
+ return getEffectiveMaxLengthFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_FRACTION_DIGITS_FACET:
+ return getEffectiveFractionDigitsFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_PATTERN_FACET:
+ return getEffectivePatternFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_ENUMERATION_FACET:
+ return getEffectiveEnumerationFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_TOTAL_DIGITS_FACET:
+ return getEffectiveTotalDigitsFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_LENGTH_FACET:
+ return getEffectiveMinLengthFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_LENGTH_FACET:
+ return getEffectiveLengthFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_FACET:
+ return getEffectiveMinFacet();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
+ return getSyntheticFacets();
+ }
+ 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_SIMPLE_TYPE_DEFINITION__VARIETY:
+ setVariety((XSDVariety)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
+ getFinal().clear();
+ getFinal().addAll((Collection<? extends XSDSimpleFinal>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
+ getLexicalFinal().clear();
+ getLexicalFinal().addAll((Collection<? extends XSDSimpleFinal>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
+ getValidFacets().clear();
+ getValidFacets().addAll((Collection<? extends String>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
+ getContents().clear();
+ getContents().addAll((Collection<? extends XSDSimpleTypeDefinition>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
+ getFacetContents().clear();
+ getFacetContents().addAll((Collection<? extends XSDConstrainingFacet>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
+ getFacets().clear();
+ getFacets().addAll((Collection<? extends XSDConstrainingFacet>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
+ getMemberTypeDefinitions().clear();
+ getMemberTypeDefinitions().addAll((Collection<? extends XSDSimpleTypeDefinition>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
+ getFundamentalFacets().clear();
+ getFundamentalFacets().addAll((Collection<? extends XSDFundamentalFacet>)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
+ setBaseTypeDefinition((XSDSimpleTypeDefinition)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
+ setPrimitiveTypeDefinition((XSDSimpleTypeDefinition)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
+ setItemTypeDefinition((XSDSimpleTypeDefinition)newValue);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
+ getSyntheticFacets().clear();
+ getSyntheticFacets().addAll((Collection<? extends XSDFacet>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY:
+ unsetVariety();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
+ getFinal().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
+ unsetLexicalFinal();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
+ getValidFacets().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
+ getContents().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
+ getFacetContents().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
+ getFacets().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
+ getMemberTypeDefinitions().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
+ getFundamentalFacets().clear();
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
+ setBaseTypeDefinition((XSDSimpleTypeDefinition)null);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
+ setPrimitiveTypeDefinition((XSDSimpleTypeDefinition)null);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
+ setItemTypeDefinition((XSDSimpleTypeDefinition)null);
+ return;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
+ getSyntheticFacets().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VARIETY:
+ return isSetVariety();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FINAL:
+ return final_ != null && !final_.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LEXICAL_FINAL:
+ return isSetLexicalFinal();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__VALID_FACETS:
+ return validFacets != null && !validFacets.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CONTENTS:
+ return contents != null && !contents.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS:
+ return facetContents != null && !facetContents.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACETS:
+ return facets != null && !facets.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MEMBER_TYPE_DEFINITIONS:
+ return memberTypeDefinitions != null && !memberTypeDefinitions.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS:
+ return fundamentalFacets != null && !fundamentalFacets.isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BASE_TYPE_DEFINITION:
+ return baseTypeDefinition != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PRIMITIVE_TYPE_DEFINITION:
+ return primitiveTypeDefinition != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ITEM_TYPE_DEFINITION:
+ return itemTypeDefinition != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ROOT_TYPE_DEFINITION:
+ return getRootTypeDefinition() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_FACET:
+ return getMinFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_FACET:
+ return getMaxFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_INCLUSIVE_FACET:
+ return getMaxInclusiveFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_INCLUSIVE_FACET:
+ return getMinInclusiveFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_EXCLUSIVE_FACET:
+ return getMinExclusiveFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_EXCLUSIVE_FACET:
+ return getMaxExclusiveFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__LENGTH_FACET:
+ return getLengthFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__WHITE_SPACE_FACET:
+ return getWhiteSpaceFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ENUMERATION_FACETS:
+ return !getEnumerationFacets().isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__PATTERN_FACETS:
+ return !getPatternFacets().isEmpty();
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__CARDINALITY_FACET:
+ return getCardinalityFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__NUMERIC_FACET:
+ return getNumericFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MAX_LENGTH_FACET:
+ return getMaxLengthFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__MIN_LENGTH_FACET:
+ return getMinLengthFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__TOTAL_DIGITS_FACET:
+ return getTotalDigitsFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FRACTION_DIGITS_FACET:
+ return getFractionDigitsFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__ORDERED_FACET:
+ return getOrderedFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__BOUNDED_FACET:
+ return getBoundedFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_FACET:
+ return getEffectiveMaxFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_WHITE_SPACE_FACET:
+ return getEffectiveWhiteSpaceFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MAX_LENGTH_FACET:
+ return getEffectiveMaxLengthFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_FRACTION_DIGITS_FACET:
+ return getEffectiveFractionDigitsFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_PATTERN_FACET:
+ return getEffectivePatternFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_ENUMERATION_FACET:
+ return getEffectiveEnumerationFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_TOTAL_DIGITS_FACET:
+ return getEffectiveTotalDigitsFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_LENGTH_FACET:
+ return getEffectiveMinLengthFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_LENGTH_FACET:
+ return getEffectiveLengthFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__EFFECTIVE_MIN_FACET:
+ return getEffectiveMinFacet() != null;
+ case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS:
+ return syntheticFacets != null && !syntheticFacets.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (variety: ");
+ if ((eFlags & VARIETY_ESETFLAG) != 0) result.append(VARIETY_EFLAG_VALUES[(eFlags & VARIETY_EFLAG) >>> VARIETY_EFLAG_OFFSET]); else result.append("<unset>");
+ result.append(", final: ");
+ result.append(final_);
+ result.append(", lexicalFinal: ");
+ result.append(lexicalFinal);
+ result.append(", validFacets: ");
+ result.append(validFacets);
+ result.append(')');
+ return result.toString();
+ }
+
+ public XSDWhiteSpaceFacet getWhiteSpaceFacet()
+ {
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDWhiteSpaceFacet)
+ {
+ return (XSDWhiteSpaceFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public XSDWhiteSpaceFacet getEffectiveWhiteSpaceFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDWhiteSpaceFacet)
+ {
+ return (XSDWhiteSpaceFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public EList<XSDEnumerationFacet> getEnumerationFacets()
+ {
+ EList<XSDEnumerationFacet> result = new BasicEList<XSDEnumerationFacet>();
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDEnumerationFacet)
+ {
+ result.add((XSDEnumerationFacet)facet);
+ }
+ }
+ }
+ return
+ new EcoreEList.UnmodifiableEList.FastCompare<XSDEnumerationFacet>
+ (this, XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__ENUMERATION_FACETS, result.size(), result.toArray());
+ }
+
+ public XSDEnumerationFacet getEffectiveEnumerationFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDEnumerationFacet)
+ {
+ return (XSDEnumerationFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ public EList<XSDPatternFacet> getPatternFacets()
+ {
+ EList<XSDPatternFacet> result = new BasicEList<XSDPatternFacet>();
+ if (facetContents != null)
+ {
+ Object [] facets = facetContents.data();
+ for (int i = 0, size = facetContents.size(); i < size; ++i)
+ {
+ Object facet = facets[i];
+ if (facet instanceof XSDPatternFacet)
+ {
+ result.add((XSDPatternFacet)facet);
+ }
+ }
+ }
+ return
+ new EcoreEList.UnmodifiableEList.FastCompare<XSDPatternFacet>
+ (this, XSDPackage.Literals.XSD_SIMPLE_TYPE_DEFINITION__PATTERN_FACETS, result.size(), result.toArray());
+ }
+
+ public XSDPatternFacet getEffectivePatternFacet()
+ {
+ if (facets != null)
+ {
+ Object [] facetData = facets.data();
+ for (int i = 0, size = facets.size(); i < size; ++i)
+ {
+ Object facet = facetData[i];
+ if (facet instanceof XSDPatternFacet)
+ {
+ return (XSDPatternFacet)facet;
+ }
+ }
+ }
+ return null;
+ }
+
+ protected XSDBoundedFacet boundedFacet;
+ public XSDBoundedFacet getBoundedFacet()
+ {
+ if (boundedFacet == null)
+ {
+ createFundamentalFacets();
+ }
+ return boundedFacet;
+ }
+
+ protected XSDCardinalityFacet cardinalityFacet;
+ public XSDCardinalityFacet getCardinalityFacet()
+ {
+ if (cardinalityFacet == null)
+ {
+ createFundamentalFacets();
+ }
+ return cardinalityFacet;
+ }
+
+ protected XSDNumericFacet numericFacet;
+ public XSDNumericFacet getNumericFacet()
+ {
+ if (numericFacet == null)
+ {
+ createFundamentalFacets();
+ }
+ return numericFacet;
+ }
+
+ protected XSDOrderedFacet orderedFacet;
+ public XSDOrderedFacet getOrderedFacet()
+ {
+ if (orderedFacet == null)
+ {
+ createFundamentalFacets();
+ }
+ return orderedFacet;
+ }
+
+ protected void createFundamentalFacets()
+ {
+ List<XSDFundamentalFacet> theFundamentalFacets = getFundamentalFacets();
+ boundedFacet = getXSDFactory().createXSDBoundedFacet();
+ cardinalityFacet = getXSDFactory().createXSDCardinalityFacet();
+ numericFacet = getXSDFactory().createXSDNumericFacet();
+ orderedFacet = getXSDFactory().createXSDOrderedFacet();
+ List<XSDFundamentalFacet> list = new ArrayList<XSDFundamentalFacet>(4);
+ list.add(boundedFacet);
+ list.add(cardinalityFacet);
+ list.add(numericFacet);
+ list.add(orderedFacet);
+ theFundamentalFacets.addAll(list);
+ }
+
+ protected static EList<String> validFacetsForList;
+ public EList<String> getValidFacetsForList()
+ {
+ if (validFacetsForList == null)
+ {
+ validFacetsForList = new BasicEList<String>();
+ validFacetsForList.add("length");
+ validFacetsForList.add("maxLength");
+ validFacetsForList.add("minLength");
+ validFacetsForList.add("whiteSpace");
+ validFacetsForList.add("enumeration");
+ validFacetsForList.add("pattern");
+ }
+ return validFacetsForList;
+ }
+
+ protected static EList<String> validFacetsForUnion;
+ public EList<String> getValidFacetsForUnion()
+ {
+ if (validFacetsForUnion == null)
+ {
+ validFacetsForUnion = new BasicEList<String>();
+ validFacetsForUnion.add("enumeration");
+ validFacetsForUnion.add("pattern");
+ }
+ return validFacetsForUnion;
+ }
+
+ @Override
+ public XSDTypeDefinition getBaseType()
+ {
+ XSDTypeDefinition result = getBaseTypeDefinition();
+ if (result == this && XSDConstants.isAnyType(this))
+ {
+ XSDSchema xsdSchema = getSchema();
+ if (xsdSchema != null)
+ {
+ String schemaForSchemaNamespace = xsdSchema.getSchemaForSchemaNamespace();
+ XSDSchemaImpl.getSchemaForSchema(schemaForSchemaNamespace).resolveComplexTypeDefinition("anyType");
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public XSDTypeDefinition getRootType()
+ {
+ return getRootTypeDefinition();
+ }
+
+ public XSDSimpleTypeDefinition getRootTypeDefinition()
+ {
+ XSDSimpleTypeDefinition result = this;
+ if (!isCircular())
+ {
+ for (XSDSimpleTypeDefinition theBaseTypeDefinition = result.getBaseTypeDefinition();
+ theBaseTypeDefinition != null && !XSDConstants.isURType(theBaseTypeDefinition);
+ theBaseTypeDefinition = theBaseTypeDefinition.getBaseTypeDefinition())
+ {
+ result = theBaseTypeDefinition;
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public XSDSimpleTypeDefinition getSimpleType()
+ {
+ return this;
+ }
+
+ @Override
+ public XSDParticle getComplexType()
+ {
+ return null;
+ }
+
+ protected XSDEnumerationFacetImpl effectiveEnumerationFacet;
+ protected XSDPatternFacetImpl effectivePatternFacet;
+
+ protected List<XSDConstrainingFacet> mergeFacets()
+ {
+ List<XSDConstrainingFacet> result = new ArrayList<XSDConstrainingFacet>();
+
+ XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+
+ XSDWhiteSpaceFacet xsdWhiteSpaceFacet = getWhiteSpaceFacet();
+ if (xsdWhiteSpaceFacet == null)
+ {
+ xsdWhiteSpaceFacet = theBaseTypeDefinition.getEffectiveWhiteSpaceFacet();
+ }
+ if (xsdWhiteSpaceFacet != null)
+ {
+ result.add(xsdWhiteSpaceFacet);
+ }
+
+ XSDTotalDigitsFacet xsdTotalDigitsFacet = getTotalDigitsFacet();
+ if (xsdTotalDigitsFacet == null)
+ {
+ xsdTotalDigitsFacet = theBaseTypeDefinition.getEffectiveTotalDigitsFacet();
+ }
+ if (xsdTotalDigitsFacet != null)
+ {
+ result.add(xsdTotalDigitsFacet);
+ }
+
+ XSDFractionDigitsFacet xsdFractionDigitsFacet = getFractionDigitsFacet();
+ if (xsdFractionDigitsFacet == null)
+ {
+ xsdFractionDigitsFacet = theBaseTypeDefinition.getEffectiveFractionDigitsFacet();
+ }
+ if (xsdFractionDigitsFacet != null)
+ {
+ result.add(xsdFractionDigitsFacet);
+ }
+
+ XSDLengthFacet xsdLengthFacet = getLengthFacet();
+ if (xsdLengthFacet == null)
+ {
+ xsdLengthFacet = theBaseTypeDefinition.getEffectiveLengthFacet();
+ }
+ if (xsdLengthFacet != null)
+ {
+ result.add(xsdLengthFacet);
+ }
+
+ XSDMinLengthFacet xsdMinLengthFacet = getMinLengthFacet();
+ if (xsdMinLengthFacet == null)
+ {
+ xsdMinLengthFacet = theBaseTypeDefinition.getEffectiveMinLengthFacet();
+ }
+ if (xsdMinLengthFacet != null)
+ {
+ result.add(xsdMinLengthFacet);
+ }
+
+ XSDMaxLengthFacet xsdMaxLengthFacet = getMaxLengthFacet();
+ if (xsdMaxLengthFacet == null)
+ {
+ xsdMaxLengthFacet = theBaseTypeDefinition.getEffectiveMaxLengthFacet();
+ }
+ if (xsdMaxLengthFacet != null)
+ {
+ result.add(xsdMaxLengthFacet);
+ }
+
+ XSDConstrainingFacet maxFacet = getMaxFacet();
+ if (maxFacet == null)
+ {
+ maxFacet = theBaseTypeDefinition.getEffectiveMaxFacet();
+ }
+ if (maxFacet != null)
+ {
+ result.add(maxFacet);
+ }
+
+ XSDConstrainingFacet minFacet = getMinFacet();
+ if (minFacet == null)
+ {
+ minFacet = theBaseTypeDefinition.getEffectiveMinFacet();
+ }
+ if (minFacet != null)
+ {
+ result.add(minFacet);
+ }
+
+ List<XSDEnumerationFacet> enumerationFacets = getEnumerationFacets();
+ if (enumerationFacets.isEmpty())
+ {
+ XSDEnumerationFacet baseEnumerationFacet = theBaseTypeDefinition.getEffectiveEnumerationFacet();
+ if (baseEnumerationFacet != null)
+ {
+ result.add(baseEnumerationFacet);
+ }
+ }
+ else
+ {
+ if (effectiveEnumerationFacet == null)
+ {
+ effectiveEnumerationFacet = (XSDEnumerationFacetImpl)getXSDFactory().createXSDEnumerationFacet();
+ getSyntheticFacets().add(effectiveEnumerationFacet);
+ }
+
+ StringBuffer newLexicalValue = new StringBuffer();
+ List<Object> newValue = new UniqueEList<Object>();
+ List<XSDAnnotation> newAnnotations = new ArrayList<XSDAnnotation>();
+
+ for (XSDEnumerationFacet enumerationFacet : enumerationFacets)
+ {
+ XSDAnnotation xsdAnnotation = enumerationFacet.getAnnotation();
+ if (xsdAnnotation != null)
+ {
+ newAnnotations.add(xsdAnnotation);
+ }
+
+ if (newValue.addAll(enumerationFacet.getValue()))
+ {
+ if (newLexicalValue.length() != 0)
+ {
+ newLexicalValue.append(", ");
+ }
+ newLexicalValue.append(enumerationFacet.getLexicalValue());
+ }
+ }
+ String newLexicalValueString = newLexicalValue.toString();
+
+ List<Object> remainingValues = new ArrayList<Object>(effectiveEnumerationFacet.getValue());
+ remainingValues.removeAll(newValue);
+ if (!remainingValues.isEmpty())
+ {
+ effectiveEnumerationFacet.getValue().removeAll(remainingValues);
+ }
+ if (!newValue.isEmpty())
+ {
+ setListContentAndOrder(effectiveEnumerationFacet.getValue(), newValue);
+ }
+
+ List<XSDAnnotation> remainingAnnotations = new ArrayList<XSDAnnotation>(effectiveEnumerationFacet.getAnnotations());
+ remainingAnnotations.removeAll(newAnnotations);
+ if (!remainingAnnotations.isEmpty())
+ {
+ effectiveEnumerationFacet.getAnnotations().removeAll(remainingAnnotations);
+ }
+ if (!newAnnotations.isEmpty())
+ {
+ setListContentAndOrder(effectiveEnumerationFacet.getAnnotations(), newAnnotations);
+ }
+
+ if (!newLexicalValueString.equals(effectiveEnumerationFacet.getLexicalValue()))
+ {
+ effectiveEnumerationFacet.isReconciling = true;
+ effectiveEnumerationFacet.setLexicalValue(newLexicalValueString);
+ effectiveEnumerationFacet.isReconciling = false;
+ }
+
+ result.add(effectiveEnumerationFacet);
+ }
+
+ List<XSDPatternFacet> patternFacets = getPatternFacets();
+ if (patternFacets.isEmpty())
+ {
+ XSDPatternFacet basePatternFacet = theBaseTypeDefinition.getEffectivePatternFacet();
+ if (basePatternFacet != null)
+ {
+ result.add(basePatternFacet);
+ }
+ }
+ else
+ {
+ if (effectivePatternFacet == null)
+ {
+ effectivePatternFacet = (XSDPatternFacetImpl)getXSDFactory().createXSDPatternFacet();
+ getSyntheticFacets().add(effectivePatternFacet);
+ }
+
+ List<String> newValue = new ArrayList<String>();
+ List<XSDAnnotation> newAnnotations = new ArrayList<XSDAnnotation>();
+ XSDPatternFacet effectiveBasePatternFacet = theBaseTypeDefinition.getEffectivePatternFacet();
+ if (effectiveBasePatternFacet != null)
+ {
+ newValue.addAll(effectiveBasePatternFacet.getValue());
+ }
+
+ StringBuffer combinedPattern = new StringBuffer();
+ if (patternFacets.size() == 1)
+ {
+ XSDPatternFacet xsdPatternFacet = patternFacets.get(0);
+ combinedPattern.append(xsdPatternFacet.getLexicalValue());
+ XSDAnnotation xsdAnnotation = xsdPatternFacet.getAnnotation();
+ if (xsdAnnotation != null)
+ {
+ newAnnotations.add(xsdAnnotation);
+ }
+ }
+ else
+ {
+ for (XSDPatternFacet xsdPatternFacet : patternFacets)
+ {
+ if (combinedPattern.length() != 0)
+ {
+ combinedPattern.append("|");
+ }
+ combinedPattern.append("(");
+ combinedPattern.append(xsdPatternFacet.getLexicalValue());
+ combinedPattern.append(")");
+ XSDAnnotation xsdAnnotation = xsdPatternFacet.getAnnotation();
+ if (xsdAnnotation != null)
+ {
+ newAnnotations.add(xsdAnnotation);
+ }
+ }
+ }
+ newValue.add(combinedPattern.toString());
+
+ List<String> remainingValues = new ArrayList<String>(effectivePatternFacet.getValue());
+ remainingValues.removeAll(newValue);
+ if (!remainingValues.isEmpty())
+ {
+ effectivePatternFacet.getValue().removeAll(remainingValues);
+ }
+ if (!newValue.isEmpty())
+ {
+ setListContentAndOrder(effectivePatternFacet.getValue(), newValue);
+ }
+
+ List<XSDAnnotation> remainingAnnotations = new ArrayList<XSDAnnotation>(effectivePatternFacet.getAnnotations());
+ remainingAnnotations.removeAll(newAnnotations);
+ if (!remainingAnnotations.isEmpty())
+ {
+ effectivePatternFacet.getAnnotations().removeAll(remainingAnnotations);
+ }
+ if (!newAnnotations.isEmpty())
+ {
+ setListContentAndOrder(effectivePatternFacet.getAnnotations(), newAnnotations);
+ }
+
+ StringBuffer newLexicalValue = new StringBuffer();
+ if (newValue.size() == 1)
+ {
+ newLexicalValue.append(newValue.get(0));
+ }
+ else
+ {
+ for (String string : newValue)
+ {
+ if (newLexicalValue.length() != 0)
+ {
+ newLexicalValue.append(" & ");
+ }
+ newLexicalValue.append("(");
+ newLexicalValue.append(string);
+ newLexicalValue.append(")");
+ }
+ }
+ String newLexicalValueString = newLexicalValue.toString();
+ if (!newLexicalValueString.equals(effectivePatternFacet.getLexicalValue()))
+ {
+ effectivePatternFacet.isReconciling = true;
+ effectivePatternFacet.setLexicalValue(newLexicalValueString);
+ effectivePatternFacet.isReconciling = false;
+ }
+
+ result.add(effectivePatternFacet);
+ }
+
+ return result;
+ }
+
+
+ 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<XSDSimpleFinal> newLexicalFinal = new ArrayList<XSDSimpleFinal>();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(finalDefault); stringTokenizer.hasMoreTokens(); )
+ {
+ String token = stringTokenizer.nextToken();
+ if (token.equals("#all"))
+ {
+ token = "all";
+ }
+ XSDSimpleFinal literal = XSDSimpleFinal.get(token);
+ if (literal != null)
+ {
+ newLexicalFinal.add(literal);
+ }
+ }
+ if (!newLexicalFinal.equals(getLexicalFinal()))
+ {
+ Collection<XSDSimpleFinal> oldContents = new ArrayList<XSDSimpleFinal>(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();
+ }
+
+ /**
+ * This is used to gather selectively
+ * the information determined when assessing a literal string
+ * with respect to a {@link XSDSimpleTypeDefinition}.
+ * It is intended to be very light-weight and flexible.
+ *
+ * You may begin assessment with a {@link #node}, which handles three cases:
+ * if the node is an attribute, it's value is used to determine the literal;
+ * if the node is a text node, it's value is used to determine the literal;
+ * if the node is an element, it's (one and only) child text node is used to determine the literal in the preceeding case.
+ * You may begin assessment with a {@link #literal} by not setting a node.
+ * And you may begin assessment with a {@link #normalizedLiteral} by setting neither the node nor the literal.
+ *
+ * Unless additional {@link #yield} flags are set,
+ * assessment will perform but one function:
+ * it will set the {@link #diagnostics} to Collections.EMPTY_LIST when the literal fails to assess as valid.
+ * Hence, this most-light-weight invocation will only determine validity.
+ *
+ * You may choose for assessment to yield additional results,
+ * i.e., the {@link #value}, the {@link #canonicalLiteral}, and the {@link #diagnostics},
+ * using the flags {@link #YIELD_VALUE}, {@link #YIELD_CANONICAL_LITERAL}, {@link #YIELD_DIAGNOSTICS}.
+ */
+ public static class AssessmentImpl implements XSDSimpleTypeDefinition.Assessment
+ {
+ public static final int YIELD_VALUE = 0x01;
+ public static final int YIELD_CANONICAL_LITERAL = 0x02;
+ public static final int YIELD_DIAGNOSTICS = 0x04;
+
+ /**
+ * This is the simple type definition doing the assessment.
+ */
+ public XSDSimpleTypeDefinitionImpl xsdSimpleTypeDefinition;
+
+ /**
+ * This is the simple type definition doing the assessment for an atomic type.
+ */
+ public XSDAnySimpleType xsdAnySimpleType;
+
+ /**
+ * This is the context in which the prefix of QNames are resolved.
+ */
+ public Element context;
+
+ /**
+ * This is the node whose literal is being assessed.
+ */
+ public Node node;
+
+ /**
+ * This is the literal that is being assessed.
+ */
+ public String literal;
+
+ /**
+ * This is the normalized value of the literal being assessed.
+ */
+ public String normalizedLiteral;
+
+ /**
+ * This determines the results that will be yielded during assessment.
+ */
+ public int yield;
+
+ /**
+ * This is the value of the normalized literal in the Java representation of the value space.
+ */
+ public Object value;
+
+ /**
+ * This is the canonical literal representation of the literal.
+ */
+ public String canonicalLiteral;
+
+ /**
+ * These are the diagnostics that are collected.
+ */
+ public Collection<XSDDiagnostic> diagnostics;
+
+ /**
+ * This records any nested assessments that were performed.
+ */
+ public Collection<Assessment> assessments;
+
+ /**
+ * This creates an empty instance;
+ * minimally, the node or literal would need to be set before using this.
+ */
+ public AssessmentImpl()
+ {
+ super();
+ }
+
+ /**
+ * This creates an instance to assess the given node and to yield the specified results.
+ */
+ public AssessmentImpl(Node node, int yield)
+ {
+ this.yield = yield;
+ this.node = node;
+ }
+
+ /**
+ * This creates an instance to assess the given node and to yield the specified results.
+ */
+ public AssessmentImpl(Element context, Node node, int yield)
+ {
+ this.context = context;
+ this.yield = yield;
+ this.node = node;
+ }
+
+ /**
+ * This creates an instance to assess the given literal and to yield the specified results.
+ */
+ public AssessmentImpl(String literal, int yield)
+ {
+ this.yield = yield;
+ this.literal = literal;
+ }
+
+ /**
+ * This creates an instance to assess the given literal and to yield the specified results.
+ */
+ public AssessmentImpl(Element context, String literal, int yield)
+ {
+ this.context = context;
+ this.yield = yield;
+ this.literal = literal;
+ }
+
+ public XSDSimpleTypeDefinition getTypeDefinition()
+ {
+ return xsdSimpleTypeDefinition;
+ }
+
+ public Element getContext()
+ {
+ return context;
+ }
+
+ public Node getNode()
+ {
+ return node;
+ }
+
+ public String getLiteral()
+ {
+ return literal;
+ }
+
+ public String getNormalizedLiteral()
+ {
+ return normalizedLiteral;
+ }
+
+ public Object getValue()
+ {
+ return value;
+ }
+
+ public String getCanonicalLiteral()
+ {
+ return normalizedLiteral;
+ }
+
+ public XSDSimpleTypeDefinition getMemberTypeDefinition()
+ {
+ return null;
+ }
+
+ public Collection<XSDDiagnostic> getLocalDiagnostics()
+ {
+ return diagnostics == null ? Collections.<XSDDiagnostic>emptyList() : diagnostics;
+ }
+
+ public Collection<Assessment> getAssessments()
+ {
+ return assessments;
+ }
+
+ public Collection<XSDDiagnostic> getDiagnostics()
+ {
+ Collection<XSDDiagnostic> result = new ArrayList<XSDDiagnostic>();
+ getAllDiagnostics(result);
+ return result;
+ }
+
+ protected void getAllDiagnostics(Collection<XSDDiagnostic> result)
+ {
+ if (diagnostics != null)
+ {
+ result.addAll(diagnostics);
+ }
+ if (assessments != null)
+ {
+ for (Assessment assessment : assessments)
+ {
+ ((AssessmentImpl)assessment).getAllDiagnostics(result);
+ }
+ }
+ }
+
+ public void format(String noun, String name)
+ {
+ if (diagnostics != null)
+ {
+ for (XSDDiagnostic xsdDiagnostic : diagnostics)
+ {
+ xsdDiagnostic.setMessage(MessageFormat.format(xsdDiagnostic.getMessage(), new Object [] { noun, name }));
+ }
+ }
+ if (assessments != null)
+ {
+ for (Assessment assessment : assessments)
+ {
+ assessment.format(noun, name);
+ }
+ }
+ }
+
+ public void assignDiagnostics(XSDConcreteComponent xsdConcreteComponent, Element element, String attributeName)
+ {
+ Collection<XSDDiagnostic> allDiagnostics = getDiagnostics();
+ if (!allDiagnostics.isEmpty())
+ {
+ Node theNode = element;
+ if (element != null && element.hasAttributeNS(null, attributeName))
+ {
+ theNode = element.getAttributeNodeNS(null, attributeName);
+ }
+
+ Object [] substitutions = new Object [] { XSDPlugin.INSTANCE.getString("attribute_noun"), attributeName };
+ for (XSDDiagnostic xsdDiagnostic : allDiagnostics)
+ {
+ xsdDiagnostic.setMessage(MessageFormat.format(xsdDiagnostic.getMessage(), substitutions));
+ xsdDiagnostic.getComponents().add(0, xsdConcreteComponent);
+ xsdDiagnostic.setNode(theNode);
+ }
+ }
+ }
+
+ public void validate(XSDConstrainingFacet xsdConstrainingFacet)
+ {
+ if (xsdConstrainingFacet != null &&
+ !(xsdConstrainingFacet instanceof XSDPatternFacet ?
+ ((XSDPatternFacet)xsdConstrainingFacet).isConstraintSatisfied(normalizedLiteral) :
+ xsdConstrainingFacet.isConstraintSatisfied(value)))
+ {
+ XSDDiagnostic result = ((XSDConcreteComponentImpl)xsdConstrainingFacet).getXSDFactory().createXSDDiagnostic();
+ result.setSeverity(XSDDiagnosticSeverity.ERROR_LITERAL);
+ Object [] substitutions = createSubstitutions(5);
+ substitutions[3] = xsdConstrainingFacet.getLexicalValue();
+ substitutions[4] = xsdConstrainingFacet.getSimpleTypeDefinition().getURI();
+
+ String message = populateDiagnostic(result, "cvc-" + xsdConstrainingFacet.getFacetName() + "-valid", substitutions);
+ if (node == null || node.getNodeType() == Node.TEXT_NODE)
+ {
+ message = requote(message);
+ }
+ result.setMessage(XSDPlugin.INSTANCE.getString("_UI_XSDError_message", new Object [] { message}));
+ result.setAnnotationURI(XSDConstants.PART2 + "#" + xsdConstrainingFacet.getFacetName());
+ result.setPrimaryComponent(xsdConstrainingFacet);
+ result.setNode(node);
+
+ if (diagnostics == null)
+ {
+ diagnostics = new ArrayList<XSDDiagnostic>();
+ }
+ diagnostics.add(result);
+ }
+ }
+
+ protected Object [] createSubstitutions(int length)
+ {
+ Object [] substitutions = new Object [length];
+ if (normalizedLiteral != null)
+ {
+ substitutions[0] = normalizedLiteral;
+ }
+ else if (literal != null)
+ {
+ substitutions[0] = literal;
+ }
+ else
+ {
+ substitutions[0] = value;
+ }
+
+ if (node == null || node.getNodeType() == Node.TEXT_NODE)
+ {
+ substitutions[1] = "\000";
+ substitutions[2] = "\001";
+ }
+ else if (node.getNodeType() == Node.ATTRIBUTE_NODE)
+ {
+ substitutions[1] = XSDPlugin.INSTANCE.getString("attribute_noun");
+ substitutions[2] = node.getLocalName();
+ }
+ else if (node.getNodeType() == Node.ELEMENT_NODE)
+ {
+ substitutions[1] = XSDPlugin.INSTANCE.getString("element_noun");
+ substitutions[2] = node.getLocalName();
+ }
+
+ return substitutions;
+ }
+
+ protected static String requote(String message)
+ {
+ StringBuffer stringBuffer = new StringBuffer(message);
+ for (int i = stringBuffer.length() - 1; i > 0; --i)
+ {
+ switch (stringBuffer.charAt(i))
+ {
+ case 0:
+ {
+ stringBuffer.replace(i, i + 1, "{0}");
+ break;
+ }
+ case 1:
+ {
+ stringBuffer.replace(i, i + 1, "{1}");
+ break;
+ }
+ case '\'':
+ {
+ stringBuffer.insert(i, '\'');
+ break;
+ }
+ case '{': // }
+ {
+ stringBuffer.replace(i, i + 1, "'{'"); // }
+ break;
+ }
+ }
+ }
+ return stringBuffer.toString();
+ }
+
+ public void reportDatatypeDiagnostic()
+ {
+ XSDDiagnostic result = xsdSimpleTypeDefinition.getXSDFactory().createXSDDiagnostic();
+ result.setSeverity(XSDDiagnosticSeverity.ERROR_LITERAL);
+ Object [] substitutions = createSubstitutions(4);
+ substitutions[3] = xsdSimpleTypeDefinition.getURI();
+ XSDSimpleTypeDefinition primitiveTypeDefinition = xsdSimpleTypeDefinition.getPrimitiveTypeDefinition();
+ String message =
+ populateDiagnostic
+ (result,
+ primitiveTypeDefinition == null ?
+ "cvc-datatype-valid.1.2.3" :
+ "cvc-datatype-valid.1.2.1",
+ substitutions);
+ if (node == null || node.getNodeType() == Node.TEXT_NODE)
+ {
+ message = requote(message);
+ }
+ result.setMessage(XSDPlugin.INSTANCE.getString("_UI_XSDError_message", new Object [] { message }));
+ if (primitiveTypeDefinition != null)
+ {
+ result.setAnnotationURI(XSDConstants.PART2 + "#" + primitiveTypeDefinition.getName());
+ }
+ result.setPrimaryComponent(primitiveTypeDefinition);
+ result.setNode(node);
+
+ if (diagnostics == null)
+ {
+ diagnostics = new ArrayList<XSDDiagnostic>();
+ }
+ diagnostics.add(result);
+ }
+ }
+
+ public XSDSimpleTypeDefinition.Assessment assess(Node node)
+ {
+ return assess(null, node);
+ }
+
+ public XSDSimpleTypeDefinition.Assessment assess(Element context, Node node)
+ {
+ AssessmentImpl assessment = new AssessmentImpl(context, node, 0);
+ return assess(assessment);
+ }
+
+ public XSDSimpleTypeDefinition.Assessment assess(String literal)
+ {
+ return assess(null, literal);
+ }
+
+ public XSDSimpleTypeDefinition.Assessment assess(Element context, String literal)
+ {
+ AssessmentImpl assessment = new AssessmentImpl(context, literal, 0);
+ return assess(assessment);
+ }
+
+ public AssessmentImpl assess(AssessmentImpl assessment)
+ {
+ return assess(assessment, true);
+ }
+
+ public AssessmentImpl assess(AssessmentImpl assessment, boolean validate)
+ {
+ assessment.xsdSimpleTypeDefinition = this;
+
+ // Determine the literal from the node.
+ //
+ if (assessment.literal == null && assessment.node != null)
+ {
+ switch (assessment.node.getNodeType())
+ {
+ case Node.ATTRIBUTE_NODE:
+ {
+ assessment.literal = assessment.node.getNodeValue();
+ break;
+ }
+ case Node.ELEMENT_NODE:
+ {
+ Element element = (Element)assessment.node;
+ StringBuffer text = new StringBuffer();
+ for (Node child = element.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ switch (child.getNodeType())
+ {
+ case Node.TEXT_NODE:
+ case Node.CDATA_SECTION_NODE:
+ {
+ text.append(child.getNodeValue());
+ break;
+ }
+ }
+ }
+ assessment.literal = text.toString();
+ break;
+ }
+ case Node.TEXT_NODE:
+ case Node.CDATA_SECTION_NODE:
+ {
+ assessment.literal = assessment.node.getNodeValue();
+ break;
+ }
+ }
+ }
+
+ // Determine the normalized literal from the literal.
+ //
+ if (assessment.normalizedLiteral == null && assessment.literal != null)
+ {
+ assessment.normalizedLiteral = assessment.literal;
+ XSDWhiteSpaceFacet effectiveWhiteSpaceFacet = getEffectiveWhiteSpaceFacet();
+ if (effectiveWhiteSpaceFacet != null)
+ {
+ assessment.normalizedLiteral = effectiveWhiteSpaceFacet.getNormalizedLiteral(assessment.literal);
+ }
+ }
+
+ if (!isCircular())
+ {
+ if (validate)
+ {
+ assessment.validate(getEffectivePatternFacet());
+ }
+
+ switch (getVariety().getValue())
+ {
+ case XSDVariety.ATOMIC:
+ {
+ XSDSimpleTypeDefinition thePrimitiveTypeDefinition = getPrimitiveTypeDefinition();
+ if (thePrimitiveTypeDefinition != null)
+ {
+ XSDAnySimpleType xsdAnySimpleType = XSDTypeRegister.getTypeImplementer(thePrimitiveTypeDefinition.getName());
+ xsdAnySimpleType.assess(assessment);
+ if (validate && assessment.diagnostics == null)
+ {
+ assessment.validate(getEffectiveLengthFacet());
+ assessment.validate(getEffectiveMinLengthFacet());
+ assessment.validate(getEffectiveMaxLengthFacet());
+
+ assessment.validate(getEffectiveTotalDigitsFacet());
+ assessment.validate(getEffectiveFractionDigitsFacet());
+
+ if (XSDOrdered.FALSE_LITERAL != getOrderedFacet().getValue())
+ {
+ assessment.validate(getEffectiveMinFacet());
+ assessment.validate(getEffectiveMaxFacet());
+ }
+ }
+ }
+ break;
+ }
+ case XSDVariety.UNION:
+ {
+ boolean good = false;
+ for (XSDSimpleTypeDefinition memberTypeDefinition : getMemberTypeDefinitions())
+ {
+ AssessmentImpl nestedAssessment = new AssessmentImpl(assessment.context, assessment.node, assessment.yield);
+ nestedAssessment.literal = nestedAssessment.normalizedLiteral = assessment.normalizedLiteral;
+
+ ((XSDSimpleTypeDefinitionImpl)memberTypeDefinition).assess(nestedAssessment);
+
+ if (nestedAssessment.diagnostics == null)
+ {
+ if (assessment.assessments == null)
+ {
+ assessment.assessments = new ArrayList<Assessment>();
+ }
+ assessment.assessments.add(nestedAssessment);
+ assessment.value = nestedAssessment.value;
+ good = true;
+ break;
+ }
+ }
+
+ if (validate && !good)
+ {
+ assessment.reportDatatypeDiagnostic();
+ }
+
+ break;
+ }
+ case XSDVariety.LIST:
+ {
+ XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
+ if (theItemTypeDefinition != null)
+ {
+ List<Object> list = new ArrayList<Object>();
+ assessment.value = list;
+ for (StringTokenizer tokens = new StringTokenizer(assessment.normalizedLiteral, " ");
+ tokens.hasMoreTokens(); )
+ {
+ AssessmentImpl nestedAssessment = new AssessmentImpl(assessment.context, assessment.node, assessment.yield);
+ nestedAssessment.literal = nestedAssessment.normalizedLiteral = tokens.nextToken();
+ ((XSDSimpleTypeDefinitionImpl)getItemTypeDefinition()).assess(nestedAssessment, validate);
+ if (nestedAssessment.value != null)
+ {
+ list.add(nestedAssessment.value);
+ }
+ if (assessment.assessments == null)
+ {
+ assessment.assessments = new ArrayList<Assessment>();
+ }
+ assessment.assessments.add(nestedAssessment);
+ }
+
+ if (validate)
+ {
+ assessment.validate(getEffectiveLengthFacet());
+ assessment.validate(getEffectiveMinLengthFacet());
+ assessment.validate(getEffectiveMaxLengthFacet());
+ }
+ }
+ break;
+ }
+ }
+
+ if (validate)
+ {
+ assessment.validate(getEffectiveEnumerationFacet());
+ }
+ }
+
+ return assessment;
+ }
+
+ public boolean isValidLiteral(String literal)
+ {
+ return isValidLiteral(null, literal);
+ }
+
+ public boolean isValidLiteral(Element context, String literal)
+ {
+ AssessmentImpl assessment = new AssessmentImpl(context, literal, 0);
+ assess(assessment);
+ return assessment.diagnostics == null;
+ }
+
+ public Object getValue(String literal)
+ {
+ return getValue(null, literal);
+
+ }
+
+ public Object getValue(Element context, String literal)
+ {
+ AssessmentImpl assessment = new AssessmentImpl(context, literal, 0);
+ assess(assessment, false);
+ return assessment.value;
+ }
+
+ public String getCanonicalLiteral(String literal)
+ {
+ AssessmentImpl assessment = new AssessmentImpl(null, literal, 0);
+ assess(assessment, false);
+ return assessment.normalizedLiteral;
+ }
+
+ public String getNormalizedLiteral(String literal)
+ {
+ String result = literal;
+ XSDWhiteSpaceFacet effectiveWhiteSpaceFacet = getEffectiveWhiteSpaceFacet();
+ if (effectiveWhiteSpaceFacet != null)
+ {
+ result = effectiveWhiteSpaceFacet.getNormalizedLiteral(result);
+ }
+ return result;
+ }
+
+ public boolean equalValues(Object value1, Object value2)
+ {
+ return value1 == null ? value2 == null : value1.equals(value2);
+ }
+
+ public boolean equalLiterals(String literal1, String literal2)
+ {
+ return equalLiterals(null, literal1, null, literal2);
+ }
+
+ public boolean equalLiterals(Element context1, String literal1, Element context2, String literal2)
+ {
+ return equalValues(getValue(context1, literal1), getValue(context2, literal2));
+ }
+
+ public int compareValues(Object value1, Object value2)
+ {
+ if (XSDOrdered.FALSE_LITERAL != getOrderedFacet().getValue())
+ {
+ XSDSimpleTypeDefinition thePrimitiveTypeDefinition = getPrimitiveTypeDefinition();
+ if (thePrimitiveTypeDefinition != null)
+ {
+ XSDAnySimpleType xsdAnySimpleType =
+ XSDTypeRegister.getTypeImplementer(thePrimitiveTypeDefinition.getName());
+ return
+ value1 == null ?
+ value2 == null ?
+ 0 :
+ -1 :
+ value2 == null ?
+ 1 :
+ xsdAnySimpleType.compareValues(value1, value2);
+ }
+ }
+ return 0;
+ }
+
+ public int compareLiterals(String literal1, String literal2)
+ {
+ return compareLiterals(null, literal1, null, literal2);
+ }
+
+ public int compareLiterals(Element context1, String literal1, Element context2, String literal2)
+ {
+ return compareValues(getValue(context1, literal1), getValue(context2, literal2));
+ }
+
+ @Override
+ public XSDTypeDefinition getBadTypeDerivation(XSDTypeDefinition xsdTypeDefinition, boolean extension, boolean restriction)
+ {
+ if (xsdTypeDefinition == this)
+ {
+ return null;
+ }
+ else if (!restriction ||
+ getBaseTypeDefinition() == null ||
+ getBaseTypeDefinition().getFinal().contains(XSDSimpleFinal.RESTRICTION_LITERAL))
+ {
+ return this;
+ }
+ else
+ {
+ XSDTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+ XSDTypeDefinition result = theBaseTypeDefinition;
+ if (theBaseTypeDefinition == xsdTypeDefinition)
+ {
+ return null;
+ }
+ else if (!XSDConstants.isURType(theBaseTypeDefinition))
+ {
+ result = theBaseTypeDefinition.getBadTypeDerivation(xsdTypeDefinition, extension, restriction);
+ if (result == null)
+ {
+ return null;
+ }
+ }
+
+ switch (getVariety().getValue())
+ {
+ case XSDVariety.LIST:
+ case XSDVariety.UNION:
+ {
+ if (XSDConstants.isURType(xsdTypeDefinition))
+ {
+ return null;
+ }
+ }
+ }
+
+ if (xsdTypeDefinition instanceof XSDSimpleTypeDefinition)
+ {
+ XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)xsdTypeDefinition;
+ if (xsdSimpleTypeDefinition.getVariety() == XSDVariety.UNION_LITERAL)
+ {
+ for (XSDSimpleTypeDefinition memberTypeDefinition : xsdSimpleTypeDefinition.getMemberTypeDefinitions())
+ {
+ XSDTypeDefinition memberResult = getBadTypeDerivation(memberTypeDefinition, extension, restriction);
+ if (memberResult == null)
+ {
+ return null;
+ }
+ }
+ }
+ }
+ else if (XSDConstants.isAnyType(xsdTypeDefinition))
+ {
+ return null;
+ }
+
+ return result;
+ }
+ }
+
+ @Override
+ public XSDConcreteComponent cloneConcreteComponent(boolean deep, boolean shareDOM)
+ {
+ XSDSimpleTypeDefinitionImpl clonedSimpleTypeDefinition =
+ (XSDSimpleTypeDefinitionImpl)getXSDFactory().createXSDSimpleTypeDefinition();
+ clonedSimpleTypeDefinition.isReconciling = true;
+
+ XSDSimpleTypeDefinition theBaseTypeDefinition = getBaseTypeDefinition();
+
+ if (getName() != null)
+ {
+ clonedSimpleTypeDefinition.setName(getName());
+ }
+ if (isSetLexicalFinal())
+ {
+ if (!getLexicalFinal().isEmpty())
+ {
+ clonedSimpleTypeDefinition.getLexicalFinal().addAll(getLexicalFinal());
+ }
+ else
+ {
+ clonedSimpleTypeDefinition.getLexicalFinal().clear();
+ }
+ }
+
+ if (!(getContainer() instanceof XSDComplexTypeDefinition))
+ {
+ if (getItemTypeDefinition() != null && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
+ {
+ if (!getContents().contains(getItemTypeDefinition()))
+ {
+ XSDSimpleTypeDefinition theItemTypeDefinition = getItemTypeDefinition();
+ clonedSimpleTypeDefinition.setItemTypeDefinition
+ (createUnresolvedSimpleTypeDefinition
+ (theItemTypeDefinition.getTargetNamespace(), theItemTypeDefinition.getName()));
+ }
+ }
+ else if (!getMemberTypeDefinitions().isEmpty() && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
+ {
+ List<XSDSimpleTypeDefinition> unresolvedMembers = new ArrayList<XSDSimpleTypeDefinition>(getMemberTypeDefinitions().size());
+ for (XSDSimpleTypeDefinition memberTypeDefinition : getMemberTypeDefinitions())
+ {
+ if (getContents().contains(memberTypeDefinition))
+ {
+ break;
+ }
+ else
+ {
+ unresolvedMembers.add
+ (createUnresolvedSimpleTypeDefinition
+ (memberTypeDefinition.getTargetNamespace(), memberTypeDefinition.getName()));
+ }
+ }
+ if (!unresolvedMembers.isEmpty())
+ {
+ clonedSimpleTypeDefinition.getMemberTypeDefinitions().addAll(unresolvedMembers);
+ }
+ }
+ else
+ {
+ if (getBaseTypeDefinition() != null && !getContents().contains(getBaseTypeDefinition()))
+ {
+ clonedSimpleTypeDefinition.setBaseTypeDefinition
+ (createUnresolvedSimpleTypeDefinition
+ (theBaseTypeDefinition.getTargetNamespace(), theBaseTypeDefinition.getName()));
+ }
+ }
+ }
+
+ if (deep)
+ {
+ if (getAnnotation() != null)
+ {
+ clonedSimpleTypeDefinition.setAnnotation((XSDAnnotation)getAnnotation().cloneConcreteComponent(deep, shareDOM));
+ }
+ if (getDerivationAnnotation() != null)
+ {
+ clonedSimpleTypeDefinition.setDerivationAnnotation((XSDAnnotation)getDerivationAnnotation().cloneConcreteComponent(deep, shareDOM));
+ }
+ if (!getContents().isEmpty())
+ {
+ clonedSimpleTypeDefinition.getContents().addAll(cloneConcreteComponents(getContents(), deep, shareDOM));
+ if (getItemTypeDefinition() != null && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
+ {
+ clonedSimpleTypeDefinition.setItemTypeDefinition(clonedSimpleTypeDefinition.getContents().get(0));
+ }
+ else if (!getMemberTypeDefinitions().isEmpty() && (theBaseTypeDefinition == null || XSDConstants.isURType(theBaseTypeDefinition)))
+ {
+ clonedSimpleTypeDefinition.getMemberTypeDefinitions().addAll(clonedSimpleTypeDefinition.getContents());
+ }
+ else
+ {
+ clonedSimpleTypeDefinition.setBaseTypeDefinition(clonedSimpleTypeDefinition.getContents().get(0));
+ }
+ }
+ if (!getFacetContents().isEmpty())
+ {
+ clonedSimpleTypeDefinition.getFacetContents().addAll(cloneConcreteComponents(getFacetContents(), deep, shareDOM));
+ }
+ }
+
+ if (shareDOM && getElement() != null)
+ {
+ clonedSimpleTypeDefinition.setElement(getElement());
+ }
+
+ clonedSimpleTypeDefinition.isReconciling = shareDOM;
+ return clonedSimpleTypeDefinition;
+ }
+}