source: tmcsimulator/trunk/src/tmcsim/client/cadclientgui/data/CADData.java @ 3

Revision 3, 12.7 KB checked in by jdalbey, 10 years ago (diff)

Initial Import of project files - cadclientgui

Line 
1package tmcsim.client.cadclientgui.data;
2
3import java.awt.event.ActionEvent;
4import java.awt.event.ActionListener;
5import java.io.Serializable;
6import java.rmi.RemoteException;
7import java.rmi.server.UnicastRemoteObject;
8import java.util.Collections;
9import java.util.Vector;
10
11import javax.swing.Timer;
12import javax.swing.table.DefaultTableModel;
13import javax.swing.table.TableColumn;
14import javax.swing.table.TableColumnModel;
15
16import tmcsim.client.cadclientgui.enums.IncidentEnums;
17import tmcsim.client.cadclientgui.enums.TableHeaders;
18import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
19import tmcsim.interfaces.CADClientInterface;
20
21/**
22 * This class holds the data for all the units and incidents. It is responsible
23 * for sending out data to all the screens.
24 *
25 * @author Vincent
26 *
27 */
28public class CADData implements Serializable {
29
30    private final int ONE_SECOND = 1000;
31
32    private static Vector<Unit> units;
33    private static Vector<Incident> incidents;
34    private static Vector<String> assignedIncidentsHeaders;
35    private static Vector<String> unitStatusHeaders;
36    private static Vector<String> pendingIncidentsHeaders;
37    private static Vector<String> incidentEditorHeaders;
38    private static Vector<Object> toUnitTableVector;
39    private static Vector<Object> toPendingTableVector;
40    private static Vector<Object> toAssignedTableVector;
41    private static Vector<Object> toIncidentEditorVector;
42    private static Vector<Object> toCommentsNotesVector;
43    private static DefaultTableModel pendingIncidentsTableModel;
44    private static DefaultTableModel unitStatusTableModel;
45    private static DefaultTableModel assignedIncidentsTableModel;
46    private static DefaultTableModel incidentEditorModel;
47
48    public CADData() {
49        units = new Vector<Unit>();
50        incidents = new Vector<Incident>();
51
52        toUnitTableVector = new Vector<Object>();
53        toPendingTableVector = new Vector<Object>();
54        toAssignedTableVector = new Vector<Object>();
55        toIncidentEditorVector = new Vector<Object>();
56        toCommentsNotesVector = new Vector<Object>();
57        assignedIncidentsHeaders = new Vector<String>();
58        pendingIncidentsHeaders = new Vector<String>();
59        unitStatusHeaders = new Vector<String>();
60        incidentEditorHeaders = new Vector<String>();
61        initializeAssignedIncidentsSettings();
62        initializeUnitStatusSettings();
63        initializePendingIncidentsSettings();
64        initializeIncidentEditorSettings();
65
66        handleUpdateTimes();
67    }
68   
69    public void clearData(){
70        units = new Vector<Unit>();
71        incidents = new Vector<Incident>();
72    }
73   
74    public void resetSimulation(){
75        for(Incident inc : incidents){
76            inc.resetCADDataSimulation();
77        }
78        for(Unit unit : units){
79            unit.resetCADDataSimulation();
80        }
81    }
82
83    private void initializeAssignedIncidentsSettings() {
84        Collections
85                .addAll(assignedIncidentsHeaders, TableHeaders.ASSIGNED_INCIDENTS_HEADERS);
86        assignedIncidentsTableModel = new DefaultTableModel() {
87            public boolean isCellEditable(int row, int column) {
88                return false;// This causes all cells to be not editable
89            }
90        };
91        assignedIncidentsTableModel
92                .setColumnIdentifiers(TableHeaders.ASSIGNED_INCIDENTS_HEADERS);
93    }
94
95    private void initializeUnitStatusSettings() {
96        Collections.addAll(unitStatusHeaders, TableHeaders.UNIT_STATUS_HEADERS);
97        unitStatusTableModel = new DefaultTableModel() {
98            public boolean isCellEditable(int row, int column) {
99                return false;// This causes all cells to be not editable
100            }
101        };
102        unitStatusTableModel.setColumnIdentifiers(TableHeaders.UNIT_STATUS_HEADERS);
103    }
104
105    private void initializeIncidentEditorSettings() {
106        Collections.addAll(incidentEditorHeaders, TableHeaders.INCIDENT_EDITOR_HEADERS);
107        incidentEditorModel = new DefaultTableModel() {
108            public boolean isCellEditable(int row, int column) {
109                return false;// This causes all cells to be not editable
110            }
111        };
112        incidentEditorModel.setColumnIdentifiers(TableHeaders.INCIDENT_EDITOR_HEADERS);
113    }
114
115    private void initializePendingIncidentsSettings() {
116        Collections.addAll(pendingIncidentsHeaders, TableHeaders.PENDING_INCIDENTS_HEADERS);
117        pendingIncidentsTableModel = new DefaultTableModel() {
118            public boolean isCellEditable(int row, int column) {
119                return false;// This causes all cells to be not editable
120            }
121        };
122        pendingIncidentsTableModel
123                .setColumnIdentifiers(TableHeaders.PENDING_INCIDENTS_HEADERS);
124    }
125
126    /**
127     * Obtains the list of units from the XML.
128     *
129     * @param unit
130     *            the new list of units.
131     */
132    public void setUnitsFromXML(Vector<Unit> unit) {
133        units = unit;
134    }
135
136    /**
137     * Obtains the list of incidents from the XML.
138     *
139     * @param incident
140     *            the new list of incidents.
141     */
142    public void setIncidentsFromXML(Vector<Incident> incident) {
143        incidents = incident;
144    }
145
146    /**
147     * Returns the specified unitNum
148     */
149    public Unit getUnit(String unitNum) {
150        for (int i = 0; i < units.size(); i++) {
151            if (units.get(i).getUnitNum().equals(unitNum)) {
152                return units.get(i);
153            }
154        }
155        return null;
156    }
157
158    /**
159     * Check if it contains an incident with the specified Id.
160     */
161    public boolean checkForValidId(int incidentId) {
162        for (int i = 0; i < incidents.size(); i++) {
163            if (incidents.get(i).getLogNum() == incidentId) {
164                return true;
165            }
166        }
167        return false;
168    }
169
170    /**
171     * Uses an Incident's masterInc to look up its corresponding ID.
172     *
173     * @param masterInc
174     *            the Incident's masterInc
175     * @return the Incident's ID, -1 if invalid masterInc
176     */
177    public int getIncidentId(String masterInc) {
178        for (int i = 0; i < incidents.size(); i++) {
179            if (incidents.get(i).getMasterInc().equals(masterInc)) {
180                return incidents.get(i).getLogNum();
181            }
182        }
183        return -1;
184    }
185
186    /**
187     * Returns the specified incident
188     */
189    public Incident getIncident(int incidentId) {
190        for (int i = 0; i < incidents.size(); i++) {
191            if (incidents.get(i).getLogNum() == incidentId) {
192                return incidents.get(i);
193            }
194        }
195        return null;
196    }
197
198    /**
199     * Sends all the objects for UnitStatus
200     *
201     * @return DefaultTableModel for UnitStatus
202     */
203    public DefaultTableModel tableForUnitStatus() {
204        toUnitTableVector.clear();
205        for (int i = 0; i < units.size(); i++) {
206            toUnitTableVector.add(units.get(i).toVector());
207        }
208        unitStatusTableModel
209                .setDataVector(toUnitTableVector, unitStatusHeaders);
210        return unitStatusTableModel;
211    }
212
213    /**
214     * Sends all the objects for AssignedIncidents
215     *
216     * @return DefaultTableModel for AssignedIncidents
217     */
218    public DefaultTableModel tableForAssignedIncidents() {
219        toAssignedTableVector.clear();
220        for (int i = 0; i < incidents.size(); i++) {
221            if (incidents.get(i).hasOccured()
222                    && incidents.get(i).getIncidentStatus() == IncidentEnums.Assigned) {
223                toAssignedTableVector.add(incidents.get(i)
224                        .toVectorForAssignedIncidents());
225            }
226        }
227        assignedIncidentsTableModel.setDataVector(toAssignedTableVector,
228                assignedIncidentsHeaders);
229        return assignedIncidentsTableModel;
230    }
231
232    /**
233     * Sends all the objects for PendingIncidents
234     *
235     * @return DefaultTableModel for PendingIncidents
236     */
237    public DefaultTableModel tableForPendingIncidents() {
238        toPendingTableVector.clear();
239        for (int i = 0; i < incidents.size(); i++) {
240            if (incidents.get(i).hasOccured()
241                    && incidents.get(i).getIncidentStatus() == IncidentEnums.Pending) {
242                toPendingTableVector.add(incidents.get(i)
243                        .toVectorForPendingIncidents());
244            }
245        }
246        pendingIncidentsTableModel.setDataVector(toPendingTableVector,
247                pendingIncidentsHeaders);
248        return pendingIncidentsTableModel;
249    }
250
251    /**
252     * Sends all the objects for IncidentEditor
253     *
254     * @return DefaultTableModel for IncidentEditor
255     */
256    public DefaultTableModel tableForIncidentEditor() {
257        toIncidentEditorVector.clear();
258        for (int i = 0; i < incidents.size(); i++) {
259            if (incidents.get(i).hasOccured()) {
260                toIncidentEditorVector.add(incidents.get(i)
261                        .toVectorForIncidentEditor());
262            }
263        }
264        incidentEditorModel.setDataVector(toIncidentEditorVector,
265                incidentEditorHeaders);
266        return incidentEditorModel;
267    }
268
269    /**
270     * Sets up a timer to subtract one from the unit's timer every second.
271     */
272    public void handleUpdateTimes() {
273        Timer timer = new Timer(ONE_SECOND, new ActionListener() {
274            public void actionPerformed(ActionEvent e) {
275                for (int i = 0; i < units.size(); i++) {
276                    units.get(i).TimerMinusSecond();
277                }
278            }
279        });
280        timer.start();
281    }
282   
283    /**
284     * Assigns the specified unit to the specified incident and updates information in both screens
285     * @param unitNum the unit being assigned
286     * @param incidentNum the incident being assigned to
287     * @param primary whether or not the assigned unit is the primary unit
288     */
289   
290    public void unitAssignedToIncident(String unitNum, int incidentNum, boolean primary){
291        if(primary){
292            getIncident(incidentNum).setPrimaryAssignedUnitNum(unitNum);
293            getIncident(incidentNum).setIncidentStatus(IncidentEnums.Assigned);
294        }else{
295            getIncident(incidentNum).addAssignedUnitNum(unitNum);
296        }
297           
298        getUnit(unitNum).setAssignedIncidentId(incidentNum);
299        getUnit(unitNum).setMasterInc(getIncident(incidentNum).getMasterInc());
300        getUnit(unitNum).setStatus("ENRT");
301        getUnit(unitNum).setUnitStatus(UnitStatusEnums.Enroute);
302        getUnit(unitNum).setType(getIncident(incidentNum).getAdditionalInfo().getType());
303        getUnit(unitNum).setDestination(getIncident(incidentNum).getIncidentLocation().getAddress());
304        getUnit(unitNum).setArea(getIncident(incidentNum).getIncidentLocation().getArea()); 
305        getUnit(unitNum).setP(getIncident(incidentNum).getP());
306    }
307   
308    /**
309     * Updates information in both incident and unit screens for when a unit has arrived at scene
310     * aka that the unit status is "10-97"
311     * @param unitNum the unit which arrived at the scene
312     */
313    public void unitArrivedAtIncidentScene(String unitNum, int incidentNum, boolean primary){
314        if(getUnit(unitNum).getAssignedIncidentId() != incidentNum){
315            if(primary){
316                getIncident(incidentNum).setPrimaryAssignedUnitNum(unitNum);
317                getIncident(incidentNum).setIncidentStatus(IncidentEnums.Assigned);
318            }else{
319                getIncident(incidentNum).addAssignedUnitNum(unitNum);
320            }
321            getUnit(unitNum).setAssignedIncidentId(incidentNum);
322            getUnit(unitNum).setMasterInc(getIncident(incidentNum).getMasterInc());
323            getUnit(unitNum).setType(getIncident(incidentNum).getAdditionalInfo().getType());
324            getUnit(unitNum).setDestination(getIncident(incidentNum).getIncidentLocation().getAddress());
325            getUnit(unitNum).setArea(getIncident(incidentNum).getIncidentLocation().getArea()); 
326            getUnit(unitNum).setP(getIncident(incidentNum).getP());
327        }
328        getUnit(unitNum).setStatus("10-97");
329        getUnit(unitNum).setUnitStatus(UnitStatusEnums.Arrived);
330        getUnit(unitNum).setCurrentLocation(getUnit(unitNum).getDestination());
331    }
332   
333    /**
334     * Updates information in both incident and unit screens for when a unit has become available again
335     * aka that the unit status is "10-98"
336     * @param unitNum the unit which arrived at the scene
337     */
338    public void unitAvailable(String unitNum){
339        getIncident(getUnit(unitNum).getAssignedIncidentId()).removeAssignedUnitNum(unitNum);
340       
341        getUnit(unitNum).setStatus("10-98");
342        getUnit(unitNum).setUnitStatus(UnitStatusEnums.Assignable);
343        getUnit(unitNum).setAssignedIncidentId(-1);
344        getUnit(unitNum).setMasterInc("");
345        getUnit(unitNum).setType("");
346        getUnit(unitNum).setDestination("");
347        getUnit(unitNum).setP("");
348       
349    }
350}
Note: See TracBrowser for help on using the repository browser.