001 /*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005
006 package org.util.xml;
007
008 import org.util.xml.parse.ElementParser;
009 import java.awt.BorderLayout;
010 import java.awt.Desktop;
011 import java.awt.GridLayout;
012 import java.awt.event.ActionEvent;
013 import java.awt.event.ActionListener;
014 import java.io.BufferedReader;
015 import java.io.InputStream;
016 import java.io.InputStreamReader;
017 import java.net.URI;
018 import java.net.URL;
019 import javax.swing.AbstractAction;
020 import javax.swing.BorderFactory;
021 import javax.swing.BoxLayout;
022 import javax.swing.JButton;
023 import javax.swing.JFrame;
024 import javax.swing.JOptionPane;
025 import javax.swing.JPanel;
026 import javax.swing.JScrollPane;
027 import javax.swing.JTextArea;
028 import javax.swing.JTextField;
029 import org.util.xml.element.Element;
030 import org.util.xml.element.TagElement;
031 import org.util.xml.parse.policy.HTMLParserPolicy;
032 import org.util.xml.parse.policy.XMLParserPolicy;
033
034 /**
035 *
036 * @author masaru
037 */
038 public class Main {
039
040 JTextArea textarea1 = new JTextArea();
041 JTextArea textarea2 = new JTextArea();
042 //JTextArea textarea3 = new JTextArea();
043 JPanel buttonpane = new JPanel();
044
045
046 public static void main(String[] args) throws Exception {
047 new Main();
048 }
049
050 public Main() {
051
052 JPanel panel = new JPanel(new GridLayout(1,3));
053 panel.add(new JScrollPane(textarea1));
054 panel.add(new JScrollPane(textarea2));
055 //panel.add(new JScrollPane(textarea3));
056 panel.add(buttonpane);
057
058 JTextField textfield = new JTextField("http://www.google.com/");
059 textfield.addActionListener(new ActionListener(){
060 public void actionPerformed(final ActionEvent e) {
061 new Thread(new Runnable(){public void run(){
062 openURL(((JTextField)e.getSource()).getText());
063 }}).start();
064 }
065 });
066
067 JPanel contentpane = new JPanel(new BorderLayout());
068 contentpane.add(textfield,BorderLayout.NORTH);
069 contentpane.add(panel,BorderLayout.CENTER);
070 contentpane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
071
072 JFrame frame = new JFrame();
073 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
074 frame.setContentPane(contentpane);
075 frame.setSize(200,200);
076 frame.setLocation(100,100);
077 frame.setVisible(true);
078
079 }
080 public void openURL(final String urltext) {
081
082 try{
083 String encoding = "JISAutoDetect";
084 URL url = new URL(urltext);
085 textarea1.setText("");
086
087 BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), encoding));
088 String tmp;
089 while((tmp=br.readLine()) != null)
090 textarea1.append(tmp+"\n");
091 br.close();
092
093 final JPanel subbuttonpane = new JPanel();
094 subbuttonpane.setLayout(new BoxLayout(subbuttonpane, BoxLayout.Y_AXIS));
095
096
097 //textarea3.setText("");
098 buttonpane.removeAll();
099 buttonpane.setLayout(new BorderLayout());
100 JScrollPane sp = new JScrollPane(subbuttonpane);
101 sp.getVerticalScrollBar().setUnitIncrement(30);
102 buttonpane.add(sp, BorderLayout.CENTER);
103
104 /// XMLParser parser = new XMLParser(new InputStreamReader(new FileInputStream(file)));
105 InputStream is2 = url.openStream();
106 ElementParser parser = new ElementParser(is2);
107 parser.setPolicy(new HTMLParserPolicy(){
108 /*
109 public boolean allowTagKey(String tagkey) {
110
111 // if(tagkey.equals("br")) return false;
112 // return true;
113
114 // return (tagkey==null || tagkey.equals("html") || tagkey.equals("body") || tagkey.equals("b") || tagkey.equals("center") || tagkey.equals("table") || tagkey.equals("td") || tagkey.equals("tr") || tagkey.equals("a"));
115 return true;
116 }
117
118 public boolean allowAttributes(Attributes attributes) {
119 return true;
120 }
121 */
122 @Override
123 public Element allowElement(Element element) {
124 super.allowElement(element);
125
126 if(element.isTagElement()) {
127 String text = ((TagElement)element).getKey();
128 if(text.toLowerCase().equals("a")) {
129 String surl = ((TagElement)element).getAttributeValue("href","");
130 String comment = element.toString();
131 if(!surl.startsWith("http:"))
132 surl = urltext + "/../"+surl;
133 final String url = surl;
134 if(url.startsWith("http:")) {
135 JButton button = new JButton(new AbstractAction(url){
136 public void actionPerformed(ActionEvent arg0) {
137 try{
138 Desktop.getDesktop().browse(new URI(url));
139 }catch(Exception e){
140 JOptionPane.showMessageDialog(null, "Error:"+e.getMessage()+"\n"+url);
141 }
142 }
143 });
144 button.setToolTipText("<html><body>"+comment+"</body></html>");
145 subbuttonpane.add(button);
146 subbuttonpane.doLayout();
147 buttonpane.doLayout();
148 buttonpane.setVisible(true);
149 }
150
151 // textarea3.append(url);
152 }
153 }
154
155 return element;
156 }
157
158 });
159
160 // parser.setPolicy(new XMLParserPolicy());
161 System.out.println("start parsing");
162
163 parser.parse();
164 is2.close();
165
166 Element[] element = parser.getResult();
167
168 Element.setTabText("|");
169
170 System.out.println("end parsing");
171 textarea2.setText("");
172 for(int i=0;i<element.length;i++)
173 textarea2.append(element[i].toString());
174 System.out.println("finished");
175
176 } catch(Exception exc) {
177 exc.printStackTrace();
178 JOptionPane.showMessageDialog(null, exc);
179 }
180 }
181
182 }