3 The file is used to create, update SourceFiles 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
;
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 SourceFiles section of the MSA file
46 public class SourceFilesDlg
extends IDialog
{
49 /// Define class Serial Version UID
51 private static final long serialVersionUID
= -6765742852142775378L;
54 // Define class members
56 private JPanel jContentPane
= null;
58 private JLabel jLabelFileName
= null;
60 private JTextField jTextFieldFileName
= null;
62 private JButton jButtonOpenFile
= null;
64 private JLabel jLabelToolChainFamily
= null;
66 private StarLabel jStarLabel1
= null;
68 private JLabel jLabelArch
= null;
70 private JScrollPane jScrollPane
= null;
72 private JLabel jLabelTagName
= null;
74 private JTextField jTextFieldTagName
= null;
76 private JLabel jLabelToolCode
= null;
78 private JTextField jTextFieldToolCode
= null;
80 private IComboBox iComboBoxToolCode
= null;
82 private JTextField jTextFieldToolChainFamily
= null;
84 private JLabel jLabelFeatureFlag
= null;
86 private JTextField jTextFieldFeatureFlag
= null;
88 private ArchCheckBox jArchCheckBox
= null;
90 private JButton jButtonOk
= null;
92 private JButton jButtonCancel
= null;
97 private SourceFilesIdentification sfid
[] = null;
99 private String msaFileName
= "";
101 private EnumerationData ed
= new EnumerationData();
104 This method initializes jTextFieldFileName
106 @return javax.swing.JTextField jTextFieldFileName
109 private JTextField
getJTextFieldSourceFilesDirectory() {
110 if (jTextFieldFileName
== null) {
111 jTextFieldFileName
= new JTextField();
112 jTextFieldFileName
.setBounds(new java
.awt
.Rectangle(168, 12, 250, 20));
113 jTextFieldFileName
.setPreferredSize(new java
.awt
.Dimension(250, 20));
114 jTextFieldFileName
.setToolTipText("Path is relative to the MSA file and must include the file name");
116 return jTextFieldFileName
;
120 This method initializes jButtonOpenFile
122 @return javax.swing.JButton jButtonOpenFile
125 private JButton
getJButtonOpenFile() {
126 if (jButtonOpenFile
== null) {
127 jButtonOpenFile
= new JButton();
128 jButtonOpenFile
.setText("Browse");
129 jButtonOpenFile
.setBounds(new java
.awt
.Rectangle(422, 12, 85, 20));
130 jButtonOpenFile
.setPreferredSize(new java
.awt
.Dimension(85, 20));
131 jButtonOpenFile
.addActionListener(this);
133 return jButtonOpenFile
;
137 This method initializes jScrollPane
139 @return javax.swing.JScrollPane
141 private JScrollPane
getJScrollPane() {
142 if (jScrollPane
== null) {
143 jScrollPane
= new JScrollPane();
144 jScrollPane
.setViewportView(getJContentPane());
150 * This method initializes jTextFieldTagName
152 * @return javax.swing.JTextField
154 private JTextField
getJTextFieldTagName() {
155 if (jTextFieldTagName
== null) {
156 jTextFieldTagName
= new JTextField();
157 jTextFieldTagName
.setBounds(new java
.awt
.Rectangle(168, 37, 340, 20));
158 jTextFieldTagName
.setPreferredSize(new java
.awt
.Dimension(340, 20));
159 jTextFieldTagName
.setToolTipText("You may specify a specific tool chain tag name, such as BILL1");
161 return jTextFieldTagName
;
164 private IComboBox
getIComboBoxToolCode() {
165 if (iComboBoxToolCode
== null) {
166 iComboBoxToolCode
= new IComboBox();
167 iComboBoxToolCode
.setBounds(new java
.awt
.Rectangle(168, 62, 340, 20));
168 iComboBoxToolCode
.setPreferredSize(new java
.awt
.Dimension(340, 20));
169 iComboBoxToolCode
.setToolTipText("<html>You may select a specific tool command from drop down list, <br>"
170 + "or you can DOUBLE-CLICK this fild to enter your customizing <br>"
171 + "tool command.<br>"
172 + "Press ENTER to save your input or press ESCAPE to quit</html>");
174 return iComboBoxToolCode
;
178 * This method initializes jTextFieldToolCode
180 * @return javax.swing.JTextField
182 private JTextField
getJTextFieldToolCode() {
183 if (jTextFieldToolCode
== null) {
184 jTextFieldToolCode
= new JTextField();
185 jTextFieldToolCode
.setBounds(new java
.awt
.Rectangle(168, 62, 340, 20));
186 jTextFieldToolCode
.setPreferredSize(new java
.awt
.Dimension(340, 20));
187 jTextFieldToolCode
.setToolTipText("You may specify a specific tool command, such as ASM");
188 jTextFieldToolCode
.setVisible(false);
190 return jTextFieldToolCode
;
194 * This method initializes jTextFieldToolChainFamily
196 * @return javax.swing.JTextField
198 private JTextField
getJTextFieldToolChainFamily() {
199 if (jTextFieldToolChainFamily
== null) {
200 jTextFieldToolChainFamily
= new JTextField();
201 jTextFieldToolChainFamily
.setBounds(new java
.awt
.Rectangle(168, 87, 340, 20));
202 jTextFieldToolChainFamily
.setPreferredSize(new java
.awt
.Dimension(340, 20));
203 jTextFieldToolChainFamily
.setToolTipText("You may specify a specific tool chain family, such as GCC");
205 return jTextFieldToolChainFamily
;
209 * This method initializes jTextFieldFeatureFlag
211 * @return javax.swing.JTextField
213 private JTextField
getJTextFieldFeatureFlag() {
214 if (jTextFieldFeatureFlag
== null) {
215 jTextFieldFeatureFlag
= new JTextField();
216 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(168, 137, 340, 20));
217 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(340, 20));
218 jTextFieldFeatureFlag
.setToolTipText("RESERVED FOR FUTURE USE");
219 jTextFieldFeatureFlag
.setEnabled(false);
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(317, 172, 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(412, 172, 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(525, 240);
275 this.setContentPane(getJScrollPane());
276 this.setTitle("Source Files");
277 this.setViewMode(false);
279 Tools
.generateComboBoxByVector(iComboBoxToolCode
, ed
.getVToolCode());
283 This method initializes this
284 Fill values to all fields if these values are not empty
287 @param inSourceFiles The input data of SourceFilesDocument.SourceFiles
290 private void init(SourceFilesIdentification inSourceFilesIdentifications
, String fileName
) {
292 //this.sfid = inSourceFilesIdentifications;
293 this.msaFileName
= fileName
;
295 if (inSourceFilesIdentifications
!= null) {
296 this.jTextFieldFileName
.setText(inSourceFilesIdentifications
.getFilename());
297 this.jTextFieldTagName
.setText(inSourceFilesIdentifications
.getTagName());
300 // Generate Tool Code selection list
302 Vector
<String
> v
= ed
.getVToolCode();
303 boolean isFind
= false;
304 String strToolCode
= inSourceFilesIdentifications
.getToolCode();
307 // If the input value is not in the default list, add it to the list
309 if (strToolCode
!= null) {
310 for (int index
= 0; index
< v
.size(); index
++) {
311 if (v
.elementAt(index
).equals(strToolCode
)) {
316 if (!isFind
&& !isEmpty(strToolCode
)) {
317 v
.addElement(strToolCode
);
321 Tools
.generateComboBoxByVector(iComboBoxToolCode
, v
);
322 this.iComboBoxToolCode
.setSelectedItem(strToolCode
);
324 this.jTextFieldToolChainFamily
.setText(inSourceFilesIdentifications
.getToolChainFamily());
325 jTextFieldFeatureFlag
.setText(inSourceFilesIdentifications
.getFeatureFlag());
326 this.jArchCheckBox
.setSelectedItems(inSourceFilesIdentifications
.getSupArchList());
331 Disable all components when the mode is view
333 @param isView true - The view mode; false - The non-view mode
336 public void setViewMode(boolean isView
) {
338 this.jTextFieldFileName
.setEnabled(!isView
);
339 this.jButtonOpenFile
.setEnabled(!isView
);
344 This method initializes jContentPane
346 @return javax.swing.JPanel jContentPane
349 private JPanel
getJContentPane() {
350 if (jContentPane
== null) {
351 jArchCheckBox
= new ArchCheckBox();
352 jArchCheckBox
.setBounds(new java
.awt
.Rectangle(168, 112, 340, 20));
353 jArchCheckBox
.setPreferredSize(new java
.awt
.Dimension(340, 20));
354 jLabelFeatureFlag
= new JLabel();
355 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(12, 137, 155, 20));
356 jLabelFeatureFlag
.setText("Feature Flag Expression");
357 jLabelFeatureFlag
.setEnabled(false);
358 jLabelToolCode
= new JLabel();
359 jLabelToolCode
.setBounds(new java
.awt
.Rectangle(12, 62, 155, 20));
360 jLabelToolCode
.setText("Tool Code");
361 jLabelTagName
= new JLabel();
362 jLabelTagName
.setBounds(new java
.awt
.Rectangle(12, 37, 155, 20));
363 jLabelTagName
.setText("Tag Name");
364 jLabelArch
= new JLabel();
365 jLabelArch
.setBounds(new java
.awt
.Rectangle(12, 112, 155, 20));
366 jLabelArch
.setText("Supported Architectures");
367 jLabelToolChainFamily
= new JLabel();
368 jLabelToolChainFamily
.setBounds(new java
.awt
.Rectangle(12, 87, 155, 20));
369 jLabelToolChainFamily
.setText("Tool Chain Family");
370 jLabelFileName
= new JLabel();
371 jLabelFileName
.setText("File Name");
372 jLabelFileName
.setBounds(new java
.awt
.Rectangle(12, 12, 155, 20));
374 jContentPane
= new JPanel();
375 jContentPane
.setLayout(null);
376 jContentPane
.setPreferredSize(new java
.awt
.Dimension(505, 192));
378 jContentPane
.add(jLabelFileName
, null);
379 jContentPane
.add(getJTextFieldSourceFilesDirectory(), null);
380 jContentPane
.add(getJButtonOpenFile(), null);
381 jContentPane
.add(jLabelToolChainFamily
, null);
382 jStarLabel1
= new StarLabel();
383 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
385 jContentPane
.add(jStarLabel1
, null);
386 jContentPane
.add(jLabelArch
, null);
387 jContentPane
.add(jLabelTagName
, null);
388 jContentPane
.add(getJTextFieldTagName(), null);
389 jContentPane
.add(jLabelToolCode
, null);
390 jContentPane
.add(getJTextFieldToolCode(), null);
391 jContentPane
.add(getIComboBoxToolCode(), null);
392 jContentPane
.add(getJTextFieldToolChainFamily(), null);
393 jContentPane
.add(jLabelFeatureFlag
, null);
394 jContentPane
.add(getJTextFieldFeatureFlag(), null);
395 jContentPane
.add(jArchCheckBox
, null);
396 jContentPane
.add(getJButtonOk(), null);
397 jContentPane
.add(getJButtonCancel(), null);
403 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
405 * Override actionPerformed to listen all actions
408 public void actionPerformed(ActionEvent arg0
) {
409 if (arg0
.getSource() == jButtonOpenFile
) {
413 if (arg0
.getSource() == jButtonOk
) {
415 getCurrentSourceFiles();
416 this.returnType
= DataType
.RETURN_TYPE_OK
;
417 this.setVisible(false);
421 if (arg0
.getSource() == jButtonCancel
) {
422 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
423 this.setVisible(false);
427 private SourceFilesIdentification
[] getCurrentSourceFiles() {
428 String name
= this.jTextFieldFileName
.getText();
429 String s
[] = name
.split(";");
430 String tagName
= this.jTextFieldTagName
.getText();
431 String toolCode
= this.iComboBoxToolCode
.getSelectedItem().toString();
432 if (toolCode
.equals(DataType
.EMPTY_SELECT_ITEM
)) {
435 String tcf
= this.jTextFieldToolChainFamily
.getText();
436 String featureFlag
= this.jTextFieldFeatureFlag
.getText();
437 Vector
<String
> arch
= this.jArchCheckBox
.getSelectedItemsVector();
438 sfid
= new SourceFilesIdentification
[s
.length
];
439 for (int index
= 0; index
< s
.length
; index
++) {
440 sfid
[index
] = new SourceFilesIdentification(s
[index
], tagName
, toolCode
, tcf
, featureFlag
, arch
);
446 Data validation for all fields
448 @retval true - All datas are valid
449 @retval false - At least one data is invalid
452 public boolean checkAdd() {
456 if (isEmpty(this.jTextFieldFileName
.getText())) {
457 Log
.wrn("Update Source Files", "File Name couldn't be empty");
460 if (!DataValidation
.isFilename(this.jTextFieldFileName
.getText())) {
461 Log
.wrn("Update Source Files", "Incorrect data type for File Name");
468 if (!isEmpty(this.jTextFieldTagName
.getText())) {
469 if (!DataValidation
.isTagName(this.jTextFieldTagName
.getText())) {
470 Log
.wrn("Update Source Files", "Incorrect data type for Tag Name");
478 if (!isEmpty(this.jTextFieldToolCode
.getText())) {
479 if (!DataValidation
.isToolCode(this.jTextFieldToolCode
.getText())) {
480 Log
.wrn("Update Source Files", "Incorrect data type for Tool Code");
486 // Check ToolChainFamily
488 if (!isEmpty(this.jTextFieldToolChainFamily
.getText())) {
489 if (!DataValidation
.isToolChainFamily(this.jTextFieldToolChainFamily
.getText())) {
490 Log
.wrn("Update Source Files", "Incorrect data type for Tool Chain Family");
498 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
499 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
500 Log
.wrn("Update Source Files", "Incorrect data type for Feature Flag");
509 Display a file open browser to let user select file
512 private void selectFile() {
513 JFileChooser fc
= new JFileChooser();
514 fc
.setCurrentDirectory(new File(Tools
.getFilePathOnly(msaFileName
)));
515 fc
.setMultiSelectionEnabled(true);
516 int result
= fc
.showOpenDialog(new JPanel());
517 if (result
== JFileChooser
.APPROVE_OPTION
) {
518 File f
[] = fc
.getSelectedFiles();
520 for (int index
= 0; index
< f
.length
; index
++) {
521 s
= s
+ f
[index
].getName() + ";";
523 this.jTextFieldFileName
.setText(s
);
527 public SourceFilesIdentification
[] getSfid() {
531 public void setSfid(SourceFilesIdentification
[] sfid
) {