package org.geotools.kml.v22; import javax.xml.namespace.QName; import org.eclipse.xsd.XSDElementDeclaration; import org.geotools.xml.SchemaIndex; import org.geotools.xml.impl.ElementHandler; import org.geotools.xml.impl.Handler; import org.geotools.xml.impl.HandlerFactory; import org.geotools.xml.impl.HandlerFactoryImpl; import org.geotools.xml.impl.ParserHandler; public class KMLCustomSchemaHandlerFactory extends HandlerFactoryImpl implements HandlerFactory { private final SchemaRegistry schemaRegistry; public KMLCustomSchemaHandlerFactory(SchemaRegistry schemaRegistry) { super(); this.schemaRegistry = schemaRegistry; } @Override public ElementHandler createElementHandler(QName qName, Handler parent, ParserHandler parser) { String name = qName.getLocalPart(); if (schemaRegistry.get(name) != null) { // we found a custom schema element // let's treat it as if we've found a placemark SchemaIndex schemaIndex = parser.getSchemaIndex(); XSDElementDeclaration element = schemaIndex.getElementDeclaration(KML.Placemark); if (element != null) { return createElementHandler(element, parent, parser); } } return super.createElementHandler(qName, parent, parser); } }