3 The file is used to create, update Externs section of the MSA 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
.frameworkwizard
.module
.ui
.dialog
;
17 import java
.awt
.event
.ActionEvent
;
18 import java
.awt
.event
.ItemEvent
;
19 import java
.awt
.event
.ItemListener
;
20 import java
.util
.Vector
;
22 import javax
.swing
.JButton
;
23 import javax
.swing
.JComboBox
;
24 import javax
.swing
.JLabel
;
25 import javax
.swing
.JPanel
;
26 import javax
.swing
.JScrollPane
;
27 import javax
.swing
.JTextField
;
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
.module
.Identifications
.Externs
.ExternsIdentification
;
40 * The class is used to create, update Externs section of the MSA file
45 public class ExternsDlg
extends IDialog
implements ItemListener
{
48 /// Define class Serial Version UID
50 private static final long serialVersionUID
= -7382008402932047191L;
53 //Define class members
55 private JPanel jContentPane
= null;
57 private JLabel jLabelName
= null;
59 private JComboBox jComboBoxType
= null;
61 private JScrollPane jScrollPane
= null;
63 private JComboBox jComboBoxPcdIsDriver
= null;
65 private JLabel jLabelC_Name
= null;
67 private JTextField jTextFieldC_Name
= null;
69 private JLabel jLabelFeatureFlag
= null;
71 private JLabel jLabelArch
= null;
73 private JTextField jTextFieldFeatureFlag
= null;
75 private ArchCheckBox jArchCheckBox
= null;
77 private JButton jButtonOk
= null;
79 private JButton jButtonCancel
= null;
84 private ExternsIdentification id
= null;
86 private EnumerationData ed
= new EnumerationData();
89 This method initializes jComboBoxType
91 @return javax.swing.JComboBox jComboBoxType
94 private JComboBox
getJComboBoxType() {
95 if (jComboBoxType
== null) {
96 jComboBoxType
= new JComboBox();
97 jComboBoxType
.setBounds(new java
.awt
.Rectangle(168, 12, 320, 20));
98 jComboBoxType
.setPreferredSize(new java
.awt
.Dimension(320, 20));
99 jComboBoxType
.addItemListener(this);
101 return jComboBoxType
;
105 This method initializes jScrollPane
107 @return javax.swing.JScrollPane
109 private JScrollPane
getJScrollPane() {
110 if (jScrollPane
== null) {
111 jScrollPane
= new JScrollPane();
112 jScrollPane
.setViewportView(getJContentPane());
118 * This method initializes jComboBoxPcdIsDriver
120 * @return javax.swing.JComboBox
122 private JComboBox
getJComboBoxPcdIsDriver() {
123 if (jComboBoxPcdIsDriver
== null) {
124 jComboBoxPcdIsDriver
= new JComboBox();
125 jComboBoxPcdIsDriver
.setLocation(new java
.awt
.Point(168, 37));
126 jComboBoxPcdIsDriver
.setPreferredSize(new java
.awt
.Dimension(320, 20));
127 jComboBoxPcdIsDriver
.setSize(new java
.awt
.Dimension(320, 20));
128 jComboBoxPcdIsDriver
.addItemListener(this);
130 return jComboBoxPcdIsDriver
;
134 This method initializes jTextFieldC_Name
136 @return javax.swing.JTextField
139 private JTextField
getJTextFieldC_Name() {
140 if (jTextFieldC_Name
== null) {
141 jTextFieldC_Name
= new JTextField();
142 jTextFieldC_Name
.setBounds(new java
.awt
.Rectangle(168, 37, 320, 20));
143 jTextFieldC_Name
.setPreferredSize(new java
.awt
.Dimension(320, 20));
145 return jTextFieldC_Name
;
149 This method initializes jTextFieldFeatureFlag
151 @return javax.swing.JTextField
154 private JTextField
getJTextFieldFeatureFlag() {
155 if (jTextFieldFeatureFlag
== null) {
156 jTextFieldFeatureFlag
= new JTextField();
157 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 62, 320, 20));
158 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
160 return jTextFieldFeatureFlag
;
164 This method initializes jButtonOk
166 @return javax.swing.JButton
169 private JButton
getJButtonOk() {
170 if (jButtonOk
== null) {
171 jButtonOk
= new JButton();
172 jButtonOk
.setBounds(new java
.awt
.Rectangle(300, 122, 90, 20));
173 jButtonOk
.setText("Ok");
174 jButtonOk
.addActionListener(this);
180 This method initializes jButtonCancel
182 @return javax.swing.JButton
185 private JButton
getJButtonCancel() {
186 if (jButtonCancel
== null) {
187 jButtonCancel
= new JButton();
188 jButtonCancel
.setBounds(new java
.awt
.Rectangle(400, 122, 90, 20));
189 jButtonCancel
.setText("Cancel");
190 jButtonCancel
.addActionListener(this);
192 return jButtonCancel
;
195 public static void main(String
[] args
) {
200 This method initializes this
203 private void init() {
204 this.setSize(515, 200);
205 this.setContentPane(getJScrollPane());
206 this.setTitle("Externs");
212 This method initializes this
213 Fill values to all fields if these values are not empty
218 private void init(ExternsIdentification inExternsId
) {
220 this.id
= inExternsId
;
222 if (this.id
!= null) {
223 if (id
.getType().equals(EnumerationData
.EXTERNS_PCD_IS_DRIVER
)) {
224 this.jComboBoxPcdIsDriver
.setSelectedItem(id
.getName());
226 this.jTextFieldC_Name
.setText(id
.getName());
228 this.jComboBoxType
.setSelectedItem(id
.getType());
229 this.jTextFieldFeatureFlag
.setText(id
.getFeatureFlag());
230 this.jArchCheckBox
.setSelectedItems(id
.getSupArchList());
235 This is the override edit constructor
237 @param inBootModesIdentification
241 public ExternsDlg(ExternsIdentification inExternsIdentification
, IFrame iFrame
) {
243 init(inExternsIdentification
);
247 This method initializes jContentPane
249 @return javax.swing.JPanel jContentPane
252 private JPanel
getJContentPane() {
253 if (jContentPane
== null) {
254 jArchCheckBox
= new ArchCheckBox();
255 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 87, 320, 20));
256 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(320, 20));
257 jLabelC_Name
= new JLabel();
258 jLabelC_Name
.setBounds(new java
.awt
.Rectangle(12, 37, 140, 20));
259 jLabelC_Name
.setText("Enter Value");
260 jLabelName
= new JLabel();
261 jLabelName
.setText("Choose Extern Type");
262 jLabelName
.setBounds(new java
.awt
.Rectangle(12, 12, 168, 20));
263 jLabelArch
= new JLabel();
264 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 87, 168, 20));
265 jLabelArch
.setText("Supported Architectures");
266 jLabelFeatureFlag
= new JLabel();
267 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 62, 168, 20));
268 jLabelFeatureFlag
.setText("Feature Flag Expression");
270 jContentPane
= new JPanel();
271 jContentPane
.setLayout(null);
272 jContentPane
.setPreferredSize(new java
.awt
.Dimension(505, 155));
274 jContentPane
.add(jLabelName
, null);
275 jContentPane
.add(getJComboBoxType(), null);
276 jContentPane
.add(jLabelFeatureFlag
, null);
277 jContentPane
.add(jLabelArch
, null);
278 jContentPane
.add(getJTextFieldFeatureFlag(), null);
280 jContentPane
.add(getJComboBoxPcdIsDriver(), null);
281 jContentPane
.add(jLabelC_Name
, null);
282 jContentPane
.add(getJTextFieldC_Name(), null);
283 jContentPane
.add(jArchCheckBox
, null);
284 jContentPane
.add(getJButtonOk(), null);
285 jContentPane
.add(getJButtonCancel(), null);
291 This method initializes Usage type and Externs type
294 private void initFrame() {
295 Tools
.generateComboBoxByVector(this.jComboBoxType
, ed
.getVExternTypes());
296 Tools
.generateComboBoxByVector(this.jComboBoxPcdIsDriver
, ed
.getVPcdDriverTypes());
300 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
302 * Override actionPerformed to listen all actions
305 public void actionPerformed(ActionEvent arg0
) {
306 if (arg0
.getSource() == jButtonOk
) {
309 this.returnType
= DataType
.RETURN_TYPE_OK
;
310 this.setVisible(false);
314 if (arg0
.getSource() == jButtonCancel
) {
315 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
316 this.setVisible(false);
321 Data validation for all fields
323 @retval true - All datas are valid
324 @retval false - At least one data is invalid
327 public boolean checkAdd() {
329 // Check if all fields have correct data types
333 // When and only When type is not "Pcd Is Driver"
335 if (!this.jComboBoxType
.getSelectedItem().toString().equals(EnumerationData
.EXTERNS_PCD_IS_DRIVER
)) {
339 if (isEmpty(this.jTextFieldC_Name
.getText())) {
340 Log
.wrn("Update Externs", "Value couldn't be empty");
344 if (!isEmpty(this.jTextFieldC_Name
.getText())) {
345 if (this.jComboBoxType
.getSelectedItem().toString().equals(EnumerationData
.EXTERNS_SPECIFICATION
)) {
346 if (!DataValidation
.isSentence(this.jTextFieldC_Name
.getText())) {
347 Log
.wrn("Update Externs", "Incorrect data type for Specification");
351 if (!DataValidation
.isC_NameType(this.jTextFieldC_Name
.getText())) {
352 Log
.wrn("Update Externs", "Incorrect data type for C Name");
361 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
362 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
363 Log
.wrn("Update Externs", "Incorrect data type for Feature Flag");
368 if (this.jComboBoxPcdIsDriver
.getSelectedItem().toString().equals(DataType
.EMPTY_SELECT_ITEM
)) {
369 Log
.wrn("Update Externs", "You must select one PCD DRIVER type");
377 private ExternsIdentification
getCurrentExterns() {
379 if (this.jComboBoxType
.getSelectedItem().toString().equals(EnumerationData
.EXTERNS_PCD_IS_DRIVER
)) {
380 arg0
= this.jComboBoxPcdIsDriver
.getSelectedItem().toString();
382 arg0
= this.jTextFieldC_Name
.getText();
384 String arg1
= this.jComboBoxType
.getSelectedItem().toString();
386 String arg2
= this.jTextFieldFeatureFlag
.getText();
387 Vector
<String
> arg3
= this.jArchCheckBox
.getSelectedItemsVector();
389 id
= new ExternsIdentification(arg0
, arg1
, arg2
, arg3
);
394 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
396 * Reflesh the frame when selected item changed
399 public void itemStateChanged(ItemEvent arg0
) {
400 if (arg0
.getSource() == jComboBoxType
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {
401 if (jComboBoxType
.getSelectedItem().toString().equals(EnumerationData
.EXTERNS_PCD_IS_DRIVER
)) {
402 this.jComboBoxPcdIsDriver
.setVisible(true);
403 this.jTextFieldC_Name
.setVisible(false);
405 this.jComboBoxPcdIsDriver
.setVisible(false);
406 this.jTextFieldC_Name
.setVisible(true);
411 public ExternsIdentification
getId() {
415 public void setId(ExternsIdentification id
) {