2 <<The file is used to create, update SystemTable in the MSA file>>
4 <<This dialog is used to add or edit a System Table entry in the MSA file.>>
6 Copyright (c) 2006, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 package org
.tianocore
.frameworkwizard
.module
.ui
.dialog
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.util
.Vector
;
21 import javax
.swing
.JButton
;
22 import javax
.swing
.JComboBox
;
23 import javax
.swing
.JLabel
;
24 import javax
.swing
.JPanel
;
25 import javax
.swing
.JScrollPane
;
26 import javax
.swing
.JTextField
;
27 import javax
.swing
.JTextArea
;
29 import org
.tianocore
.frameworkwizard
.common
.DataType
;
30 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
31 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
32 import org
.tianocore
.frameworkwizard
.common
.Log
;
33 import org
.tianocore
.frameworkwizard
.common
.Tools
;
34 import org
.tianocore
.frameworkwizard
.common
.ui
.ArchCheckBox
;
35 import org
.tianocore
.frameworkwizard
.common
.ui
.IDialog
;
36 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
37 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
38 import org
.tianocore
.frameworkwizard
.module
.Identifications
.ModuleIdentification
;
39 import org
.tianocore
.frameworkwizard
.module
.Identifications
.SystemTables
.SystemTablesIdentification
;
40 import org
.tianocore
.frameworkwizard
.packaging
.PackageIdentification
;
41 import org
.tianocore
.frameworkwizard
.workspace
.WorkspaceTools
;
44 * The class is used to create, update SystemTables section of the MSA file
49 public class SystemTablesDlg
extends IDialog
{
52 // / Define class Serial Version UID
54 private static final long serialVersionUID
= 7488769180379442276L;
57 // Define class members
59 private JPanel jContentPane
= null;
61 private JLabel jLabelEntry
= null;
63 private JLabel jLabelUsage
= null;
65 private JComboBox jComboBoxUsage
= null;
67 private StarLabel jStarLabel1
= null;
69 private StarLabel jStarLabel2
= null;
71 private JComboBox jComboBoxGuidC_Name
= null;
73 private JLabel jLabelFeatureFlag
= null;
75 private JTextField jTextFieldFeatureFlag
= null;
77 private JLabel jLabelArch
= null;
79 private JScrollPane jScrollPane
= null;
81 private JLabel jLabelHelpText
= null;
83 private JTextArea jTextAreaHelpText
= null;
85 private JScrollPane jScrollPaneHelpText
= null;
87 private ArchCheckBox jArchCheckBox
= null;
89 private JButton jButtonOk
= null;
91 private JButton jButtonCancel
= null;
96 private SystemTablesIdentification id
= null;
98 private EnumerationData ed
= new EnumerationData();
100 private WorkspaceTools wt
= new WorkspaceTools();
103 * This method initializes jComboBoxGuidC_Name
105 * @return javax.swing.JComboBox jComboBoxGuidC_Name
108 private JComboBox
getJComboBoxGuidC_Name() {
109 if (jComboBoxGuidC_Name
== null) {
110 jComboBoxGuidC_Name
= new JComboBox();
111 jComboBoxGuidC_Name
.setBounds(new java
.awt
.Rectangle(168, 12, 320, 20));
112 jComboBoxGuidC_Name
.setPreferredSize(new java
.awt
.Dimension(320, 20));
113 jComboBoxGuidC_Name
.setToolTipText("Select the GUID C Name of the System Table");
115 return jComboBoxGuidC_Name
;
119 * This method initializes jComboBoxUsage
121 * @return javax.swing.JComboBox jComboBoxUsage
124 private JComboBox
getJComboBoxUsage() {
125 if (jComboBoxUsage
== null) {
126 jComboBoxUsage
= new JComboBox();
127 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(168, 37, 320, 20));
128 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
130 .setToolTipText("<html><table>"
131 + "<tr><td>ALWAYS_CONSUMED</td><td>Module requires a GUIDed entry in the system table</td></tr>"
132 + "<tr><td>SOMETIMES_CONSUMED</td><td>Module consumes a GUIDed entry in the system<br>table if it is present</td>"
133 + "</tr><tr><td>ALWAYS_PRODUCED</td><td>Module always produces a GUIDed entry in the system table</td></tr>"
134 + "<tr><td>SOMETIMES_PRODUCED</td><td>Module produces a GUIDed entry in the system table<br>for some of its execution flows.</td></tr>"
135 + "</table></html>");
137 return jComboBoxUsage
;
141 * This method initializes jTextFieldFeatureFlag
143 * @return javax.swing.JTextField
145 private JTextField
getJTextFieldFeatureFlag() {
146 if (jTextFieldFeatureFlag
== null) {
147 jTextFieldFeatureFlag
= new JTextField();
148 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 132, 320, 20));
149 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
150 jTextFieldFeatureFlag
.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");
151 jTextFieldFeatureFlag
.setEnabled(false);
153 return jTextFieldFeatureFlag
;
157 * This method initializes jScrollPane
159 * @return javax.swing.JScrollPane
161 private JScrollPane
getJScrollPane() {
162 if (jScrollPane
== null) {
163 jScrollPane
= new JScrollPane();
164 jScrollPane
.setViewportView(getJContentPane());
170 * This method initializes jTextAreaHelpText
172 * @return javax.swing.JTextArea
175 private JTextArea
getJTextAreaHelpText() {
176 if (jTextAreaHelpText
== null) {
177 jTextAreaHelpText
= new JTextArea();
178 jTextAreaHelpText
.setLineWrap(true);
179 jTextAreaHelpText
.setWrapStyleWord(true);
181 return jTextAreaHelpText
;
185 * This method initializes jScrollPaneHelpText
187 * @returns javax.swing.JScrollPane jScrollPaneHelpText
189 private JScrollPane
getJScrollPaneHelpText() {
190 if (jScrollPaneHelpText
== null) {
191 jScrollPaneHelpText
= new JScrollPane();
192 jScrollPaneHelpText
.setHorizontalScrollBarPolicy(javax
.swing
.JScrollPane
.HORIZONTAL_SCROLLBAR_NEVER
);
193 jScrollPaneHelpText
.setSize(new java
.awt
.Dimension(320, 40));
194 jScrollPaneHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 40));
195 jScrollPaneHelpText
.setLocation(new java
.awt
.Point(168, 62));
196 jScrollPaneHelpText
.setViewportView(getJTextAreaHelpText());
198 return jScrollPaneHelpText
;
202 * This method initializes jButtonOk
204 * @return javax.swing.JButton
207 private JButton
getJButtonOk() {
208 if (jButtonOk
== null) {
209 jButtonOk
= new JButton();
210 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 162, 90, 20));
211 jButtonOk
.setText("Ok");
212 jButtonOk
.addActionListener(this);
218 * This method initializes jButtonCancel
220 * @return javax.swing.JButton
223 private JButton
getJButtonCancel() {
224 if (jButtonCancel
== null) {
225 jButtonCancel
= new JButton();
226 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 162, 90, 20));
227 jButtonCancel
.setText("Cancel");
228 jButtonCancel
.addActionListener(this);
230 return jButtonCancel
;
233 public static void main(String
[] args
) {
238 * This method initializes this
241 private void init() {
242 this.setSize(505, 235);
243 this.setContentPane(getJScrollPane());
244 this.setTitle("System Tables");
246 this.setViewMode(false);
251 * This method initializes this Fill values to all fields if these values are
254 * @param inSystemTablesId
257 private void init(SystemTablesIdentification inSystemTablesId
, ModuleIdentification mid
) {
259 this.id
= inSystemTablesId
;
262 // Init arch with module's arch
264 this.jArchCheckBox
.setEnabledItems(wt
.getModuleArch(mid
));
267 // Get defined guids from dependent packages
269 Vector
<PackageIdentification
> vpid
= wt
.getPackageDependenciesOfModule(mid
);
270 if (vpid
.size() <= 0) {
273 "This module hasn't defined any package dependency, so there is no guid value can be added for system table");
276 // Init guids drop down list
279 .generateComboBoxByVector(jComboBoxGuidC_Name
,
280 wt
.getAllGuidDeclarationsFromPackages(vpid
, EnumerationData
.GUID_TYPE_EFI_SYSTEM_CONFIGURATION_TABLE
));
283 if (this.id
!= null) {
284 this.jComboBoxGuidC_Name
.setSelectedItem(id
.getName());
285 this.jComboBoxUsage
.setSelectedItem(id
.getUsage());
286 this.jTextAreaHelpText
.setText(id
.getHelp());
287 this.jTextFieldFeatureFlag
.setText(id
.getFeatureFlag());
288 this.jArchCheckBox
.setSelectedItems(id
.getSupArchList());
293 * This is the override edit constructor
295 * @param inBootModesIdentification
299 public SystemTablesDlg(SystemTablesIdentification inSystemTablesIdentification
, IFrame iFrame
,
300 ModuleIdentification mid
) {
302 init(inSystemTablesIdentification
, mid
);
306 * Disable all components when the mode is view
309 * true - The view mode; false - The non-view mode
312 public void setViewMode(boolean isView
) {
314 this.jComboBoxUsage
.setEnabled(!isView
);
319 * This method initializes jContentPane
321 * @return javax.swing.JPanel jContentPane
324 private JPanel
getJContentPane() {
325 if (jContentPane
== null) {
326 jStarLabel1
= new StarLabel();
327 jStarLabel1
.setLocation(new java
.awt
.Point(2, 12));
328 jLabelEntry
= new JLabel();
329 jLabelEntry
.setText("Table's GUID C Name");
330 jLabelEntry
.setBounds(new java
.awt
.Rectangle(12, 12, 155, 20));
331 jStarLabel2
= new StarLabel();
332 jStarLabel2
.setLocation(new java
.awt
.Point(2, 37));
333 jLabelUsage
= new JLabel();
334 jLabelUsage
.setText("Usage");
335 jLabelUsage
.setBounds(new java
.awt
.Rectangle(12, 37, 155, 20));
336 jLabelHelpText
= new JLabel();
337 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(12, 62, 155, 20));
338 jLabelHelpText
.setText("Help Text");
339 jLabelFeatureFlag
= new JLabel();
340 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 132, 155, 20));
341 jLabelFeatureFlag
.setText("Feature Flag Expression");
342 jLabelFeatureFlag
.setEnabled(false);
343 jLabelArch
= new JLabel();
344 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 107, 155, 20));
345 jLabelArch
.setText("Supported Architectures");
346 jArchCheckBox
= new ArchCheckBox();
347 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 107, 320, 20));
348 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(320, 20));
350 jContentPane
= new JPanel();
351 jContentPane
.setLayout(null);
352 jContentPane
.setPreferredSize(new java
.awt
.Dimension(480, 180));
354 jContentPane
.add(jLabelEntry
, null);
355 jContentPane
.add(jLabelFeatureFlag
, null);
356 jContentPane
.add(getJTextFieldFeatureFlag(), null);
357 jContentPane
.add(getJComboBoxGuidC_Name(), null);
358 jContentPane
.add(jLabelArch
, null);
359 jContentPane
.add(jLabelUsage
, null);
360 jContentPane
.add(getJComboBoxUsage(), null);
362 jContentPane
.add(jStarLabel1
, null);
363 jContentPane
.add(jStarLabel2
, null);
365 jContentPane
.add(jLabelHelpText
, null);
366 jContentPane
.add(getJScrollPaneHelpText(), null);
367 jContentPane
.add(jArchCheckBox
, null);
368 jContentPane
.add(getJButtonOk(), null);
369 jContentPane
.add(getJButtonCancel(), null);
375 * This method initializes Usage type
378 private void initFrame() {
379 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVSystemTableUsage());
385 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
387 * Override actionPerformed to listen all actions
390 public void actionPerformed(ActionEvent arg0
) {
391 if (arg0
.getSource() == jButtonOk
) {
393 getCurrentSystemTables();
394 this.returnType
= DataType
.RETURN_TYPE_OK
;
395 this.setVisible(false);
399 if (arg0
.getSource() == jButtonCancel
) {
400 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
401 this.setVisible(false);
406 * Data validation for all fields
408 * @retval true - All datas are valid
409 * @retval false - At least one data is invalid
412 public boolean checkAdd() {
414 // Check if all fields have correct data types
420 if (this.jComboBoxGuidC_Name
.getSelectedItem() == null) {
421 Log
.wrn("Update Guids", "Please select one System Table Name");
428 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
429 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
430 Log
.wrn("Update System Tables", "Incorrect data type for Feature Flag");
438 private SystemTablesIdentification
getCurrentSystemTables() {
439 String arg0
= this.jComboBoxGuidC_Name
.getSelectedItem().toString();
440 String arg1
= this.jComboBoxUsage
.getSelectedItem().toString();
442 String arg2
= this.jTextFieldFeatureFlag
.getText();
443 Vector
<String
> arg3
= this.jArchCheckBox
.getSelectedItemsVector();
444 String arg4
= this.jTextAreaHelpText
.getText();
446 id
= new SystemTablesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
450 public SystemTablesIdentification
getId() {
454 public void setId(SystemTablesIdentification id
) {