Index: trunk/src/tmcsim/cadsimulator/managers/TrafficModelManager.java
===================================================================
--- trunk/src/tmcsim/cadsimulator/managers/TrafficModelManager.java	(revision 204)
+++ trunk/src/tmcsim/cadsimulator/managers/TrafficModelManager.java	(revision 206)
@@ -18,6 +18,8 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Observable;
 import java.util.Properties;
 import java.util.Scanner;
+import java.util.Vector;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
@@ -38,5 +40,5 @@
  * @version 2.0
  */
-public class TrafficModelManager
+public class TrafficModelManager extends Observable
 {
     private final static int ONE_SECOND = 1000;
@@ -89,7 +91,12 @@
 
     /**
+     * Current simulation clock time
+     */
+    private String currentClock = "";
+    
+    /**
      * GUI for this driver
      */
-    private TrafficModelViewer theView;
+    //private TrafficModelViewer theView;
     
     /**
@@ -111,26 +118,7 @@
                 props.getProperty(PROPERTIES.FEPSIM_IP_ADDR.name),
                 8080); 
-
-        // Read the text file of events and put in a queue
-        FileInputStream fis = null;
-        try
-        {
-            fis = new FileInputStream(props.getProperty(PROPERTIES.EVENTS_FILE.name));
-        } catch (FileNotFoundException ex)
-        {
-            Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, 
-                    "Missing Traffic Events file " + props.getProperty(PROPERTIES.EVENTS_FILE.name));
-            System.exit(-1);
-        }
-        // Read all lines from the file of events
-        Scanner fileScanner = new Scanner(fis);        
-        eventQueue = readBatchFile(fileScanner);
-        // Extract the incidents and create a map
-        incidents = createIncidentMap(eventQueue);
-        // Launch the GUI display
-        theView = new TrafficModelViewer(this, new ArrayList<String>(incidents.keySet()));
-        theView.setVisible(true);
-        theView.update("0:00", "1:11", eventQueue);
-
+        
+        loadEvents();
+        
         // Create a timer that fetches the simulation time every second.
         Timer timer = new Timer(ONE_SECOND, new ActionListener()
@@ -139,5 +127,4 @@
             public void actionPerformed(ActionEvent e)
             {
-                String currentClock = "";
                 String currentATMStime = "";
                 Date simClock = new Date();
@@ -184,7 +171,9 @@
                         // Remove this event from the queue, we're done with it.
                         eventQueue.remove();
-                    }
-
-                    theView.update(currentClock, currentATMStime, eventQueue);
+                        setChanged();
+                        notifyObservers(getEventQueue());
+                    }
+                    setChanged();
+                    notifyObservers(currentClock);
                 }
             }
@@ -205,5 +194,45 @@
         
     }
-
+    /** Accessor to event queue
+     * 
+     * @return defensive copy of current queue of events
+     */
+    public LinkedList<TrafficEvent> getEventQueue()
+    {
+        return new LinkedList<TrafficEvent>(eventQueue);
+    }
+    public Vector<String> getIncidents()
+    {
+        return new Vector<String>(incidents.keySet());
+    }
+    public String getClockTime()
+    {
+        return currentClock;
+    }
+    public void loadEvents()
+    {
+        // Read the text file of events and put in a queue
+        FileInputStream fis = null;
+        try
+        {
+            fis = new FileInputStream(props.getProperty(PROPERTIES.EVENTS_FILE.name));
+        } catch (FileNotFoundException ex)
+        {
+            Logger.getLogger(TrafficModelManager.class.getName()).log(Level.SEVERE, null, 
+                    "Missing Traffic Events file " + props.getProperty(PROPERTIES.EVENTS_FILE.name));
+            System.exit(-1);
+        }
+        // Read all lines from the file of events
+        Scanner fileScanner = new Scanner(fis);        
+        eventQueue = readBatchFile(fileScanner);
+        // Extract the incidents and create a map
+        incidents = createIncidentMap(eventQueue);
+        setChanged();
+        notifyObservers("-:--");
+        setChanged();
+        notifyObservers(getIncidents());
+        setChanged();
+        notifyObservers(getEventQueue());
+    }
     /**
      * This method verifies that the needed configuration properties are not
@@ -327,6 +356,10 @@
 
         }
+        incidents.remove(incidentNumber);
         // Now refresh the view with the updated queue of events
-        theView.update("0:00", "0:00", eventQueue);
+        setChanged();
+        notifyObservers(getEventQueue());
+        setChanged();
+        notifyObservers(getIncidents());
     }
 
@@ -363,7 +396,9 @@
         {
             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-            new TrafficModelManager(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + CONFIG_FILE_NAME,
+            TrafficModelManager mgr = new TrafficModelManager(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + CONFIG_FILE_NAME,                    
             theCoordinator);
-
+            TrafficModelViewer view = new TrafficModelViewer(mgr);
+            view.setVisible(true);
+            mgr.addObserver(view);
         }
         catch (Exception e)
Index: trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.java
===================================================================
--- trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.java	(revision 188)
+++ trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.java	(revision 206)
@@ -7,4 +7,7 @@
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Vector;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -16,5 +19,5 @@
  * @author jdalbey
  */
-public class TrafficModelViewer extends javax.swing.JFrame
+public class TrafficModelViewer extends javax.swing.JFrame implements Observer
 {
 
@@ -23,5 +26,5 @@
      */
     private TrafficModelManager driver;
-    private final List<String> incidents;
+    private List<String> incidents;
 
     /**
@@ -30,27 +33,50 @@
      * @param incidents a list of incidents to show in a list.
      */
-    public TrafficModelViewer(TrafficModelManager driver, List<String> incidentList)
+    public TrafficModelViewer(TrafficModelManager driver)
     {
         initComponents();
         this.driver = driver;
-        this.incidents = incidentList;
-        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
-        {
-            public int getSize()
-            {
-                return incidents.size();
-            }
-
-            public String getElementAt(int i)
-            {
-                return incidents.get(i);
-            }
-        });
+            txtClockTime.setText(driver.getClockTime());
+            lstIncidents.setListData(driver.getIncidents());
+            lstEvents.setModel(new MyListModel(driver.getEventQueue()));
+        
+//        this.incidents = incidentList;
+//        lstIncidents.setModel(new javax.swing.AbstractListModel<String>()
+//        {
+//            public int getSize()
+//            {
+//                return incidents.size();
+//            }
+//
+//            public String getElementAt(int i)
+//            {
+//                return incidents.get(i);
+//            }
+//        });
     }
 
-    public void update(String currentTime, String atmsTime, List<TrafficEvent> events)
-    {
-        lstEvents.setModel(new MyListModel(events));
-        txtClockTime.setText(currentTime + " / " + atmsTime);
+//    public void update(String currentTime, String atmsTime, List<TrafficEvent> events)
+//    {
+//        lstEvents.setModel(new MyListModel(events));
+//        txtClockTime.setText(currentTime + " / " + atmsTime);
+//    }
+
+    @Override
+    public void update(Observable obs, Object obj)
+    {
+        if (obj == null) return;
+        if (obj instanceof String)
+        {
+            String currentTime = (String) obj;
+            txtClockTime.setText(currentTime);
+        }
+        if (obj instanceof Vector)
+        {
+            lstIncidents.setListData((Vector)obj);
+        }
+        if (obj instanceof LinkedList)
+        {
+            lstEvents.setModel(new MyListModel((LinkedList)obj));
+        }
     }
 
@@ -90,4 +116,5 @@
         lstEvents = new javax.swing.JList<>();
         txtClockTime = new javax.swing.JLabel();
+        btnReload = new javax.swing.JButton();
         pnlIncidents = new javax.swing.JPanel();
         jScrollPane1 = new javax.swing.JScrollPane();
@@ -109,4 +136,13 @@
         txtClockTime.setFont(new java.awt.Font("Noto Sans", 1, 14)); // NOI18N
         txtClockTime.setText("0:00:00");
+
+        btnReload.setText("Reload");
+        btnReload.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                btnReloadActionPerformed(evt);
+            }
+        });
 
         javax.swing.GroupLayout pnlEventsLayout = new javax.swing.GroupLayout(pnlEvents);
