/* * Copyright (c) 2013 Red Hat, Inc. and/or its affiliates. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Brad Davis - bradsdavis@gmail.com - Initial API and implementation */ package org.jboss.windup.util.xml; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import javax.xml.namespace.NamespaceContext; /** * A simple map-based implementation of NamespaceContext. */ public class NamespaceMapContext implements NamespaceContext { private final Map<String, String> context = new HashMap<>(); public NamespaceMapContext() { } public NamespaceMapContext(Map<String, String> in) { if (in != null && in.size() > 0) { context.putAll(in); } } public void addNamespaceEntry(NamespaceEntry entry) { context.put(entry.getPrefix(), entry.getNamespaceURI()); } public void addPrefix(String prefix, String namespaceURI) { context.put(prefix, namespaceURI); } public Set<String> getNamespaceURIs() { return new HashSet<>(context.values()); } public String getNamespaceURI(String prefix) { return context.get(prefix); } public String getPrefix(String namespaceURI) { Iterator<String> prefixIterator = getPrefixes(namespaceURI); if (prefixIterator.hasNext()) { return getPrefixes(namespaceURI).next(); } return null; } public Iterator<String> getPrefixes(String namespaceURI) { List<String> prefixes = new LinkedList<>(); for (String key : context.keySet()) { // slow but works. if (namespaceURI.equals(context.get(key))) { prefixes.add(key); } } return prefixes.iterator(); } @Override public String toString() { return "NamespaceMapContext [context=" + context + "]"; } }