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 java.util.Arrays;
018 import java.util.Iterator;
019
020 import javax.swing.JTable;
021 import javax.swing.ListSelectionModel;
022
023 import org.tastybug.bugwerk.blueprint.event.TicketChangeListener;
024 import org.tastybug.bugwerk.blueprint.model.Incident;
025 import org.tastybug.bugwerk.blueprint.model.Ticket;
026 import org.tastybug.bugwerk.blueprint.model.TicketQueue;
027 import org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker;
028 import org.tastybug.bugwerk.bugtrap.base.worker.QueueWorkerListener;
029
030 /**
031 * This JTable displays the number of all- / unreported tickets in the connected ticket queue.
032 * <br>
033 * Internally, the table is a <code>QueueWorker</code>, i.e. it listens for activity on the queue
034 * and refreshes the content upon necessity. The table is not editable.
035 * <br>
036 * Use it like this:
037 * <pre>
038 * TicketQueueStatisticsTable table = new TicketQueueStatisticsTable();
039 * table.connectQueue(Adapters.getAdapter("myProject").getTicketQueue());
040 * </pre>
041 * <br>
042 *
043 * <hr>
044 * Copyright 2006 Philipp Bartsch.<br>
045 * <a href="http://www.tastybug.com">www.tastybug.com</a><br>
046 * <hr>
047 * Created on Feb 9, 2006<br>
048 * @author Philipp Bartsch, philipp.bartsch{at}tastybug{dot}com</a>
049 */
050 public class TicketQueueStatisticsTable extends JTable implements QueueWorker, TicketChangeListener {
051
052 /**The <code>serialVersionUID</code>*/
053 private static final long serialVersionUID = -3098845399152685004L;
054
055 private TicketQueue ticketQueue;
056 private TicketQueueStatisticsTableModel tableModel;
057 private TicketQueueStatisticsTableRenderer tableRenderer;
058
059
060 /**
061 * Creates the table. Renderer and model are embedded as soon as the target
062 * ticket queue is declared.
063 */
064 public TicketQueueStatisticsTable () {
065 setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
066 }
067
068 /**
069 * Updates table model and UI.
070 *
071 * @see org.tastybug.bugwerk.blueprint.event.TicketQueueChangeListener#performTicketRemovedEvent(org.tastybug.bugwerk.blueprint.event.TicketQueueChangeListener.TicketQueueEvent)
072 */
073 public void performTicketRemovedEvent(TicketQueueEvent event) {
074 tableModel.update();
075 updateUI();
076 }
077
078 /**
079 * Updates table model and UI.
080 *
081 * @see org.tastybug.bugwerk.blueprint.event.TicketQueueChangeListener#performTicketAddedEvent(org.tastybug.bugwerk.blueprint.event.TicketQueueChangeListener.TicketQueueEvent)
082 */
083 public void performTicketAddedEvent(TicketQueueEvent event) {
084 tableModel.update();
085 updateUI();
086 }
087
088 /**
089 * Updates table model and UI.
090 *
091 * @see org.tastybug.bugwerk.blueprint.event.TicketChangeListener#performIncidentRemovedEvent(org.tastybug.bugwerk.blueprint.event.TicketChangeListener.IncidentEvent)
092 */
093 public void performIncidentRemovedEvent(IncidentEvent event) {
094 updateUI();
095 }
096
097 /**
098 * Updates table model and UI.
099 *
100 * @see org.tastybug.bugwerk.blueprint.event.TicketChangeListener#performIncidentAddedEvent(org.tastybug.bugwerk.blueprint.event.TicketChangeListener.IncidentEvent)
101 */
102 public void performIncidentAddedEvent(IncidentEvent event) {
103 updateUI();
104 }
105
106 /**
107 * Updates table model and UI.
108 *
109 * @see org.tastybug.bugwerk.blueprint.event.TicketChangeListener#performTicketChangedEvent(org.tastybug.bugwerk.blueprint.event.TicketChangeListener.TicketChangeEvent)
110 */
111 public void performTicketChangedEvent(TicketChangeEvent event) {
112 updateUI();
113 }
114
115 /**
116 * Registers the queue that is to be displayed; former queue will be dropped.
117 *
118 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#connectQueue(org.tastybug.bugwerk.blueprint.model.TicketQueue)
119 */
120 public void connectQueue(TicketQueue queue) {
121 // unregister from the old queue when necessary
122 if (ticketQueue != null)
123 for (Iterator tickets = Arrays.asList(ticketQueue.getTickets()).iterator(); tickets.hasNext();)
124 ((Ticket)tickets.next()).removeTicketChangeListener(this);
125 ticketQueue = queue;
126 tableModel = new TicketQueueStatisticsTableModel(ticketQueue);
127 tableRenderer = new TicketQueueStatisticsTableRenderer();
128
129 setModel(tableModel);
130 setDefaultRenderer(String.class, tableRenderer);
131
132 // als listener an der queue anmelden
133 ticketQueue.addTicketQueueChangeListener(this);
134
135 for (Iterator tickets = Arrays.asList(ticketQueue.getTickets()).iterator(); tickets.hasNext();)
136 ((Ticket)tickets.next()).addTicketChangeListener(this);
137
138 updateUI();
139 }
140
141 /**
142 * Does nothing as you cannot listen to this queue worker.
143 *
144 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#addQueueWorkerListener(org.tastybug.bugwerk.bugtrap.base.worker.QueueWorkerListener)
145 */
146 public void addQueueWorkerListener(QueueWorkerListener qwListener) {
147 // ignored
148 }
149
150 /**
151 * Does nothing as you cannot listen to this queue worker.
152 *
153 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#removeQueueWorkerListener(org.tastybug.bugwerk.bugtrap.base.worker.QueueWorkerListener)
154 */
155 public boolean removeQueueWorkerListener(QueueWorkerListener qwListener) {
156 return true;
157 }
158
159 /**
160 * Returns an empty array.
161 *
162 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#getQueueWorkerListeners()
163 */
164 public QueueWorkerListener[] getQueueWorkerListeners() {
165 return new QueueWorkerListener[0];
166 }
167
168 /**
169 * Updates table model and UI.
170 *
171 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#processQueue(boolean)
172 */
173 public void processQueue(boolean isUserDriven) {
174 updateUI();
175 }
176
177 /**
178 * Does nothing.
179 *
180 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#fireIncidentProcessedEvent(org.tastybug.bugwerk.blueprint.model.Incident, boolean, java.lang.String)
181 */
182 public void fireIncidentProcessedEvent(Incident arg0, boolean arg1, String arg2) {
183 //
184 }
185
186 /**
187 * Does nothing.
188 *
189 * @see org.tastybug.bugwerk.bugtrap.base.worker.QueueWorker#fireTicketProcessedEvent(org.tastybug.bugwerk.blueprint.model.Ticket, boolean, java.lang.String)
190 */
191 public void fireTicketProcessedEvent(Ticket arg0, boolean arg1, String arg2) {
192 //
193 }
194 }