001 package com.thaiopensource.relaxng.impl;
002
003 import com.thaiopensource.xml.util.Name;
004
005 class ChoiceNameClass implements NameClass {
006
007 private final NameClass nameClass1;
008 private final NameClass nameClass2;
009
010 ChoiceNameClass(NameClass nameClass1, NameClass nameClass2) {
011 this.nameClass1 = nameClass1;
012 this.nameClass2 = nameClass2;
013 }
014
015 public boolean contains(Name name) {
016 return (nameClass1.contains(name)
017 || nameClass2.contains(name));
018 }
019
020 public int containsSpecificity(Name name) {
021 return Math.max(nameClass1.containsSpecificity(name),
022 nameClass2.containsSpecificity(name));
023 }
024
025 public int hashCode() {
026 return nameClass1.hashCode() ^ nameClass2.hashCode();
027 }
028
029 public boolean equals(Object obj) {
030 if (obj == null || !(obj instanceof ChoiceNameClass))
031 return false;
032 ChoiceNameClass other = (ChoiceNameClass)obj;
033 return (nameClass1.equals(other.nameClass1)
034 && nameClass2.equals(other.nameClass2));
035 }
036
037 public void accept(NameClassVisitor visitor) {
038 visitor.visitChoice(nameClass1, nameClass2);
039 }
040
041 public boolean isOpen() {
042 return nameClass1.isOpen() || nameClass2.isOpen();
043 }
044 }