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.queue;
016
017 import javax.swing.table.AbstractTableModel;
018
019 import org.apache.commons.logging.Log;
020 import org.apache.commons.logging.LogFactory;
021 import org.tastybug.bugwerk.blueprint.model.Ticket;
022 import org.tastybug.bugwerk.blueprint.model.TicketQueue;
023
024
025
026 /**
027 * This is the table model of <code>TicketQueueTable</code>.
028 * <br>
029 * It displays 4 columns: the ticket Id, ticket type, incident count and ticket state.
030 * It is based on a given ticket queue and is not editable.
031 * <br><br>
032 *
033 * <hr>
034 * Copyright 2006 Philipp Bartsch.<br>
035 * <a href="http://www.tastybug.com">www.tastybug.com</a><br>
036 * <hr>
037 * Created on Feb 8, 2006<br>
038 * @author Philipp Bartsch, philipp.bartsch{at}tastybug{dot}com</a>
039 */
040 public class TicketQueueTableModel extends AbstractTableModel {
041
042
043 /**The <code>serialVersionUID</code>*/
044 private static final long serialVersionUID = -8938086540732426880L;
045
046 /**The commons logger.*/
047 private static final Log logger = LogFactory.getLog(TicketQueueTableModel.class);
048
049 protected static final String[] columns = new String[] {"Ticket ID", "Type", "Incidents", "State"};
050 private final TicketQueue ticketQueue;
051 private Ticket[] tickets;
052
053 /**
054 * Creates the model.
055 *
056 * @param _ticketQueue the connected queue
057 */
058 protected TicketQueueTableModel (final TicketQueue _ticketQueue) {
059 ticketQueue = _ticketQueue;
060 if (_ticketQueue!= null) {
061 tickets = ticketQueue.getTickets();
062 } else {
063 tickets = new Ticket[0];
064 }
065 }
066
067 /**
068 * Returns the column name at position <code>col</code>.
069 *
070 * @see javax.swing.table.AbstractTableModel#getColumnName(int)
071 */
072 public String getColumnName(int col) {
073 return columns[col];
074 }
075
076 /**
077 * (Re-)reads all tickets from the queue.
078 */
079 public void update () {
080 tickets = ticketQueue != null ? ticketQueue.getTickets() : new Ticket[0];
081 }
082
083 /**
084 * Returns 4.
085 *
086 * @see javax.swing.table.TableModel#getColumnCount()
087 */
088 public int getColumnCount() {
089 return 4;
090 }
091
092 /**
093 * Returns <code>false</code>.
094 *
095 * @return <code>false</code>
096 */
097 public boolean isEditable () {
098 return false;
099 }
100
101 /**
102 * Returns the number of rows, which is equal to the number of tickets in the connected queue.
103 *
104 * @see javax.swing.table.TableModel#getRowCount()
105 */
106 public int getRowCount() {
107 return tickets != null ? tickets.length : 0;
108 }
109
110 /**
111 * Returns the ticket at row <code>rowNumber</code>.
112 *
113 * @param rowNumber the rowNumber
114 * @return the ticket or <code>null</code>, if rowNumber exceeds the number of tickets
115 */
116 public Ticket getTicketAt (int rowNumber) {
117 return tickets != null ? (rowNumber <= tickets.length ? tickets[rowNumber] : null) : null;
118 }
119
120 /**
121 * Returns a cell value.
122 *
123 * @see javax.swing.table.TableModel#getValueAt(int, int)
124 */
125 public Object getValueAt(int row, int col) {
126
127 if (tickets == null) {
128 return "";
129 } else if (col == 0) {
130 return tickets[row].getSignature();
131 } else if (col == 1) {
132 return tickets[row].getType();
133 } else if (col == 2) {
134 return tickets[row].getIncidentCount() + "";
135 } else if (col == 3) {
136 return tickets[row].getState();
137 } else {
138 logger.error("Requested column '" + col + "' exceeds range!");
139 return null;
140 }
141 }
142
143 /**
144 * Returns <code>String.class</code>.
145 *
146 * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
147 */
148 public Class getColumnClass(int c) {
149 //return getValueAt(0, c).getClass();
150 return String.class;
151 }
152 }