ingo@100: /*
ingo@100: * Copyright (c) 2010 by Intevation GmbH
ingo@100: *
ingo@100: * This program is free software under the LGPL (>=v2.1)
ingo@100: * Read the file LGPL.txt coming with the software for details
ingo@100: * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@100: */
ingo@100:
sascha@24: package de.intevation.artifacts;
sascha@24:
sascha@93: import java.util.Iterator;
sascha@298: import java.util.Map;
sascha@298: import java.util.HashMap;
sascha@298: import java.util.ArrayList;
sascha@93:
sascha@24: import javax.xml.XMLConstants;
sascha@24:
sascha@24: import javax.xml.namespace.NamespaceContext;
sascha@24:
sascha@24: /**
sascha@78: * The namespace used in artifact documents.
sascha@77: * @author Sascha L. Teichmann
sascha@24: */
sascha@24: public class ArtifactNamespaceContext
sascha@24: implements NamespaceContext
sascha@24: {
sascha@24: /**
sascha@24: * The URI of the namespace of the artifacts.
sascha@24: */
sascha@94: public final static String NAMESPACE_URI =
sascha@94: "http://www.intevation.de/2009/artifacts";
sascha@47:
sascha@24: /**
sascha@24: * The XML prefix for the artifacts namespace.
sascha@24: */
sascha@24: public final static String NAMESPACE_PREFIX = "art";
sascha@24:
sascha@78: /**
sascha@78: * Final instance to be easily used to avoid creation
sascha@78: * of instances.
sascha@78: */
sascha@26: public static final ArtifactNamespaceContext INSTANCE =
sascha@26: new ArtifactNamespaceContext();
sascha@26:
sascha@298: protected Map map;
sascha@298:
sascha@78: /**
sascha@78: * The default constructor.
sascha@78: */
sascha@24: public ArtifactNamespaceContext() {
sascha@298: map = new HashMap();
sascha@298: map.put(
sascha@298: XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI);
sascha@298: map.put(
sascha@298: XMLConstants.DEFAULT_NS_PREFIX, XMLConstants.DEFAULT_NS_PREFIX);
sascha@298: map.put(
sascha@298: XMLConstants.XMLNS_ATTRIBUTE, XMLConstants.XMLNS_ATTRIBUTE_NS_URI);
sascha@298: map.put(
sascha@298: NAMESPACE_PREFIX, NAMESPACE_URI);
sascha@298: }
sascha@298:
sascha@298: public void add(String prefix, String uri) {
sascha@298: map.put(prefix, uri);
sascha@24: }
sascha@24:
sascha@78: /**
sascha@78: * @see javax.xml.namespace.NamespaceContext#getNamespaceURI(String)
sascha@78: * @param prefix The prefix
sascha@78: * @return The corresponing URI
sascha@78: */
sascha@301: @Override
sascha@24: public String getNamespaceURI(String prefix) {
sascha@24:
sascha@24: if (prefix == null) {
sascha@298: throw new IllegalArgumentException("Null prefix");
sascha@24: }
sascha@24:
sascha@298: String namespace = map.get(prefix);
sascha@24:
sascha@298: return namespace != null ? namespace : XMLConstants.NULL_NS_URI;
sascha@24: }
sascha@24:
sascha@78: /**
sascha@78: * @see javax.xml.namespace.NamespaceContext#getPrefix(String)
sascha@78: * @param uri The URI
sascha@78: */
sascha@301: @Override
sascha@24: public String getPrefix(String uri) {
sascha@298:
sascha@298: if (uri == null) {
sascha@298: throw new IllegalArgumentException("Null uri");
sascha@298: }
sascha@298:
sascha@298: for (Map.Entry entry: map.entrySet()) {
sascha@298: if (entry.getValue().equals(uri)) {
sascha@298: return entry.getKey();
sascha@298: }
sascha@298: }
sascha@298:
sascha@298: return XMLConstants.DEFAULT_NS_PREFIX;
sascha@24: }
sascha@24:
sascha@78: /**
sascha@78: * @see javax.xml.namespace.NamespaceContext#getPrefixes(java.lang.String)
sascha@78: * @param uri The URI
sascha@78: */
sascha@301: @Override
sascha@24: public Iterator getPrefixes(String uri) {
sascha@298: ArrayList results = new ArrayList();
sascha@298: for (Map.Entry entry: map.entrySet()) {
sascha@298: if (entry.getValue().equals(uri)) {
sascha@298: results.add(entry.getKey());
sascha@298: }
sascha@298: }
sascha@298: return results.iterator();
sascha@24: }
sascha@24: }
sascha@78: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :