/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.xsd.typeprovider.xmlsorter; import gw.internal.xml.xsd.typeprovider.XmlSchemaIndex; import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaComplexContentExtension; import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaComplexType; import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaParticle; import gw.xml.XmlElement; import java.util.LinkedList; import java.util.List; import java.util.Set; /** * Sort handler representing a complex content extension. If there is a base type, delegates to it first, followed * by any particle. Utilizes a XmlSchemaSequenceXmlSortHandler to handle the permutations of choices between the two children. */ public class XmlSchemaComplexContentExtensionXmlSortHandler extends XmlSortHandler { private final XmlSortHandler _child; public XmlSchemaComplexContentExtensionXmlSortHandler( XmlSchemaComplexContentExtension extension ) { super( extension ); final XmlSchemaComplexType baseType = extension.getSchemaIndex().getXmlSchemaComplexTypeByQName( extension.getBaseTypeName() ); XmlSortHandler baseTypeHandler = XmlSorter.createHandler( baseType ); final XmlSchemaParticle particle = extension.getParticle(); if ( particle != null ) { XmlSortHandler particleHandler = XmlSorter.createHandler( particle ); _child = new XmlSchemaSequenceXmlSortHandler( extension, baseTypeHandler, particleHandler ); } else { _child = baseTypeHandler; } } @Override public List<XmlElement> sortDirect( LinkedList<XmlElement> remainingChildren, boolean preferredOnly, List<XmlSchemaIndex> requiredSchemas, Set<XmlElement> mustMatch ) { return _child.sort( remainingChildren, preferredOnly, requiredSchemas, mustMatch ); } @Override protected boolean selectNextChoiceDirect() { return _child.selectNextChoice(); } @Override public void _reset() { _child.reset(); } @Override protected void checkMissingRequiredElements( LinkedList<XmlElement> remainingChildren, List<XmlSchemaIndex> requiredSchemas ) { _child.checkMissingRequiredElements( remainingChildren, requiredSchemas ); } @Override public void match( Set<XmlElement> children, List<XmlSchemaIndex> requiredSchemas ) { _child.match( children, requiredSchemas ); } }