KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lobobrowser > html > test > ParserTest


1 package org.lobobrowser.html.test;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Component JavaDoc;
5 import java.awt.Container JavaDoc;
6 import java.awt.HeadlessException JavaDoc;
7 import java.awt.event.ActionEvent JavaDoc;
8 import java.awt.event.ActionListener JavaDoc;
9 import java.net.*;
10 import java.io.*;
11 import java.util.logging.*;
12
13 import javax.swing.JButton JavaDoc;
14 import javax.swing.JFrame JavaDoc;
15 import javax.swing.JLabel JavaDoc;
16 import javax.swing.JPanel JavaDoc;
17 import javax.swing.JScrollPane JavaDoc;
18 import javax.swing.JTabbedPane JavaDoc;
19 import javax.swing.JTextArea JavaDoc;
20 import javax.swing.JTextField JavaDoc;
21 import javax.swing.JTree JavaDoc;
22
23
24 import org.lobobrowser.html.*;
25 import org.lobobrowser.html.parser.*;
26 import org.lobobrowser.util.io.*;
27 import org.w3c.dom.*;
28
29 /**
30  * Parser-only test frame.
31  */

32 public class ParserTest extends JFrame JavaDoc {
33     private static final Logger logger = Logger.getLogger(ParserTest.class.getName());
34     private final JTree JavaDoc tree;
35     private final JTextArea JavaDoc textArea;
36     
37     public ParserTest() throws HeadlessException JavaDoc {
38         this("HTML Parser-Only Test Tool");
39     }
40     
41     public ParserTest(String JavaDoc title) throws HeadlessException JavaDoc {
42         super(title);
43         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
44         Container JavaDoc contentPane = this.getContentPane();
45         contentPane.setLayout(new BorderLayout JavaDoc());
46         JPanel JavaDoc topPanel = new JPanel JavaDoc();
47         topPanel.setLayout(new BorderLayout JavaDoc());
48         JPanel JavaDoc bottomPanel = new JPanel JavaDoc();
49         bottomPanel.setLayout(new BorderLayout JavaDoc());
50         final JTextField JavaDoc textField = new JTextField JavaDoc();
51         JButton JavaDoc button = new JButton JavaDoc("Parse & Render");
52         final JTabbedPane JavaDoc tabbedPane = new JTabbedPane JavaDoc();
53         final JTree JavaDoc tree = new JTree JavaDoc();
54         tree.setModel(null);
55         final JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(tree);
56         
57         this.tree = tree;
58         
59         contentPane.add(topPanel, BorderLayout.NORTH);
60         contentPane.add(bottomPanel, BorderLayout.CENTER);
61         
62         topPanel.add(new JLabel JavaDoc("URL: "), BorderLayout.WEST);
63         topPanel.add(textField, BorderLayout.CENTER);
64         topPanel.add(button, BorderLayout.EAST);
65         
66         bottomPanel.add(tabbedPane, BorderLayout.CENTER);
67                 
68         final JTextArea JavaDoc textArea = new JTextArea JavaDoc();
69         textArea.setEditable(false);
70         this.textArea = textArea;
71         final JScrollPane JavaDoc textAreaSp = new JScrollPane JavaDoc(textArea);
72         
73         tabbedPane.addTab("HTML DOM", scrollPane);
74         tabbedPane.addTab("Source Code", textAreaSp);
75         
76         button.addActionListener(new ActionListener JavaDoc() {
77             public void actionPerformed(ActionEvent JavaDoc event) {
78                 process(textField.getText());
79             }
80         });
81     }
82     
83
84     private void process(String JavaDoc uri) {
85         try {
86             URL url;
87             try {
88                 url = new URL(uri);
89             } catch(java.net.MalformedURLException JavaDoc mfu) {
90                 int idx = uri.indexOf(':');
91                 if(idx == -1 || idx == 1) {
92                     // try file
93
url = new URL("file:" + uri);
94                 }
95                 else {
96                     throw mfu;
97                 }
98             }
99             logger.info("process(): Loading URI=[" + uri + "].");
100             long time0 = System.currentTimeMillis();
101             URLConnection connection = url.openConnection();
102             connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible;) Cobra/0.96.1+");
103             connection.setRequestProperty("Cookie", "");
104             if(connection instanceof HttpURLConnection) {
105                 HttpURLConnection hc = (HttpURLConnection) connection;
106                 hc.setInstanceFollowRedirects(true);
107                 int responseCode = hc.getResponseCode();
108                 logger.info("process(): HTTP response code: " + responseCode);
109             }
110             InputStream in = connection.getInputStream();
111             byte[] content;
112             try {
113                 content = IORoutines.load(in, 8192);
114             } finally {
115                 in.close();
116             }
117             String JavaDoc source = new String JavaDoc(content, "ISO-8859-1");
118             this.textArea.setText(source);
119             long time1 = System.currentTimeMillis();
120             InputStream bin = new ByteArrayInputStream(content);
121             HtmlParserContext context = new SimpleHtmlParserContext();
122             DocumentBuilderImpl builder = new DocumentBuilderImpl(context);
123             // Provide a proper URI, in case it was a file.
124
String JavaDoc actualURI = url.toExternalForm();
125             // Should change to use proper charset.
126
Document document = builder.parse(new InputSourceImpl(bin, actualURI, "ISO-8859-1"));
127             long time2 = System.currentTimeMillis();
128             logger.info("Parsed URI=[" + uri + "]: Parse elapsed: " + (time2 - time1) + " ms. Load elapsed: " + (time1 - time0) + " ms.");
129             this.tree.setModel(new NodeTreeModel(document));
130         } catch(Exception JavaDoc err) {
131             logger.log(Level.SEVERE, "Error trying to load URI=[" + uri + "].", err);
132         }
133     }
134
135     public static void main(String JavaDoc[] args) {
136         ParserTest frame = new ParserTest();
137         frame.setSize(800, 400);
138         frame.setExtendedState(TestFrame.MAXIMIZED_BOTH);
139         frame.setVisible(true);
140     }
141 }
142
Popular Tags