001    package ezvcard.io.xml;
002    
003    import java.util.Arrays;
004    import java.util.Iterator;
005    
006    import javax.xml.namespace.NamespaceContext;
007    import javax.xml.xpath.XPath;
008    
009    import ezvcard.VCardVersion;
010    
011    /**
012     * Used for xCard XPath expressions.
013     * @see XPath#setNamespaceContext(NamespaceContext)
014     * @author Michael Angstadt
015     */
016    public class XCardNamespaceContext implements NamespaceContext {
017            private final String ns;
018            private final String prefix;
019    
020            /**
021             * @param version the vCard version to use
022             * @param prefix the prefix to use
023             */
024            public XCardNamespaceContext(VCardVersion version, String prefix) {
025                    this.ns = version.getXmlNamespace();
026                    this.prefix = prefix;
027            }
028    
029            /**
030             * Gets the prefix to use in xpath expressions.
031             * @return the xpath prefix
032             */
033            public String getPrefix() {
034                    return prefix;
035            }
036    
037            //@Override
038            public String getNamespaceURI(String prefix) {
039                    if (this.prefix.equals(prefix)) {
040                            return ns;
041                    }
042                    return null;
043            }
044    
045            //@Override
046            public String getPrefix(String ns) {
047                    if (this.ns.equals(ns)) {
048                            return prefix;
049                    }
050                    return null;
051            }
052    
053            //@Override
054            public Iterator<String> getPrefixes(String ns) {
055                    if (this.ns.equals(ns)) {
056                            return Arrays.asList(prefix).iterator();
057                    }
058                    return null;
059            }
060    }