| /** |
| * 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: |
| * </p> |
| * <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> |
| * |
| * @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) |
| { |
| if (memberTypeDefinitions.contains(newMemberTypeDefinition)) |
| { |
| theMemberTypeDefinitions.remove(); |
| } |
| else |
| { |
| 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; |
| } |
| } |