package org.zwobble.mammoth.internal.xml; import org.zwobble.mammoth.internal.util.Iterables; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Optional; import static org.zwobble.mammoth.internal.util.Maps.lookup; public class NamespacePrefixes implements Iterable { public static Builder builder() { return new Builder(); } public static class Builder { private final Map uriToPrefix = new HashMap<>(); public Builder put(String prefix, String uri) { uriToPrefix.put(uri, new NamespacePrefix(Optional.of(prefix), uri)); return this; } public Builder defaultPrefix(String uri) { uriToPrefix.put(uri, new NamespacePrefix(Optional.empty(), uri)); return this; } public NamespacePrefixes build() { return new NamespacePrefixes(uriToPrefix); } } private final Map uriToPrefix; public NamespacePrefixes(Map uriToPrefix) { this.uriToPrefix = uriToPrefix; } public Optional lookupUri(String uri) { return lookup(uriToPrefix, uri); } public Optional lookupPrefix(String prefix) { return lookupPrefix(Optional.of(prefix)); } public Optional defaultNamespace() { return lookupPrefix(Optional.empty()); } private Optional lookupPrefix(Optional prefix) { return Iterables.tryFind(uriToPrefix.values(), namespace -> namespace.getPrefix().equals(prefix)); } @Override public Iterator iterator() { return uriToPrefix.values().iterator(); } }