htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 24 Sep 2012 12:39:21 +0200
changeset 25 e214f04abb98
child 26 03e4aaa4ef3d
permissions -rw-r--r--
Can find all IDs in an XHTML page
jaroslav@25
     1
package org.apidesign.bck2brwsr.htmlpage;
jaroslav@25
     2
jaroslav@25
     3
import java.io.IOException;
jaroslav@25
     4
import java.io.InputStream;
jaroslav@25
     5
import java.util.Collections;
jaroslav@25
     6
import java.util.Map;
jaroslav@25
     7
import java.util.Set;
jaroslav@25
     8
import java.util.TreeMap;
jaroslav@25
     9
import javax.xml.parsers.DocumentBuilder;
jaroslav@25
    10
import javax.xml.parsers.DocumentBuilderFactory;
jaroslav@25
    11
import org.w3c.dom.Document;
jaroslav@25
    12
import org.w3c.dom.Element;
jaroslav@25
    13
import org.w3c.dom.Node;
jaroslav@25
    14
import org.w3c.dom.NodeList;
jaroslav@25
    15
jaroslav@25
    16
class ProcessPage {
jaroslav@25
    17
    private final Map<String,String> ids2Elems = new TreeMap<String, String>();
jaroslav@25
    18
    
jaroslav@25
    19
    public Set<String> ids() {
jaroslav@25
    20
        return Collections.unmodifiableSet(ids2Elems.keySet());
jaroslav@25
    21
    }
jaroslav@25
    22
    
jaroslav@25
    23
    public String tagNameForId(String id) {
jaroslav@25
    24
        return ids2Elems.get(id);
jaroslav@25
    25
    }
jaroslav@25
    26
    
jaroslav@25
    27
    public static ProcessPage readPage(InputStream is) throws IOException {
jaroslav@25
    28
        DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
jaroslav@25
    29
        f.setValidating(false);
jaroslav@25
    30
        f.setIgnoringComments(true);
jaroslav@25
    31
        
jaroslav@25
    32
        Document doc = null;
jaroslav@25
    33
        try {
jaroslav@25
    34
            DocumentBuilder b = f.newDocumentBuilder();
jaroslav@25
    35
            doc = b.parse(is);
jaroslav@25
    36
        } catch (IOException ex) {
jaroslav@25
    37
            throw ex;
jaroslav@25
    38
        } catch (Exception e) {
jaroslav@25
    39
            throw new IOException(e);
jaroslav@25
    40
        }
jaroslav@25
    41
        Element root = doc.getDocumentElement();
jaroslav@25
    42
        
jaroslav@25
    43
        ProcessPage pp = new ProcessPage();
jaroslav@25
    44
        pp.seekForIds(root);
jaroslav@25
    45
        return pp;
jaroslav@25
    46
    }
jaroslav@25
    47
jaroslav@25
    48
    private void seekForIds(Element e) {
jaroslav@25
    49
        String val = e.getAttribute("id");
jaroslav@25
    50
        if (val != null && !val.isEmpty()) {
jaroslav@25
    51
            String prev = ids2Elems.put(val, e.getTagName());
jaroslav@25
    52
        }
jaroslav@25
    53
        NodeList arr = e.getChildNodes();
jaroslav@25
    54
        for (int i = 0; i < arr.getLength(); i++) {
jaroslav@25
    55
            final Node n = arr.item(i);
jaroslav@25
    56
            if (n instanceof Element) {
jaroslav@25
    57
                seekForIds((Element)n);
jaroslav@25
    58
            }
jaroslav@25
    59
        }
jaroslav@25
    60
    }
jaroslav@25
    61
}