1 package org
.tianocore
.frameworkwizard
.platform
.ui
;
3 import java
.awt
.BorderLayout
;
5 import javax
.swing
.ButtonGroup
;
6 import javax
.swing
.JPanel
;
7 import javax
.swing
.JScrollPane
;
8 import javax
.swing
.JTable
;
9 import javax
.swing
.ListSelectionModel
;
10 import javax
.swing
.event
.ListSelectionEvent
;
11 import javax
.swing
.event
.ListSelectionListener
;
12 import javax
.swing
.table
.DefaultTableModel
;
14 import org
.tianocore
.PlatformSurfaceAreaDocument
;
15 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningPlatformType
;
16 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
17 import javax
.swing
.JCheckBox
;
18 import java
.awt
.FlowLayout
;
19 import javax
.swing
.JRadioButton
;
20 import javax
.swing
.JButton
;
21 import javax
.swing
.JLabel
;
22 import javax
.swing
.JTextField
;
24 public class FpdDynamicPcdBuildDefinitions
extends IInternalFrame
{
29 private static final long serialVersionUID
= 1L;
30 private JPanel jContentPane
= null;
31 private JPanel jPanel
= null;
32 private JPanel jPanel1
= null;
33 private JPanel jPanel2
= null;
34 private JScrollPane jScrollPane
= null;
35 private JTable jTable
= null;
36 private DynPcdTableModel model
= null;
37 private DynPcdTableModel model1
= null;
38 private FpdFileContents ffc
= null;
39 private OpeningPlatformType docConsole
= null;
40 private JPanel jPanel3
= null;
41 private JCheckBox jCheckBox
= null;
42 private JPanel jPanel4
= null;
43 private JRadioButton jRadioButton
= null;
44 private JRadioButton jRadioButton1
= null;
45 private JScrollPane jScrollPane1
= null;
46 private JTable jTable1
= null;
47 private JButton jButton
= null;
48 private JLabel jLabel
= null;
49 private JTextField jTextField
= null;
50 private JLabel jLabel1
= null;
51 private JTextField jTextField1
= null;
52 private JLabel jLabel2
= null;
53 private JLabel jLabel3
= null;
54 private JTextField jTextField2
= null;
55 private JLabel jLabel4
= null;
56 private JTextField jTextField3
= null;
57 private JTextField jTextField4
= null;
58 private JLabel jLabel5
= null;
59 private JTextField jTextField5
= null;
60 private JRadioButton jRadioButton2
= null;
61 private ButtonGroup bg
= new ButtonGroup();
62 private JLabel jLabel6
= null;
64 * This is the default constructor
66 public FpdDynamicPcdBuildDefinitions() {
71 public FpdDynamicPcdBuildDefinitions(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
){
76 public FpdDynamicPcdBuildDefinitions(OpeningPlatformType opt
) {
77 this(opt
.getXmlFpd());
81 public void init(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
) {
83 ffc
= new FpdFileContents(fpd
);
85 String
[][] saa
= new String
[ffc
.getDynamicPcdBuildDataCount()][5];
86 ffc
.getDynamicPcdBuildData(saa
);
87 for (int i
= 0; i
< saa
.length
; ++i
) {
91 saa
= new String
[ffc
.getPlatformDefsSkuInfoCount()][2];
92 ffc
.getPlatformDefsSkuInfos(saa
);
93 for (int i
= 0; i
< saa
.length
; ++i
) {
94 model1
.addRow(saa
[i
]);
99 * This method initializes this
103 private void initialize() {
104 this.setSize(661, 558);
105 this.setTitle("Dynamic PCD Build Definitions");
106 this.setContentPane(getJContentPane());
107 this.setVisible(true);
111 * This method initializes jContentPane
113 * @return javax.swing.JPanel
115 private JPanel
getJContentPane() {
116 if (jContentPane
== null) {
117 jContentPane
= new JPanel();
118 jContentPane
.setLayout(new BorderLayout());
119 jContentPane
.add(getJPanel(), java
.awt
.BorderLayout
.NORTH
);
120 jContentPane
.add(getJPanel1(), java
.awt
.BorderLayout
.CENTER
);
121 jContentPane
.add(getJPanel2(), java
.awt
.BorderLayout
.SOUTH
);
127 * This method initializes jPanel
129 * @return javax.swing.JPanel
131 private JPanel
getJPanel() {
132 if (jPanel
== null) {
133 jPanel
= new JPanel();
139 * This method initializes jPanel1
141 * @return javax.swing.JPanel
143 private JPanel
getJPanel1() {
144 if (jPanel1
== null) {
145 jPanel1
= new JPanel();
146 jPanel1
.add(getJScrollPane(), null);
147 jPanel1
.add(getJPanel3(), null);
148 jPanel1
.add(getJPanel4(), null);
154 * This method initializes jPanel2
156 * @return javax.swing.JPanel
158 private JPanel
getJPanel2() {
159 if (jPanel2
== null) {
160 jPanel2
= new JPanel();
166 * This method initializes jScrollPane
168 * @return javax.swing.JScrollPane
170 private JScrollPane
getJScrollPane() {
171 if (jScrollPane
== null) {
172 jScrollPane
= new JScrollPane();
173 jScrollPane
.setPreferredSize(new java
.awt
.Dimension(600,200));
174 jScrollPane
.setViewportView(getJTable());
180 * This method initializes jTable
182 * @return javax.swing.JTable
184 private JTable
getJTable() {
185 if (jTable
== null) {
186 model
= new DynPcdTableModel();
187 model
.addColumn("CName");
188 model
.addColumn("Token");
189 model
.addColumn("TokenSpaceGuid");
190 model
.addColumn("MaxDatumSize");
191 model
.addColumn("DatumType");
192 jTable
= new JTable(model
);
193 jTable
.setRowHeight(20);
194 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
195 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
196 public void valueChanged(ListSelectionEvent e
) {
197 if (e
.getValueIsAdjusting()){
200 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
201 if (lsm
.isSelectionEmpty()) {
205 int selectedRow
= lsm
.getMinSelectionIndex();
207 displayDetails(selectedRow
);
215 // should display default sku info here, as no selection event of table1 will be triggered when change selection of rows in table.
217 private void displayDetails(int i
) {
218 jTable1
.changeSelection(0, 1, false, false);
219 int skuCount
= ffc
.getDynamicPcdSkuInfoCount(i
);
220 String defaultVal
= ffc
.getDynamicPcdBuildDataValue(i
);
221 if (defaultVal
!= null) {
222 jRadioButton2
.setSelected(true);
223 jTextField5
.setText(defaultVal
);
224 if ( skuCount
== 1) {
225 jCheckBox
.setSelected(false);
228 jCheckBox
.setSelected(true);
232 else if (ffc
.getDynamicPcdBuildDataVpdOffset(i
) != null) {
233 jRadioButton1
.setSelected(true);
234 jTextField4
.setText(ffc
.getDynamicPcdBuildDataVpdOffset(i
));
236 jCheckBox
.setSelected(false);
240 jCheckBox
.setSelected(true);
244 jRadioButton
.setSelected(true);
245 String
[][] saa
= new String
[ffc
.getDynamicPcdSkuInfoCount(i
)][7];
246 ffc
.getDynamicPcdSkuInfos(i
, saa
);
247 jTextField
.setText(saa
[0][1]);
248 jTextField1
.setText(saa
[0][2]);
249 jTextField2
.setText(saa
[0][3]);
250 jTextField3
.setText(saa
[0][4]);
252 jCheckBox
.setSelected(false);
255 jCheckBox
.setSelected(true);
261 private void displaySkuInfoDetails(int i
) {
262 int pcdSelected
= jTable
.getSelectedRow();
263 if (pcdSelected
< 0) {
267 String
[][] saa
= new String
[ffc
.getDynamicPcdSkuInfoCount(pcdSelected
)][7];
268 ffc
.getDynamicPcdSkuInfos(pcdSelected
, saa
);
270 if (saa
[i
][5] != null){
271 jRadioButton1
.setSelected(true);
272 jTextField4
.setText(saa
[i
][5]);
275 else if (saa
[i
][1] != null) {
276 jRadioButton
.setSelected(true);
277 jTextField
.setText(saa
[i
][1]);
278 jTextField1
.setText(saa
[i
][2]);
279 jTextField2
.setText(saa
[i
][3]);
280 jTextField3
.setText(saa
[i
][4]);
284 jRadioButton2
.setSelected(true);
285 jTextField5
.setText(saa
[i
][6]);
291 * This method initializes jPanel3
293 * @return javax.swing.JPanel
295 private JPanel
getJPanel3() {
296 if (jPanel3
== null) {
297 FlowLayout flowLayout
= new FlowLayout();
298 flowLayout
.setAlignment(java
.awt
.FlowLayout
.LEFT
);
299 jPanel3
= new JPanel();
300 jPanel3
.setBorder(javax
.swing
.BorderFactory
.createEtchedBorder(javax
.swing
.border
.EtchedBorder
.RAISED
));
301 jPanel3
.setLayout(flowLayout
);
302 jPanel3
.setPreferredSize(new java
.awt
.Dimension(600,100));
303 jPanel3
.add(getJCheckBox(), null);
304 jPanel3
.add(getJScrollPane1(), null);
305 jPanel3
.add(getJButton(), null);
311 * This method initializes jCheckBox
313 * @return javax.swing.JCheckBox
315 private JCheckBox
getJCheckBox() {
316 if (jCheckBox
== null) {
317 jCheckBox
= new JCheckBox();
318 jCheckBox
.setText("SKU Enable");
319 jCheckBox
.addItemListener(new java
.awt
.event
.ItemListener() {
320 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
321 jTable1
.setEnabled(jCheckBox
.isSelected());
330 * This method initializes jPanel4
332 * @return javax.swing.JPanel
334 private JPanel
getJPanel4() {
335 if (jPanel4
== null) {
336 jLabel5
= new JLabel();
337 jLabel5
.setPreferredSize(new java
.awt
.Dimension(80,20));
338 jLabel5
.setText("VPD Offset");
339 jLabel4
= new JLabel();
340 jLabel4
.setPreferredSize(new java
.awt
.Dimension(100,20));
341 jLabel4
.setText("HII Default Value");
342 jLabel3
= new JLabel();
343 jLabel3
.setText("Variable Offset");
344 jLabel3
.setPreferredSize(new java
.awt
.Dimension(90,20));
345 jLabel2
= new JLabel();
346 jLabel2
.setText(" ");
347 jLabel1
= new JLabel();
348 jLabel1
.setText("Variable GUID");
349 jLabel1
.setPreferredSize(new java
.awt
.Dimension(100,20));
350 jLabel
= new JLabel();
351 jLabel
.setText("Variable Name");
352 jLabel
.setToolTipText("");
353 jLabel
.setPreferredSize(new java
.awt
.Dimension(90,20));
354 FlowLayout flowLayout1
= new FlowLayout();
355 flowLayout1
.setAlignment(java
.awt
.FlowLayout
.LEFT
);
356 jPanel4
= new JPanel();
357 jPanel4
.setBorder(javax
.swing
.BorderFactory
.createEtchedBorder(javax
.swing
.border
.EtchedBorder
.LOWERED
));
358 jPanel4
.setLayout(flowLayout1
);
359 jPanel4
.setPreferredSize(new java
.awt
.Dimension(600,120));
360 jPanel4
.add(getJRadioButton(), null);
361 jPanel4
.add(jLabel
, null);
362 jPanel4
.add(getJTextField(), null);
363 jPanel4
.add(jLabel1
, null);
364 jPanel4
.add(getJTextField1(), null);
365 jPanel4
.add(jLabel2
, null);
366 jPanel4
.add(jLabel3
, null);
367 jPanel4
.add(getJTextField2(), null);
368 jPanel4
.add(jLabel4
, null);
369 jPanel4
.add(getJTextField3(), null);
370 jPanel4
.add(getJRadioButton1(), null);
371 jPanel4
.add(jLabel5
, null);
372 jPanel4
.add(getJTextField4(), null);
373 jLabel6
= new JLabel();
374 jLabel6
.setText(" ");
375 jPanel4
.add(jLabel6
, null);
376 jLabel
.setEnabled(false);
377 jLabel1
.setEnabled(false);
378 jLabel4
.setEnabled(false);
379 jLabel3
.setEnabled(false);
380 jLabel5
.setEnabled(false);
381 jPanel4
.add(getJRadioButton2(), null);
382 jPanel4
.add(getJTextField5(), null);
383 bg
.add(jRadioButton
);
384 bg
.add(jRadioButton1
);
391 * This method initializes jRadioButton
393 * @return javax.swing.JRadioButton
395 private JRadioButton
getJRadioButton() {
396 if (jRadioButton
== null) {
397 jRadioButton
= new JRadioButton();
398 jRadioButton
.setText("HII Enable");
399 jRadioButton
.addItemListener(new java
.awt
.event
.ItemListener() {
400 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
401 boolean selected
= jRadioButton
.isSelected();
402 jLabel
.setEnabled(selected
);
403 jLabel1
.setEnabled(selected
);
404 jLabel2
.setEnabled(selected
);
405 jLabel3
.setEnabled(selected
);
406 jLabel4
.setEnabled(selected
);
407 jTextField
.setEnabled(selected
);
408 jTextField1
.setEnabled(selected
);
409 jTextField2
.setEnabled(selected
);
410 jTextField3
.setEnabled(selected
);
418 * This method initializes jRadioButton1
420 * @return javax.swing.JRadioButton
422 private JRadioButton
getJRadioButton1() {
423 if (jRadioButton1
== null) {
424 jRadioButton1
= new JRadioButton();
425 jRadioButton1
.setText("VPD Enable");
426 jRadioButton1
.addItemListener(new java
.awt
.event
.ItemListener() {
427 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
428 boolean selected
= jRadioButton1
.isSelected();
429 jTextField4
.setEnabled(selected
);
430 jLabel5
.setEnabled(selected
);
434 return jRadioButton1
;
438 * This method initializes jScrollPane1
440 * @return javax.swing.JScrollPane
442 private JScrollPane
getJScrollPane1() {
443 if (jScrollPane1
== null) {
444 jScrollPane1
= new JScrollPane();
445 jScrollPane1
.setPreferredSize(new java
.awt
.Dimension(300,80));
446 jScrollPane1
.setViewportView(getJTable1());
452 * This method initializes jTable1
454 * @return javax.swing.JTable
456 private JTable
getJTable1() {
457 if (jTable1
== null) {
458 model1
= new DynPcdTableModel();
459 jTable1
= new JTable(model1
);
460 model1
.addColumn("SKU ID");
461 model1
.addColumn("SKU Name");
463 jTable1
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
464 jTable1
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
465 public void valueChanged(ListSelectionEvent e
) {
466 if (jTable
.getSelectedRow() < 0) {
469 if (e
.getValueIsAdjusting()){
472 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
473 if (lsm
.isSelectionEmpty()) {
477 int selected
= lsm
.getMinSelectionIndex();
478 displaySkuInfoDetails(selected
);
487 * This method initializes jButton
489 * @return javax.swing.JButton
491 private JButton
getJButton() {
492 if (jButton
== null) {
493 jButton
= new JButton();
494 jButton
.setPreferredSize(new java
.awt
.Dimension(180,20));
495 jButton
.setText(" Update SKU Information");
496 jButton
.addActionListener(new java
.awt
.event
.ActionListener() {
497 public void actionPerformed(java
.awt
.event
.ActionEvent e
) {
498 int pcdSelected
= jTable
.getSelectedRow();
499 if (pcdSelected
< 0) {
502 docConsole
.setSaved(false);
503 updateSkuInfo(pcdSelected
);
511 private void updateSkuInfo (int pcdSelected
) {
512 int skuCount
= ffc
.getDynamicPcdSkuInfoCount(pcdSelected
);
514 String varName
= null;
515 String varGuid
= null;
516 String varOffset
= null;
517 String hiiDefault
= null;
519 String vpdOffset
= null;
520 if (jRadioButton
.isSelected()) {
521 varName
= jTextField
.getText();
522 varGuid
= jTextField1
.getText();
523 varOffset
= jTextField2
.getText();
524 hiiDefault
= jTextField3
.getText();
526 if (jRadioButton1
.isSelected()) {
527 vpdOffset
= jTextField4
.getText();
529 if (jRadioButton2
.isSelected()) {
530 value
= jTextField5
.getText();
533 // SKU disabled. only modify data for default SKU.
535 if (!jCheckBox
.isSelected()) {
537 ffc
.removeDynamicPcdBuildDataSkuInfo(pcdSelected
);
538 if (jRadioButton
.isSelected()) {
539 ffc
.genDynamicPcdBuildDataSkuInfo("0", varName
, varGuid
, varOffset
, hiiDefault
, null, null, pcdSelected
);
541 else if (jRadioButton1
.isSelected()){
542 ffc
.genDynamicPcdBuildDataSkuInfo("0", null, null, null, null, vpdOffset
, null, pcdSelected
);
545 ffc
.genDynamicPcdBuildDataSkuInfo("0", null, null, null, null, null, value
, pcdSelected
);
550 // SKU Enabled, need add data to all SKUs.
552 if (jCheckBox
.isSelected()) {
555 for (int i
= 1; i
< jTable1
.getRowCount(); ++i
) {
556 ffc
.genDynamicPcdBuildDataSkuInfo(jTable1
.getValueAt(i
, 0)+"", varName
, varGuid
, varOffset
, hiiDefault
, vpdOffset
, value
, pcdSelected
);
560 int row
= jTable1
.getSelectedRow();
564 ffc
.updateDynamicPcdBuildDataSkuInfo(jTable1
.getValueAt(row
, 0)+"", varName
, varGuid
, varOffset
, hiiDefault
, vpdOffset
, value
, pcdSelected
);
569 * This method initializes jTextField
571 * @return javax.swing.JTextField
573 private JTextField
getJTextField() {
574 if (jTextField
== null) {
575 jTextField
= new JTextField();
576 jTextField
.setPreferredSize(new java
.awt
.Dimension(150,20));
577 jTextField
.setEnabled(false);
583 * This method initializes jTextField1
585 * @return javax.swing.JTextField
587 private JTextField
getJTextField1() {
588 if (jTextField1
== null) {
589 jTextField1
= new JTextField();
590 jTextField1
.setPreferredSize(new java
.awt
.Dimension(150,20));
591 jTextField1
.setEnabled(false);
597 * This method initializes jTextField2
599 * @return javax.swing.JTextField
601 private JTextField
getJTextField2() {
602 if (jTextField2
== null) {
603 jTextField2
= new JTextField();
604 jTextField2
.setPreferredSize(new java
.awt
.Dimension(150,20));
605 jTextField2
.setEnabled(false);
611 * This method initializes jTextField3
613 * @return javax.swing.JTextField
615 private JTextField
getJTextField3() {
616 if (jTextField3
== null) {
617 jTextField3
= new JTextField();
618 jTextField3
.setPreferredSize(new java
.awt
.Dimension(150,20));
619 jTextField3
.setEnabled(false);
625 * This method initializes jTextField4
627 * @return javax.swing.JTextField
629 private JTextField
getJTextField4() {
630 if (jTextField4
== null) {
631 jTextField4
= new JTextField();
632 jTextField4
.setPreferredSize(new java
.awt
.Dimension(150,20));
633 jTextField4
.setEnabled(false);
639 * This method initializes jTextField5
641 * @return javax.swing.JTextField
643 private JTextField
getJTextField5() {
644 if (jTextField5
== null) {
645 jTextField5
= new JTextField();
646 jTextField5
.setPreferredSize(new java
.awt
.Dimension(150,20));
652 * This method initializes jRadioButton2
654 * @return javax.swing.JRadioButton
656 private JRadioButton
getJRadioButton2() {
657 if (jRadioButton2
== null) {
658 jRadioButton2
= new JRadioButton();
659 jRadioButton2
.setText("Default PCD Value");
660 jRadioButton2
.setSelected(true);
661 jRadioButton2
.setPreferredSize(new java
.awt
.Dimension(175,20));
662 jRadioButton2
.addItemListener(new java
.awt
.event
.ItemListener() {
663 public void itemStateChanged(java
.awt
.event
.ItemEvent e
) {
664 jTextField5
.setEnabled(jRadioButton2
.isSelected());
667 bg
.add(jRadioButton2
);
669 return jRadioButton2
;
672 } // @jve:decl-index=0:visual-constraint="10,10"
674 class DynPcdTableModel
extends DefaultTableModel
{
678 private static final long serialVersionUID
= 1L;
680 public boolean isCellEditable(int row
, int col
) {