/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.xsd.typeprovider.schema; import gw.internal.xml.xsd.typeprovider.XmlSchemaIndex; import gw.lang.reflect.LocationInfo; import javax.xml.namespace.QName; public final class XmlSchemaComplexType extends XmlSchemaType<XmlSchemaComplexType> { private final XmlSchemaContentModel<?> _contentModel; private String _gwTypeName; private XmlSchemaAnyAttribute _anyAttributeRecursive; private boolean _anyAttributeSupertypesResolved; private XmlSchemaAny _anyRecursive; private boolean _anySupertypesResolved; private final boolean _mixed; public XmlSchemaComplexType( XmlSchemaIndex schemaIndex, LocationInfo locationInfo, String name, QName qname, XmlSchemaContentModel<?> contentModel, String gwTypeName, boolean mixed ) { super( schemaIndex, locationInfo, name, qname ); _contentModel = contentModel; _gwTypeName = gwTypeName; _mixed = mixed; } public XmlSchemaContentModel getContentModel() { return _contentModel; } public String getGwTypeName() { return _gwTypeName; } @Override public XmlSchemaComplexType copy( XmlSchemaIndex schemaIndex ) { XmlSchemaComplexType copy = new XmlSchemaComplexType( schemaIndex, getLocationInfo(), getName(), getQName(), _contentModel == null ? null : _contentModel.copy( schemaIndex ), _gwTypeName, isMixed() ); copy._anyAttributeRecursive =(_anyAttributeRecursive == null? null : _anyAttributeRecursive.copy( schemaIndex )); copy._anyAttributeSupertypesResolved = _anyAttributeSupertypesResolved; copy._anyRecursive = ( _anyRecursive == null? null : _anyRecursive.copy( schemaIndex )); copy._anySupertypesResolved = _anySupertypesResolved; return copy; } @Override public XmlSchemaAnyAttribute getAnyAttributeRecursiveIncludingSupertypes() { if ( ! _anyAttributeSupertypesResolved ) { if ( _anyAttributeRecursive == null ) { if ( _contentModel instanceof XmlSchemaComplexContent ) { XmlSchemaComplexContent contentModel = (XmlSchemaComplexContent) _contentModel; if ( contentModel.getContent() instanceof XmlSchemaComplexContentExtension ) { XmlSchemaComplexContentExtension extension = (XmlSchemaComplexContentExtension) contentModel.getContent(); QName baseTypeName = extension.getBaseTypeName(); XmlSchemaType superType = getSchemaIndex().getXmlSchemaTypeByQName( baseTypeName ); _anyAttributeRecursive = superType.getAnyAttributeRecursiveIncludingSupertypes(); } } } _anyAttributeSupertypesResolved = true; } return _anyAttributeRecursive; } public void setAnyAttributeRecursive( XmlSchemaAnyAttribute anyAttributeRecursive ) { _anyAttributeRecursive = anyAttributeRecursive; _anyAttributeSupertypesResolved = false; } @Override public XmlSchemaAny getAnyRecursiveIncludingSupertypes() { if ( ! _anySupertypesResolved ) { if ( _anyRecursive == null ) { if ( _contentModel instanceof XmlSchemaComplexContent ) { XmlSchemaComplexContent contentModel = (XmlSchemaComplexContent) _contentModel; if ( contentModel.getContent() instanceof XmlSchemaComplexContentExtension ) { XmlSchemaComplexContentExtension extension = (XmlSchemaComplexContentExtension) contentModel.getContent(); QName baseTypeName = extension.getBaseTypeName(); XmlSchemaType superType = getSchemaIndex().getXmlSchemaTypeByQName( baseTypeName ); _anyRecursive = superType.getAnyRecursiveIncludingSupertypes(); } } } _anySupertypesResolved = true; } return _anyRecursive; } public void setAnyRecursive( XmlSchemaAny anyRecursive ) { _anyRecursive = anyRecursive; _anySupertypesResolved = false; } public boolean isMixed() { return _mixed; } }