3 The file is used to create, update Event of MSA/MBD file
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 package org
.tianocore
.packaging
.module
.ui
;
17 import java
.awt
.Dimension
;
18 import java
.awt
.event
.ActionEvent
;
20 import javax
.swing
.JButton
;
21 import javax
.swing
.JComboBox
;
22 import javax
.swing
.JLabel
;
23 import javax
.swing
.JPanel
;
24 import javax
.swing
.JRadioButton
;
25 import javax
.swing
.JTextField
;
27 import org
.tianocore
.EventTypes
;
28 import org
.tianocore
.EventUsage
;
29 import org
.tianocore
.EventsDocument
;
30 import org
.tianocore
.GuidDocument
;
31 import org
.tianocore
.common
.DataValidation
;
32 import org
.tianocore
.common
.Log
;
33 import org
.tianocore
.common
.Tools
;
34 import org
.tianocore
.packaging
.common
.ui
.IDefaultMutableTreeNode
;
35 import org
.tianocore
.packaging
.common
.ui
.IInternalFrame
;
36 import org
.tianocore
.packaging
.common
.ui
.StarLabel
;
39 The class is used to create, update Event of MSA/MBD file
40 It extends IInternalFrame
42 @since ModuleEditor 1.0
45 public class ModuleEvents
extends IInternalFrame
{
48 /// Define class Serial Version UID
50 private static final long serialVersionUID
= -4396143706422842331L;
53 //Define class members
55 private EventsDocument
.Events events
= null;
57 private EventsDocument
.Events
.CreateEvents createEvent
= null;
59 private EventsDocument
.Events
.SignalEvents signalEvent
= null;
61 private int location
= -1;
63 private JPanel jContentPane
= null;
65 private JLabel jLabelEventType
= null;
67 private JRadioButton jRadioButtonEventCreate
= null;
69 private JRadioButton jRadioButtonEventSignal
= null;
71 private JLabel jLabelC_Name
= null;
73 private JTextField jTextFieldC_Name
= null;
75 private JLabel jLabelGuid
= null;
77 private JTextField jTextFieldGuid
= null;
79 private JLabel jLabelEventGroup
= null;
81 private JComboBox jComboBoxEventGroup
= null;
83 private JLabel jLabelUsage
= null;
85 private JComboBox jComboBoxUsage
= null;
87 private JButton jButtonOk
= null;
89 private JButton jButtonCancel
= null;
91 private JButton jButtonGenerateGuid
= null;
93 private JLabel jLabelOverrideID
= null;
95 private JTextField jTextFieldOverrideID
= null;
97 private StarLabel jStarLabel1
= null;
99 private StarLabel jStarLabel2
= null;
102 This method initializes jRadioButtonEnentType
104 @return javax.swing.JRadioButton jRadioButtonEventCreate
107 private JRadioButton
getJRadioButtonEventCreate() {
108 if (jRadioButtonEventCreate
== null) {
109 jRadioButtonEventCreate
= new JRadioButton();
110 jRadioButtonEventCreate
.setText("Create");
111 jRadioButtonEventCreate
.setBounds(new java
.awt
.Rectangle(160, 10, 90, 20));
112 jRadioButtonEventCreate
.addActionListener(this);
113 jRadioButtonEventCreate
.setSelected(true);
115 return jRadioButtonEventCreate
;
119 This method initializes jRadioButtonEventSignal
121 @return javax.swing.JRadioButton jRadioButtonEventSignal
124 private JRadioButton
getJRadioButtonEventSignal() {
125 if (jRadioButtonEventSignal
== null) {
126 jRadioButtonEventSignal
= new JRadioButton();
127 jRadioButtonEventSignal
.setText("Signal");
128 jRadioButtonEventSignal
.setBounds(new java
.awt
.Rectangle(320, 10, 90, 20));
129 jRadioButtonEventSignal
.addActionListener(this);
131 return jRadioButtonEventSignal
;
135 This method initializes jTextFieldC_Name
137 @return javax.swing.JTextField jTextFieldC_Name
140 private JTextField
getJTextFieldC_Name() {
141 if (jTextFieldC_Name
== null) {
142 jTextFieldC_Name
= new JTextField();
143 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(160, 35, 320, 20));
145 return jTextFieldC_Name
;
149 This method initializes jTextFieldGuid
151 @return javax.swing.JTextField jTextFieldGuid
154 private JTextField
getJTextFieldGuid() {
155 if (jTextFieldGuid
== null) {
156 jTextFieldGuid
= new JTextField();
157 jTextFieldGuid
.setBounds(new java
.awt
.Rectangle(160, 60, 250, 20));
159 return jTextFieldGuid
;
163 This method initializes jComboBoxEventGroup
165 @return javax.swing.JComboBox jComboBoxEventGroup
168 private JComboBox
getJComboBoxEventGroup() {
169 if (jComboBoxEventGroup
== null) {
170 jComboBoxEventGroup
= new JComboBox();
171 jComboBoxEventGroup
.setBounds(new java
.awt
.Rectangle(160, 85, 320, 20));
173 return jComboBoxEventGroup
;
177 This method initializes jComboBoxUsage
179 @return javax.swing.JComboBox jComboBoxUsage
182 private JComboBox
getJComboBoxUsage() {
183 if (jComboBoxUsage
== null) {
184 jComboBoxUsage
= new JComboBox();
185 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(160, 110, 320, 20));
187 return jComboBoxUsage
;
191 This method initializes jButtonOk
193 @return javax.swing.JButton jButtonOk
196 private JButton
getJButton() {
197 if (jButtonOk
== null) {
198 jButtonOk
= new JButton();
199 jButtonOk
.setText("OK");
200 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 165, 90, 20));
201 jButtonOk
.addActionListener(this);
207 This method initializes jButtonCancel
209 @return javax.swing.JButton jButtonCancel
212 private JButton
getJButtonCancel() {
213 if (jButtonCancel
== null) {
214 jButtonCancel
= new JButton();
215 jButtonCancel
.setText("Cancel");
216 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 165, 90, 20));
217 jButtonCancel
.setPreferredSize(new Dimension(90, 20));
218 jButtonCancel
.addActionListener(this);
220 return jButtonCancel
;
224 This method initializes jButtonGenerateGuid
226 @return javax.swing.JButton jButtonGenerateGuid
229 private JButton
getJButtonGenerateGuid() {
230 if (jButtonGenerateGuid
== null) {
231 jButtonGenerateGuid
= new JButton();
232 jButtonGenerateGuid
.setBounds(new java
.awt
.Rectangle(415, 60, 65, 20));
233 jButtonGenerateGuid
.setText("GEN");
234 jButtonGenerateGuid
.addActionListener(this);
236 return jButtonGenerateGuid
;
240 This method initializes jTextFieldOverrideID
242 @return javax.swing.JTextField jTextFieldOverrideID
245 private JTextField
getJTextFieldOverrideID() {
246 if (jTextFieldOverrideID
== null) {
247 jTextFieldOverrideID
= new JTextField();
248 jTextFieldOverrideID
.setBounds(new java
.awt
.Rectangle(160, 135, 50, 20));
250 return jTextFieldOverrideID
;
253 public static void main(String
[] args
) {
258 This is the default constructor
261 public ModuleEvents() {
264 this.setVisible(true);
268 This is the override edit constructor
270 @param inEvents The input EventsDocument.Events
273 public ModuleEvents(EventsDocument
.Events inEvents
) {
276 this.setVisible(true);
280 This is the override edit constructor
282 @param inEvents The input EventsDocument.Events
283 @param type The input data of node type
284 @param index The input data of node index
287 public ModuleEvents(EventsDocument
.Events inEvents
, int type
, int index
) {
289 init(inEvents
, type
, index
);
290 this.setVisible(true);
294 This method initializes this
296 @param inEvents The input EventsDocument.Events
299 private void init(EventsDocument
.Events inEvents
) {
301 this.setEvents(inEvents
);
305 This method initializes this
306 Fill values to all fields if these values are not empty
308 @param inEvents EventsDocument.Events
309 @param type The input data of node type
310 @param index The input data of node index
313 private void init(EventsDocument
.Events inEvents
, int type
, int index
) {
315 this.location
= index
;
316 if (type
== IDefaultMutableTreeNode
.EVENTS_CREATEEVENTS_ITEM
) {
317 this.jRadioButtonEventCreate
.setSelected(true);
318 this.jRadioButtonEventSignal
.setSelected(false);
319 if (this.events
.getCreateEvents().getEventArray(index
).getCName() != null) {
320 this.jTextFieldC_Name
.setText(this.events
.getCreateEvents().getEventArray(index
).getCName());
322 if (this.events
.getCreateEvents().getEventArray(index
).getGuid() != null) {
323 this.jTextFieldGuid
.setText(this.events
.getCreateEvents().getEventArray(index
).getGuid()
326 if (this.events
.getCreateEvents().getEventArray(index
).getEventGroup() != null) {
327 this.jComboBoxEventGroup
.setSelectedItem(this.events
.getCreateEvents().getEventArray(index
)
328 .getEventGroup().toString());
330 if (this.events
.getCreateEvents().getEventArray(index
).getUsage() != null) {
331 this.jComboBoxUsage
.setSelectedItem(this.events
.getCreateEvents().getEventArray(index
).getUsage()
334 this.jTextFieldOverrideID
.setText(String
.valueOf(this.events
.getCreateEvents().getEventArray(index
)
336 } else if (type
== IDefaultMutableTreeNode
.EVENTS_SIGNALEVENTS_ITEM
) {
337 this.jRadioButtonEventCreate
.setSelected(false);
338 this.jRadioButtonEventSignal
.setSelected(true);
339 this.jComboBoxUsage
.setEnabled(false);
340 if (this.events
.getSignalEvents().getEventArray(index
).getCName() != null) {
341 this.jTextFieldC_Name
.setText(this.events
.getSignalEvents().getEventArray(index
).getCName());
343 if (this.events
.getSignalEvents().getEventArray(index
).getGuid() != null) {
344 this.jTextFieldGuid
.setText(this.events
.getSignalEvents().getEventArray(index
).getGuid().toString());
346 if (this.events
.getSignalEvents().getEventArray(index
).getEventGroup() != null) {
347 this.jComboBoxEventGroup
.setSelectedItem(this.events
.getSignalEvents().getEventArray(index
)
348 .getEventGroup().toString());
350 if (this.events
.getSignalEvents().getEventArray(index
).getUsage() != null) {
351 this.jComboBoxUsage
.setSelectedItem(this.events
.getSignalEvents().getEventArray(index
).getUsage()
354 this.jTextFieldOverrideID
.setText(String
.valueOf(this.events
.getSignalEvents().getEventArray(index
)
357 this.jRadioButtonEventCreate
.setEnabled(false);
358 this.jRadioButtonEventSignal
.setEnabled(false);
362 This method initializes this
365 private void init() {
366 this.setSize(500, 515);
367 this.setContentPane(getJContentPane());
368 this.setTitle("Events");
370 this.setViewMode(false);
374 Disable all components when the mode is view
376 @param isView true - The view mode; false - The non-view mode
379 public void setViewMode(boolean isView
) {
380 this.jButtonOk
.setVisible(false);
381 this.jButtonCancel
.setVisible(false);
383 this.jRadioButtonEventCreate
.setEnabled(!isView
);
384 this.jRadioButtonEventSignal
.setEnabled(!isView
);
385 this.jTextFieldC_Name
.setEnabled(!isView
);
386 this.jTextFieldGuid
.setEnabled(!isView
);
387 this.jComboBoxEventGroup
.setEnabled(!isView
);
388 this.jComboBoxUsage
.setEnabled(!isView
);
389 this.jTextFieldOverrideID
.setEnabled(!isView
);
390 this.jButtonCancel
.setEnabled(!isView
);
391 this.jButtonGenerateGuid
.setEnabled(!isView
);
392 this.jButtonOk
.setEnabled(!isView
);
397 This method initializes jContentPane
399 @return javax.swing.JPanel jContentPane
402 private JPanel
getJContentPane() {
403 if (jContentPane
== null) {
404 jLabelOverrideID
= new JLabel();
405 jLabelOverrideID
.setBounds(new java
.awt
.Rectangle(15, 135, 140, 20));
406 jLabelOverrideID
.setText("Override ID");
407 jLabelUsage
= new JLabel();
408 jLabelUsage
.setText("Usage");
409 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 110, 140, 20));
410 jLabelEventGroup
= new JLabel();
411 jLabelEventGroup
.setText("Event Group");
412 jLabelEventGroup
.setBounds(new java
.awt
.Rectangle(15, 85, 140, 20));
413 jLabelGuid
= new JLabel();
414 jLabelGuid
.setText("Guid");
415 jLabelGuid
.setBounds(new java
.awt
.Rectangle(15, 60, 140, 20));
416 jLabelC_Name
= new JLabel();
417 jLabelC_Name
.setText("C_Name");
418 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(15, 35, 140, 20));
419 jLabelEventType
= new JLabel();
420 jLabelEventType
.setText("Event Type");
421 jLabelEventType
.setBounds(new java
.awt
.Rectangle(15, 10, 140, 20));
422 jContentPane
= new JPanel();
423 jContentPane
.setLayout(null);
424 jContentPane
.add(jLabelEventType
, null);
425 jContentPane
.add(getJRadioButtonEventCreate(), null);
426 jContentPane
.add(getJRadioButtonEventSignal(), null);
427 jContentPane
.add(jLabelC_Name
, null);
428 jContentPane
.add(getJTextFieldC_Name(), null);
429 jContentPane
.add(jLabelGuid
, null);
430 jContentPane
.add(getJTextFieldGuid(), null);
431 jContentPane
.add(jLabelEventGroup
, null);
432 jContentPane
.add(getJComboBoxEventGroup(), null);
433 jContentPane
.add(jLabelUsage
, null);
434 jContentPane
.add(getJComboBoxUsage(), null);
435 jContentPane
.add(getJButton(), null);
436 jContentPane
.add(getJButtonCancel(), null);
437 jContentPane
.add(getJButtonGenerateGuid(), null);
438 jContentPane
.add(jLabelOverrideID
, null);
439 jContentPane
.add(getJTextFieldOverrideID(), null);
441 jStarLabel1
= new StarLabel();
442 jStarLabel1
.setBounds(new java
.awt
.Rectangle(0, 10, 10, 20));
443 jStarLabel2
= new StarLabel();
444 jStarLabel2
.setBounds(new java
.awt
.Rectangle(0, 35, 10, 20));
446 jContentPane
.add(jStarLabel1
, null);
447 jContentPane
.add(jStarLabel2
, null);
453 This method initializes events groups and usage type
456 private void initFrame() {
457 jComboBoxEventGroup
.addItem("EVENT_GROUP_EXIT_BOOT_SERVICES");
458 jComboBoxEventGroup
.addItem("EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE");
459 jComboBoxEventGroup
.addItem("EVENT_GROUP_MEMORY_MAP_CHANGE");
460 jComboBoxEventGroup
.addItem("EVENT_GROUP_READY_TO_BOOT");
461 jComboBoxEventGroup
.addItem("EVENT_GROUP_LEGACY_BOOT");
463 jComboBoxUsage
.addItem("ALWAYS_CONSUMED");
464 jComboBoxUsage
.addItem("SOMETIMES_CONSUMED");
465 jComboBoxUsage
.addItem("ALWAYS_PRODUCED");
466 jComboBoxUsage
.addItem("SOMETIMES_PRODUCED");
467 jComboBoxUsage
.addItem("PRIVATE");
471 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
473 * Override actionPerformed to listen all actions
476 public void actionPerformed(ActionEvent arg0
) {
477 if (arg0
.getSource() == jButtonOk
) {
478 this.setEdited(true);
482 if (arg0
.getSource() == jButtonCancel
) {
486 if (arg0
.getSource() == jRadioButtonEventCreate
) {
487 if (jRadioButtonEventCreate
.isSelected()) {
488 jRadioButtonEventSignal
.setSelected(false);
490 if (!jRadioButtonEventSignal
.isSelected() && !jRadioButtonEventCreate
.isSelected()) {
491 jRadioButtonEventCreate
.setSelected(true);
495 if (arg0
.getSource() == jRadioButtonEventSignal
) {
496 if (jRadioButtonEventSignal
.isSelected()) {
497 jRadioButtonEventCreate
.setSelected(false);
499 if (!jRadioButtonEventSignal
.isSelected() && !jRadioButtonEventCreate
.isSelected()) {
500 jRadioButtonEventSignal
.setSelected(true);
504 if (arg0
.getSource() == jButtonGenerateGuid
) {
505 jTextFieldGuid
.setText(Tools
.generateUuidString());
509 public EventsDocument
.Events
getEvents() {
513 public void setEvents(EventsDocument
.Events events
) {
514 this.events
= events
;
518 Data validation for all fields
520 @retval true - All datas are valid
521 @retval false - At least one data is invalid
524 public boolean check() {
526 // Check if all required fields are not empty
528 if (isEmpty(this.jTextFieldC_Name
.getText())) {
529 Log
.err("C_Name couldn't be empty");
534 // Check if all fields have correct data types
536 if (!DataValidation
.isCName(this.jTextFieldC_Name
.getText())) {
537 Log
.err("Incorrect data type for C_Name");
540 if (!isEmpty(this.jTextFieldGuid
.getText()) && !DataValidation
.isGuid(this.jTextFieldGuid
.getText())) {
541 Log
.err("Incorrect data type for Guid");
544 if (!isEmpty(this.jTextFieldOverrideID
.getText())
545 && !DataValidation
.isOverrideID(this.jTextFieldOverrideID
.getText())) {
546 Log
.err("Incorrect data type for Override ID");
554 Save all components of Events
555 if exists events, set the value directly
556 if not exists events, new an instance first
561 if (this.events
== null) {
562 events
= EventsDocument
.Events
.Factory
.newInstance();
563 createEvent
= EventsDocument
.Events
.CreateEvents
.Factory
.newInstance();
564 signalEvent
= EventsDocument
.Events
.SignalEvents
.Factory
.newInstance();
566 if (events
.getCreateEvents() != null) {
567 createEvent
= events
.getCreateEvents();
569 createEvent
= EventsDocument
.Events
.CreateEvents
.Factory
.newInstance();
571 if (events
.getSignalEvents() != null) {
572 signalEvent
= events
.getSignalEvents();
574 signalEvent
= EventsDocument
.Events
.SignalEvents
.Factory
.newInstance();
578 if (this.jRadioButtonEventCreate
.isSelected()) {
579 EventsDocument
.Events
.CreateEvents
.Event event
= EventsDocument
.Events
.CreateEvents
.Event
.Factory
581 event
.setCName(this.jTextFieldC_Name
.getText());
582 if (!isEmpty(this.jTextFieldGuid
.getText())) {
583 GuidDocument
.Guid guid
= GuidDocument
.Guid
.Factory
.newInstance();
584 guid
.setStringValue(this.jTextFieldGuid
.getText());
587 event
.setEventGroup(EventTypes
.Enum
.forString(jComboBoxEventGroup
.getSelectedItem().toString()));
588 event
.setUsage(EventUsage
.Enum
.forString(jComboBoxUsage
.getSelectedItem().toString()));
589 if (!isEmpty(this.jTextFieldOverrideID
.getText())) {
590 event
.setOverrideID(Integer
.parseInt(this.jTextFieldOverrideID
.getText()));
593 createEvent
.setEventArray(location
, event
);
595 createEvent
.addNewEvent();
596 createEvent
.setEventArray(createEvent
.getEventList().size() - 1, event
);
598 events
.setCreateEvents(createEvent
);
600 if (this.jRadioButtonEventSignal
.isSelected()) {
601 EventsDocument
.Events
.SignalEvents
.Event event
= EventsDocument
.Events
.SignalEvents
.Event
.Factory
603 event
.setCName(this.jTextFieldC_Name
.getText());
604 if (!isEmpty(this.jTextFieldGuid
.getText())) {
605 GuidDocument
.Guid guid
= GuidDocument
.Guid
.Factory
.newInstance();
606 guid
.setStringValue(this.jTextFieldGuid
.getText());
609 event
.setEventGroup(EventTypes
.Enum
.forString(jComboBoxEventGroup
.getSelectedItem().toString()));
610 event
.setUsage(EventUsage
.Enum
.forString(jComboBoxUsage
.getSelectedItem().toString()));
611 if (!isEmpty(this.jTextFieldOverrideID
.getText())) {
612 event
.setOverrideID(Integer
.parseInt(this.jTextFieldOverrideID
.getText()));
615 signalEvent
.setEventArray(location
, event
);
617 signalEvent
.addNewEvent();
618 signalEvent
.setEventArray(signalEvent
.getEventList().size() - 1, event
);
620 events
.setSignalEvents(signalEvent
);
622 } catch (Exception e
) {
623 Log
.err("Update Events", e
.getMessage());