| /* | |
| * 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]; | |
| } | |
| } |