diff -r 000000000000 -r e214f04abb98 htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java Mon Sep 24 12:39:21 2012 +0200 @@ -0,0 +1,61 @@ +package org.apidesign.bck2brwsr.htmlpage; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +class ProcessPage { + private final Map ids2Elems = new TreeMap(); + + public Set ids() { + return Collections.unmodifiableSet(ids2Elems.keySet()); + } + + public String tagNameForId(String id) { + return ids2Elems.get(id); + } + + public static ProcessPage readPage(InputStream is) throws IOException { + DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); + f.setValidating(false); + f.setIgnoringComments(true); + + Document doc = null; + try { + DocumentBuilder b = f.newDocumentBuilder(); + doc = b.parse(is); + } catch (IOException ex) { + throw ex; + } catch (Exception e) { + throw new IOException(e); + } + Element root = doc.getDocumentElement(); + + ProcessPage pp = new ProcessPage(); + pp.seekForIds(root); + return pp; + } + + private void seekForIds(Element e) { + String val = e.getAttribute("id"); + if (val != null && !val.isEmpty()) { + String prev = ids2Elems.put(val, e.getTagName()); + } + NodeList arr = e.getChildNodes(); + for (int i = 0; i < arr.getLength(); i++) { + final Node n = arr.item(i); + if (n instanceof Element) { + seekForIds((Element)n); + } + } + } +}