source: tmcsimulator-scriptbuilder/trunk/src/scriptbuilder/gui/IncidentPaletteFrame.java @ 73

Revision 73, 14.8 KB checked in by bmcguffin, 9 years ago (diff)

Updated details in incident editor window allowing editor to more accurately reflect details in the incident.

Line 
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6package scriptbuilder.gui;
7
8import java.awt.GridLayout;
9import java.io.File;
10import java.io.FileFilter;
11import java.text.SimpleDateFormat;
12import java.time.LocalDate;
13import java.util.ArrayList;
14import java.util.Date;
15import java.util.TimeZone;
16import javax.swing.JPanel;
17import javax.swing.JScrollPane;
18import javax.swing.JViewport;
19import scriptbuilder.gui.panels.IncidentPaletteAddPanel;
20import scriptbuilder.structures.*;
21
22/**
23 *
24 * @author Bryan McGuffin
25 */
26public class IncidentPaletteFrame extends javax.swing.JFrame
27{
28
29    private SimulationScript script;
30
31    private SimulationScript dummyScript;
32
33    public ArrayList<ScriptIncident> incidentList;
34
35    JPanel panelAdd;
36
37    /**
38     * Creates new form IncidentPaletteFrame
39     */
40    public IncidentPaletteFrame(SimulationScript s)
41    {
42        script = s;
43
44        panelAdd = new JPanel();
45
46        dummyScript = new SimulationScript();
47
48        incidentList = new ArrayList<ScriptIncident>();
49
50        panelAdd.setLayout(new GridLayout(0, 1));
51
52        initComponents();
53
54        incidentList = loadIncidentsFromFiles("Incidents");
55
56        recalculateList();
57
58    }
59
60    private ArrayList<ScriptIncident> loadIncidentsFromFiles(String directoryName)
61    {
62
63        ArrayList<ScriptIncident> newList = new ArrayList<ScriptIncident>();
64        File folder = new File(directoryName);
65
66        File[] incidentFiles;
67
68        ExtensionFileFilter filter = new ExtensionFileFilter("Script Incident (.xml)", new String[]
69        {
70            "xml"
71        });
72
73        incidentFiles = folder.listFiles();
74
75        for (File file : incidentFiles)
76        {
77            if (filter.accept(file))
78            {
79                dummyScript = new SimulationScript();
80                dummyScript.loadScriptFromFile(file);
81
82                newList.add(dummyScript.incidents.get(0));
83            }
84        }
85
86        return newList;
87    }
88
89    private ArrayList<ScriptIncident> filterIncidentsInScript(ArrayList<ScriptIncident> list)
90    {
91        ArrayList<ScriptIncident> newList = new ArrayList<ScriptIncident>();
92
93        for (ScriptIncident inc : list)
94        {
95            if (!scriptContainsLogNum(script, inc.number))
96            {
97                newList.add(inc);
98            }
99        }
100
101        return newList;
102    }
103
104    private boolean scriptContainsLogNum(SimulationScript script, int num)
105    {
106        for (ScriptIncident incident : script.incidents)
107        {
108            if (incident != null && incident.number == num)
109            {
110                return true;
111            }
112        }
113
114        return false;
115    }
116
117    private void loadPanels(ArrayList<ScriptIncident> incList)
118    {
119        scrollAddPanels.setViewport(new JViewport());
120        panelAdd.removeAll();
121        labelFileCount.setText("Found " + incList.size() + " available incidents.");
122        for (ScriptIncident inc : incList)
123        {
124
125            panelAdd.add(new IncidentPaletteAddPanel(inc, this));
126        }
127        scrollAddPanels.getViewport().add(panelAdd);
128    }
129
130    private void recalculateList()
131    {
132
133        incidentList = filterIncidentsInScript(incidentList);
134        loadPanels(incidentList);
135        getCurrentlyLoadedIncidents();
136    }
137
138    public void addIncidentToScript(IncidentPaletteAddPanel incPanel)
139    {
140        if (script.addIncident(incPanel.incident))
141        {
142            recalculateList();
143        }
144    }
145
146    private void getCurrentlyLoadedIncidents()
147    {
148        tableCurrentIncidents.removeAll();
149        int currentRow = 0;
150        for (ScriptIncident inc : script.incidents)
151        {
152            if (inc != null)
153            {
154                SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
155                df.setTimeZone(TimeZone.getTimeZone("GMT"));
156                String incStart = df.format(new Date(inc.offset * 1000));
157                tableCurrentIncidents.getModel().setValueAt(inc.number, currentRow, 0);
158                tableCurrentIncidents.getModel().setValueAt(incStart, currentRow, 1);
159                tableCurrentIncidents.getModel().setValueAt(inc.name, currentRow, 2);
160                currentRow++;
161            }
162        }
163        labelIncidentCount.setText(currentRow + " incidents currently in script.");
164    }
165
166    /**
167     * This method is called from within the constructor to initialize the form.
168     * WARNING: Do NOT modify this code. The content of this method is always
169     * regenerated by the Form Editor.
170     */
171    @SuppressWarnings("unchecked")
172    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
173    private void initComponents()
174    {
175
176        jPanel1 = new javax.swing.JPanel();
177        btnCreateIncident = new javax.swing.JButton();
178        txtSearchFilter = new javax.swing.JTextField();
179        jPanel2 = new javax.swing.JPanel();
180        jScrollPane2 = new javax.swing.JScrollPane();
181        tableCurrentIncidents = new javax.swing.JTable();
182        labelIncidentCount = new javax.swing.JLabel();
183        scrollAddPanels = new javax.swing.JScrollPane();
184        jPanel3 = new javax.swing.JPanel();
185        btnClosePalette = new javax.swing.JButton();
186        labelFileCount = new javax.swing.JLabel();
187
188        btnCreateIncident.setText("Create New...");
189        btnCreateIncident.addActionListener(new java.awt.event.ActionListener()
190        {
191            public void actionPerformed(java.awt.event.ActionEvent evt)
192            {
193                btnCreateIncidentActionPerformed(evt);
194            }
195        });
196
197        txtSearchFilter.setText("Search...");
198
199        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
200        jPanel1.setLayout(jPanel1Layout);
201        jPanel1Layout.setHorizontalGroup(
202            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
203            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
204                .addContainerGap()
205                .addComponent(txtSearchFilter)
206                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
207                .addComponent(btnCreateIncident, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
208                .addGap(23, 23, 23))
209        );
210        jPanel1Layout.setVerticalGroup(
211            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
212            .addGroup(jPanel1Layout.createSequentialGroup()
213                .addContainerGap()
214                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
215                    .addComponent(txtSearchFilter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
216                    .addComponent(btnCreateIncident))
217                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
218        );
219
220        tableCurrentIncidents.setModel(new javax.swing.table.DefaultTableModel(
221            new Object [][]
222            {
223                {null, null, null},
224                {null, null, null},
225                {null, null, null},
226                {null, null, null},
227                {null, null, null},
228                {null, null, null},
229                {null, null, null},
230                {null, null, null},
231                {null, null, null},
232                {null, null, null},
233                {null, null, null}
234            },
235            new String []
236            {
237                "Incident #", "Start Time", "Title"
238            }
239        )
240        {
241            Class[] types = new Class []
242            {
243                java.lang.Integer.class, java.lang.String.class, java.lang.String.class
244            };
245            boolean[] canEdit = new boolean []
246            {
247                false, false, false
248            };
249
250            public Class getColumnClass(int columnIndex)
251            {
252                return types [columnIndex];
253            }
254
255            public boolean isCellEditable(int rowIndex, int columnIndex)
256            {
257                return canEdit [columnIndex];
258            }
259        });
260        tableCurrentIncidents.setToolTipText("");
261        tableCurrentIncidents.getTableHeader().setReorderingAllowed(false);
262        jScrollPane2.setViewportView(tableCurrentIncidents);
263
264        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
265        jPanel2.setLayout(jPanel2Layout);
266        jPanel2Layout.setHorizontalGroup(
267            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
268            .addGroup(jPanel2Layout.createSequentialGroup()
269                .addContainerGap()
270                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
271                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
272                .addComponent(labelIncidentCount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
273                .addContainerGap())
274        );
275        jPanel2Layout.setVerticalGroup(
276            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
277            .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
278            .addComponent(labelIncidentCount, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
279        );
280
281        scrollAddPanels.setMaximumSize(new java.awt.Dimension(99999, 99999));
282        scrollAddPanels.setMinimumSize(new java.awt.Dimension(566, 387));
283        scrollAddPanels.setPreferredSize(new java.awt.Dimension(566, 387));
284
285        btnClosePalette.setText("Done");
286        btnClosePalette.addActionListener(new java.awt.event.ActionListener()
287        {
288            public void actionPerformed(java.awt.event.ActionEvent evt)
289            {
290                btnClosePaletteActionPerformed(evt);
291            }
292        });
293
294        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
295        jPanel3.setLayout(jPanel3Layout);
296        jPanel3Layout.setHorizontalGroup(
297            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
298            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
299                .addContainerGap()
300                .addComponent(labelFileCount, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
301                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
302                .addComponent(btnClosePalette)
303                .addContainerGap())
304        );
305        jPanel3Layout.setVerticalGroup(
306            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
307            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
308                .addComponent(btnClosePalette)
309                .addComponent(labelFileCount))
310        );
311
312        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
313        getContentPane().setLayout(layout);
314        layout.setHorizontalGroup(
315            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
316            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
317            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
318            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
319            .addGroup(layout.createSequentialGroup()
320                .addContainerGap()
321                .addComponent(scrollAddPanels, javax.swing.GroupLayout.DEFAULT_SIZE, 687, Short.MAX_VALUE)
322                .addContainerGap())
323        );
324        layout.setVerticalGroup(
325            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
326            .addGroup(layout.createSequentialGroup()
327                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
328                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
329                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
330                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
331                .addComponent(scrollAddPanels, javax.swing.GroupLayout.DEFAULT_SIZE, 437, Short.MAX_VALUE)
332                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
333                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
334        );
335
336        pack();
337    }// </editor-fold>//GEN-END:initComponents
338
339    private void btnCreateIncidentActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnCreateIncidentActionPerformed
340    {//GEN-HEADEREND:event_btnCreateIncidentActionPerformed
341        int newLogNum = 100;
342        boolean found = false;
343        while (!found)
344        {
345            newLogNum++;
346            if (!scriptContainsLogNum(script, newLogNum))
347            {
348                found = true;
349                for (ScriptIncident incident : incidentList)
350                {
351                    if (incident.number == newLogNum)
352                    {
353                        found = false;
354                    }
355                }
356            }
357        }
358
359        ScriptIncident newInc = new ScriptIncident(newLogNum, "New Incident", LocalDate.now().toString(), script);
360        if (script.addIncident(newInc))
361        {
362            new IncidentEditorFrame(newInc).setVisible(true);
363            this.dispose();
364        }
365
366    }//GEN-LAST:event_btnCreateIncidentActionPerformed
367
368    private void btnClosePaletteActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnClosePaletteActionPerformed
369    {//GEN-HEADEREND:event_btnClosePaletteActionPerformed
370        script.update();
371        this.dispose();
372    }//GEN-LAST:event_btnClosePaletteActionPerformed
373
374
375    // Variables declaration - do not modify//GEN-BEGIN:variables
376    private javax.swing.JButton btnClosePalette;
377    private javax.swing.JButton btnCreateIncident;
378    private javax.swing.JPanel jPanel1;
379    private javax.swing.JPanel jPanel2;
380    private javax.swing.JPanel jPanel3;
381    private javax.swing.JScrollPane jScrollPane2;
382    private javax.swing.JLabel labelFileCount;
383    private javax.swing.JLabel labelIncidentCount;
384    private javax.swing.JScrollPane scrollAddPanels;
385    private javax.swing.JTable tableCurrentIncidents;
386    private javax.swing.JTextField txtSearchFilter;
387    // End of variables declaration//GEN-END:variables
388
389}
Note: See TracBrowser for help on using the repository browser.