package ca.concordia.cssanalyser.dom; import java.util.Set; import org.w3c.dom.Node; import ca.concordia.cssanalyser.cssmodel.selectors.PseudoClass; /** * This class represents a DOM node, in addition * to the state of the node to be selected. For * example, in case of <code>.class:hover</code>, the DOM element * of this class will be the one selected by <code>.class</code>, * and the state would be <i>hover</i>. * This class helps us in dealing with the pseudo classes for which * there is no XPath expression. * * @author Davood Mazinanian */ public class DOMNodeWrapper { private final Node domNode; private final Set<PseudoClass> pseudoClasses; public DOMNodeWrapper(Node node, Set<PseudoClass> pseudoClasses) { this.domNode = node; this.pseudoClasses = pseudoClasses; } public Node getNode() { return this.domNode; } public Set<PseudoClass> getPseudoClasses() { return this.pseudoClasses; } @Override public String toString() { String toReturn = domNode.toString(); for (PseudoClass pseudoClass : pseudoClasses) { toReturn += ":" + pseudoClass; } return toReturn; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((domNode == null) ? 0 : domNode.hashCode()); result = prime * result + ((pseudoClasses == null) ? 0 : pseudoClasses.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; DOMNodeWrapper other = (DOMNodeWrapper) obj; if (domNode == null) { if (other.domNode != null) return false; } else if (!domNode.equals(other.domNode)) return false; if (pseudoClasses == null) { if (other.pseudoClasses != null) return false; } else if (!pseudoClasses.equals(other.pseudoClasses)) return false; return true; } }