001 /*
002 * This program is free software; you can redistribute it and/or modify
003 * it under the terms of the GNU General Public License as published by
004 * the Free Software Foundation; version 2 of the License.
005 *
006 * This program is distributed in the hope that it will be useful,
007 * but WITHOUT ANY WARRANTY; without even the implied warranty of
008 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
009 * GNU General Public License for more details.
010 *
011 * You should have received a copy of the GNU General Public License along
012 * with this program; if not, write to the Free Software Foundation, Inc.,
013 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
014 */
015 package org.tastybug.bugwerk.bugtrail.widget.incident;
016
017 import javax.swing.table.AbstractTableModel;
018
019 import org.tastybug.bugwerk.blueprint.model.Attachment;
020 import org.tastybug.bugwerk.blueprint.model.Incident;
021
022
023 /**
024 * This is the table model of <code>IncidentTable</code>.
025 * <br>
026 *
027 * <hr>
028 * Copyright 2006 Philipp Bartsch.<br>
029 * <a href="http://www.tastybug.com">www.tastybug.com</a><br>
030 * <hr>
031 * Created on Feb 8, 2006<br>
032 * @author Philipp Bartsch, philipp.bartsch{at}tastybug{dot}com</a>
033 */
034 public class IncidentTableModel extends AbstractTableModel {
035
036 /**The <code>serialVersionUID</code>*/
037 private static final long serialVersionUID = -5309523611100834818L;
038
039 private Incident incident;
040 private String[] keys;
041 private Attachment[] attachments;
042
043 /**
044 * Initialises the model, using the content of <code>_incident</code>.
045 *
046 * @param _incident the incident
047 */
048 protected IncidentTableModel (final Incident _incident) {
049 update(_incident);
050 }
051
052 /**
053 * Re-reads the incident, as it has changed.
054 *
055 * @param changedIncident the changed incident
056 */
057 public void update (final Incident changedIncident) {
058 incident = changedIncident;
059 if (incident == null) {
060 keys = new String[0];
061 attachments = new Attachment[0];
062 } else {
063 keys = (String[]) incident.getIncidentAsMap().keySet().toArray(new String[0]);
064 attachments = incident.getAttachments();
065 }
066 }
067
068 /**
069 * Returns an empty string, no column names available yet.
070 *
071 * @see javax.swing.table.AbstractTableModel#getColumnName(int)
072 */
073 public String getColumnName(int col) {
074 return "";
075 }
076
077 /**
078 * Returns 2, as 2 columns are to be displayed (property key/value
079 * and respectively attachment/path).
080 *
081 * @see javax.swing.table.TableModel#getColumnCount()
082 */
083 public int getColumnCount() {
084 return 2;
085 }
086
087 /**
088 * Returns <code>false</code>.
089 *
090 * @return <code>false</code>
091 */
092 public boolean isEditable () {
093 return false;
094 }
095
096 /**
097 * Returns the number of properties + number of attachments.
098 *
099 * @see javax.swing.table.TableModel#getRowCount()
100 */
101 public int getRowCount() {
102 return keys.length + incident.getAttachmentCount();
103 }
104
105 /**
106 * Returns a cell value.
107 *
108 * @see javax.swing.table.TableModel#getValueAt(int, int)
109 */
110 public Object getValueAt(int row, int col) {
111 if (col == 0) {
112 if (row >= keys.length)
113 return "Attachment";
114 else
115 return keys[row];
116 } else if (keys.length == 0 || row >= getRowCount()) {
117 return "";
118 } else {
119 if (row >= keys.length)
120 return attachments[row - keys.length].getPath();
121 else
122 return incident.getAsMap().get(keys[row]);
123 }
124 }
125
126 /**
127 * Returns always <code>String.class</code>.
128 *
129 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
130 */
131 public Class getColumnClass(int c) {
132 return String.class;
133 }
134 }