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 }