source: tmcsimulator/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsCommunicatorGUI.java @ 6

Revision 6, 8.7 KB checked in by jdalbey, 10 years ago (diff)

Multifile commit. Add version # to Paramics Communicator. Move Load button in Sim Mgr. Add several tests. Add package jars target.

Line 
1package tmcsim.paramicscommunicator.gui;
2
3import java.awt.Dimension;
4import java.text.DateFormat;
5import java.util.Date;
6import java.util.Observable;
7import java.util.Observer;
8import java.util.TreeMap;
9import java.util.logging.Handler;
10import java.util.logging.Level;
11import java.util.logging.LogRecord;
12import java.util.logging.Logger;
13import javax.swing.BorderFactory;
14import javax.swing.Box;
15import javax.swing.BoxLayout;
16import javax.swing.JFrame;
17import javax.swing.JMenuBar;
18import javax.swing.JOptionPane;
19import javax.swing.JScrollPane;
20import javax.swing.JTabbedPane;
21import javax.swing.JTextArea;
22import tmcsim.common.RevisionNumber;
23import tmcsim.paramicscommunicator.FileIOUpdate;
24import tmcsim.paramicscommunicator.FileRegUpdate;
25
26/**
27 * ParamicsCommunicatorGUI is the view class for the ParamicsCommunicator. The
28 * user interface shows a tab for each I/O reader or writer that has been
29 * registered with the ParamicsCommunicator. The tab shows the history of I/O
30 * reads and writes, and the unique information for the target file and I/O
31 * interval.
32 *
33 * @author Matthew Cechini
34 * @version
35 */
36@SuppressWarnings("serial")
37public class ParamicsCommunicatorGUI extends JFrame implements Observer
38{
39
40    /**
41     * Logging handler that writes all received log records to the error text
42     * area.
43     *
44     * @author Matthew Cechini
45     */
46    protected class ParamicsLoggerHandler extends Handler
47    {
48
49        DateFormat timeFormat = DateFormat.getTimeInstance();
50
51        public void close() throws SecurityException
52        {
53        }
54
55        public void flush()
56        {
57        }
58
59        public void publish(LogRecord record)
60        {
61            StringBuffer errorBuf = new StringBuffer();
62
63            errorBuf.append(timeFormat.format(new Date(record.getMillis())));
64            errorBuf.append("  -  " + record.getMessage() + "\n");
65
66            errorTA.setText(errorTA.getText() + errorBuf.toString());
67        }
68    }
69    /**
70     * Map of FileIOTableModel objects for each reader id.
71     */
72    protected TreeMap<String, FileIOTableModel> readerTables;
73    /**
74     * Map of FileIOTableModel objects for each writer id.
75     */
76    protected TreeMap<String, FileIOTableModel> writerTables;
77
78    /**
79     * Constructor. Initialize local lists, set up the logging handler and
80     * initialize the GUI.
81     */
82    public ParamicsCommunicatorGUI()
83    {
84        super("Paramics Communicator");
85
86        readerTables = new TreeMap<String, FileIOTableModel>();
87        writerTables = new TreeMap<String, FileIOTableModel>();
88
89        Logger.getLogger("tmcsim.paramicscommunicator").addHandler(new ParamicsLoggerHandler());
90
91        initializeGUI();
92    }
93
94    /**
95     * Observer update method. If the update object is a FileIOUpdate object,
96     * update the TableModel corresponding to the unique I/O id. If the update
97     * object is a FileRegUpdate object, add a new tab if the registration type
98     * is REGISTER, or update an existing tab if the registration type is
99     * UNREGISTER.
100     */
101    public void update(Observable o, Object arg)
102    {
103
104        if (arg instanceof FileIOUpdate)
105        {
106
107            try
108            {
109                FileIOUpdate update = (FileIOUpdate) arg;
110
111                switch (update.ioType)
112                {
113                    case READ:
114                        readerTables.get(update.ioID).addIOUpdate(update);
115                        break;
116                    case WRITE:
117                        writerTables.get(update.ioID).addIOUpdate(update);
118                        break;
119                }
120            } catch (Exception e)
121            {
122                Logger.getLogger("tmcsim.paramicscommunicator.gui").logp(
123                        Level.SEVERE, "ParamicsCommunicatorGUI", "update",
124                        "Exception in receiving FileIOUpdate object.", e);
125            }
126        } else if (arg instanceof FileRegUpdate)
127        {
128            try
129            {
130                FileRegUpdate update = (FileRegUpdate) arg;
131
132                switch (update.ioType)
133                {
134                    case READ:
135                        switch (update.regType)
136                        {
137                            case REGISTER:
138                                FileIOTableModel model = new FileIOTableModel();
139                                readerTables.put(update.ioID, model);
140
141                                addTab(update, model);
142                                break;
143                            case UNREGISTER:
144                                //unregister
145                                break;
146                        }
147                        break;
148                    case WRITE:
149                        switch (update.regType)
150                        {
151                            case REGISTER:
152                                FileIOTableModel model = new FileIOTableModel();
153                                writerTables.put(update.ioID, model);
154
155                                addTab(update, model);
156                                break;
157                            case UNREGISTER:
158                                //unregister
159                                break;
160                        }
161                        break;
162                }
163
164            } catch (Exception e)
165            {
166                Logger.getLogger("tmcsim.paramicscommunicator.gui").logp(
167                        Level.SEVERE, "ParamicsCommunicatorGUI", "update",
168                        "Exception in receiving FileRegUpdate object.", e);
169            }
170        }
171    }
172
173    private void initializeGUI()
174    {
175
176        JMenuBar menuBar = new JMenuBar();
177
178        javax.swing.JMenu fileMenu = new javax.swing.JMenu("File");
179        javax.swing.JMenuItem logItem = new javax.swing.JMenuItem("Show Log");
180
181        logItem.addActionListener(new java.awt.event.ActionListener()
182        {
183            public void actionPerformed(java.awt.event.ActionEvent evt)
184            {
185                tmcsim.paramicslog.gui.ParamicsLogGUI.getInstance().display();
186            }
187        });
188
189        fileMenu.add(logItem);
190        menuBar.add(fileMenu);
191
192        javax.swing.JMenu helpMenu = new javax.swing.JMenu("Help");
193        javax.swing.JMenuItem aboutItem = new javax.swing.JMenuItem("About");
194
195        aboutItem.addActionListener(new java.awt.event.ActionListener()
196        {
197            public void actionPerformed(java.awt.event.ActionEvent evt)
198            {
199                String ver = RevisionNumber.getString();
200                JOptionPane.showMessageDialog(rootPane, "Version: " + ver, "About", JOptionPane.INFORMATION_MESSAGE);
201            }
202        });
203
204        helpMenu.add(aboutItem);
205        menuBar.add(helpMenu);
206
207        this.setJMenuBar(menuBar);
208
209        fileIOTabs = new JTabbedPane();
210        fileIOTabs.setAlignmentX(Box.CENTER_ALIGNMENT);
211        fileIOTabs.setMinimumSize(new Dimension(420, 480));
212        fileIOTabs.setPreferredSize(new Dimension(420, 480));
213        fileIOTabs.setMaximumSize(new Dimension(420, 480));
214        fileIOTabs.setBorder(BorderFactory.createCompoundBorder(
215                BorderFactory.createTitledBorder(
216                BorderFactory.createRaisedBevelBorder(), "Registered I/O"),
217                BorderFactory.createEmptyBorder(5, 5, 5, 5)));
218
219        errorTA = new JTextArea();
220        errorTA.setLineWrap(true);
221
222        errorPane = new JScrollPane();
223        errorPane.setViewportView(errorTA);
224        errorPane.setAlignmentX(Box.CENTER_ALIGNMENT);
225        errorPane.setBorder(BorderFactory.createCompoundBorder(
226                BorderFactory.createTitledBorder(
227                BorderFactory.createRaisedBevelBorder(), "Errors"),
228                BorderFactory.createEmptyBorder(5, 5, 5, 5)));
229
230
231        Box guiBox = new Box(BoxLayout.Y_AXIS);
232        guiBox.add(fileIOTabs);
233        guiBox.add(Box.createVerticalStrut(10));
234        guiBox.add(errorPane);
235
236        add(guiBox);
237
238        setMinimumSize(new Dimension(420, 680));
239        setPreferredSize(new Dimension(420, 680));
240        setResizable(false);
241        pack();
242        setVisible(true);
243    }
244
245    /**
246     * Method creates a new tab for the new I/O object. The tab is labeled
247     * "Reader #" or "Writer #", where '#' is the I/O object's ID.
248     *
249     * @param update Initial update object.
250     * @param model TableModel for reader/writer that will display I/O
251     * operations.
252     */
253    private void addTab(FileRegUpdate update, FileIOTableModel model)
254    {
255
256        String tabName = null;
257
258        switch (update.ioType)
259        {
260            case READ:
261                tabName = "Reader " + update.ioID;
262                break;
263            case WRITE:
264                tabName = "Writer " + update.ioID;
265                break;
266        }
267
268        fileIOTabs.add(tabName, new ParamicsIOInfoPanel(update, model));
269    }
270    private JTabbedPane fileIOTabs;
271    private JScrollPane errorPane;
272    private JTextArea errorTA;
273}
Note: See TracBrowser for help on using the repository browser.