/* * 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 XmlSchemaGroup extends XmlSchemaParticle<XmlSchemaGroup> { private XmlSchemaParticle<?> _particle; private QName _name; private final QName _refName; private boolean _resolvedGroups; public XmlSchemaGroup( XmlSchemaIndex schemaIndex, LocationInfo locationInfo, XmlSchemaParticle<?> particle, QName name, QName refName, long minOccurs, long maxOccurs ) { super( schemaIndex, locationInfo, minOccurs, maxOccurs ); _particle = particle; _name = name; _refName = refName; } public XmlSchemaParticle<?> getParticle() { if ( ! _resolvedGroups ) { _particle = _particle == null ? null : _particle.resolveGroups(); _resolvedGroups = true; } return _particle; } public QName getName() { return _name; } public void setName( QName name ) { _name = name; } @Override public XmlSchemaGroup copy( XmlSchemaIndex schemaIndex ) { return new XmlSchemaGroup( schemaIndex, getLocationInfo(), getParticle() == null ? null : getParticle().copy( schemaIndex ), _name, _refName, getMinOccurs(), getMaxOccurs() ); } @Override public XmlSchemaGroup resolveGroups() { if ( _refName == null ) { return this; } else { XmlSchemaGroup group = getSchemaIndex().getXmlSchemaGroupByQName( _refName ).copy(); group.setMinOccurs( getMinOccurs() ); group.setMaxOccurs( getMaxOccurs() ); return group; } } }