@@ -115,17 +151,20 @@
             pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(pnlEventsLayout.createSequentialGroup()
-                .addGroup(pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(pnlEventsLayout.createSequentialGroup()
-                        .addGap(112, 112, 112)
-                        .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addGroup(pnlEventsLayout.createSequentialGroup()
-                        .addContainerGap()
-                        .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap()
+                .addComponent(scrollEvents, javax.swing.GroupLayout.PREFERRED_SIZE, 430, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addContainerGap(20, Short.MAX_VALUE))
+            .addGroup(pnlEventsLayout.createSequentialGroup()
+                .addGap(112, 112, 112)
+                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(btnReload)
+                .addGap(32, 32, 32))
         );
         pnlEventsLayout.setVerticalGroup(
             pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlEventsLayout.createSequentialGroup()
-                .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(pnlEventsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(txtClockTime, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(btnReload))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(scrollEvents, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
@@ -213,12 +252,24 @@
             lstIncidents.clearSelection();
             // Remove selectedItem from list model;
-            incidents.remove(selectedItem);
+//            incidents.remove(selectedItem);
             // Update the list displayed
-            String[] array = new String[incidents.size()];
-            array = incidents.toArray(array);
-            lstIncidents.setListData(array);
+//            String[] array = new String[incidents.size()];
+//            array = incidents.toArray(array);
+//            lstIncidents.setListData(array);
         }
     }//GEN-LAST:event_btnClearActionPerformed
 
+    private void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed
+    {//GEN-HEADEREND:event_btnReloadActionPerformed
+        String message = "Reload will delete all events in the queue and reload the events file.";
+        String title = "Please Confirm";
+        // display the JOptionPane showConfirmDialog
+        int reply = JOptionPane.showConfirmDialog(this, message, title, JOptionPane.YES_NO_OPTION);
+        if (reply == JOptionPane.YES_OPTION)
+        {
+            driver.loadEvents();
+        }
+    }//GEN-LAST:event_btnReloadActionPerformed
+    
     /**
      * @param args the command line arguments
@@ -279,7 +330,7 @@
                     items.add("180");
                     items.add("1291");
-                    TrafficModelViewer view = new TrafficModelViewer(null, items);
+                    TrafficModelViewer view = new TrafficModelViewer(null);
                     view.setVisible(true);
-                    view.update("01", "02", sample);
+                    //view.update("01", "02", sample);
                 }
                 catch (ParseException ex)
@@ -294,4 +345,5 @@
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton btnClear;
+    private javax.swing.JButton btnReload;
     private javax.swing.JScrollPane jScrollPane1;
     private javax.swing.JList<String> lstEvents;
Index: trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.form
===================================================================
--- trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.form	(revision 188)
+++ trunk/src/tmcsim/cadsimulator/managers/TrafficModelViewer.form	(revision 206)
@@ -56,15 +56,14 @@
           <Group type="103" groupAlignment="0" attributes="0">
               <Group type="102" attributes="0">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" attributes="0">
-                          <EmptySpace min="-2" pref="112" max="-2" attributes="0"/>
-                          <Component id="txtClockTime" min="-2" pref="225" max="-2" attributes="0"/>
-                      </Group>
-                      <Group type="102" alignment="0" attributes="0">
-                          <EmptySpace max="-2" attributes="0"/>
-                          <Component id="scrollEvents" min="-2" pref="430" max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="scrollEvents" min="-2" pref="430" max="-2" attributes="0"/>
                   <EmptySpace pref="20" max="32767" attributes="0"/>
+              </Group>
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace min="-2" pref="112" max="-2" attributes="0"/>
+                  <Component id="txtClockTime" min="-2" pref="225" max="-2" attributes="0"/>
+                  <EmptySpace max="32767" attributes="0"/>
+                  <Component id="btnReload" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace min="-2" pref="32" max="-2" attributes="0"/>
               </Group>
           </Group>
@@ -73,5 +72,8 @@
           <Group type="103" groupAlignment="0" attributes="0">
               <Group type="102" alignment="1" attributes="0">
-                  <Component id="txtClockTime" min="-2" pref="28" max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="txtClockTime" alignment="3" min="-2" pref="28" max="-2" attributes="0"/>
+                      <Component id="btnReload" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
                   <EmptySpace max="-2" attributes="0"/>
                   <Component id="scrollEvents" pref="172" max="32767" attributes="0"/>
@@ -114,4 +116,12 @@
             <Property name="text" type="java.lang.String" value="0:00:00"/>
           </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="btnReload">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Reload"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnReloadActionPerformed"/>
+          </Events>
         </Component>
       </SubComponents>
