package org.nate.internal.dom4j; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import org.dom4j.Element; import org.dom4j.Node; import org.nate.encoder.NateNode; public abstract class Dom4jBackedAbstractNode implements NateNode { private boolean validState = true; @Override public List<NateNode> find(String selector) { verifyState(); List<NateNode> nateNodes = new ArrayList<NateNode>(); for (Element element : findMatchingElements(selector)) { nateNodes.add(new Dom4jBackedNateElement(element)); } return nateNodes; } protected abstract Set<Element> findMatchingElements(String selector); protected abstract Collection<? extends Node> getDom4jNodes(); protected void verifyState() { if(!validState) throw new IllegalStateException("Not in a valid state"); } protected void invalidate() { validState = false; } }