]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
Fixed grammar in messages.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
1 /** @file
2 Java class SpdPcdDefs is GUI for create PCD definition elements of spd file.
3
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 package org.tianocore.frameworkwizard.packaging.ui;
14
15 import java.awt.Dimension;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ComponentEvent;
18
19 import javax.swing.DefaultCellEditor;
20 import javax.swing.JFrame;
21 import javax.swing.JOptionPane;
22 import javax.swing.JPanel;
23 import javax.swing.JLabel;
24 import javax.swing.JTextField;
25 import javax.swing.JComboBox;
26 import javax.swing.JButton;
27 import javax.swing.ListSelectionModel;
28
29 import javax.swing.event.InternalFrameAdapter;
30 import javax.swing.event.InternalFrameEvent;
31 import javax.swing.event.ListSelectionEvent;
32 import javax.swing.event.ListSelectionListener;
33 import javax.swing.event.TableModelEvent;
34 import javax.swing.event.TableModelListener;
35 import javax.swing.table.DefaultTableModel;
36 import javax.swing.table.TableColumn;
37 import javax.swing.table.TableModel;
38
39 import org.tianocore.PackageSurfaceAreaDocument;
40
41 import org.tianocore.frameworkwizard.common.DataValidation;
42 import org.tianocore.frameworkwizard.common.Tools;
43 import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;
44 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;
45 import org.tianocore.frameworkwizard.common.ui.StarLabel;
46 import javax.swing.JScrollPane;
47 import javax.swing.JTable;
48 import javax.swing.JCheckBox;
49 import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;
50 import org.tianocore.frameworkwizard.platform.ui.ListEditor;
51
52 import java.awt.Rectangle;
53 import java.util.Vector;
54
55 /**
56 GUI for create PCD definition elements of spd file
57
58 @since PackageEditor 1.0
59 **/
60 public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
61
62 /**
63 *
64 */
65 private static final long serialVersionUID = 1L;
66
67 static JFrame frame;
68
69 private JPanel jContentPane = null;
70
71 private JLabel jLabelItemType = null;
72
73 private JLabel jLabelC_Name = null;
74
75 private JTextField jTextFieldC_Name = null;
76
77 private JLabel jLabelToken = null;
78
79 private JTextField jTextFieldToken = null;
80
81 private JLabel jLabelDataType = null;
82
83 private JButton jButtonOk = null;
84
85 private JButton jButtonCancel = null;
86
87 private JComboBox jComboBoxDataType = null;
88
89 private SpdFileContents sfc = null;
90
91 private OpeningPackageType docConsole = null;
92
93 private StarLabel jStarLabel2 = null;
94
95 private StarLabel jStarLabel3 = null;
96
97 private StarLabel jStarLabel4 = null;
98
99 private StarLabel jStarLabel = null;
100
101 private StarLabel jStarLabel1 = null;
102
103 private JLabel jLabelTokenSpace = null;
104
105 private JComboBox jComboBoxTsGuid = null;
106
107 private JLabel jLabelVarVal = null;
108
109 private JTextField jTextFieldHelp = null;
110
111 private JLabel jLabelDefVal = null;
112
113 private JTextField jTextFieldDefaultValue = null;
114
115 private JButton jButtonAdd = null;
116
117 private CheckboxTableModel model = null;
118
119 private JButton jButtonRemove = null;
120
121 private JButton jButtonClearAll = null;
122
123 private JScrollPane jScrollPane = null;
124
125 private JTable jTable = null;
126
127 private JScrollPane topScrollPane = null; // @jve:decl-index=0:visual-constraint="390,10"
128
129 private int selectedRow = -1;
130
131 private StarLabel starLabel = null;
132
133 private JCheckBox jCheckBoxFeatureFlag = null;
134
135 private JCheckBox jCheckBoxFixedAtBuild = null;
136
137 private JCheckBox jCheckBoxPatchInMod = null;
138
139 private JCheckBox jCheckBoxDyn = null;
140
141 private JCheckBox jCheckBoxDynEx = null;
142
143 private JScrollPane jScrollPaneArch = null;
144
145 private ICheckBoxList iCheckBoxListArch = null;
146
147 private JScrollPane jScrollPaneMod = null;
148
149 private ICheckBoxList iCheckBoxListMod = null;
150
151 private JLabel jLabelSupMod = null;
152
153 private JLabel jLabelSupArch = null;
154
155 /**
156 This method initializes this
157
158 **/
159 private void initialize() {
160 this.setTitle("PCD Declarations");
161 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
162
163 }
164
165 /**
166 This method initializes jTextFieldC_Name
167
168 @return javax.swing.JTextField
169 **/
170 private JTextField getJTextFieldC_Name() {
171 if (jTextFieldC_Name == null) {
172 jTextFieldC_Name = new JTextField();
173 jTextFieldC_Name.setBounds(new java.awt.Rectangle(156,9,317,20));
174 jTextFieldC_Name.setPreferredSize(new java.awt.Dimension(315,20));
175 }
176 return jTextFieldC_Name;
177 }
178
179 /**
180 This method initializes jTextFieldToken
181
182 @return javax.swing.JTextField
183 **/
184 private JTextField getJTextFieldToken() {
185 if (jTextFieldToken == null) {
186 jTextFieldToken = new JTextField();
187 jTextFieldToken.setBounds(new java.awt.Rectangle(156,33,317,20));
188 jTextFieldToken.setPreferredSize(new java.awt.Dimension(315,20));
189 }
190 return jTextFieldToken;
191 }
192
193 /**
194 This method initializes jButtonOk
195
196 @return javax.swing.JButton
197 **/
198 private JButton getJButtonOk() {
199 if (jButtonOk == null) {
200 jButtonOk = new JButton();
201 jButtonOk.setText("OK");
202 jButtonOk.setBounds(new java.awt.Rectangle(279,276,90,20));
203 jButtonOk.setVisible(false);
204 jButtonOk.addActionListener(this);
205 }
206 return jButtonOk;
207 }
208
209 /**
210 This method initializes jButtonCancel
211
212 @return javax.swing.JButton
213 **/
214 private JButton getJButtonCancel() {
215 if (jButtonCancel == null) {
216 jButtonCancel = new JButton();
217 jButtonCancel.setText("Cancel");
218 jButtonCancel.setBounds(new java.awt.Rectangle(389,276,82,20));
219 jButtonCancel.setVisible(false);
220 jButtonCancel.addActionListener(this);
221 }
222 return jButtonCancel;
223 }
224
225 /**
226 This method initializes jComboBoxDataType
227
228 @return javax.swing.JComboBox
229 **/
230 private JComboBox getJComboBoxDataType() {
231 if (jComboBoxDataType == null) {
232 jComboBoxDataType = new JComboBox();
233 jComboBoxDataType.setBounds(new java.awt.Rectangle(156,84,110,20));
234 }
235 return jComboBoxDataType;
236 }
237
238 /**
239 This is the default constructor
240 **/
241 public SpdPcdDefs() {
242 super();
243 init();
244 initialize();
245
246 }
247
248 public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {
249 this();
250 sfc = new SpdFileContents(inPsa);
251 init(sfc);
252 }
253
254 public SpdPcdDefs(OpeningPackageType opt) {
255 this(opt.getXmlSpd());
256 docConsole = opt;
257 }
258 /**
259 This method initializes this
260
261 @return void
262 **/
263 private void init() {
264 this.setSize(500, 650);
265 this.setContentPane(getJContentPane());
266 this.addInternalFrameListener(new InternalFrameAdapter(){
267 public void internalFrameDeactivated(InternalFrameEvent e){
268 if (jTable.isEditing()) {
269 jTable.getCellEditor().stopCellEditing();
270 }
271 }
272 });
273
274 this.setVisible(true);
275 }
276
277 private void init(SpdFileContents sfc){
278 initFrame(sfc);
279 if (sfc.getSpdPcdDefinitionCount() == 0) {
280 return ;
281 }
282 String[][] saa = new String[sfc.getSpdPcdDefinitionCount()][8];
283 String[][] usage = new String[sfc.getSpdPcdDefinitionCount()][5];
284 Object[] rowData = new Object[13];
285 sfc.getSpdPcdDefinitions(saa, usage);
286 int i = 0;
287 while (i < saa.length) {
288
289 for (int k = 0; k < 6; ++k) {
290 rowData[k] = saa[i][k];
291 }
292 for (int m = 6; m < 11; ++m) {
293 rowData[m] = new Boolean("false");
294 }
295 int j = 0;
296 while (j < 5) {
297 if (usage[i][j] == null || usage[i][j].length()==0){
298 ++j;
299 continue;
300 }
301 if (usage[i][j].equals("FEATURE_FLAG")){
302 rowData[6] = new Boolean("true");
303 }
304 if (usage[i][j].equals("FIXED_AT_BUILD")){
305 rowData[7] = new Boolean("true");
306 }
307 if (usage[i][j].equals("PATCHABLE_IN_MODULE")){
308 rowData[8] = new Boolean("true");
309 }
310 if (usage[i][j].equals("DYNAMIC")){
311 rowData[9] = new Boolean("true");
312 }
313 if (usage[i][j].equals("DYNAMIC_EX")){
314 rowData[10] = new Boolean("true");
315 }
316
317 ++j;
318 }
319
320 rowData[11] = saa[i][6];
321 rowData[12] = saa[i][7];
322
323 model.addRow(rowData);
324
325 i++;
326 }
327
328
329
330 }
331
332 private JScrollPane getJContentPane(){
333 if (topScrollPane == null){
334 topScrollPane = new JScrollPane();
335 topScrollPane.setSize(new java.awt.Dimension(482,451));
336 topScrollPane.setViewportView(getJContentPane1());
337 }
338 return topScrollPane;
339 }
340 private JPanel getJContentPane1() {
341 if (jContentPane == null) {
342
343 jLabelSupArch = new JLabel();
344 jLabelSupArch.setBounds(new java.awt.Rectangle(241,192,89,16));
345 jLabelSupArch.setText("Supported Architectures");
346 jLabelSupArch.setEnabled(true);
347 jLabelSupMod = new JLabel();
348 jLabelSupMod.setBounds(new java.awt.Rectangle(15,193,103,16));
349 jLabelSupMod.setText("Supported Module type");
350 jLabelSupMod.setEnabled(true);
351 starLabel = new StarLabel();
352 starLabel.setBounds(new java.awt.Rectangle(2,134,10,20));
353 jLabelDefVal = new JLabel();
354 jLabelDefVal.setBounds(new java.awt.Rectangle(277,84,80,20));
355 jLabelDefVal.setText("Default Value");
356 jLabelVarVal = new JLabel();
357 jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,84,20));
358 jLabelVarVal.setText("Valid Usage");
359 jLabelC_Name = new JLabel();
360 jLabelC_Name.setText("C Name");
361 jLabelC_Name.setBounds(new java.awt.Rectangle(11,9,140,20));
362 jLabelTokenSpace = new JLabel();
363 jLabelTokenSpace.setBounds(new java.awt.Rectangle(11,58,140,20));
364 jLabelTokenSpace.setText("Token Space");
365 jLabelDataType = new JLabel();
366 jLabelDataType.setText("Data Type");
367 jLabelDataType.setBounds(new java.awt.Rectangle(11,83,140,20));
368 jLabelToken = new JLabel();
369 jLabelToken.setText("Token");
370 jLabelToken.setBounds(new java.awt.Rectangle(11,33,140,20));
371 jLabelItemType = new JLabel();
372 jLabelItemType.setText("Help Text");
373 jLabelItemType.setBounds(new java.awt.Rectangle(11,108,140,20));
374
375
376 jContentPane = new JPanel();
377 jContentPane.setLayout(null);
378 jContentPane.setPreferredSize(new java.awt.Dimension(479,375));
379
380 jContentPane.add(jLabelItemType, null);
381 jContentPane.add(jLabelC_Name, null);
382 jContentPane.add(jLabelTokenSpace, null);
383 jContentPane.add(getJComboBoxTsGuid(), null);
384 jContentPane.add(jLabelVarVal, null);
385 jContentPane.add(getJTextFieldC_Name(), null);
386 jContentPane.add(jLabelToken, null);
387 jContentPane.add(getJTextFieldToken(), null);
388 jContentPane.add(jLabelDataType, null);
389 jContentPane.add(getJButtonOk(), null);
390 jContentPane.add(getJButtonCancel(), null);
391 jContentPane.add(getJComboBoxDataType(), null);
392
393 jStarLabel = new StarLabel();
394 jStarLabel1 = new StarLabel();
395 jStarLabel1.setBounds(new java.awt.Rectangle(2,8,10,20));
396 jStarLabel2 = new StarLabel();
397 jStarLabel3 = new StarLabel();
398 jStarLabel4 = new StarLabel();
399 jStarLabel.setLocation(new java.awt.Point(2,84));
400 jStarLabel4.setLocation(new java.awt.Point(2, 109));
401 jStarLabel2.setLocation(new java.awt.Point(2,33));
402 jStarLabel3.setLocation(new java.awt.Point(2, 58));
403 jStarLabel3.setSize(new java.awt.Dimension(8,20));
404 jContentPane.add(jStarLabel2, null);
405 jContentPane.add(jStarLabel3, null);
406 jContentPane.add(jStarLabel, null);
407 jContentPane.add(jStarLabel1, null);
408 jContentPane.add(jStarLabel4, null);
409 jContentPane.add(getJTextFieldHelp(), null);
410 jContentPane.add(jLabelDefVal, null);
411 jContentPane.add(getJTextFieldDefaultValue(), null);
412 jContentPane.add(getJButtonAdd(), null);
413 jContentPane.add(getJButtonRemove(), null);
414 jContentPane.add(getJButtonClearAll(), null);
415 jContentPane.add(getJScrollPane(), null);
416 jContentPane.add(starLabel, null);
417 jContentPane.add(getJCheckBoxFeatureFlag(), null);
418 jContentPane.add(getJCheckBoxFixedAtBuild(), null);
419 jContentPane.add(getJCheckBoxPatchInMod(), null);
420 jContentPane.add(getJCheckBoxDyn(), null);
421 jContentPane.add(getJCheckBoxDynEx(), null);
422 jContentPane.add(getJScrollPaneArch(), null);
423 jContentPane.add(getJScrollPaneMod(), null);
424 jContentPane.add(jLabelSupMod, null);
425 jContentPane.add(jLabelSupArch, null);
426 }
427 return jContentPane;
428 }
429
430 /**
431 This method initializes comboboxes
432 jContentPane.add(jLabelTokenSpace, null);
433
434 **/
435 private void initFrame(SpdFileContents sfc) {
436
437 jComboBoxDataType.addItem("UINT8");
438 jComboBoxDataType.addItem("UINT16");
439 jComboBoxDataType.addItem("UINT32");
440 jComboBoxDataType.addItem("UINT64");
441 jComboBoxDataType.addItem("VOID*");
442 jComboBoxDataType.addItem("BOOLEAN");
443 jComboBoxDataType.setSelectedIndex(0);
444
445 Vector<String> vGuidCName = new Vector<String>();
446 sfc.getSpdGuidDeclWithType(vGuidCName, "TOKEN_SPACE_GUID");
447 for (int i = 0; i < vGuidCName.size(); ++i) {
448 jComboBoxTsGuid.addItem(vGuidCName.get(i));
449 }
450 }
451
452 public void actionPerformed(ActionEvent arg0) {
453
454
455 if (arg0.getSource() == jButtonOk) {
456 this.save();
457 this.dispose();
458 }
459 if (arg0.getSource() == jButtonCancel) {
460 this.dispose();
461 }
462
463 if (arg0.getSource() == jButtonAdd) {
464 //ToDo: check before add
465
466 boolean[] b = {jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected()};
467 if (!checkValidUsage(b)) {
468 return;
469 }
470 String archList = vectorToString(iCheckBoxListArch.getAllCheckedItemsString());
471 if (archList.length() == 0) {
472 archList = null;
473 }
474 String modTypeList = vectorToString(iCheckBoxListMod.getAllCheckedItemsString());
475 if (modTypeList.length() == 0) {
476 modTypeList = null;
477 }
478 Object[] row = {jTextFieldC_Name.getText(), jTextFieldToken.getText(),
479 jComboBoxTsGuid.getSelectedItem(), jComboBoxDataType.getSelectedItem(),
480 jTextFieldDefaultValue.getText(), jTextFieldHelp.getText(),
481 jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(),
482 jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected(),
483 archList, modTypeList};
484 if (!dataValidation(row)) {
485 return;
486 }
487
488 if (tokenCNameExisted(jTextFieldToken.getText(), jTextFieldC_Name.getText())) {
489 return;
490 }
491
492 model.addRow(row);
493 jTable.changeSelection(model.getRowCount()-1, 0, false, false);
494 String usage = getValidUsage(jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected());
495 if (usage.length() == 0) {
496 usage = null;
497 }
498 sfc.genSpdPcdDefinitions(row[0]+"", row[1]+"", row[3]+"", usage, row[2]+"", row[4]+"", row[5]+"", archList, modTypeList);
499 docConsole.setSaved(false);
500 }
501 //
502 // remove selected line
503 //
504 if (arg0.getSource() == jButtonRemove) {
505 if (jTable.isEditing()){
506 jTable.getCellEditor().stopCellEditing();
507 }
508 int rowSelected = selectedRow;
509 if (rowSelected >= 0) {
510 model.removeRow(rowSelected);
511 sfc.removeSpdPcdDefinition(rowSelected);
512 docConsole.setSaved(false);
513 }
514 }
515
516 if (arg0.getSource() == jButtonClearAll) {
517 if (model.getRowCount() == 0) {
518 return;
519 }
520 model.setRowCount(0);
521 sfc.removeSpdPcdDefinition();
522 docConsole.setSaved(false);
523 }
524
525 }
526
527 protected void save() {
528
529 }
530
531 /**
532 * This method initializes jComboBoxTsGuid
533 *
534 * @return javax.swing.JComboBox
535 */
536 private JComboBox getJComboBoxTsGuid() {
537 if (jComboBoxTsGuid == null) {
538 jComboBoxTsGuid = new JComboBox();
539 jComboBoxTsGuid.setBounds(new java.awt.Rectangle(156,58,315,20));
540
541 }
542 return jComboBoxTsGuid;
543 }
544
545 /**
546 * This method initializes jTextField
547 *
548 * @return javax.swing.JTextField
549 */
550 private JTextField getJTextFieldHelp() {
551 if (jTextFieldHelp == null) {
552 jTextFieldHelp = new JTextField();
553 jTextFieldHelp.setBounds(new java.awt.Rectangle(156,108,317,20));
554 jTextFieldHelp.setPreferredSize(new java.awt.Dimension(315,20));
555 }
556 return jTextFieldHelp;
557 }
558
559 /**
560 * This method initializes jTextFieldDefaultValue
561 *
562 * @return javax.swing.JTextField
563 */
564 private JTextField getJTextFieldDefaultValue() {
565 if (jTextFieldDefaultValue == null) {
566 jTextFieldDefaultValue = new JTextField();
567 jTextFieldDefaultValue.setBounds(new java.awt.Rectangle(368,84,105,20));
568 jTextFieldDefaultValue.setPreferredSize(new java.awt.Dimension(104,20));
569 }
570 return jTextFieldDefaultValue;
571 }
572
573 /**
574 * This method initializes jButtonAdd
575 *
576 * @return javax.swing.JButton
577 */
578 private JButton getJButtonAdd() {
579 if (jButtonAdd == null) {
580 jButtonAdd = new JButton();
581 jButtonAdd.setBounds(new java.awt.Rectangle(195,277,71,20));
582 jButtonAdd.setPreferredSize(new java.awt.Dimension(70,20));
583 jButtonAdd.setText("Add");
584 jButtonAdd.addActionListener(this);
585 }
586 return jButtonAdd;
587
588 }
589
590 /**
591 * This method initializes jButtonRemove
592 *
593 * @return javax.swing.JButton
594 */
595 private JButton getJButtonRemove() {
596 if (jButtonRemove == null) {
597 jButtonRemove = new JButton();
598 jButtonRemove.setBounds(new java.awt.Rectangle(278,277,81,20));
599 jButtonRemove.setPreferredSize(new java.awt.Dimension(70,20));
600 jButtonRemove.setText("Delete");
601 jButtonRemove.addActionListener(this);
602 }
603 return jButtonRemove;
604 }
605
606 /**
607 * This method initializes jButtonClearAll
608 *
609 * @return javax.swing.JButton
610 */
611 private JButton getJButtonClearAll() {
612 if (jButtonClearAll == null) {
613 jButtonClearAll = new JButton();
614 jButtonClearAll.setBounds(new java.awt.Rectangle(382,277,90,20));
615 jButtonClearAll.setPreferredSize(new java.awt.Dimension(81,20));
616 jButtonClearAll.setText("Clear All");
617 jButtonClearAll.addActionListener(this);
618 }
619 return jButtonClearAll;
620 }
621
622 public void componentResized(ComponentEvent arg0) {
623 int intPreferredWidth = 500;
624
625 Tools.resizeComponentWidth(this.jTextFieldC_Name, this.getWidth(), intPreferredWidth);
626 Tools.resizeComponentWidth(this.jTextFieldToken, this.getWidth(), intPreferredWidth);
627 Tools.resizeComponentWidth(this.jComboBoxTsGuid, this.getWidth(), intPreferredWidth);
628 Tools.resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);
629 Tools.resizeComponentWidth(this.jTextFieldHelp, this.getWidth(), intPreferredWidth);
630 Tools.resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);
631
632 Tools.resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);
633 // relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
634 // relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
635 // relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);
636 }
637
638 /**
639 * This method initializes jScrollPane
640 *
641 * @return javax.swing.JScrollPane
642 */
643 private JScrollPane getJScrollPane() {
644 if (jScrollPane == null) {
645 jScrollPane = new JScrollPane();
646 jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,259));
647 jScrollPane.setViewportView(getJTable());
648 }
649 return jScrollPane;
650 }
651
652 /**
653 * This method initializes jTable
654 *
655 * @return javax.swing.JTable
656 */
657 private JTable getJTable() {
658 if (jTable == null) {
659 model = new CheckboxTableModel();
660 jTable = new JTable(model);
661 jTable.setRowHeight(20);
662 jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
663 jTable.setSize(new Dimension(1000, 300));
664
665 model.addColumn("C_Name");
666 model.addColumn("Token");
667 model.addColumn("TokenSpace");
668 model.addColumn("DatumType");
669 model.addColumn("DefaultValue");
670 model.addColumn("HelpText");
671
672 model.addColumn("FeatureFlag");
673 model.addColumn("FixedAtBuild");
674 model.addColumn("PatchableInModule");
675 model.addColumn("Dynamic");
676 model.addColumn("DynamicEx");
677 model.addColumn("SupportedArch");
678 model.addColumn("SupportedModule");
679
680 //ToDo: add a valid usage editor
681
682 JComboBox jComboBoxDataType = new JComboBox();
683 jComboBoxDataType.addItem("UINT8");
684 jComboBoxDataType.addItem("UINT16");
685 jComboBoxDataType.addItem("UINT32");
686 jComboBoxDataType.addItem("UINT64");
687 jComboBoxDataType.addItem("VOID*");
688 jComboBoxDataType.addItem("BOOLEAN");
689 TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);
690 dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));
691
692 Vector<String> vArch = new Vector<String>();
693 vArch.add("IA32");
694 vArch.add("X64");
695 vArch.add("IPF");
696 vArch.add("EBC");
697 vArch.add("ARM");
698 vArch.add("PPC");
699 jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));
700
701 Vector<String> vModule = new Vector<String>();
702 vModule.add("BASE");
703 vModule.add("SEC");
704 vModule.add("PEI_CORE");
705 vModule.add("PEIM");
706 vModule.add("DXE_CORE");
707 vModule.add("DXE_DRIVER");
708 vModule.add("DXE_RUNTIME_DRIVER");
709 vModule.add("DXE_SAL_DRIVER");
710 vModule.add("DXE_SMM_DRIVER");
711 vModule.add("UEFI_DRIVER");
712 vModule.add("UEFI_APPLICATION");
713 vModule.add("USER_DEFINED");
714 jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));
715
716 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
717 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
718 public void valueChanged(ListSelectionEvent e) {
719 if (e.getValueIsAdjusting()){
720 return;
721 }
722 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
723 if (lsm.isSelectionEmpty()) {
724 return;
725 }
726 else{
727 selectedRow = lsm.getMinSelectionIndex();
728 }
729 }
730 });
731
732 jTable.getModel().addTableModelListener(this);
733 }
734 return jTable;
735 }
736
737 public void tableChanged(TableModelEvent arg0) {
738 // TODO Auto-generated method stub
739 int row = arg0.getFirstRow();
740 int column = arg0.getColumn();
741 TableModel m = (TableModel)arg0.getSource();
742 if (arg0.getType() == TableModelEvent.UPDATE){
743 String[] sa = new String[9];
744 sfc.getSpdPcdDeclaration(sa, row);
745 Object cellData = m.getValueAt(row, column);
746 if (column < 6) {
747
748 if (cellData == null) {
749 cellData = "";
750 }
751 if (cellData.equals(sa[column])) {
752 return;
753 }
754 if (cellData.toString().length() == 0 && sa[column] == null) {
755 return;
756 }
757 }
758
759 String usage = getValidUsage(new Boolean(m.getValueAt(row, 6)+""), new Boolean(m.getValueAt(row, 7)+""), new Boolean(m.getValueAt(row, 8)+""), new Boolean(m.getValueAt(row, 9)+""), new Boolean(m.getValueAt(row, 10)+""));
760 if (usage.length() == 0) {
761 JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");
762 return;
763 }
764 if (column <= 10 && column >= 6) {
765 if (compareTwoVectors(stringToVector(usage), stringToVector(sa[6]))) {
766 return;
767 }
768 }
769
770 if (column == 11) {
771 if (cellData == null) {
772 cellData = "";
773 }
774 if (cellData.equals(sa[7])) {
775 return;
776 }
777 if (cellData.toString().length() == 0 && sa[7] == null) {
778 return;
779 }
780 }
781
782 if (column == 12) {
783 if (cellData == null) {
784 cellData = "";
785 }
786 if (cellData.equals(sa[8])) {
787 return;
788 }
789 if (cellData.toString().length() == 0 && sa[8] == null) {
790 return;
791 }
792 }
793 String cName = m.getValueAt(row, 0) + "";
794 String token = m.getValueAt(row, 1) + "";
795 String ts = m.getValueAt(row, 2) + "";
796 String dataType = m.getValueAt(row, 3) + "";
797 String defaultVal = m.getValueAt(row, 4) + "";
798 String help = m.getValueAt(row, 5) + "";
799
800
801 String archList = null;
802 if (m.getValueAt(row, 11) != null){
803 archList = m.getValueAt(row, 11).toString();
804 }
805 String modTypeList = null;
806 if (m.getValueAt(row, 12) != null) {
807 modTypeList = m.getValueAt(row, 12).toString();
808 }
809
810 Object[] o = {cName, token, ts, dataType, defaultVal, help};
811 if (!dataValidation(o)){
812 return;
813 }
814 docConsole.setSaved(false);
815 sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);
816 }
817 }
818
819 /**
820 * This method initializes jCheckBox
821 *
822 * @return javax.swing.JCheckBox
823 */
824 private JCheckBox getJCheckBoxFeatureFlag() {
825 if (jCheckBoxFeatureFlag == null) {
826 jCheckBoxFeatureFlag = new JCheckBox();
827 jCheckBoxFeatureFlag.setBounds(new java.awt.Rectangle(156,161,100,21));
828 jCheckBoxFeatureFlag.setText("Feature Flag");
829 jCheckBoxFeatureFlag.setPreferredSize(new java.awt.Dimension(21,20));
830 jCheckBoxFeatureFlag.addItemListener(new java.awt.event.ItemListener() {
831 public void itemStateChanged(java.awt.event.ItemEvent e) {
832 if (jCheckBoxFeatureFlag.isSelected()) {
833 jCheckBoxPatchInMod.setSelected(false);
834 jCheckBoxFixedAtBuild.setSelected(false);
835 jCheckBoxDyn.setSelected(false);
836 jCheckBoxDynEx.setSelected(false);
837 }
838 }
839 });
840 }
841 return jCheckBoxFeatureFlag;
842 }
843
844 /**
845 * This method initializes jCheckBox1
846 *
847 * @return javax.swing.JCheckBox
848 */
849 private JCheckBox getJCheckBoxFixedAtBuild() {
850 if (jCheckBoxFixedAtBuild == null) {
851 jCheckBoxFixedAtBuild = new JCheckBox();
852 jCheckBoxFixedAtBuild.setBounds(new java.awt.Rectangle(312,133,108,20));
853 jCheckBoxFixedAtBuild.setText("Fixed at Build");
854 jCheckBoxFixedAtBuild.setPreferredSize(new java.awt.Dimension(21,20));
855 jCheckBoxFixedAtBuild.addItemListener(new java.awt.event.ItemListener() {
856 public void itemStateChanged(java.awt.event.ItemEvent e) {
857 if (jCheckBoxFixedAtBuild.isSelected()) {
858 jCheckBoxFeatureFlag.setSelected(false);
859 }
860 }
861 });
862 }
863 return jCheckBoxFixedAtBuild;
864 }
865
866 /**
867 * This method initializes jCheckBox2
868 *
869 * @return javax.swing.JCheckBox
870 */
871 private JCheckBox getJCheckBoxPatchInMod() {
872 if (jCheckBoxPatchInMod == null) {
873 jCheckBoxPatchInMod = new JCheckBox();
874 jCheckBoxPatchInMod.setBounds(new java.awt.Rectangle(156,133,154,20));
875 jCheckBoxPatchInMod.setText("Patchable in Module");
876 jCheckBoxPatchInMod.setPreferredSize(new java.awt.Dimension(21,20));
877 jCheckBoxPatchInMod.addItemListener(new java.awt.event.ItemListener() {
878 public void itemStateChanged(java.awt.event.ItemEvent e) {
879 if (jCheckBoxPatchInMod.isSelected()) {
880 jCheckBoxFeatureFlag.setSelected(false);
881 }
882 }
883 });
884 }
885 return jCheckBoxPatchInMod;
886 }
887
888 /**
889 * This method initializes jCheckBox3
890 *
891 * @return javax.swing.JCheckBox
892 */
893 private JCheckBox getJCheckBoxDyn() {
894 if (jCheckBoxDyn == null) {
895 jCheckBoxDyn = new JCheckBox();
896 jCheckBoxDyn.setBounds(new java.awt.Rectangle(278,161,80,20));
897 jCheckBoxDyn.setText("Dynamic");
898 jCheckBoxDyn.setPreferredSize(new java.awt.Dimension(21,20));
899 jCheckBoxDyn.addItemListener(new java.awt.event.ItemListener() {
900 public void itemStateChanged(java.awt.event.ItemEvent e) {
901 if (jCheckBoxDyn.isSelected()) {
902 jCheckBoxFeatureFlag.setSelected(false);
903 }
904 }
905 });
906 }
907 return jCheckBoxDyn;
908 }
909
910 /**
911 * This method initializes jCheckBox4
912 *
913 * @return javax.swing.JCheckBox
914 */
915 private JCheckBox getJCheckBoxDynEx() {
916 if (jCheckBoxDynEx == null) {
917 jCheckBoxDynEx = new JCheckBox();
918 jCheckBoxDynEx.setBounds(new java.awt.Rectangle(371,161,99,20));
919 jCheckBoxDynEx.setText("DynamicEx");
920 jCheckBoxDynEx.setPreferredSize(new java.awt.Dimension(21,20));
921 jCheckBoxDynEx.addItemListener(new java.awt.event.ItemListener() {
922 public void itemStateChanged(java.awt.event.ItemEvent e) {
923 if (jCheckBoxDynEx.isSelected()) {
924 jCheckBoxFeatureFlag.setSelected(false);
925 }
926 }
927 });
928 }
929 return jCheckBoxDynEx;
930 }
931
932 private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {
933 String usage = "";
934 if (ff){
935 usage += "FEATURE_FLAG ";
936 }
937 if (fab){
938 usage += "FIXED_AT_BUILD ";
939 }
940 if (pim){
941 usage += "PATCHABLE_IN_MODULE ";
942 }
943 if (d){
944 usage += "DYNAMIC ";
945 }
946 if (de){
947 usage += "DYNAMIC_EX ";
948 }
949
950 return usage.trim();
951 }
952
953 private boolean tokenCNameExisted(String token, String cName) {
954 Integer inputToken = Integer.decode(token);
955
956 for (int i = 0; i < jTable.getRowCount(); ++i) {
957 if (jTable.getValueAt(i, 0).equals(cName)) {
958 JOptionPane.showMessageDialog(frame, "C_Name already existed in table.");
959 return true;
960 }
961 if (jTable.getValueAt(i, 1).equals(token)) {
962 JOptionPane.showMessageDialog(frame, "Token already existed in table.");
963 return true;
964 }
965 Integer tokenValue = Integer.decode(jTable.getValueAt(i, 1)+"");
966 if (tokenValue.equals(inputToken)) {
967 JOptionPane.showMessageDialog(frame, "Same token value already existed in table.");
968 return true;
969 }
970
971 }
972 return false;
973 }
974
975 private boolean checkValidUsage(boolean[] b) {
976 if (!(b[0] || b[1] || b[2] || b[3] || b[4])){
977 JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");
978 return false;
979 }
980 return true;
981 }
982 private boolean dataValidation(Object[] row) {
983
984 if (!DataValidation.isC_NameType(row[0].toString())) {
985 JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");
986 return false;
987 }
988 if (!DataValidation.isHexDoubleWordDataType(row[1].toString()) &&
989 !DataValidation.isInt(row[1].toString(), Integer.MIN_VALUE, Integer.MAX_VALUE)) {
990 JOptionPane.showMessageDialog(frame, "Token is NOT correct.");
991 return false;
992 }
993 if (!DataValidation.isC_NameType(row[2].toString())) {
994 JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");
995 return false;
996 }
997 if (row[5].toString().length() == 0) {
998 JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");
999 return false;
1000 }
1001 return true;
1002 }
1003
1004 /**
1005 * This method initializes jScrollPane1
1006 *
1007 * @return javax.swing.JScrollPane
1008 */
1009 private JScrollPane getJScrollPaneArch() {
1010 if (jScrollPaneArch == null) {
1011 jScrollPaneArch = new JScrollPane();
1012 jScrollPaneArch.setBounds(new java.awt.Rectangle(242,213,188,54));
1013 jScrollPaneArch.setViewportView(getICheckBoxListArch());
1014 jScrollPaneArch.setPreferredSize(new Dimension(188, 74));
1015 }
1016 return jScrollPaneArch;
1017 }
1018
1019 /**
1020 * This method initializes iCheckBoxList
1021 *
1022 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1023 */
1024 private ICheckBoxList getICheckBoxListArch() {
1025 if (iCheckBoxListArch == null) {
1026 iCheckBoxListArch = new ICheckBoxList();
1027 iCheckBoxListArch.setBounds(new Rectangle(197, 142, 188, 74));
1028 Vector<String> v = new Vector<String>();
1029 v.add("IA32");
1030 v.add("X64");
1031 v.add("IPF");
1032 v.add("EBC");
1033 v.add("ARM");
1034 v.add("PPC");
1035 iCheckBoxListArch.setAllItems(v);
1036 }
1037 return iCheckBoxListArch;
1038 }
1039
1040 /**
1041 * This method initializes jScrollPane2
1042 *
1043 * @return javax.swing.JScrollPane
1044 */
1045 private JScrollPane getJScrollPaneMod() {
1046 if (jScrollPaneMod == null) {
1047 jScrollPaneMod = new JScrollPane();
1048 jScrollPaneMod.setBounds(new java.awt.Rectangle(15,213,199,55));
1049 jScrollPaneMod.setViewportView(getICheckBoxListMod());
1050 jScrollPaneMod.setPreferredSize(new Dimension(170, 74));
1051 }
1052 return jScrollPaneMod;
1053 }
1054
1055 /**
1056 * This method initializes iCheckBoxList1
1057 *
1058 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
1059 */
1060 private ICheckBoxList getICheckBoxListMod() {
1061 if (iCheckBoxListMod == null) {
1062 iCheckBoxListMod = new ICheckBoxList();
1063 iCheckBoxListMod.setBounds(new Rectangle(14, 142, 170, 74));
1064 Vector<String> v = new Vector<String>();
1065 v.add("BASE");
1066 v.add("SEC");
1067 v.add("PEI_CORE");
1068 v.add("PEIM");
1069 v.add("DXE_CORE");
1070 v.add("DXE_DRIVER");
1071 v.add("DXE_RUNTIME_DRIVER");
1072 v.add("DXE_SAL_DRIVER");
1073 v.add("DXE_SMM_DRIVER");
1074 v.add("UEFI_DRIVER");
1075 v.add("UEFI_APPLICATION");
1076 v.add("USER_DEFINED");
1077 iCheckBoxListMod.setAllItems(v);
1078 }
1079 return iCheckBoxListMod;
1080 }
1081
1082 protected String vectorToString(Vector<String> v) {
1083 if (v == null) {
1084 return null;
1085 }
1086 String s = " ";
1087 for (int i = 0; i < v.size(); ++i) {
1088 s += v.get(i);
1089 s += " ";
1090 }
1091 return s.trim();
1092 }
1093
1094 protected Vector<String> stringToVector(String s){
1095 if (s == null) {
1096 return null;
1097 }
1098 String[] sArray = s.split(" ");
1099 Vector<String> v = new Vector<String>();
1100 for (int i = 0; i < sArray.length; ++i) {
1101 v.add(sArray[i]);
1102 }
1103 return v;
1104 }
1105
1106 private boolean compareTwoVectors(Vector v1, Vector v2) {
1107 if (v1.size() != v2.size()) {
1108 return false;
1109 }
1110 for (int i = 0; i < v1.size(); ++i) {
1111 if (!v2.contains(v1.get(i))) {
1112 return false;
1113 }
1114 }
1115 return true;
1116 }
1117 } // @jve:decl-index=0:visual-constraint="22,11"
1118
1119 class CheckboxTableModel extends DefaultTableModel {
1120 /**
1121 *
1122 */
1123 private static final long serialVersionUID = 1L;
1124
1125 public Class<?> getColumnClass (int c) {
1126 if (getValueAt(0, c) != null){
1127 return getValueAt(0, c).getClass();
1128 }
1129 return String.class;
1130 }
1131 }