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

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)FolderModel.java 1.13 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. import javax.mail.*;
  39. import java.util.Date;
  40. import javax.swing.table.AbstractTableModel; 
  41. /**
  42.  * Maps the messages in a Folder to the Swing's Table Model
  43.  *
  44.  * @version 1.13, 01/05/23
  45.  * @author Christopher Cotton
  46.  * @author Bill Shannon
  47.  */
  48. public class FolderModel extends AbstractTableModel {
  49.     
  50.     Folder folder;
  51.     Message[] messages;
  52.     String[] columnNames = { "Date", "From", "Subject"}; 
  53.     Class[] columnTypes = { String.class, String.class, String.class }; 
  54.     public void setFolder(Folder what) throws MessagingException {
  55. if (what != null) {
  56.     // opened if needed
  57.     if (!what.isOpen()) {
  58. what.open(Folder.READ_WRITE);
  59.     }
  60.     
  61.     // get the messages
  62.     messages = what.getMessages();
  63.     cached = new String[messages.length][];
  64. } else {
  65.     messages = null;
  66.     cached = null;
  67. }
  68. // close previous folder and switch to new folder
  69. if (folder != null)
  70.     folder.close(true);
  71. folder = what;
  72. fireTableDataChanged();
  73.     }
  74.     
  75.     public Message getMessage(int which) {
  76. return messages[which];
  77.     }
  78.     //---------------------
  79.     // Implementation of the TableModel methods
  80.     //---------------------
  81.     public String getColumnName(int column) {
  82. return columnNames[column];
  83.     }
  84.     
  85.     public Class getColumnClass(int column) {
  86. return columnTypes[column];
  87.     }
  88.     
  89.     public int getColumnCount() {
  90.         return columnNames.length; 
  91.     }
  92.     public int getRowCount() {
  93. if (messages == null)
  94.     return 0;
  95. return messages.length;
  96.     }
  97.  
  98.     public Object getValueAt(int aRow, int aColumn) {
  99. switch(aColumn) {
  100. case 0: // date
  101. case 1: // From String[] what = getCachedData(aRow);
  102. case 2: // Subject
  103.     String[] what = getCachedData(aRow);
  104.     if (what != null) {
  105. return what[aColumn];
  106.     } else {
  107. return "";
  108.     }
  109.     
  110. default:
  111.     return "";
  112. }
  113.     }
  114.     protected static String[][] cached;
  115.     
  116.     protected String[] getCachedData(int row) {
  117. if (cached[row] == null) {
  118.     try{
  119. Message m = messages[row];
  120.     
  121. String[] theData = new String[4];
  122.     
  123. // Date
  124. Date date = m.getSentDate();
  125. if (date == null) {
  126.     theData[0] = "Unknown";
  127. } else {
  128.     theData[0] = date.toString();
  129. }
  130.     
  131. // From
  132. Address[] adds = m.getFrom();
  133. if (adds != null && adds.length != 0) {
  134.     theData[1] = adds[0].toString();     
  135. } else {
  136.     theData[1] = "";
  137. }
  138. // Subject
  139. String subject = m.getSubject();
  140. if (subject != null) {
  141.     theData[2] = subject;
  142. } else {
  143.     theData[2] = "(No Subject)";
  144. }
  145. cached[row] = theData;
  146.     }
  147.     catch (MessagingException e) {
  148. e.printStackTrace();
  149.     }
  150. }
  151. return cached[row];
  152.     }
  153. }