/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.extension.internal.capability.xml.schema.model; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.XMLFilterImpl; public class NamespaceFilter extends XMLFilterImpl { private String usedNamespaceUri; private String prefix; private boolean addNamespace; // State variable private boolean addedNamespace = false; public NamespaceFilter(String prefix, String namespaceUri, boolean addNamespace) { super(); if (addNamespace) { this.prefix = prefix; this.usedNamespaceUri = namespaceUri; } else { this.prefix = ""; this.usedNamespaceUri = ""; } this.addNamespace = addNamespace; } @Override public void startDocument() throws SAXException { super.startDocument(); if (addNamespace) { startControlledPrefixMapping(); } } @Override public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException { super.startElement(this.usedNamespaceUri, arg1, arg2, arg3); } @Override public void endElement(String arg0, String arg1, String arg2) throws SAXException { super.endElement(this.usedNamespaceUri, arg1, arg2); } @Override public void startPrefixMapping(String prefix, String url) throws SAXException { super.startPrefixMapping(prefix, url); if (addNamespace) { this.startControlledPrefixMapping(); } else { // Remove the namespace, i.e. donĀ“t call startPrefixMapping for parent! } } private void startControlledPrefixMapping() throws SAXException { if (this.addNamespace && !this.addedNamespace) { // We should add namespace since it is set and has not yet been done. super.startPrefixMapping(this.prefix, this.usedNamespaceUri); // Make sure we dont do it twice this.addedNamespace = true; } } }