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

Revision 29, 9.6 KB checked in by bokumura, 10 years ago (diff)

Changed the GUI so that readers and writers are in separate panels.

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