SimpleClient.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:6k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)SimpleClient.java 1.24 01/05/23
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. /*
  39.  * @(#)SimpleClient.java 1.24, 01/05/23
  40.  *
  41.  * Copyright (c) 1997-1998 by Sun Microsystems, Inc.
  42.  * All Rights Reserved.
  43.  */
  44. import java.util.*;
  45. import java.io.*;
  46. import javax.mail.*;
  47. import javax.mail.internet.*;
  48. import javax.activation.*;
  49. import java.awt.*;
  50. import java.awt.event.*;
  51. import javax.swing.*;
  52. import javax.swing.table.*;
  53. import javax.swing.tree.*;
  54. import javax.swing.event.*;
  55. /**
  56.  * Demo app that shows a very simple Mail Client
  57.  *
  58.  * @version 1.24, 01/05/23
  59.  * @author Christopher Cotton
  60.  * @author Bill Shannon
  61.  */
  62. public class SimpleClient {
  63.     static Vector url = new Vector();
  64.     static FolderViewer fv;
  65.     static MessageViewer mv;
  66.     public static void main(String argv[]) {
  67. boolean usage = false;
  68. for (int optind = 0; optind < argv.length; optind++) {
  69.     if (argv[optind].equals("-L")) {
  70. url.addElement(argv[++optind]);
  71.     } else if (argv[optind].startsWith("-")) {
  72. usage = true;
  73. break;
  74.     } else {
  75. usage = true;
  76. break;
  77.     }
  78. }
  79. if (usage || url.size() == 0) {
  80.     System.out.println("Usage: SimpleClient -L url");
  81.     System.out.println("   where url is protocol://username:password@hostname/");
  82.     System.exit(1);
  83. }
  84.         try {
  85.     // Set up our Mailcap entries.  This will allow the JAF
  86.     // to locate our viewers.
  87.     File capfile = new File("simple.mailcap");
  88.     if (!capfile.isFile()) {
  89. System.out.println(
  90.     "Cannot locate the "simple.mailcap" file.");
  91. System.exit(1);
  92.     }
  93.     
  94.     CommandMap.setDefaultCommandMap( new MailcapCommandMap(
  95. new FileInputStream(capfile)));
  96.       JFrame frame = new JFrame("Simple JavaMail Client");
  97.       frame.addWindowListener(new WindowAdapter() {
  98.   public void windowClosing(WindowEvent e) {System.exit(0);}});
  99.     //frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  100.     // Get a Store object
  101.     SimpleAuthenticator auth = new SimpleAuthenticator(frame);
  102.     Session session = 
  103. Session.getDefaultInstance(System.getProperties(), auth);
  104.     //session.setDebug(true);
  105.       DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
  106.     // create a node for each store we have
  107.     for (Enumeration e = url.elements() ; e.hasMoreElements() ;) {
  108. String urlstring = (String) e.nextElement();
  109. URLName urln = new URLName(urlstring);
  110. Store store = session.getStore(urln);
  111. StoreTreeNode storenode = new StoreTreeNode(store);
  112. root.add(storenode);
  113.     }     
  114.     DefaultTreeModel treeModel = new DefaultTreeModel(root);
  115.     JTree tree = new JTree(treeModel);
  116.     tree.addTreeSelectionListener(new TreePress());
  117.     /* Put the Tree in a scroller. */
  118.     JScrollPane        sp = new JScrollPane();
  119.     sp.setPreferredSize(new Dimension(250, 300));
  120.     sp.getViewport().add(tree);
  121.     /* Create a double buffered JPanel */
  122.     JPanel sv = new JPanel(new BorderLayout());
  123.     sv.add("Center", sp);
  124.     fv = new FolderViewer(null);
  125.     JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
  126. sv, fv);
  127.     jsp.setOneTouchExpandable(true);
  128.     mv = new MessageViewer();
  129.     JSplitPane jsp2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
  130. jsp, mv);
  131.     jsp2.setOneTouchExpandable(true);
  132.     frame.getContentPane().add(jsp2);
  133.     frame.pack();
  134.     frame.show();
  135. } catch (Exception ex) {
  136.     System.out.println("SimpletClient caught exception");
  137.     ex.printStackTrace();
  138.     System.exit(1);
  139. }
  140.     }
  141. }
  142. class TreePress implements TreeSelectionListener {
  143.     
  144.     public void valueChanged(TreeSelectionEvent e) {
  145. TreePath path = e.getNewLeadSelectionPath();
  146. if (path != null) {
  147.     Object o = path.getLastPathComponent();
  148.     if (o instanceof FolderTreeNode) {
  149. FolderTreeNode node = (FolderTreeNode)o;
  150. Folder folder = node.getFolder();
  151. try {
  152.     if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0) {
  153. SimpleClient.fv.setFolder(folder);
  154.     }
  155. } catch (MessagingException me) { }
  156.     }
  157. }
  158.     }
  159. }