View Javadoc

1   package org.tinyjee.maven.dim.utils;
2   
3   import org.w3c.dom.Document;
4   import org.w3c.dom.Node;
5   
6   import java.io.Reader;
7   import java.net.URL;
8   
9   /**
10   * Base class to {@link Document} builders that add element location information into the generated element nodes.
11   *
12   * @author Juergen_Kellerer, 2011-10-13
13   */
14  public abstract class AbstractPositioningDocumentBuilder {
15  	/**
16  	 * Is a user-data key (for {@link org.w3c.dom.Node#getUserData(String)}) that may be used to return the line number of an element node.
17  	 */
18  	public static final String KEY_LINE_NUMBER = "lineNumber";
19  	/**
20  	 * Is a user-data key (for {@link org.w3c.dom.Node#getUserData(String)}) that may be used to return the column number of an element node.
21  	 */
22  	public static final String KEY_COLUMN_NUMBER = "columnNumber";
23  
24  	/**
25  	 * Returns the line number of the specified node if known, -1 otherwise.
26  	 *
27  	 * @param node a node that was created using this builder.
28  	 * @return the line number of the specified node if known, -1 otherwise.
29  	 */
30  	public static int getLineNumber(Node node) {
31  		return extractNumber(node, KEY_LINE_NUMBER);
32  	}
33  
34  	/**
35  	 * Returns the column number of the specified node if known, -1 otherwise.
36  	 *
37  	 * @param node a node that was created using this builder.
38  	 * @return the column number of the specified node if known, -1 otherwise.
39  	 */
40  	public static int getColumnNumber(Node node) {
41  		return extractNumber(node, KEY_COLUMN_NUMBER);
42  	}
43  
44  	private static int extractNumber(Node node, String key) {
45  		Object data = node.getUserData(key);
46  		return data == null ? -1 : (Integer) data;
47  	}
48  
49  	/**
50  	 * Parses the given URL to a {@link Document}.
51  	 *
52  	 * @param systemId the URL of the document to parse.
53  	 * @return the parsed document.
54  	 * @throws Exception In case of parsing failed.
55  	 */
56  	public abstract Document parse(URL systemId) throws Exception;
57  
58  	/**
59  	 * Parses the given URL to a {@link Document}.
60  	 *
61  	 * @param systemId the URL of the document to parse.
62  	 * @param reader   a reader containing the content to parse.
63  	 * @return the parsed document.
64  	 * @throws Exception In case of parsing failed.
65  	 */
66  	public abstract Document parse(URL systemId, Reader reader) throws Exception;
67  }