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 }