243 lines · 8.2 KB · Java
RawDownload
/* * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *//* * $Id: DOMCryptoContext.java,v 1.3 2005/05/09 18:33:26 mullan Exp $ */package javax.xml.crypto.dom; import javax.xml.crypto.KeySelector;import javax.xml.crypto.URIDereferencer;import javax.xml.crypto.XMLCryptoContext;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import org.w3c.dom.Element; /** * This class provides a DOM-specific implementation of the * {@link XMLCryptoContext} interface. It also includes additional * methods that are specific to a DOM-based implementation for registering * and retrieving elements that contain attributes of type ID. * * @author Sean Mullan * @author JSR 105 Expert Group * @since 1.6 */public class DOMCryptoContext implements XMLCryptoContext {     private HashMap nsMap = new HashMap();    private HashMap idMap = new HashMap();    private HashMap objMap = new HashMap();    private String baseURI;    private KeySelector ks;    private URIDereferencer dereferencer;    private HashMap propMap = new HashMap();    private String defaultPrefix;     /**     * Default constructor. (For invocation by subclass constructors).     */    protected DOMCryptoContext() {}     /**     * This implementation uses an internal {@link HashMap} to get the prefix     * that the specified URI maps to. It returns the <code>defaultPrefix</code>     * if it maps to <code>null</code>.     *     * @throws NullPointerException {@inheritDoc}     */    public String getNamespacePrefix(String namespaceURI,        String defaultPrefix) {        if (namespaceURI == null) {            throw new NullPointerException("namespaceURI cannot be null");        }        String prefix = (String) nsMap.get(namespaceURI);        return (prefix != null ? prefix : defaultPrefix);    }     /**     * This implementation uses an internal {@link HashMap} to map the URI     * to the specified prefix.     *     * @throws NullPointerException {@inheritDoc}     */    public String putNamespacePrefix(String namespaceURI, String prefix) {        if (namespaceURI == null) {            throw new NullPointerException("namespaceURI is null");        }        return (String) nsMap.put(namespaceURI, prefix);    }     public String getDefaultNamespacePrefix() {        return defaultPrefix;    }     public void setDefaultNamespacePrefix(String defaultPrefix) {        this.defaultPrefix = defaultPrefix;    }     public String getBaseURI() {        return baseURI;    }     /**     * @throws IllegalArgumentException {@inheritDoc}     */    public void setBaseURI(String baseURI) {        if (baseURI != null) {            java.net.URI.create(baseURI);        }        this.baseURI = baseURI;    }     public URIDereferencer getURIDereferencer() {        return dereferencer;    }     public void setURIDereferencer(URIDereferencer dereferencer) {        this.dereferencer = dereferencer;    }     /**     * This implementation uses an internal {@link HashMap} to get the object     * that the specified name maps to.     *     * @throws NullPointerException {@inheritDoc}     */    public Object getProperty(String name) {        if (name == null) {            throw new NullPointerException("name is null");        }        return propMap.get(name);    }     /**     * This implementation uses an internal {@link HashMap} to map the name     * to the specified object.     *     * @throws NullPointerException {@inheritDoc}     */    public Object setProperty(String name, Object value) {        if (name == null) {            throw new NullPointerException("name is null");        }        return propMap.put(name, value);    }     public KeySelector getKeySelector() {        return ks;    }     public void setKeySelector(KeySelector ks) {        this.ks = ks;    }     /**     * Returns the <code>Element</code> with the specified ID attribute value.     *     * <p>This implementation uses an internal {@link HashMap} to get the     * element that the specified attribute value maps to.     *     * @param idValue the value of the ID     * @return the <code>Element</code> with the specified ID attribute value,     *    or <code>null</code> if none.     * @throws NullPointerException if <code>idValue</code> is <code>null</code>     * @see #setIdAttributeNS     */    public Element getElementById(String idValue) {        if (idValue == null) {            throw new NullPointerException("idValue is null");        }        return (Element) idMap.get(idValue);    }     /**     * Registers the element's attribute specified by the namespace URI and     * local name to be of type ID. The attribute must have a non-empty value.     *     * <p>This implementation uses an internal {@link HashMap} to map the     * attribute's value to the specified element.     *     * @param element the element     * @param namespaceURI the namespace URI of the attribute (specify     *    <code>null</code> if not applicable)     * @param localName the local name of the attribute     * @throws IllegalArgumentException if <code>localName</code> is not an     *    attribute of the specified element or it does not contain a specific     *    value     * @throws NullPointerException if <code>element</code> or     *    <code>localName</code> is <code>null</code>     * @see #getElementById     */    public void setIdAttributeNS(Element element, String namespaceURI,        String localName) {        if (element == null) {            throw new NullPointerException("element is null");        }        if (localName == null) {            throw new NullPointerException("localName is null");        }        String idValue = element.getAttributeNS(namespaceURI, localName);        if (idValue == null || idValue.length() == 0) {            throw new IllegalArgumentException(localName + " is not an " +                "attribute");        }        idMap.put(idValue, element);    }     /**     * Returns a read-only iterator over the set of Id/Element mappings of     * this <code>DOMCryptoContext</code>. Attempts to modify the set via the     * {@link Iterator#remove} method throw an     * <code>UnsupportedOperationException</code>. The mappings are returned     * in no particular order. Each element in the iteration is represented as a     * {@link java.util.Map.Entry}. If the <code>DOMCryptoContext</code> is     * modified while an iteration is in progress, the results of the     * iteration are undefined.     *     * @return a read-only iterator over the set of mappings     */    public Iterator iterator() {        return Collections.unmodifiableMap(idMap).entrySet().iterator();    }     /**     * This implementation uses an internal {@link HashMap} to get the object     * that the specified key maps to.     */    public Object get(Object key) {        return objMap.get(key);    }     /**     * This implementation uses an internal {@link HashMap} to map the key     * to the specified object.     *     * @throws IllegalArgumentException {@inheritDoc}     */    public Object put(Object key, Object value) {        return objMap.put(key, value);    }}