Can find all IDs in an XHTML page
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 24 Sep 2012 12:39:21 +0200
changeset 25e214f04abb98
parent 24 a82e89aae050
child 26 03e4aaa4ef3d
Can find all IDs in an XHTML page
htmlpage/pom.xml
htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java
htmlpage/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java
htmlpage/src/test/resources/org/apidesign/bck2brwsr/htmlpage/TestPage.xhtml
pom.xml
vm/pom.xml
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/htmlpage/pom.xml	Mon Sep 24 12:39:21 2012 +0200
     1.3 @@ -0,0 +1,31 @@
     1.4 +<?xml version="1.0"?>
     1.5 +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     1.6 +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     1.7 +  <modelVersion>4.0.0</modelVersion>
     1.8 +  <parent>
     1.9 +    <groupId>org.apidesign</groupId>
    1.10 +    <artifactId>bck2brwsr</artifactId>
    1.11 +    <version>1.0-SNAPSHOT</version>
    1.12 +  </parent>
    1.13 +  <groupId>org.apidesign</groupId>
    1.14 +  <artifactId>htmlpage</artifactId>
    1.15 +  <version>1.0-SNAPSHOT</version>
    1.16 +  <name>htmlpage</name>
    1.17 +  <url>http://maven.apache.org</url>
    1.18 +  <properties>
    1.19 +    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    1.20 +  </properties>
    1.21 +  <dependencies>
    1.22 +    <dependency>
    1.23 +      <groupId>org.testng</groupId>
    1.24 +      <artifactId>testng</artifactId>
    1.25 +      <scope>test</scope>
    1.26 +      <exclusions>
    1.27 +        <exclusion>
    1.28 +          <artifactId>junit</artifactId>
    1.29 +          <groupId>junit</groupId>
    1.30 +        </exclusion>
    1.31 +      </exclusions>
    1.32 +    </dependency>
    1.33 +  </dependencies>
    1.34 +</project>
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/ProcessPage.java	Mon Sep 24 12:39:21 2012 +0200
     2.3 @@ -0,0 +1,61 @@
     2.4 +package org.apidesign.bck2brwsr.htmlpage;
     2.5 +
     2.6 +import java.io.IOException;
     2.7 +import java.io.InputStream;
     2.8 +import java.util.Collections;
     2.9 +import java.util.Map;
    2.10 +import java.util.Set;
    2.11 +import java.util.TreeMap;
    2.12 +import javax.xml.parsers.DocumentBuilder;
    2.13 +import javax.xml.parsers.DocumentBuilderFactory;
    2.14 +import org.w3c.dom.Document;
    2.15 +import org.w3c.dom.Element;
    2.16 +import org.w3c.dom.Node;
    2.17 +import org.w3c.dom.NodeList;
    2.18 +
    2.19 +class ProcessPage {
    2.20 +    private final Map<String,String> ids2Elems = new TreeMap<String, String>();
    2.21 +    
    2.22 +    public Set<String> ids() {
    2.23 +        return Collections.unmodifiableSet(ids2Elems.keySet());
    2.24 +    }
    2.25 +    
    2.26 +    public String tagNameForId(String id) {
    2.27 +        return ids2Elems.get(id);
    2.28 +    }
    2.29 +    
    2.30 +    public static ProcessPage readPage(InputStream is) throws IOException {
    2.31 +        DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
    2.32 +        f.setValidating(false);
    2.33 +        f.setIgnoringComments(true);
    2.34 +        
    2.35 +        Document doc = null;
    2.36 +        try {
    2.37 +            DocumentBuilder b = f.newDocumentBuilder();
    2.38 +            doc = b.parse(is);
    2.39 +        } catch (IOException ex) {
    2.40 +            throw ex;
    2.41 +        } catch (Exception e) {
    2.42 +            throw new IOException(e);
    2.43 +        }
    2.44 +        Element root = doc.getDocumentElement();
    2.45 +        
    2.46 +        ProcessPage pp = new ProcessPage();
    2.47 +        pp.seekForIds(root);
    2.48 +        return pp;
    2.49 +    }
    2.50 +
    2.51 +    private void seekForIds(Element e) {
    2.52 +        String val = e.getAttribute("id");
    2.53 +        if (val != null && !val.isEmpty()) {
    2.54 +            String prev = ids2Elems.put(val, e.getTagName());
    2.55 +        }
    2.56 +        NodeList arr = e.getChildNodes();
    2.57 +        for (int i = 0; i < arr.getLength(); i++) {
    2.58 +            final Node n = arr.item(i);
    2.59 +            if (n instanceof Element) {
    2.60 +                seekForIds((Element)n);
    2.61 +            }
    2.62 +        }
    2.63 +    }
    2.64 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/htmlpage/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java	Mon Sep 24 12:39:21 2012 +0200
     3.3 @@ -0,0 +1,23 @@
     3.4 +package org.apidesign.bck2brwsr.htmlpage;
     3.5 +
     3.6 +import java.io.IOException;
     3.7 +import java.io.InputStream;
     3.8 +import java.util.Set;
     3.9 +import org.testng.annotations.Test;
    3.10 +import static org.testng.Assert.*;
    3.11 +
    3.12 +public class ProcessPageTest {
    3.13 +    
    3.14 +    
    3.15 +    @Test public void findsThreeIds() throws IOException {
    3.16 +        InputStream is = ProcessPageTest.class.getResourceAsStream("TestPage.xhtml");
    3.17 +        assertNotNull(is, "Sample HTML page found");
    3.18 +        ProcessPage res = ProcessPage.readPage(is);
    3.19 +        final Set<String> ids = res.ids();
    3.20 +        assertEquals(ids.size(), 3, "Three ids found: " + ids);
    3.21 +        
    3.22 +        assertEquals(res.tagNameForId("pg.title"), "title");
    3.23 +        assertEquals(res.tagNameForId("pg.button"), "button");
    3.24 +        assertEquals(res.tagNameForId("pg.text"), "input");
    3.25 +    }
    3.26 +}
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/htmlpage/src/test/resources/org/apidesign/bck2brwsr/htmlpage/TestPage.xhtml	Mon Sep 24 12:39:21 2012 +0200
     4.3 @@ -0,0 +1,11 @@
     4.4 +<?xml version="1.0" encoding="UTF-8"?>
     4.5 +<!DOCTYPE html>
     4.6 +<html xmlns="http://www.w3.org/1999/xhtml">
     4.7 +    <head>
     4.8 +        <title id="pg.title">Default Title</title>
     4.9 +    </head>
    4.10 +    <body>
    4.11 +        New title: <input id="pg.text"/>
    4.12 +        <button id="pg.button">Change title!</button>
    4.13 +    </body>
    4.14 +</html>
     5.1 --- a/pom.xml	Mon Sep 24 11:22:50 2012 +0200
     5.2 +++ b/pom.xml	Mon Sep 24 12:39:21 2012 +0200
     5.3 @@ -1,5 +1,5 @@
     5.4 -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5.5 -  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5.6 +<?xml version="1.0" encoding="UTF-8"?>
     5.7 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5.8    <modelVersion>4.0.0</modelVersion>
     5.9    <groupId>org.apidesign</groupId>
    5.10    <artifactId>bck2brwsr</artifactId>
    5.11 @@ -8,6 +8,7 @@
    5.12    <name>Back 2 Browser</name>
    5.13    <modules>
    5.14        <module>vm</module>
    5.15 +    <module>htmlpage</module>
    5.16    </modules>
    5.17    <licenses>
    5.18        <license>
    5.19 @@ -65,4 +66,4 @@
    5.20    <properties>
    5.21        <license>COPYING</license>
    5.22    </properties>
    5.23 -</project>
    5.24 +</project>
    5.25 \ No newline at end of file
     6.1 --- a/vm/pom.xml	Mon Sep 24 11:22:50 2012 +0200
     6.2 +++ b/vm/pom.xml	Mon Sep 24 12:39:21 2012 +0200
     6.3 @@ -1,6 +1,11 @@
     6.4  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     6.5    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     6.6    <modelVersion>4.0.0</modelVersion>
     6.7 +  <parent>
     6.8 +    <groupId>org.apidesign</groupId>
     6.9 +    <artifactId>bck2brwsr</artifactId>
    6.10 +    <version>1.0-SNAPSHOT</version>
    6.11 +  </parent>
    6.12  
    6.13    <groupId>org.apidesign</groupId>
    6.14    <artifactId>vm4brwsr</artifactId>
    6.15 @@ -56,7 +61,6 @@
    6.16      <dependency>
    6.17        <groupId>org.testng</groupId>
    6.18        <artifactId>testng</artifactId>
    6.19 -      <version>6.7</version>
    6.20        <scope>test</scope>
    6.21        <exclusions>
    6.22          <exclusion>
    6.23 @@ -68,7 +72,6 @@
    6.24      <dependency>
    6.25        <groupId>org.netbeans.api</groupId>
    6.26        <artifactId>org-netbeans-modules-classfile</artifactId>
    6.27 -      <version>RELEASE72</version>
    6.28        <type>jar</type>
    6.29      </dependency>
    6.30    </dependencies>