3 The file is used to create, update SourceFile 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.
15 package org
.tianocore
.frameworkwizard
.module
.ui
.dialog
;
17 import java
.awt
.event
.ActionEvent
;
19 import java
.util
.Vector
;
21 import javax
.swing
.JButton
;
22 import javax
.swing
.JFileChooser
;
23 import javax
.swing
.JLabel
;
24 import javax
.swing
.JPanel
;
25 import javax
.swing
.JScrollPane
;
26 import javax
.swing
.JTextField
;
28 import org
.tianocore
.frameworkwizard
.common
.DataType
;
29 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
30 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
31 import org
.tianocore
.frameworkwizard
.common
.Log
;
32 import org
.tianocore
.frameworkwizard
.common
.Tools
;
33 import org
.tianocore
.frameworkwizard
.common
.ui
.ArchCheckBox
;
34 import org
.tianocore
.frameworkwizard
.common
.ui
.IComboBox
;
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
.SourceFiles
.SourceFilesIdentification
;
41 The class is used to create, update SourceFile of MSA/MBD file
42 It extends IInternalFrame
47 public class SourceFilesDlg
extends IDialog
{
50 /// Define class Serial Version UID
52 private static final long serialVersionUID
= -6765742852142775378L;
55 // Define class members
57 private JPanel jContentPane
= null;
59 private JLabel jLabelFileName
= null;
61 private JTextField jTextFieldFileName
= null;
63 private JButton jButtonOpenFile
= null;
65 private JLabel jLabelToolChainFamily
= null;
67 private StarLabel jStarLabel1
= null;
69 private JLabel jLabelArch
= null;
71 private JScrollPane jScrollPane
= null;
73 private JLabel jLabelTagName
= null;
75 private JTextField jTextFieldTagName
= null;
77 private JLabel jLabelToolCode
= null;
79 private JTextField jTextFieldToolCode
= null;
81 private IComboBox iComboBoxToolCode
= null;
83 private JTextField jTextFieldToolChainFamily
= null;
85 private JLabel jLabelFeatureFlag
= null;
87 private JTextField jTextFieldFeatureFlag
= null;
89 private ArchCheckBox jArchCheckBox
= null;
91 private JButton jButtonOk
= null;
93 private JButton jButtonCancel
= null;
98 private SourceFilesIdentification sfid
[] = null;
100 private String msaFileName
= "";
102 private EnumerationData ed
= new EnumerationData();
105 This method initializes jTextFieldFileName
107 @return javax.swing.JTextField jTextFieldFileName
110 private JTextField
getJTextFieldSourceFilesDirectory() {
111 if (jTextFieldFileName
== null) {
112 jTextFieldFileName
= new JTextField();
113 jTextFieldFileName
.setBounds(new java
.awt
.Rectangle(140, 10, 250, 20));
114 jTextFieldFileName
.setPreferredSize(new java
.awt
.Dimension(250, 20));
115 jTextFieldFileName
.setToolTipText("Path is relative to the MSA file and must include the file name");
117 return jTextFieldFileName
;
121 This method initializes jButtonOpenFile
123 @return javax.swing.JButton jButtonOpenFile
126 private JButton
getJButtonOpenFile() {
127 if (jButtonOpenFile
== null) {
128 jButtonOpenFile
= new JButton();
129 jButtonOpenFile
.setText("Browse");
130 jButtonOpenFile
.setBounds(new java
.awt
.Rectangle(395, 10, 85, 20));
131 jButtonOpenFile
.setPreferredSize(new java
.awt
.Dimension(85, 20));
132 jButtonOpenFile
.addActionListener(this);
134 return jButtonOpenFile
;
138 This method initializes jScrollPane
140 @return javax.swing.JScrollPane
142 private JScrollPane
getJScrollPane() {
143 if (jScrollPane
== null) {
144 jScrollPane
= new JScrollPane();
145 jScrollPane
.setViewportView(getJContentPane());
151 * This method initializes jTextFieldTagName
153 * @return javax.swing.JTextField
155 private JTextField
getJTextFieldTagName() {
156 if (jTextFieldTagName
== null) {
157 jTextFieldTagName
= new JTextField();
158 jTextFieldTagName
.setBounds(new java
.awt
.Rectangle(140, 35, 340, 20));
159 jTextFieldTagName
.setPreferredSize(new java
.awt
.Dimension(340, 20));
160 jTextFieldTagName
.setToolTipText("You may specify a specific tool chain tag name, such as BILL1");
162 return jTextFieldTagName
;
165 private IComboBox
getIComboBoxToolCode() {
166 if (iComboBoxToolCode
== null) {
167 iComboBoxToolCode
= new IComboBox();
168 iComboBoxToolCode
.setBounds(new java
.awt
.Rectangle(140, 60, 340, 20));
169 iComboBoxToolCode
.setPreferredSize(new java
.awt
.Dimension(340, 20));
170 iComboBoxToolCode
.setToolTipText("<html>You may select a specific tool command from drop down list, <br>"
171 + "or you can DOUBLE-CLICK this fild to enter your customizing <br>"
172 + "tool command.<br>"
173 + "Press ENTER to save your input or press ESCAPE to quit</html>");
175 return iComboBoxToolCode
;
179 * This method initializes jTextFieldToolCode
181 * @return javax.swing.JTextField
183 private JTextField
getJTextFieldToolCode() {
184 if (jTextFieldToolCode
== null) {
185 jTextFieldToolCode
= new JTextField();
186 jTextFieldToolCode
.setBounds(new java
.awt
.Rectangle(140, 60, 340, 20));
187 jTextFieldToolCode
.setPreferredSize(new java
.awt
.Dimension(340, 20));
188 jTextFieldToolCode
.setToolTipText("You may specify a specific tool command, such as ASM");
189 jTextFieldToolCode
.setVisible(false);
191 return jTextFieldToolCode
;
195 * This method initializes jTextFieldToolChainFamily
197 * @return javax.swing.JTextField
199 private JTextField
getJTextFieldToolChainFamily() {
200 if (jTextFieldToolChainFamily
== null) {
201 jTextFieldToolChainFamily
= new JTextField();
202 jTextFieldToolChainFamily
.setBounds(new java
.awt
.Rectangle(140, 85, 340, 20));
203 jTextFieldToolChainFamily
.setPreferredSize(new java
.awt
.Dimension(340, 20));
204 jTextFieldToolChainFamily
.setToolTipText("You may specify a specific tool chain family, such as GCC");
206 return jTextFieldToolChainFamily
;
210 * This method initializes jTextFieldFeatureFlag
212 * @return javax.swing.JTextField
214 private JTextField
getJTextFieldFeatureFlag() {
215 if (jTextFieldFeatureFlag
== null) {
216 jTextFieldFeatureFlag
= new JTextField();
217 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(140, 110, 340, 20));
218 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(340, 20));
219 jTextFieldFeatureFlag
.setToolTipText("RESERVED FOR FUTURE USE");
221 return jTextFieldFeatureFlag
;
225 This method initializes jButtonOk
227 @return javax.swing.JButton
230 private JButton
getJButtonOk() {
231 if (jButtonOk
== null) {
232 jButtonOk
= new JButton();
233 jButtonOk
.setBounds(new java
.awt
.Rectangle(290, 165, 90, 20));
234 jButtonOk
.setText("Ok");
235 jButtonOk
.addActionListener(this);
241 This method initializes jButtonCancel
243 @return javax.swing.JButton
246 private JButton
getJButtonCancel() {
247 if (jButtonCancel
== null) {
248 jButtonCancel
= new JButton();
249 jButtonCancel
.setBounds(new java
.awt
.Rectangle(390, 165, 90, 20));
250 jButtonCancel
.setText("Cancel");
251 jButtonCancel
.addActionListener(this);
253 return jButtonCancel
;
256 public static void main(String
[] args
) {
261 This is the default constructor
264 public SourceFilesDlg(SourceFilesIdentification inSourceFilesIdentification
, IFrame iFrame
, String fileName
) {
266 init(inSourceFilesIdentification
, fileName
);
270 This method initializes this
273 private void init() {
274 this.setSize(510, 240);
275 this.setContentPane(getJScrollPane());
276 this.setTitle("Source Files");
277 this.setViewMode(false);
282 This method initializes this
283 Fill values to all fields if these values are not empty
286 @param inSourceFiles The input data of SourceFilesDocument.SourceFiles
289 private void init(SourceFilesIdentification inSourceFilesIdentifications
, String fileName
) {
291 //this.sfid = inSourceFilesIdentifications;
292 this.msaFileName
= fileName
;
294 if (inSourceFilesIdentifications
!= null) {
295 this.jTextFieldFileName
.setText(inSourceFilesIdentifications
.getFilename());
296 this.jTextFieldTagName
.setText(inSourceFilesIdentifications
.getTagName());
299 // Generate Tool Code selection list
301 Vector
<String
> v
= ed
.getVToolCode();
302 boolean isFind
= false;
303 String strToolCode
= inSourceFilesIdentifications
.getToolCode();
306 // If the input value is not in the default list, add it to the list
308 if (strToolCode
!= null) {
309 for (int index
= 0; index
< v
.size(); index
++) {
310 if (v
.elementAt(index
).equals(strToolCode
)) {
315 if (!isFind
&& !isEmpty(strToolCode
)) {
316 v
.addElement(strToolCode
);
320 Tools
.generateComboBoxByVector(iComboBoxToolCode
, v
);
321 this.iComboBoxToolCode
.setSelectedItem(strToolCode
);
323 this.jTextFieldToolChainFamily
.setText(inSourceFilesIdentifications
.getToolChainFamily());
324 jTextFieldFeatureFlag
.setText(inSourceFilesIdentifications
.getFeatureFlag());
325 this.jArchCheckBox
.setSelectedItems(inSourceFilesIdentifications
.getSupArchList());
330 Disable all components when the mode is view
332 @param isView true - The view mode; false - The non-view mode
335 public void setViewMode(boolean isView
) {
337 this.jTextFieldFileName
.setEnabled(!isView
);
338 this.jButtonOpenFile
.setEnabled(!isView
);
343 This method initializes jContentPane
345 @return javax.swing.JPanel jContentPane
348 private JPanel
getJContentPane() {
349 if (jContentPane
== null) {
350 jArchCheckBox
= new ArchCheckBox();
351 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(140, 135, 340, 20));
352 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(340, 20));
353 jLabelFeatureFlag
= new JLabel();
354 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(15, 110, 120, 20));
355 jLabelFeatureFlag
.setText("Feature Flag Expression");
356 jLabelToolCode
= new JLabel();
357 jLabelToolCode
.setBounds(new java
.awt
.Rectangle(15, 60, 120, 20));
358 jLabelToolCode
.setText("Tool Code");
359 jLabelTagName
= new JLabel();
360 jLabelTagName
.setBounds(new java
.awt
.Rectangle(15, 35, 120, 20));
361 jLabelTagName
.setText("Tag Name");
362 jLabelArch
= new JLabel();
363 jLabelArch
.setBounds(new java
.awt
.Rectangle(15, 135, 120, 20));
364 jLabelArch
.setText("Supported Architectures");
365 jLabelToolChainFamily
= new JLabel();
366 jLabelToolChainFamily
.setBounds(new java
.awt
.Rectangle(15, 85, 120, 20));
367 jLabelToolChainFamily
.setText("Tool Chain Family");
368 jLabelFileName
= new JLabel();
369 jLabelFileName
.setText("File Name");
370 jLabelFileName
.setBounds(new java
.awt
.Rectangle(15, 10, 120, 20));
372 jContentPane
= new JPanel();
373 jContentPane
.setLayout(null);
374 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 185));
376 jContentPane
.add(jLabelFileName
, null);
377 jContentPane
.add(getJTextFieldSourceFilesDirectory(), null);
378 jContentPane
.add(getJButtonOpenFile(), null);
379 jContentPane
.add(jLabelToolChainFamily
, null);
380 jStarLabel1
= new StarLabel();
381 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
383 jContentPane
.add(jStarLabel1
, null);
384 jContentPane
.add(jLabelArch
, null);
385 jContentPane
.add(jLabelTagName
, null);
386 jContentPane
.add(getJTextFieldTagName(), null);
387 jContentPane
.add(jLabelToolCode
, null);
388 jContentPane
.add(getJTextFieldToolCode(), null);
389 jContentPane
.add(getIComboBoxToolCode(), null);
390 jContentPane
.add(getJTextFieldToolChainFamily(), null);
391 jContentPane
.add(jLabelFeatureFlag
, null);
392 jContentPane
.add(getJTextFieldFeatureFlag(), null);
393 jContentPane
.add(jArchCheckBox
, null);
394 jContentPane
.add(getJButtonOk(), null);
395 jContentPane
.add(getJButtonCancel(), null);
401 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
403 * Override actionPerformed to listen all actions
406 public void actionPerformed(ActionEvent arg0
) {
407 if (arg0
.getSource() == jButtonOpenFile
) {
411 if (arg0
.getSource() == jButtonOk
) {
413 getCurrentSourceFiles();
414 this.returnType
= DataType
.RETURN_TYPE_OK
;
415 this.setVisible(false);
419 if (arg0
.getSource() == jButtonCancel
) {
420 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
421 this.setVisible(false);
425 private SourceFilesIdentification
[] getCurrentSourceFiles() {
426 String name
= this.jTextFieldFileName
.getText();
427 String s
[] = name
.split(";");
428 String tagName
= this.jTextFieldTagName
.getText();
429 String toolCode
= this.iComboBoxToolCode
.getSelectedItem().toString();
430 if (toolCode
.equals(DataType
.EMPTY_SELECT_ITEM
)) {
433 String tcf
= this.jTextFieldToolChainFamily
.getText();
434 String featureFlag
= this.jTextFieldFeatureFlag
.getText();
435 Vector
<String
> arch
= this.jArchCheckBox
.getSelectedItemsVector();
436 sfid
= new SourceFilesIdentification
[s
.length
];
437 for (int index
= 0; index
< s
.length
; index
++) {
438 sfid
[index
] = new SourceFilesIdentification(s
[index
], tagName
, toolCode
, tcf
, featureFlag
, arch
);
444 Data validation for all fields
446 @retval true - All datas are valid
447 @retval false - At least one data is invalid
450 public boolean checkAdd() {
454 if (isEmpty(this.jTextFieldFileName
.getText())) {
455 Log
.wrn("Update Source Files", "File Name couldn't be empty");
458 if (!DataValidation
.isFilename(this.jTextFieldFileName
.getText())) {
459 Log
.wrn("Update Source Files", "Incorrect data type for File Name");
466 if (!isEmpty(this.jTextFieldTagName
.getText())) {
467 if (!DataValidation
.isTagName(this.jTextFieldTagName
.getText())) {
468 Log
.wrn("Update Source Files", "Incorrect data type for Tag Name");
476 if (!isEmpty(this.jTextFieldToolCode
.getText())) {
477 if (!DataValidation
.isToolCode(this.jTextFieldToolCode
.getText())) {
478 Log
.wrn("Update Source Files", "Incorrect data type for Tool Code");
484 // Check ToolChainFamily
486 if (!isEmpty(this.jTextFieldToolChainFamily
.getText())) {
487 if (!DataValidation
.isToolChainFamily(this.jTextFieldToolChainFamily
.getText())) {
488 Log
.wrn("Update Source Files", "Incorrect data type for Tool Chain Family");
496 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
497 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
498 Log
.wrn("Update Source Files", "Incorrect data type for Feature Flag");
507 Display a file open browser to let user select file
510 private void selectFile() {
511 JFileChooser fc
= new JFileChooser();
512 fc
.setCurrentDirectory(new File(Tools
.getFilePathOnly(msaFileName
)));
513 fc
.setMultiSelectionEnabled(true);
514 int result
= fc
.showOpenDialog(new JPanel());
515 if (result
== JFileChooser
.APPROVE_OPTION
) {
516 File f
[] = fc
.getSelectedFiles();
518 for (int index
= 0; index
< f
.length
; index
++) {
519 s
= s
+ f
[index
].getName() + ";";
521 this.jTextFieldFileName
.setText(s
);
525 public SourceFilesIdentification
[] getSfid() {
529 public void setSfid(SourceFilesIdentification
[] sfid
) {