| /* |
| * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Distribution License v. 1.0, which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| import javax.mail.*; |
| import java.util.Date; |
| import javax.swing.table.AbstractTableModel; |
| |
| /** |
| * Maps the messages in a Folder to the Swing's Table Model |
| * |
| * @author Christopher Cotton |
| * @author Bill Shannon |
| */ |
| |
| public class FolderModel extends AbstractTableModel { |
| |
| Folder folder; |
| Message[] messages; |
| |
| String[] columnNames = { "Date", "From", "Subject"}; |
| Class[] columnTypes = { String.class, String.class, String.class }; |
| |
| public void setFolder(Folder what) throws MessagingException { |
| if (what != null) { |
| |
| // opened if needed |
| if (!what.isOpen()) { |
| what.open(Folder.READ_WRITE); |
| } |
| |
| // get the messages |
| messages = what.getMessages(); |
| cached = new String[messages.length][]; |
| } else { |
| messages = null; |
| cached = null; |
| } |
| // close previous folder and switch to new folder |
| if (folder != null) |
| folder.close(true); |
| folder = what; |
| fireTableDataChanged(); |
| } |
| |
| public Message getMessage(int which) { |
| return messages[which]; |
| } |
| |
| //--------------------- |
| // Implementation of the TableModel methods |
| //--------------------- |
| |
| public String getColumnName(int column) { |
| return columnNames[column]; |
| } |
| |
| public Class getColumnClass(int column) { |
| return columnTypes[column]; |
| } |
| |
| |
| public int getColumnCount() { |
| return columnNames.length; |
| } |
| |
| public int getRowCount() { |
| if (messages == null) |
| return 0; |
| |
| return messages.length; |
| } |
| |
| public Object getValueAt(int aRow, int aColumn) { |
| switch(aColumn) { |
| case 0: // date |
| case 1: // From String[] what = getCachedData(aRow); |
| case 2: // Subject |
| String[] what = getCachedData(aRow); |
| if (what != null) { |
| return what[aColumn]; |
| } else { |
| return ""; |
| } |
| |
| default: |
| return ""; |
| } |
| } |
| |
| protected static String[][] cached; |
| |
| protected String[] getCachedData(int row) { |
| if (cached[row] == null) { |
| try{ |
| Message m = messages[row]; |
| |
| String[] theData = new String[4]; |
| |
| // Date |
| Date date = m.getSentDate(); |
| if (date == null) { |
| theData[0] = "Unknown"; |
| } else { |
| theData[0] = date.toString(); |
| } |
| |
| // From |
| Address[] adds = m.getFrom(); |
| if (adds != null && adds.length != 0) { |
| theData[1] = adds[0].toString(); |
| } else { |
| theData[1] = ""; |
| } |
| |
| // Subject |
| String subject = m.getSubject(); |
| if (subject != null) { |
| theData[2] = subject; |
| } else { |
| theData[2] = "(No Subject)"; |
| } |
| |
| cached[row] = theData; |
| } |
| catch (MessagingException e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| return cached[row]; |
| } |
| } |