1
2
3
4
5
6
7
8
9
10 package nl.tudelft.simulation.dsol.eventlists;
11
12 import java.util.Arrays;
13 import java.util.Collection;
14 import java.util.Iterator;
15
16 import javax.swing.table.DefaultTableModel;
17 import javax.swing.table.TableModel;
18
19 import nl.tudelft.simulation.dsol.formalisms.devs.SimEvent;
20 import nl.tudelft.simulation.dsol.formalisms.devs.SimEventInterface;
21 import nl.tudelft.simulation.event.EventType;
22 import nl.tudelft.simulation.logger.Logger;
23
24 /***
25 * A TableModel implementation of an eventlist is an extionsion of the eventlist
26 * which upholds its own TableModel. This implementation is used to graphically
27 * display the events in the tree.
28 * <p>
29 * (c) copyright 2003 <a href="http://www.simulation.tudelft.nl">Delft
30 * University of Technology </a>, the Netherlands. <br>
31 * See for project information <a href="http://www.simulation.tudelft.nl">
32 * www.simulation.tudelft.nl </a> <br>
33 * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
34 * License (GPL) </a>, no warranty <br>
35 *
36 * @author <a href="http://www.simulation.tudelft.nl/people/jacobs.html">Peter
37 * Jacobs </a>
38 * @version 1.5 2004-03-28
39 * @since 1.0
40 */
41 public class TableModelEventList extends RedBlackTree
42 {
43 /*** The EVENTLIST_CHANGED_EVENT */
44 public static final EventType EVENTLIST_CHANCED_EVENT = null;
45
46 /*** The tableHeader */
47 public static final String[] HEADER = {"Time", "Source", "Target", "Method"};
48
49 /*** the tableModel */
50 private DefaultTableModel tableModel = new DefaultTableModel(HEADER, 0);
51
52 /**/package-summary/html">show the package information in the tableModel *//package-summary.html">* show the package information in the tableModel */
53 private boolean showPackage = false;
54
55 /***
56 * constructs a new TableModelEventList
57 *
58 * @param origin the origin
59 */
60 public TableModelEventList(final EventListInterface origin)
61 {
62 super();
63 synchronized (origin)
64 {
65 Collection collection = Arrays.asList(origin.toArray());
66 this.addAll(collection);
67 }
68 }
69
70 /***
71 * returns the TreeMapEventList
72 *
73 * @return EventListenerInterface
74 */
75 public synchronized EventListInterface getOrigin()
76 {
77 RedBlackTree result = new RedBlackTree();
78 result.addAll(Arrays.asList(this.toArray()));
79 return result;
80 }
81
82 /***
83 * returns the tableModel
84 *
85 * @return TableModel resutl
86 */
87 public TableModel getTableModel()
88 {
89 return this.tableModel;
90 }
91
92 /***
93 * update the tableModel
94 */
95 private void updateTableModel()
96 {
97 try
98 {
99 this.tableModel.setRowCount(0);
100 for (Iterator i = this.iterator(); i.hasNext();)
101 {
102 Object[] row = new Object[4];
103 SimEvent event = (SimEvent) i.next();
104 row[0] = new Double(event.getAbsoluteExecutionTime());
105 row[1] = this.formatObject(event.getSource().toString());
106 row[2] = this.formatObject(event.getTarget().toString());
107 row[3] = this.formatObject(event.getMethod().toString());
108 this.tableModel.addRow(row);
109 }
110
111 } catch (Exception exception)
112 {
113 Logger.warning(this, "updateTableModel", exception);
114 }
115 }
116
117 /***
118 * formats a label representing an object
119 *
120 * @param label the label to format.
121 * @return String the label
122 */
123 private String formatObject(final String label)
124 {
125 if (label == null)
126 {
127 return "null";
128 }
129 if (this.showPackage)
130 {
131 return label;
132 }
133 return label.substring(label.lastIndexOf(".") + 1);
134 }
135
136 /***
137 * sets the showPackage
138 *
139 * @param showPackage The showPackage to set.
140 */
141 public void setShowPackage(final boolean showPackage)
142 {
143 this.showPackage = showPackage;
144 }
145
146 /***
147 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface
148 * #add(nl.tudelft.simulation.dsol.formalisms.devs.SimEventInterface)
149 */
150 public synchronized boolean add(final SimEventInterface value)
151 {
152 synchronized (this.tableModel)
153 {
154 boolean result = super.add(value);
155 this.updateTableModel();
156 return result;
157 }
158 }
159
160 /***
161 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface
162 * #addAll(java.util.Collection)
163 */
164 public synchronized boolean addAll(final Collection collection)
165 {
166 synchronized (this.tableModel)
167 {
168 boolean result = super.addAll(collection);
169 this.updateTableModel();
170 return result;
171 }
172 }
173
174 /***
175 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface #clear()
176 */
177 public synchronized void clear()
178 {
179 synchronized (this.tableModel)
180 {
181 super.clear();
182 this.updateTableModel();
183 }
184 }
185
186 /***
187 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface
188 * #remove(nl.tudelft.simulation.dsol.formalisms.devs.SimEventInterface)
189 */
190 public synchronized boolean remove(final SimEventInterface value)
191 {
192 synchronized (this.tableModel)
193 {
194 boolean result = super.remove(value);
195 this.updateTableModel();
196 return result;
197 }
198 }
199
200 /***
201 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface
202 * #removeAll(java.util.Collection)
203 */
204 public synchronized boolean removeAll(final Collection collection)
205 {
206 synchronized (this.tableModel)
207 {
208 boolean result = super.removeAll(collection);
209 this.updateTableModel();
210 return result;
211 }
212 }
213
214 /***
215 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface#removeFirst()
216 */
217 public synchronized SimEventInterface removeFirst()
218 {
219 synchronized (this.tableModel)
220 {
221 SimEventInterface result = super.removeFirst();
222 this.updateTableModel();
223 return result;
224 }
225 }
226
227 /***
228 * @see nl.tudelft.simulation.dsol.eventlists.EventListInterface#removeLast()
229 */
230 public synchronized SimEventInterface removeLast()
231 {
232 synchronized (this.tableModel)
233 {
234 SimEventInterface result = super.removeLast();
235 this.updateTableModel();
236 return result;
237 }
238 }
239 }