package org.swellrt.server; import org.waveprotocol.wave.model.document.Doc; import org.waveprotocol.wave.model.document.Doc.E; import org.waveprotocol.wave.model.document.Document; import org.waveprotocol.wave.model.document.util.DocHelper; import org.waveprotocol.wave.model.document.util.DocHelper.NodeAction; import java.util.ArrayList; import java.util.List; public class ExtendedDocHelper { static class ExtractByTagName<N> implements NodeAction<N> { private final List<Doc.E> elementList; private final String tagName; private final Document doc; public ExtractByTagName(Document doc, String tagName) { this.elementList = new ArrayList<Doc.E>(); this.tagName = tagName; this.doc = doc; } @Override public void apply(N node) { Doc.E element = doc.asElement((Doc.N) node); if (element != null && doc.getTagName(element).equalsIgnoreCase(tagName)) { elementList.add(element); } } public List<Doc.E> getElementList() { return elementList; } } public static <N> List<E> getAllElementsByTagName(String tagName, Document doc) { ExtractByTagName<Doc.N> byTagExtractor = new ExtractByTagName<Doc.N>(doc, tagName); DocHelper.traverse(doc, doc.getFirstChild(doc.getDocumentElement()), byTagExtractor); return byTagExtractor.getElementList(); } }