source: tmcsimulator/trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.java @ 188

Revision 188, 12.8 KB checked in by jdalbey, 9 years ago (diff)

TrafficModelManager?.java: Now integrated into CAD Server. Passes smoke test, needs system testing.

Line 
1package tmcsim.cadsimulator.managers;
2
3import tmcsim.client.*;
4import atmsdriver.model.TrafficEvent;
5import java.text.ParseException;
6import java.util.ArrayList;
7import java.util.LinkedList;
8import java.util.List;
9import java.util.logging.Level;
10import java.util.logging.Logger;
11import javax.swing.AbstractListModel;
12import javax.swing.JOptionPane;
13
14/**
15 * GUI for the Traffic Model Manager.
16 * @author jdalbey
17 */
18public class TrafficModelViewer extends javax.swing.JFrame
19{
20
21    /**
22     * Reference to the driver associated with this GUI
23     */
24    private TrafficModelManager driver;
25    private final List<String> incidents;
26
27    /**
28     * Creates new form ATMSBatchViewer.
29     *
30     * @param incidents a list of incidents to show in a list.
31     */
32    public TrafficModelViewer(TrafficModelManager driver, List<String> incidentList)
33    {
34        initComponents();
35        this.driver = driver;
36        this.incidents = incidentList;
37        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
38        {
39            public int getSize()
40            {
41                return incidents.size();
42            }
43
44            public String getElementAt(int i)
45            {
46                return incidents.get(i);
47            }
48        });
49    }
50
51    public void update(String currentTime, String atmsTime, List<TrafficEvent> events)
52    {
53        lstEvents.setModel(new MyListModel(events));
54        txtClockTime.setText(currentTime + " / " + atmsTime);
55    }
56
57    class MyListModel extends AbstractListModel<String>
58    {
59
60        TrafficEvent[] strings;// = { "item 1", "item 2" };
61
62        public MyListModel(List<TrafficEvent> events)
63        {
64            strings = events.toArray(new TrafficEvent[events.size()]);
65        }
66
67        public int getSize()
68        {
69            return strings.length;
70        }
71
72        public String getElementAt(int i)
73        {
74            return strings[i].rawString;
75        }
76    }
77
78    /**
79     * This method is called from within the constructor to initialize the form.
80     * WARNING: Do NOT modify this code. The content of this method is always
81     * regenerated by the Form Editor.
82     */
83    @SuppressWarnings("unchecked")
84    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
85    private void initComponents()
86    {
87
88        pnlEvents = new javax.swing.JPanel();
89        scrollEvents = new javax.swing.JScrollPane();
90        lstEvents = new javax.swing.JList<>();
91        txtClockTime = new javax.swing.JLabel();
92        pnlIncidents = new javax.swing.JPanel();
93        jScrollPane1 = new javax.swing.JScrollPane();
94        lstIncidents = new javax.swing.JList<>();
95        btnClear = new javax.swing.JButton();
96
97        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
98        setTitle("Traffic Modeler");
99
100        lstEvents.setFont(new java.awt.Font("Noto Mono", 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        javax.swing.GroupLayout pnlEventsLayout = new javax.swing.GroupLayout(pnlEvents);
113        pnlEvents.setLayout(pnlEventsLayout);
114        pnlEventsLayout.setHorizontalGroup(
115            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
116            .addGroup(pnlEventsLayout.createSequentialGroup()
117                .addGroup(pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
118                    .addGroup(pnlEventsLayout.createSequentialGroup()
119                        .addGap(112, 112, 112)
120                        .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE))
121                    .addGroup(pnlEventsLayout.createSequentialGroup()
122                        .addContainerGap()
123                        .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE)))
124                .addContainerGap(20, Short.MAX_VALUE))
125        );
126        pnlEventsLayout.setVerticalGroup(
127            pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
128            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEventsLayout.createSequentialGroup()
129                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
130                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
131                .addComponent(scrollEvents, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
132                .addContainerGap())
133        );
134
135        lstIncidents.setFont(new java.awt.Font("Noto Mono", 0, 15)); // NOI18N
136        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
137        {
138            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
139            public int getSize() { return strings.length; }
140            public String getElementAt(int i) { return strings[i]; }
141        });
142        lstIncidents.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
143        jScrollPane1.setViewportView(lstIncidents);
144
145        btnClear.setText("Clear Incident");
146        btnClear.addActionListener(new java.awt.event.ActionListener()
147        {
148            public void actionPerformed(java.awt.event.ActionEvent evt)
149            {
150                btnClearActionPerformed(evt);
151            }
152        });
153
154        javax.swing.GroupLayout pnlIncidentsLayout = new javax.swing.GroupLayout(pnlIncidents);
155        pnlIncidents.setLayout(pnlIncidentsLayout);
156        pnlIncidentsLayout.setHorizontalGroup(
157            pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
158            .addGroup(pnlIncidentsLayout.createSequentialGroup()
159                .addGroup(pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
160                    .addComponent(btnClear)
161                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE))
162                .addGap(0, 0, Short.MAX_VALUE))
163        );
164        pnlIncidentsLayout.setVerticalGroup(
165            pnlIncidentsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
166            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlIncidentsLayout.createSequentialGroup()
167                .addContainerGap()
168                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
169                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
170                .addComponent(btnClear)
171                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
172        );
173
174        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
175        getContentPane().setLayout(layout);
176        layout.setHorizontalGroup(
177            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
178            .addGroup(layout.createSequentialGroup()
179                .addGap(1, 1, 1)
180                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
181                    .addGroup(layout.createSequentialGroup()
182                        .addGap(12, 12, 12)
183                        .addComponent(pnlIncidents, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
184                    .addComponent(pnlEvents, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
185                .addGap(0, 26, Short.MAX_VALUE))
186        );
187        layout.setVerticalGroup(
188            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
189            .addGroup(layout.createSequentialGroup()
190                .addComponent(pnlEvents, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
191                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
192                .addComponent(pnlIncidents, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
193                .addContainerGap())
194        );
195
196        pack();
197    }// </editor-fold>//GEN-END:initComponents
198
199    private void btnClearActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnClearActionPerformed
200    {//GEN-HEADEREND:event_btnClearActionPerformed
201        String selectedItem = lstIncidents.getSelectedValue();
202        if (selectedItem == null)
203        {
204            JOptionPane.showMessageDialog(this, "No Incident Selected", "Warning", JOptionPane.INFORMATION_MESSAGE);
205        }
206        else
207        {
208            System.out.println("Clicked Incident:" + selectedItem);
209            if (driver != null)
210            {
211                driver.clearIncident(selectedItem);
212            }
213            lstIncidents.clearSelection();
214            // Remove selectedItem from list model;
215            incidents.remove(selectedItem);
216            // Update the list displayed
217            String[] array = new String[incidents.size()];
218            array = incidents.toArray(array);
219            lstIncidents.setListData(array);
220        }
221    }//GEN-LAST:event_btnClearActionPerformed
222
223    /**
224     * @param args the command line arguments
225     */
226    public static void main(String args[])
227    {
228        /* Set the Nimbus look and feel */
229        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
230        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
231         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
232         */
233        try
234        {
235            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
236            {
237                if ("Nimbus".equals(info.getName()))
238                {
239                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
240                    break;
241                }
242            }
243        }
244        catch (ClassNotFoundException ex)
245        {
246            java.util.logging.Logger.getLogger(TrafficModelViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
247        }
248        catch (InstantiationException ex)
249        {
250            java.util.logging.Logger.getLogger(TrafficModelViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
251        }
252        catch (IllegalAccessException ex)
253        {
254            java.util.logging.Logger.getLogger(TrafficModelViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
255        }
256        catch (javax.swing.UnsupportedLookAndFeelException ex)
257        {
258            java.util.logging.Logger.getLogger(TrafficModelViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
259        }
260        //</editor-fold>
261        //</editor-fold>
262        //</editor-fold>
263        //</editor-fold>
264
265        /* Create and display the form */
266        java.awt.EventQueue.invokeLater(new Runnable()
267        {
268            public void run()
269            {
270                try
271                {
272                    TrafficEvent alpha = new TrafficEvent("181 00:01:30 405 S 0.6 11.0 G");
273                    TrafficEvent beta = new TrafficEvent("183 00:12:30 405 S 0.6 11.0 G");
274                    TrafficEvent charly = new TrafficEvent("181 00:22:00 5 S 0.6 11.0 G");
275                    LinkedList<TrafficEvent> sample = new LinkedList<TrafficEvent>();
276                    sample.add(alpha);
277                    sample.add(beta);
278                    List<String> items = new ArrayList<String>();
279                    items.add("180");
280                    items.add("1291");
281                    TrafficModelViewer view = new TrafficModelViewer(null, items);
282                    view.setVisible(true);
283                    view.update("01", "02", sample);
284                }
285                catch (ParseException ex)
286                {
287                    Logger.getLogger(TrafficModelViewer.class.getName()).log(Level.SEVERE, null, ex);
288                }
289
290            }
291        });
292    }
293
294    // Variables declaration - do not modify//GEN-BEGIN:variables
295    private javax.swing.JButton btnClear;
296    private javax.swing.JScrollPane jScrollPane1;
297    private javax.swing.JList<String> lstEvents;
298    private javax.swing.JList<String> lstIncidents;
299    private javax.swing.JPanel pnlEvents;
300    private javax.swing.JPanel pnlIncidents;
301    private javax.swing.JScrollPane scrollEvents;
302    private javax.swing.JLabel txtClockTime;
303    // End of variables declaration//GEN-END:variables
304}
Note: See TracBrowser for help on using the repository browser.