AuthenticationDemoPanel.java
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:23k
源码类别:

xml/soap/webservice

开发平台:

Java

  1. /*
  2.  * $Id: AuthenticationDemoPanel.java,v 1.6 2005/06/24 18:47:00 kleopatra Exp $
  3.  *
  4.  * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
  5.  * Santa Clara, California 95054, U.S.A. All rights reserved.
  6.  */
  7. package org.jdesktop.demo.swingx;
  8. import java.io.InputStream;
  9. import java.io.OutputStream;
  10. import java.io.StringReader;
  11. import java.net.HttpURLConnection;
  12. import java.net.URL;
  13. import java.util.Arrays;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. import java.util.Stack;
  17. import javax.xml.parsers.SAXParser;
  18. import javax.xml.parsers.SAXParserFactory;
  19. import org.jdesktop.binding.swingx.DirectListBinding;
  20. import org.jdesktop.binding.swingx.LabelBinding;
  21. import org.jdesktop.dataset.DataRelation;
  22. import org.jdesktop.dataset.DataRelationTable;
  23. import org.jdesktop.dataset.DataRow;
  24. import org.jdesktop.dataset.DataSet;
  25. import org.jdesktop.dataset.DataTable;
  26. import org.jdesktop.dataset.adapter.DataModelAdapter;
  27. import org.jdesktop.dataset.adapter.SelectionModelAdapter;
  28. import org.jdesktop.dataset.adapter.TabularDataModelAdapter;
  29. import org.jdesktop.demo.DemoPanel;
  30. import org.jdesktop.demo.login.romain.LoginDialog;
  31. import org.jdesktop.swingx.JXErrorDialog;
  32. import org.jdesktop.swingx.JXLoginDialog;
  33. import org.jdesktop.swingx.auth.DefaultUserNameStore;
  34. import org.jdesktop.swingx.auth.LoginService;
  35. import org.jdesktop.swingx.auth.PasswordStore;
  36. import org.xml.sax.InputSource;
  37. import org.xml.sax.helpers.DefaultHandler;
  38. /**
  39.  * Demonstrates the JXGlassBox component.
  40.  *
  41.  * @author  rbair
  42.  */
  43. public class AuthenticationDemoPanel extends DemoPanel {
  44.     private DataSet ds;
  45.     private DataTable messages;
  46.     private DataTable threads;
  47.     /** Creates new form JXGlassBoxDemoPanel */
  48.     public AuthenticationDemoPanel() {
  49.         setName("Authentication/Login Demo");
  50.         initComponents();
  51.         
  52.         ds = new DataSet();
  53.         messages = ds.createTable("Messages");
  54.         messages.createColumns("messageId", "title", "link", "description", "creationDate", "modificationDate", "messageCount", "author", "replyCount");
  55.         SelectionModelAdapter selModel = new SelectionModelAdapter(messages.getSelector("current"));
  56.         new DirectListBinding(messageList, new TabularDataModelAdapter(messages), "description", selModel);
  57.         
  58.         threads = ds.createTable("Threads");
  59.         threads.createColumns("messageId", "guest", "subject", "timestamp", "message");
  60.         DataRelation rel = ds.createRelation("message_thread");
  61.         rel.setChildColumn(threads.getColumn("messageId"));
  62.         rel.setParentColumn(messages.getColumn("messageId"));
  63.         DataRelationTable relTable = ds.createRelationTable("messageThreads");
  64.         relTable.setParentSelector(messages.getSelector("current"));
  65.         relTable.setParentTable(messages);
  66.         relTable.setRelation(rel);
  67.         
  68.         DataModelAdapter dm = new DataModelAdapter(relTable.getSelector("current"));
  69.         new LabelBinding(guestLabel, dm, "guest");
  70.         new LabelBinding(subjectLabel, dm, "subject");
  71.         new LabelBinding(timestampLabel, dm, "timestamp");
  72. //        new TextBinding()
  73. //        new DirectTableBinding(messageTable, new TabularDataModelAdapter(threads));
  74.     }
  75.     public String getHtmlDescription() {
  76.         return "<html>Click on one of the buttons to lauch a login dialog</html>";
  77.     }
  78.     public String getName() {
  79.         return "Authentication Dialogs";
  80.     }    
  81.     /** This method is called from within the constructor to
  82.      * initialize the form.
  83.      * WARNING: Do NOT modify this code. The content of this method is
  84.      * always regenerated by the Form Editor.
  85.      */
  86.     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
  87.     private void initComponents() {
  88.         java.awt.GridBagConstraints gridBagConstraints;
  89.         simpleAuthDialogBtn = new javax.swing.JButton();
  90.         romainAuthDialogBtn = new javax.swing.JButton();
  91.         jSplitPane1 = new javax.swing.JSplitPane();
  92.         jScrollPane1 = new javax.swing.JScrollPane();
  93.         messageList = new org.jdesktop.swingx.JXList();
  94.         jPanel1 = new javax.swing.JPanel();
  95.         jLabel1 = new javax.swing.JLabel();
  96.         guestLabel = new javax.swing.JLabel();
  97.         jLabel3 = new javax.swing.JLabel();
  98.         subjectLabel = new javax.swing.JLabel();
  99.         jLabel5 = new javax.swing.JLabel();
  100.         timestampLabel = new javax.swing.JLabel();
  101.         messageLabel = new javax.swing.JLabel();
  102.         jScrollPane2 = new javax.swing.JScrollPane();
  103.         jEditorPane1 = new javax.swing.JEditorPane();
  104.         setLayout(new java.awt.GridBagLayout());
  105.         simpleAuthDialogBtn.setText("Simple Login Dialog");
  106.         simpleAuthDialogBtn.addActionListener(new java.awt.event.ActionListener() {
  107.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  108.                 simpleAuthDialogBtnActionPerformed(evt);
  109.             }
  110.         });
  111.         gridBagConstraints = new java.awt.GridBagConstraints();
  112.         gridBagConstraints.gridx = 0;
  113.         gridBagConstraints.gridy = 0;
  114.         gridBagConstraints.weightx = 1.0;
  115.         gridBagConstraints.insets = new java.awt.Insets(12, 12, 11, 11);
  116.         add(simpleAuthDialogBtn, gridBagConstraints);
  117.         romainAuthDialogBtn.setText("Romain Login Dialog");
  118.         romainAuthDialogBtn.addActionListener(new java.awt.event.ActionListener() {
  119.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  120.                 romainAuthDialogBtnActionPerformed(evt);
  121.             }
  122.         });
  123.         gridBagConstraints = new java.awt.GridBagConstraints();
  124.         gridBagConstraints.gridx = 0;
  125.         gridBagConstraints.gridy = 1;
  126.         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
  127.         gridBagConstraints.weightx = 1.0;
  128.         gridBagConstraints.insets = new java.awt.Insets(12, 12, 11, 11);
  129.         add(romainAuthDialogBtn, gridBagConstraints);
  130.         jScrollPane1.setViewportView(messageList);
  131.         jSplitPane1.setLeftComponent(jScrollPane1);
  132.         jPanel1.setLayout(new java.awt.GridBagLayout());
  133.         jLabel1.setText("Guest:");
  134.         gridBagConstraints = new java.awt.GridBagConstraints();
  135.         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
  136.         gridBagConstraints.insets = new java.awt.Insets(11, 12, 0, 0);
  137.         jPanel1.add(jLabel1, gridBagConstraints);
  138.         guestLabel.setText("  ");
  139.         gridBagConstraints = new java.awt.GridBagConstraints();
  140.         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  141.         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  142.         gridBagConstraints.weightx = 1.0;
  143.         gridBagConstraints.insets = new java.awt.Insets(11, 5, 0, 11);
  144.         jPanel1.add(guestLabel, gridBagConstraints);
  145.         jLabel3.setText("Subject:");
  146.         gridBagConstraints = new java.awt.GridBagConstraints();
  147.         gridBagConstraints.gridx = 0;
  148.         gridBagConstraints.gridy = 1;
  149.         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
  150.         gridBagConstraints.insets = new java.awt.Insets(5, 12, 0, 0);
  151.         jPanel1.add(jLabel3, gridBagConstraints);
  152.         subjectLabel.setText("  ");
  153.         gridBagConstraints = new java.awt.GridBagConstraints();
  154.         gridBagConstraints.gridx = 1;
  155.         gridBagConstraints.gridy = 1;
  156.         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  157.         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  158.         gridBagConstraints.weightx = 1.0;
  159.         gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 11);
  160.         jPanel1.add(subjectLabel, gridBagConstraints);
  161.         jLabel5.setText("Timestamp:");
  162.         gridBagConstraints = new java.awt.GridBagConstraints();
  163.         gridBagConstraints.gridx = 0;
  164.         gridBagConstraints.gridy = 2;
  165.         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
  166.         gridBagConstraints.insets = new java.awt.Insets(5, 12, 0, 0);
  167.         jPanel1.add(jLabel5, gridBagConstraints);
  168.         timestampLabel.setText("  ");
  169.         gridBagConstraints = new java.awt.GridBagConstraints();
  170.         gridBagConstraints.gridx = 1;
  171.         gridBagConstraints.gridy = 2;
  172.         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
  173.         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  174.         gridBagConstraints.weightx = 1.0;
  175.         gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 11);
  176.         jPanel1.add(timestampLabel, gridBagConstraints);
  177.         messageLabel.setText("Message");
  178.         gridBagConstraints = new java.awt.GridBagConstraints();
  179.         gridBagConstraints.gridx = 0;
  180.         gridBagConstraints.gridy = 3;
  181.         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
  182.         gridBagConstraints.insets = new java.awt.Insets(5, 12, 0, 0);
  183.         jPanel1.add(messageLabel, gridBagConstraints);
  184.         jScrollPane2.setViewportView(jEditorPane1);
  185.         gridBagConstraints = new java.awt.GridBagConstraints();
  186.         gridBagConstraints.gridx = 0;
  187.         gridBagConstraints.gridy = 4;
  188.         gridBagConstraints.gridwidth = 2;
  189.         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  190.         gridBagConstraints.weightx = 1.0;
  191.         gridBagConstraints.weighty = 1.0;
  192.         gridBagConstraints.insets = new java.awt.Insets(3, 12, 11, 11);
  193.         jPanel1.add(jScrollPane2, gridBagConstraints);
  194.         jSplitPane1.setRightComponent(jPanel1);
  195.         gridBagConstraints = new java.awt.GridBagConstraints();
  196.         gridBagConstraints.gridx = 0;
  197.         gridBagConstraints.gridy = 2;
  198.         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  199.         gridBagConstraints.weightx = 1.0;
  200.         gridBagConstraints.weighty = 1.0;
  201.         gridBagConstraints.insets = new java.awt.Insets(0, 12, 11, 12);
  202.         add(jSplitPane1, gridBagConstraints);
  203.     }
  204.     // </editor-fold>//GEN-END:initComponents
  205.     private void romainAuthDialogBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_romainAuthDialogBtnActionPerformed
  206.         //show the Romain Guy login dialog special :)
  207.         LoginDialog dlg = new LoginDialog(new NullLoginService());
  208.         dlg.setVisible(true);
  209.     }//GEN-LAST:event_romainAuthDialogBtnActionPerformed
  210.     private void simpleAuthDialogBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_simpleAuthDialogBtnActionPerformed
  211.         try {
  212.             JXLoginDialog dlg = new JXLoginDialog(new NullLoginService(), new NullPasswordStore(), new DefaultUserNameStore());
  213.             dlg.setVisible(true);
  214. //            JXLoginPanel.showLoginDialog(null, "name", "", new NullLoginService(), new NullPasswordStore(), banner, label, JXLoginPanel.SAVE_NONE);
  215.         } catch (Exception e) {
  216.             JXErrorDialog.showDialog(null, "Application Error", e);
  217.         }
  218.     }//GEN-LAST:event_simpleAuthDialogBtnActionPerformed
  219.     
  220.     
  221.     // Variables declaration - do not modify//GEN-BEGIN:variables
  222.     private javax.swing.JLabel guestLabel;
  223.     private javax.swing.JEditorPane jEditorPane1;
  224.     private javax.swing.JLabel jLabel1;
  225.     private javax.swing.JLabel jLabel3;
  226.     private javax.swing.JLabel jLabel5;
  227.     private javax.swing.JPanel jPanel1;
  228.     private javax.swing.JScrollPane jScrollPane1;
  229.     private javax.swing.JScrollPane jScrollPane2;
  230.     private javax.swing.JSplitPane jSplitPane1;
  231.     private javax.swing.JLabel messageLabel;
  232.     private org.jdesktop.swingx.JXList messageList;
  233.     private javax.swing.JButton romainAuthDialogBtn;
  234.     private javax.swing.JButton simpleAuthDialogBtn;
  235.     private javax.swing.JLabel subjectLabel;
  236.     private javax.swing.JLabel timestampLabel;
  237.     // End of variables declaration//GEN-END:variables
  238.     
  239.     private static final class NullPasswordStore extends PasswordStore {
  240.         public boolean set(String username, String server, char[] password) {
  241.             return false;
  242.         }
  243.         public char[] get(String username, String server) {
  244.             return new char[0];
  245.         }
  246.     }
  247.     
  248.     private final class NullLoginService extends LoginService {
  249.         NullLoginService() {
  250.             super("java.net");
  251.         }
  252.         
  253.         public boolean authenticate(String name, char[] password, String server) {
  254.             try {
  255.                 System.setProperty("http.proxyHost", "webcache.central");
  256.                 System.setProperty("http.proxyPort", "8080");
  257.                 URL url = new URL("http://www.javadesktop.org/forums/login!default.jspa?referrer=index.jspa");
  258.                 HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  259.                 String sessionId = conn.getHeaderField("Set-cookie");
  260.                 sessionId = sessionId.substring(0, sessionId.indexOf(";"));
  261.                 System.out.println(sessionId);
  262.                 conn.disconnect();
  263.                 url = new URL("http://www.javadesktop.org/forums/login.jspa");
  264.                 conn = (HttpURLConnection)url.openConnection();
  265.                 conn.setInstanceFollowRedirects(false);
  266.                 conn.setRequestProperty("Cookie", sessionId);
  267.                 conn.setRequestMethod("POST");
  268.                 String output = "username=" + name + "&password=" + new String(password) + "&autoLogin=true&doLogin=Login";
  269.                 conn.setFixedLengthStreamingMode(output.length());
  270.                 conn.setDoOutput(true);
  271.                 OutputStream os = conn.getOutputStream();
  272.                 os.write(output.getBytes());
  273.                 os.flush();
  274.                 String jiveAuthToken = conn.getHeaderField("Set-cookie");
  275.                 jiveAuthToken = jiveAuthToken.substring(0, jiveAuthToken.indexOf(";"));
  276.                 System.out.println(jiveAuthToken);
  277.                 conn.disconnect();
  278.                 url = new URL("http://javadesktop.org/forums/rss/rssthreads.jsp?forumID=53");
  279.                 conn = (HttpURLConnection)url.openConnection();
  280.                 conn.setInstanceFollowRedirects(false);
  281.                 conn.setRequestProperty("Cookie", sessionId + "; " + jiveAuthToken);
  282.                 InputStream is = conn.getInputStream();
  283.                 byte[] data = new byte[1024];
  284.                 int length = -1;
  285.                 StringBuilder buffer = new StringBuilder();
  286.                 while ((length = is.read(data)) != -1) {
  287.                     buffer.append(new String(data, 0, length));
  288.                 }
  289.                 is.close();
  290.                 conn.disconnect();
  291.                 
  292.                 SAXParserFactory factory = SAXParserFactory.newInstance();
  293.                 SAXParser parser = factory.newSAXParser();
  294.                 parser.parse(new InputSource(new StringReader(buffer.toString())), new DefaultHandler() {
  295.                     private Stack<String> tags = new Stack<String>();
  296.                     private String data;
  297.                     private DataRow row;
  298.                     public void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException {
  299.                         data = new String(ch, start, length);
  300.                     }
  301.                     public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException {
  302.                         tags.push(qName);
  303.                     }
  304.                     public void endElement(String uri, String localName, String qName) throws org.xml.sax.SAXException {
  305.                         String name = tags.pop();
  306.                         String parentName = tags.size() > 0 ? tags.peek() : null;
  307.                         //if the parent was "channel"
  308.                         if (parentName != null && parentName.equals("channel")) {
  309.                             if (name.equals("title")) {
  310.                                 System.out.println("Title: " + data);
  311.                             } else if (name.equals("link")) {
  312.                                 System.out.println("URL: " + data);
  313.                             } else if (name.equals("description")) {
  314.                                 System.out.println("Description: " + data);
  315.                             } else if (name.equals("language")) {
  316.                                 System.out.println("Language: " + data);
  317.                             }
  318.                         } else if (parentName != null && parentName.equals("item")) {
  319.                             //if the parent was "item"
  320.                             if (name.equals("title")) {
  321.                                 row = messages.appendRow();
  322.                                 row.setValue("messageId", messages.getRowCount());
  323.                                 row.setValue("title", data);
  324.                             } else if (name.equals("link")) {
  325.                                 row.setValue("link", data);
  326.                             } else if (name.equals("description")) {
  327.                                 row.setValue("description", data);
  328.                             } else if (name.equals("jf:creationDate")) {
  329.                                 row.setValue("creationDate", data);
  330.                             } else if (name.equals("jf:modificationDate")) {
  331.                                 row.setValue("modificationDate", data);
  332.                             } else if (name.equals("jf:messageCount")) {
  333.                                 row.setValue("messageCount", data);
  334.                             } else if (name.equals("jf:author")) {
  335.                                 row.setValue("author", data);
  336.                             } else if (name.equals("jf:replyCount")) {
  337.                                 row.setValue("replyCount", data);
  338.                                 row.setStatus(DataRow.DataRowStatus.UNCHANGED);
  339.                                 
  340.                                 //now, load the thread data for this message
  341.                                 try {
  342.                                     URL url = new URL((String)row.getValue("link"));
  343.                                     HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  344.                                     InputStream is = conn.getInputStream();
  345.                                     byte[] data = new byte[1024];
  346.                                     int length = -1;
  347.                                     StringBuilder buffer = new StringBuilder();
  348.                                     while ((length = is.read(data)) != -1) {
  349.                                         buffer.append(new String(data, 0, length));
  350.                                     }
  351.                                     //iterate over all the lines
  352.                                     List<String> lines = Arrays.asList(buffer.toString().split("\n"));
  353.                                     Iterator<String> itr = lines.iterator();
  354.                                     DataRow threadRow = null;
  355.                                     while (itr.hasNext()) {
  356.                                         String line = itr.next();
  357.                                         if (line.contains("<span class="jive-guest">")) {
  358.                                             String guest = parseGuest(itr);
  359.                                             if (!guest.startsWith("<nobr>")) {
  360.                                                 threadRow = threads.appendRow();
  361.                                                 threadRow.setValue("guest", guest);
  362.                                                 threadRow.setValue("messageId", row.getValue("messageId"));
  363.                                             }
  364.                                         } else if (line.contains("<span class="jive-subject">")) {
  365.                                             String subject = parseSubject(itr);
  366.                                             if (threadRow != null) {
  367.                                                 threadRow.setValue("subject", subject);
  368.                                                 String timestamp = parseTimestamp(itr);
  369.                                                 threadRow.setValue("timestamp", timestamp);
  370.                                             }
  371.                                         } else if (line.contains("<td colspan="2" style="border-top: 1px #ccc solid;">")) {
  372.                                             String message = parseMessage(itr);
  373.                                             if (threadRow != null) {
  374.                                                 threadRow.setValue("message", message);
  375.                                                 threadRow.setStatus(DataRow.DataRowStatus.UNCHANGED);
  376.                                             }
  377.                                         }
  378.                                     }
  379.                                 } catch (Exception e) {
  380.                                     e.printStackTrace();
  381.                                 }
  382.                             }
  383.                         }
  384.                     }
  385.                 });
  386.                 
  387.                 return true;
  388.             } catch (Exception e) {
  389.                 e.printStackTrace();
  390.                 return false;
  391.             }
  392.         }
  393.         private String parseGuest(Iterator<String> itr) {
  394.             StringBuilder buffer = new StringBuilder();
  395.             while (itr.hasNext()) {
  396.                 String line = itr.next();
  397.                 if (line.contains("</span>")) {
  398.                     return buffer.toString().trim();
  399.                 } else {
  400.                     buffer.append(removeBreakTags(line));
  401.                 }
  402.             }
  403.             return "";
  404.         }
  405.         private String parseSubject(Iterator<String> itr) {
  406.             StringBuilder buffer = new StringBuilder();
  407.             while (itr.hasNext()) {
  408.                 String line = itr.next();
  409.                 if (line.contains("</span>")) {
  410.                     return buffer.toString().trim();
  411.                 } else if (line.contains("<a")) {
  412.                     //skip it
  413.                 } else {
  414.                     //if the line contains any <br> tags, remove them
  415.                     buffer.append(removeBreakTags(line));
  416.                 }
  417.             }
  418.             return "";
  419.         }
  420.         private String parseTimestamp(Iterator<String> itr) {
  421.             StringBuilder buffer = new StringBuilder();
  422.             while (itr.hasNext()) {
  423.                 String line = itr.next();
  424.                 if (line.contains("</td>")) {
  425.                     return buffer.toString().trim();
  426.                 } else if (line.contains("Posted:")) {
  427.                     //skip it
  428.                 } else {
  429.                     buffer.append(removeBreakTags(line));
  430.                 }
  431.             }
  432.             return "";
  433.         }
  434.         private String parseMessage(Iterator<String> itr) {
  435.             StringBuilder buffer = new StringBuilder();
  436.             while (itr.hasNext()) {
  437.                 String line = itr.next();
  438.                 if (line.contains("</td>")) {
  439.                     return buffer.toString().trim();
  440.                 } else {
  441.                     buffer.append(line);
  442.                 }
  443.             }
  444.             return "";
  445.         }
  446.         private String removeBreakTags(String line) {
  447.             return line.replaceAll("\<br\>", "");
  448.         }
  449.     }    
  450. }