/* * OffenePflege * Copyright (C) 2011 Torsten Löhr * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License V2 as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; if not, write to * the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA * www.offene-pflege.de * ------------------------ * Auf deutsch (freie Übersetzung. Rechtlich gilt die englische Version) * Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, * wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, gemäß Version 2 der Lizenz. * * Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber * OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN * BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. * * Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, * schreiben Sie an die Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA. */ package op.mx; import entity.mx.MXmsg; import entity.mx.MXrecipient; import entity.mx.MXrecipientTools; import entity.system.UsersTools; import op.OPDE; import op.tools.SYSConst; import op.tools.SYSTools; import javax.swing.table.AbstractTableModel; import java.text.DateFormat; import java.util.ArrayList; import java.util.HashMap; /** * @author tloehr */ public class TMmsgs extends AbstractTableModel { public static final int COL_USER = 0; public static final int COL_SUBJECT = 1; public static final int COL_PIT = 2; DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); String currentModel = ""; HashMap<String, MXDataModelProvider> mymodels; /** * This TableModel allows several models to be switched when needed. * I wanted to try this concept in order to get rid of all this new model assignments to tables with * all the event problems turning up. * * @param mxDataModelProviders list of data providers to be used. */ public TMmsgs(MXDataModelProvider... mxDataModelProviders) { mymodels = new HashMap<>(); for (MXDataModelProvider provider : mxDataModelProviders){ mymodels.put(provider.getKey(), provider); } // set to the first model in the list setCurrentMpdel(mxDataModelProviders[0].getKey()); } /** * switch the current model in use. * @param key */ public void setCurrentMpdel(String key){ currentModel = key; mymodels.get(currentModel).loadModel(); fireTableDataChanged(); } @Override public String getColumnName(int column) { String name = ""; if (column == COL_USER) name = SYSTools.xx("mx.col_user"); if (column == COL_SUBJECT) name = SYSTools.xx("mx.col_subject"); if (column == COL_PIT) name = SYSTools.xx("mx.col_pit"); return name; } @Override public int getColumnCount() { return 3; } @Override public Class getColumnClass(int column) { return String.class; // Class thisclass; // switch (column) { // case COL_PIT: { // thisclass = Date.class; // break; // } //// case COL_USER: { //// thisclass = String.class; //// break; //// } //// case COL_TEXT: { //// thisclass = String.class; //// break; //// } // default: { // thisclass = String.class; // } // } // // // return thisclass; } // public void addMsg(MXmsg mXmsg) { // mymodel.add(0, mXmsg); // fireTableRowsUpdated(0, 1); // } /** * adds or updates a message without rereading the whole model. * @param mXmsg */ public void updateMsg(MXmsg mXmsg) { int row = mymodels.get(currentModel).getDataModel().indexOf(mXmsg); if (row == -1) { mymodels.get(currentModel).getDataModel().add(0, mXmsg); fireTableRowsUpdated(0, 1); } else { mymodels.get(currentModel).getDataModel().set(row, mXmsg); fireTableRowsUpdated(row, row); } } public void reload(){ mymodels.get(currentModel).loadModel(); fireTableDataChanged(); } /** * to help the GC */ public void cleanup() { for (String key : mymodels.keySet()){ mymodels.get(key).getDataModel().clear(); } } @Override public boolean isCellEditable(int row, int column) { return false; } public MXmsg getRow(int row) { return mymodels.get(currentModel).getDataModel().get(row); } @Override public int getRowCount() { return mymodels.get(currentModel).getDataModel().size(); } String boldIfUnread(MXmsg msg, String in) { if (msg.getRecipients().isEmpty()) return in; if (msg.isDraft()) return in; if (msg.getSender().equals(OPDE.getMe())) return in; return MXrecipientTools.findMXrecipient(msg, OPDE.getMe()).isUnread() ? SYSConst.html_bold(in) : in; } @Override public Object getValueAt(int row, int column) { Object value; MXmsg mymsg = mymodels.get(currentModel).getDataModel().get(row); switch (column) { case COL_PIT: { value = df.format(mymodels.get(currentModel).getDataModel().get(row).getPit()); break; } case COL_USER: { if (mymsg.getSender().equals(OPDE.getMe())) { String listOfRecipients = ""; for (MXrecipient mxr : mymsg.getRecipients()) { listOfRecipients += UsersTools.getFullnameWithID(mxr.getRecipient()) + " "; } if (listOfRecipients.isEmpty()) listOfRecipients = "mx.norecipients.yet"; value = SYSTools.xx("mx.from.me") + " ==> " + listOfRecipients; } else { value = UsersTools.getFullnameWithID(mymsg.getSender()) + " ==> " + SYSTools.xx("mx.to.me"); } break; } case COL_SUBJECT: { value = SYSTools.catchNull(mymodels.get(currentModel).getDataModel().get(row).getSubject(), SYSConst.html_italic("mx.no.subject")); break; } default: { value = null; } } if (value != null) { String html = SYSConst.html_fontface; html += "<p>" + boldIfUnread(mymodels.get(currentModel).getDataModel().get(row), value.toString()) + "</p>"; html += "</font>"; value = SYSTools.toHTMLForScreen(html); } else { value = "Fehler"; } return value; } }