3 The file is used to create, update Variable 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.
16 package org
.tianocore
.packaging
.module
.ui
;
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
.JTextField
;
26 import org
.tianocore
.GuidDocument
;
27 import org
.tianocore
.VariableUsage
;
28 import org
.tianocore
.VariablesDocument
;
29 import org
.tianocore
.common
.DataValidation
;
30 import org
.tianocore
.common
.Log
;
31 import org
.tianocore
.common
.Tools
;
32 import org
.tianocore
.packaging
.common
.ui
.IInternalFrame
;
33 import org
.tianocore
.packaging
.common
.ui
.StarLabel
;
36 The class is used to create, update Variable of MSA/MBD file
37 It extends IInternalFrame
39 @since ModuleEditor 1.0
42 public class ModuleVariables
extends IInternalFrame
{
45 /// Define class Serial Version UID
47 private static final long serialVersionUID
= -6998982978030439446L;
50 //Define class members
52 private VariablesDocument
.Variables variables
= null;
54 private int location
= -1;
56 private JPanel jContentPane
= null;
58 private JLabel jLabelGuid
= null;
60 private JTextField jTextFieldGuid
= null;
62 private JLabel jLabelString
= null;
64 private JTextField jTextFieldString
= null;
66 private JLabel jLabelBitOffset
= null;
68 private JTextField jTextFieldBitOffset
= null;
70 private JLabel jLabelByteOffset
= null;
72 private JTextField jTextFieldByteOffset
= null;
74 private JLabel jLabelOffsetBitSize
= null;
76 private JTextField jTextFieldOffsetBitSize
= null;
78 private JLabel jLabelUsage
= null;
80 private JComboBox jComboBoxUsage
= null;
82 private JButton jButtonOk
= null;
84 private JButton jButtonCancel
= null;
86 private JButton jButtonGenerateGuid
= null;
88 private JLabel jLabelOverrideID
= null;
90 private JTextField jTextFieldOverrideID
= null;
92 private StarLabel jStarLabel1
= null;
94 private StarLabel jStarLabel2
= null;
96 private JLabel jLabelByteOffsetHint
= null;
98 private JLabel jLabelBitOffsetHint
= null;
100 private JLabel jLabelOffsetBitSizeHint
= null;
103 This method initializes jTextFieldGuid
105 @return javax.swing.JTextField jTextFieldGuid
108 private JTextField
getJTextFieldGuid() {
109 if (jTextFieldGuid
== null) {
110 jTextFieldGuid
= new JTextField();
111 jTextFieldGuid
.setSize(new java
.awt
.Dimension(250, 20));
112 jTextFieldGuid
.setLocation(new java
.awt
.Point(160, 35));
114 return jTextFieldGuid
;
118 This method initializes jTextFieldString
120 @return javax.swing.JTextField jTextFieldString
123 private JTextField
getJTextFieldString() {
124 if (jTextFieldString
== null) {
125 jTextFieldString
= new JTextField();
126 jTextFieldString
.setSize(new java
.awt
.Dimension(320, 20));
127 jTextFieldString
.setLocation(new java
.awt
.Point(160, 10));
129 return jTextFieldString
;
133 This method initializes jTextFieldBitOffset
135 @return javax.swing.JTextField jTextFieldBitOffset
138 private JTextField
getJTextFieldBitOffset() {
139 if (jTextFieldBitOffset
== null) {
140 jTextFieldBitOffset
= new JTextField();
141 jTextFieldBitOffset
.setSize(new java
.awt
.Dimension(80, 20));
142 jTextFieldBitOffset
.setLocation(new java
.awt
.Point(160, 85));
144 return jTextFieldBitOffset
;
148 This method initializes jTextFieldByteOffset
150 @return javax.swing.JTextField jTextFieldByteOffset
153 private JTextField
getJTextFieldByteOffset() {
154 if (jTextFieldByteOffset
== null) {
155 jTextFieldByteOffset
= new JTextField();
156 jTextFieldByteOffset
.setLocation(new java
.awt
.Point(160, 60));
157 jTextFieldByteOffset
.setSize(new java
.awt
.Dimension(80, 20));
159 return jTextFieldByteOffset
;
163 This method initializes jTextFieldBitSize
165 @return javax.swing.JTextField jTextFieldOffsetBitSize
168 private JTextField
getJTextFieldOffsetBitSize() {
169 if (jTextFieldOffsetBitSize
== null) {
170 jTextFieldOffsetBitSize
= new JTextField();
171 jTextFieldOffsetBitSize
.setSize(new java
.awt
.Dimension(80, 20));
172 jTextFieldOffsetBitSize
.setLocation(new java
.awt
.Point(160, 110));
174 return jTextFieldOffsetBitSize
;
178 This method initializes jComboBoxUsage
180 @return javax.swing.JComboBox jComboBoxUsage
183 private JComboBox
getJComboBoxUsage() {
184 if (jComboBoxUsage
== null) {
185 jComboBoxUsage
= new JComboBox();
186 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(160, 135, 320, 20));
188 return jComboBoxUsage
;
192 This method initializes jButtonOk
194 @return javax.swing.JButton jButtonOk
197 private JButton
getJButtonOk() {
198 if (jButtonOk
== null) {
199 jButtonOk
= new JButton();
200 jButtonOk
.setText("Ok");
201 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 190, 90, 20));
202 jButtonOk
.addActionListener(this);
208 This method initializes jButtonCancel
210 @return javax.swing.JButton jButtonCancel
213 private JButton
getJButtonCancel() {
214 if (jButtonCancel
== null) {
215 jButtonCancel
= new JButton();
216 jButtonCancel
.setText("Cancel");
217 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 190, 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
.setText("GEN");
233 jButtonGenerateGuid
.addActionListener(this);
234 jButtonGenerateGuid
.setBounds(new java
.awt
.Rectangle(415, 35, 65, 20));
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, 160, 50, 20));
250 return jTextFieldOverrideID
;
253 public static void main(String
[] args
) {
258 This is the default constructor
261 public ModuleVariables() {
264 this.setVisible(true);
268 This is the override edit constructor
270 @param inVariables The input data of VariablesDocument.Variables
273 public ModuleVariables(VariablesDocument
.Variables inVariables
) {
276 this.setVisible(true);
280 This is the override edit constructor
282 @param inVariables The input data of VariablesDocument.Variables
283 @param type The input data of node type
284 @param index The input data of node index
287 public ModuleVariables(VariablesDocument
.Variables inVariables
, int type
, int index
) {
289 init(inVariables
, type
, index
);
290 this.setVisible(true);
294 This method initializes this
296 @param inVariables The input data of VariablesDocument.Variables
299 private void init(VariablesDocument
.Variables inVariables
) {
301 this.setVariables(inVariables
);
305 This method initializes this
306 Fill values to all fields if these values are not empty
308 @param inVariables The input data of VariablesDocument.Variables
309 @param type The input data of node type
310 @param index The input data of node index
313 private void init(VariablesDocument
.Variables inVariables
, int type
, int index
) {
315 this.location
= index
;
316 if (this.variables
.getVariableList().size() > 0) {
317 if (this.variables
.getVariableArray(index
).getString() != null) {
318 this.jTextFieldString
.setText(this.variables
.getVariableArray(index
).getString());
320 if (this.variables
.getVariableArray(index
).getGuid() != null) {
321 this.jTextFieldGuid
.setText(this.variables
.getVariableArray(index
).getGuid().getStringValue());
323 if (this.variables
.getVariableArray(index
).getByteOffset() != null) {
324 this.jTextFieldByteOffset
326 .valueOf(this.variables
.getVariableArray(index
).getByteOffset()));
328 if (String
.valueOf(this.variables
.getVariableArray(index
).getBitOffset()) != null) {
329 this.jTextFieldBitOffset
.setText(String
.valueOf(this.variables
.getVariableArray(index
).getBitOffset()));
331 if (String
.valueOf(this.variables
.getVariableArray(index
).getOffsetBitSize()) != null) {
332 this.jTextFieldOffsetBitSize
.setText(String
.valueOf(this.variables
.getVariableArray(index
)
333 .getOffsetBitSize()));
335 if (this.variables
.getVariableArray(index
).getUsage() != null) {
336 this.jComboBoxUsage
.setSelectedItem(this.variables
.getVariableArray(index
).getUsage().toString());
338 this.jTextFieldOverrideID
.setText(String
.valueOf(this.variables
.getVariableArray(index
).getOverrideID()));
343 This method initializes this
347 private void init() {
348 this.setSize(500, 515);
349 this.setContentPane(getJContentPane());
350 this.setTitle("Add Variables");
351 this.setViewMode(false);
355 Disable all components when the mode is view
357 @param isView true - The view mode; false - The non-view mode
360 public void setViewMode(boolean isView
) {
361 this.jButtonOk
.setVisible(false);
362 this.jButtonCancel
.setVisible(false);
364 this.jTextFieldString
.setEnabled(!isView
);
365 this.jTextFieldGuid
.setEnabled(!isView
);
366 this.jTextFieldByteOffset
.setEnabled(!isView
);
367 this.jTextFieldBitOffset
.setEnabled(!isView
);
368 this.jTextFieldOffsetBitSize
.setEnabled(!isView
);
369 this.jComboBoxUsage
.setEnabled(!isView
);
370 this.jButtonGenerateGuid
.setEnabled(!isView
);
371 this.jTextFieldOverrideID
.setEnabled(!isView
);
376 This method initializes jContentPane
378 @return javax.swing.JPanel jContentPane
381 private JPanel
getJContentPane() {
382 if (jContentPane
== null) {
383 jLabelByteOffsetHint
= new JLabel();
384 jLabelByteOffsetHint
.setBounds(new java
.awt
.Rectangle(245,60,235,20));
385 jLabelByteOffsetHint
.setText("0x00");
386 jLabelOffsetBitSizeHint
= new JLabel();
387 jLabelOffsetBitSizeHint
.setBounds(new java
.awt
.Rectangle(245,110,235,20));
388 jLabelOffsetBitSizeHint
.setText("1~7");
389 jLabelBitOffsetHint
= new JLabel();
390 jLabelBitOffsetHint
.setBounds(new java
.awt
.Rectangle(245,85,235,20));
391 jLabelBitOffsetHint
.setText("0~7");
392 jLabelOverrideID
= new JLabel();
393 jLabelOverrideID
.setText("Override ID");
394 jLabelOverrideID
.setBounds(new java
.awt
.Rectangle(15, 160, 140, 20));
395 jLabelUsage
= new JLabel();
396 jLabelUsage
.setText("Usage");
397 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 135, 140, 20));
398 jLabelOffsetBitSize
= new JLabel();
399 jLabelOffsetBitSize
.setText("Offset Bit Size");
400 jLabelOffsetBitSize
.setLocation(new java
.awt
.Point(15, 110));
401 jLabelOffsetBitSize
.setSize(new java
.awt
.Dimension(140, 20));
402 jLabelByteOffset
= new JLabel();
403 jLabelByteOffset
.setText("Byte Offset");
404 jLabelByteOffset
.setLocation(new java
.awt
.Point(15, 60));
405 jLabelByteOffset
.setSize(new java
.awt
.Dimension(140, 20));
406 jLabelBitOffset
= new JLabel();
407 jLabelBitOffset
.setText("Bit Offset");
408 jLabelBitOffset
.setLocation(new java
.awt
.Point(15, 85));
409 jLabelBitOffset
.setSize(new java
.awt
.Dimension(140, 20));
410 jLabelString
= new JLabel();
411 jLabelString
.setText("String");
412 jLabelString
.setLocation(new java
.awt
.Point(15, 10));
413 jLabelString
.setSize(new java
.awt
.Dimension(140, 20));
414 jLabelGuid
= new JLabel();
415 jLabelGuid
.setText("Guid");
416 jLabelGuid
.setLocation(new java
.awt
.Point(15, 35));
417 jLabelGuid
.setSize(new java
.awt
.Dimension(140, 20));
418 jContentPane
= new JPanel();
419 jContentPane
.setLayout(null);
420 jContentPane
.add(getJButtonGenerateGuid(), null);
421 jContentPane
.add(jLabelString
, null);
422 jContentPane
.add(getJTextFieldString(), null);
423 jContentPane
.add(jLabelGuid
, null);
424 jContentPane
.add(getJTextFieldGuid(), null);
425 jContentPane
.add(jLabelByteOffset
, null);
426 jContentPane
.add(getJTextFieldByteOffset(), null);
427 jContentPane
.add(jLabelBitOffset
, null);
428 jContentPane
.add(getJTextFieldBitOffset(), null);
429 jContentPane
.add(jLabelOffsetBitSize
, null);
430 jContentPane
.add(getJTextFieldOffsetBitSize(), null);
431 jContentPane
.add(jLabelUsage
, null);
432 jContentPane
.add(getJComboBoxUsage(), null);
433 jContentPane
.add(jLabelOverrideID
, null);
434 jContentPane
.add(getJTextFieldOverrideID(), null);
435 jContentPane
.add(getJButtonOk(), null);
436 jContentPane
.add(getJButtonCancel(), null);
438 jStarLabel1
= new StarLabel();
439 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
440 jStarLabel2
= new StarLabel();
441 jStarLabel2
.setLocation(new java
.awt
.Point(0, 35));
443 jContentPane
.add(jStarLabel1
, null);
444 jContentPane
.add(jStarLabel2
, null);
446 jContentPane
.add(jLabelByteOffsetHint
, null);
447 jContentPane
.add(jLabelBitOffsetHint
, null);
448 jContentPane
.add(jLabelOffsetBitSizeHint
, null);
455 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
457 * Override actionPerformed to listen all actions
460 public void actionPerformed(ActionEvent arg0
) {
461 if (arg0
.getSource() == jButtonOk
) {
462 this.setEdited(true);
466 if (arg0
.getSource() == jButtonCancel
) {
470 if (arg0
.getSource() == jButtonGenerateGuid
) {
471 jTextFieldGuid
.setText(Tools
.generateUuidString());
476 This method initializes Usage type
479 private void initFrame() {
480 jComboBoxUsage
.addItem("ALWAYS_CONSUMED");
481 jComboBoxUsage
.addItem("SOMETIMES_CONSUMED");
482 jComboBoxUsage
.addItem("ALWAYS_PRODUCED");
483 jComboBoxUsage
.addItem("SOMETIMES_PRODUCED");
484 jComboBoxUsage
.addItem("PRIVATE");
488 Get VariablesDocument.Variables
490 @return VariablesDocument.Variables
493 public VariablesDocument
.Variables
getVariables() {
498 Set VariablesDocument.Variables
500 @param variables The input data of VariablesDocument.Variables
503 public void setVariables(VariablesDocument
.Variables variables
) {
504 this.variables
= variables
;
508 Data validation for all fields
510 @retval true - All datas are valid
511 @retval false - At least one data is invalid
514 public boolean check() {
516 // Check if all required fields are not empty
518 if (isEmpty(this.jTextFieldString
.getText())) {
519 Log
.err("String couldn't be empty");
522 if (isEmpty(this.jTextFieldGuid
.getText())) {
523 Log
.err("Guid couldn't be empty");
528 // Check if all fields have correct data types
530 if (!isEmpty(this.jTextFieldGuid
.getText()) && !DataValidation
.isGuid(this.jTextFieldGuid
.getText())) {
531 Log
.err("Incorrect data type for Guid");
534 if (!isEmpty(this.jTextFieldByteOffset
.getText())
535 && !DataValidation
.isByteOffset(this.jTextFieldByteOffset
.getText())) {
536 Log
.err("Incorrect data type for Byte Offset");
539 if (!isEmpty(this.jTextFieldBitOffset
.getText())
540 && !DataValidation
.isBitOffset(this.jTextFieldBitOffset
.getText())) {
541 Log
.err("Incorrect data type for Bit Offset");
544 if (!isEmpty(this.jTextFieldOffsetBitSize
.getText())
545 && !DataValidation
.isOffsetBitSize(this.jTextFieldOffsetBitSize
.getText())) {
546 Log
.err("Incorrect data type for Bit Offset");
549 if (!isEmpty(this.jTextFieldOverrideID
.getText())
550 && !DataValidation
.isOverrideID(this.jTextFieldOverrideID
.getText())) {
551 Log
.err("Incorrect data type for Override ID");
559 Save all components of Variables
560 if exists variables, set the value directly
561 if not exists variables, new an instance first
566 if (this.variables
== null) {
567 variables
= VariablesDocument
.Variables
.Factory
.newInstance();
569 VariablesDocument
.Variables
.Variable variable
= VariablesDocument
.Variables
.Variable
.Factory
.newInstance();
570 if (!isEmpty(this.jTextFieldString
.getText())) {
571 variable
.setString(this.jTextFieldString
.getText());
573 if (!isEmpty(this.jTextFieldGuid
.getText())) {
574 GuidDocument
.Guid guid
= GuidDocument
.Guid
.Factory
.newInstance();
575 guid
.setStringValue(this.jTextFieldGuid
.getText());
576 variable
.setGuid(guid
);
578 if (!isEmpty(this.jTextFieldByteOffset
.getText())) {
579 variable
.setByteOffset(this.jTextFieldByteOffset
.getText());
581 if (!isEmpty(this.jTextFieldBitOffset
.getText())) {
582 variable
.setBitOffset(Integer
.parseInt(this.jTextFieldBitOffset
.getText()));
584 if (!isEmpty(this.jTextFieldBitOffset
.getText())) {
585 variable
.setOffsetBitSize(Integer
.parseInt(this.jTextFieldBitOffset
.getText()));
587 variable
.setUsage(VariableUsage
.Enum
.forString(jComboBoxUsage
.getSelectedItem().toString()));
588 if (!isEmpty(this.jTextFieldOverrideID
.getText())) {
589 variable
.setOverrideID(Integer
.parseInt(this.jTextFieldOverrideID
.getText()));
592 variables
.setVariableArray(location
, variable
);
594 variables
.addNewVariable();
595 variables
.setVariableArray(variables
.getVariableList().size() - 1, variable
);
597 } catch (Exception e
) {
598 Log
.err("Update Variables", e
.getMessage());