Warning: Can't use blame annotator:
svn blame failed on trunk/src/tmcsim/cadsimulator/viewer/TrafficModelViewPanel.java: ("Can't find a temporary directory: Internal error", 20014)

source: tmcsimulator/trunk/src/tmcsim/cadsimulator/viewer/TrafficModelViewPanel.java @ 422

Revision 422, 11.4 KB checked in by jdalbey, 7 years ago (diff)

Remove ATMS functionality. Reworked and simplified the Highway model to use only VDS data from PeMS. Updated all unit tests.

RevLine 
1package tmcsim.cadsimulator.viewer;
2
3import tmcsim.highwaymodel.TrafficEvent;
4import java.util.LinkedList;
5import java.util.List;
6import java.util.Observable;
7import java.util.Observer;
8import java.util.Vector;
9import javax.swing.AbstractListModel;
10import javax.swing.JOptionPane;
11import tmcsim.cadsimulator.managers.TrafficModelManager;
12
13/**
14 * Viewer for the Traffic Model that displays the event queue and the incident
15 * list.
16 *
17 * @author jdalbey
18 */
19public class TrafficModelViewPanel extends javax.swing.JPanel implements Observer
20{
21
22    /**
23     * Reference to the driver associated with this GUI
24     */
25    private TrafficModelManager driver;
26    private List<String> incidents;
27
28    /**
29     * Creates new form TrafficModelViewPanel
30     */
31    public TrafficModelViewPanel()
32    {
33        initComponents();
34        lstEvents.setSelectedIndex(0);
35
36    }
37
38    @Override
39    /**
40     * Refresh the display.
41     */
42    public void update(Observable obs, Object obj)
43    {
44        if (obs == null)
45        {
46            return;
47        }
48        if (obs instanceof TrafficModelManager)
49        {
50            // save reference to the model for use by button handlers
51            driver = (TrafficModelManager) obs;
52        }
53        if (obj == null)
54        {
55            return;
56        }
57        // Determine what needs updating; time, events, or incidents
58        if (obj instanceof String)
59        {
60            String currentTime = (String) obj;
61            txtClockTime.setText(currentTime);
62        }
63        if (obj instanceof Vector)
64        {
65            lstIncidents.setListData((Vector) obj);
66        }
67        if (obj instanceof LinkedList)
68        {
69            lstEvents.setModel(new MyListModel((LinkedList) obj));
70        }
71        if (obj instanceof Integer)
72        {
73            // The manager processed an event so advance the selected item
74            int currIdx = lstEvents.getSelectedIndex();
75            lstEvents.setSelectedIndex(currIdx+1);
76            lstEvents.ensureIndexIsVisible(lstEvents.getSelectedIndex());
77        }
78    }
79
80    /**
81     * This method is called from within the constructor to initialize the form.
82     * WARNING: Do NOT modify this code. The content of this method is always
83     * regenerated by the Form Editor.
84     */
85    @SuppressWarnings("unchecked")
86    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
87    private void initComponents()
88    {
89
90        pnlEvents = new javax.swing.JPanel();
91        scrollEvents = new javax.swing.JScrollPane();
92        lstEvents = new javax.swing.JList<>();
93        txtClockTime = new javax.swing.JLabel();
94        btnReload = new javax.swing.JButton();
95        pnlIncidents = new javax.swing.JPanel();
96        jScrollPane1 = new javax.swing.JScrollPane();
97        lstIncidents = new javax.swing.JList<>();
98        btnClear = new javax.swing.JButton();
99
100        lstEvents.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
101        lstEvents.setModel(new javax.swing.AbstractListModel<String>()
102        {
103            String[] strings = { "item 1", "item 2" };
104            public int getSize() { return strings.length; }
105            public String getElementAt(int i) { return strings[i]; }
106        });
107        scrollEvents.setViewportView(lstEvents);
108
109        txtClockTime.setFont(new java.awt.Font("Noto Sans", 1, 14)); // NOI18N
110        txtClockTime.setText("0:00:00");
111
112        btnReload.setText("Reload");
113        btnReload.addActionListener(new java.awt.event.ActionListener()
114        {
115            public void actionPerformed(java.awt.event.ActionEvent evt)
116            {
117                btnReloadActionPerformed(evt);
118            }
119        });
120
121        javax.swing.GroupLayout pnlEventsLayout = new javax.swing.GroupLayout(pnlEvents);
122        pnlEvents.setLayout(pnlEventsLayout);
123        pnlEventsLayout.setHorizontalGroup(
124            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
125            .addGroup(pnlEventsLayout.createSequentialGroup()
126                .addContainerGap()
127                .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE)
128                .addContainerGap(20, Short.MAX_VALUE))
129            .addGroup(pnlEventsLayout.createSequentialGroup()
130                .addGap(112, 112, 112)
131                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
132                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
133                .addComponent(btnReload)
134                .addGap(32, 32, 32))
135        );
136        pnlEventsLayout.setVerticalGroup(
137            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
138            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEventsLayout.createSequentialGroup()
139                .addGroup(pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
140                    .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
141                    .addComponent(btnReload))
142                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
143                .addComponent(scrollEvents, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
144                .addContainerGap())
145        );
146
147        lstIncidents.setFont(new java.awt.Font("Courier New", 0, 15)); // NOI18N
148        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
149        {
150            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
151            public int getSize() { return strings.length; }
152            public String getElementAt(int i) { return strings[i]; }
153        });
154        lstIncidents.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
155        jScrollPane1.setViewportView(lstIncidents);
156
157        btnClear.setText("Clear Incident");
158        btnClear.addActionListener(new java.awt.event.ActionListener()
159        {
160            public void actionPerformed(java.awt.event.ActionEvent evt)
161            {
162                btnClearActionPerformed(evt);
163            }
164        });
165
166        javax.swing.GroupLayout pnlIncidentsLayout = new javax.swing.GroupLayout(pnlIncidents);
167        pnlIncidents.setLayout(pnlIncidentsLayout);
168        pnlIncidentsLayout.setHorizontalGroup(
169            pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
170            .addGroup(pnlIncidentsLayout.createSequentialGroup()
171                .addGroup(pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
172                    .addComponent(btnClear)
173                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE))
174                .addGap(0, 0, Short.MAX_VALUE))
175        );
176        pnlIncidentsLayout.setVerticalGroup(
177            pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
178            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlIncidentsLayout.createSequentialGroup()
179                .addContainerGap()
180                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
181                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
182                .addComponent(btnClear)
183                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
184        );
185
186        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
187        this.setLayout(layout);
188        layout.setHorizontalGroup(
189            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
190            .addGroup(layout.createSequentialGroup()
191                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
192                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
193                    .addGroup(layout.createSequentialGroup()
194                        .addGap(12, 12, 12)
195                        .addComponent(pnlIncidents, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
196                    .addComponent(pnlEvents, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
197        );
198        layout.setVerticalGroup(
199            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
200            .addGroup(layout.createSequentialGroup()
201                .addComponent(pnlEvents, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
202                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
203                .addComponent(pnlIncidents, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
204                .addContainerGap())
205        );
206    }// </editor-fold>//GEN-END:initComponents
207
208    private void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed
209    {//GEN-HEADEREND:event_btnReloadActionPerformed
210        String message = "Reload will delete all events in the queue and reload the events file.\n"
211                + "This will not effect the simulation manager, and will run all events up to\n"
212                + "current simulation time.";
213        String title = "Please Confirm";
214        // display a confirmation message for the user
215        int reply = JOptionPane.showConfirmDialog(this, message, title, JOptionPane.YES_NO_OPTION);
216        if (reply == JOptionPane.YES_OPTION)
217        {
218            if (driver != null)
219            {
220                driver.loadEvents();
221            }
222        }
223    }//GEN-LAST:event_btnReloadActionPerformed
224
225    private void btnClearActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnClearActionPerformed
226    {//GEN-HEADEREND:event_btnClearActionPerformed
227        String selectedItem = lstIncidents.getSelectedValue();
228        if (selectedItem == null)
229        {
230            JOptionPane.showMessageDialog(this, "No Incident Selected", "Warning", JOptionPane.INFORMATION_MESSAGE);
231        } else
232        {
233            System.out.println("Clicked Incident:" + selectedItem);
234            if (driver != null)
235            {
236                driver.clearIncident(selectedItem);
237            }
238            lstIncidents.clearSelection();
239        }
240    }//GEN-LAST:event_btnClearActionPerformed
241
242    class MyListModel extends AbstractListModel<String>
243    {
244
245        TrafficEvent[] strings;// = { "item 1", "item 2" };
246
247        public MyListModel(List<TrafficEvent> events)
248        {
249            strings = events.toArray(new TrafficEvent[events.size()]);
250        }
251
252        public int getSize()
253        {
254            return strings.length;
255        }
256
257        public String getElementAt(int i)
258        {
259            return strings[i].rawString;
260        }
261    }
262
263
264    // Variables declaration - do not modify//GEN-BEGIN:variables
265    private javax.swing.JButton btnClear;
266    private javax.swing.JButton btnReload;
267    private javax.swing.JScrollPane jScrollPane1;
268    private javax.swing.JList<String> lstEvents;
269    private javax.swing.JList<String> lstIncidents;
270    private javax.swing.JPanel pnlEvents;
271    private javax.swing.JPanel pnlIncidents;
272    private javax.swing.JScrollPane scrollEvents;
273    private javax.swing.JLabel txtClockTime;
274    // End of variables declaration//GEN-END:variables
275}
Note: See TracBrowser for help on using the repository browser.