package com.thaiopensource.relaxng.pattern; import com.thaiopensource.xml.util.Name; import java.util.Set; /** * A NormalizedNameClass that includes an any name wildcard. */ public class NormalizedAnyNameClass extends NormalizedNameClass { private final Set<String> excludedNamespaces; private final Set<Name> excludedNames; public NormalizedAnyNameClass(Set<Name> includedNames, Set<String> excludedNamespaces, Set<Name> excludedNames) { super(includedNames); this.excludedNamespaces = immutable(excludedNamespaces); this.excludedNames = immutable(excludedNames); } public boolean isAnyNameIncluded() { return true; } public boolean contains(Name name) { if (excludedNamespaces.contains(name.getNamespaceUri())) return super.contains(name); else return !excludedNames.contains(name); } public boolean isEmpty() { return false; } public Set<String> getExcludedNamespaces() { return excludedNamespaces; } public Set<Name> getExcludedNames() { return excludedNames; } public int hashCode() { return super.hashCode() ^ excludedNamespaces.hashCode() ^ excludedNames.hashCode(); } public boolean equals(Object obj) { if (!(obj instanceof NormalizedAnyNameClass)) return false; NormalizedAnyNameClass other = (NormalizedAnyNameClass)obj; if (!(excludedNamespaces.equals(other.excludedNamespaces))) return false; if (!(excludedNames.equals(other.excludedNames))) return false; return equal(this, other); } boolean includesNamespace(String ns) { return !getExcludedNamespaces().contains(ns); } }