source: tmcsimulator/trunk/src/tmcsim/client/ATMSBatchViewer.java @ 183

Revision 183, 12.6 KB checked in by jdalbey, 9 years ago (diff)

ATMSBatchDriver.java Enhanced to automatically sort events chronologically (using new class TrafficEvent?).

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