jaroslav@25: package org.apidesign.bck2brwsr.htmlpage; jaroslav@25: jaroslav@25: import java.io.IOException; jaroslav@25: import java.io.InputStream; jaroslav@25: import java.util.Collections; jaroslav@25: import java.util.Map; jaroslav@25: import java.util.Set; jaroslav@25: import java.util.TreeMap; jaroslav@25: import javax.xml.parsers.DocumentBuilder; jaroslav@25: import javax.xml.parsers.DocumentBuilderFactory; jaroslav@25: import org.w3c.dom.Document; jaroslav@25: import org.w3c.dom.Element; jaroslav@25: import org.w3c.dom.Node; jaroslav@25: import org.w3c.dom.NodeList; jaroslav@25: jaroslav@25: class ProcessPage { jaroslav@25: private final Map ids2Elems = new TreeMap(); jaroslav@25: jaroslav@25: public Set ids() { jaroslav@25: return Collections.unmodifiableSet(ids2Elems.keySet()); jaroslav@25: } jaroslav@25: jaroslav@25: public String tagNameForId(String id) { jaroslav@25: return ids2Elems.get(id); jaroslav@25: } jaroslav@25: jaroslav@25: public static ProcessPage readPage(InputStream is) throws IOException { jaroslav@25: DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); jaroslav@25: f.setValidating(false); jaroslav@25: f.setIgnoringComments(true); jaroslav@25: jaroslav@25: Document doc = null; jaroslav@25: try { jaroslav@25: DocumentBuilder b = f.newDocumentBuilder(); jaroslav@25: doc = b.parse(is); jaroslav@25: } catch (IOException ex) { jaroslav@25: throw ex; jaroslav@25: } catch (Exception e) { jaroslav@25: throw new IOException(e); jaroslav@25: } jaroslav@25: Element root = doc.getDocumentElement(); jaroslav@25: jaroslav@25: ProcessPage pp = new ProcessPage(); jaroslav@25: pp.seekForIds(root); jaroslav@25: return pp; jaroslav@25: } jaroslav@25: jaroslav@25: private void seekForIds(Element e) { jaroslav@25: String val = e.getAttribute("id"); jaroslav@25: if (val != null && !val.isEmpty()) { jaroslav@25: String prev = ids2Elems.put(val, e.getTagName()); jaroslav@25: } jaroslav@25: NodeList arr = e.getChildNodes(); jaroslav@25: for (int i = 0; i < arr.getLength(); i++) { jaroslav@25: final Node n = arr.item(i); jaroslav@25: if (n instanceof Element) { jaroslav@25: seekForIds((Element)n); jaroslav@25: } jaroslav@25: } jaroslav@25: } jaroslav@25: }