062d637384f9ede01a5ca2119881edbad23ddd70
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / dialog / SourceFilesDlg.java
1 /** @file
2
3 The file is used to create, update SourceFile of MSA/MBD file
4
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
10
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.
13
14 **/
15 package org.tianocore.frameworkwizard.module.ui.dialog;
16
17 import java.awt.event.ActionEvent;
18 import java.io.File;
19 import java.util.Vector;
20
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;
27
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;
39
40 /**
41 The class is used to create, update SourceFile of MSA/MBD file
42 It extends IInternalFrame
43
44
45
46 **/
47 public class SourceFilesDlg extends IDialog {
48
49 ///
50 /// Define class Serial Version UID
51 ///
52 private static final long serialVersionUID = -6765742852142775378L;
53
54 //
55 // Define class members
56 //
57 private JPanel jContentPane = null;
58
59 private JLabel jLabelFileName = null;
60
61 private JTextField jTextFieldFileName = null;
62
63 private JButton jButtonOpenFile = null;
64
65 private JLabel jLabelToolChainFamily = null;
66
67 private StarLabel jStarLabel1 = null;
68
69 private JLabel jLabelArch = null;
70
71 private JScrollPane jScrollPane = null;
72
73 private JLabel jLabelTagName = null;
74
75 private JTextField jTextFieldTagName = null;
76
77 private JLabel jLabelToolCode = null;
78
79 private JTextField jTextFieldToolCode = null;
80
81 private IComboBox iComboBoxToolCode = null;
82
83 private JTextField jTextFieldToolChainFamily = null;
84
85 private JLabel jLabelFeatureFlag = null;
86
87 private JTextField jTextFieldFeatureFlag = null;
88
89 private ArchCheckBox jArchCheckBox = null;
90
91 private JButton jButtonOk = null;
92
93 private JButton jButtonCancel = null;
94
95 //
96 // Not used by UI
97 //
98 private SourceFilesIdentification sfid[] = null;
99
100 private String msaFileName = "";
101
102 private EnumerationData ed = new EnumerationData();
103
104 /**
105 This method initializes jTextFieldFileName
106
107 @return javax.swing.JTextField jTextFieldFileName
108
109 **/
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");
116 }
117 return jTextFieldFileName;
118 }
119
120 /**
121 This method initializes jButtonOpenFile
122
123 @return javax.swing.JButton jButtonOpenFile
124
125 **/
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);
133 }
134 return jButtonOpenFile;
135 }
136
137 /**
138 This method initializes jScrollPane
139
140 @return javax.swing.JScrollPane
141 */
142 private JScrollPane getJScrollPane() {
143 if (jScrollPane == null) {
144 jScrollPane = new JScrollPane();
145 jScrollPane.setViewportView(getJContentPane());
146 }
147 return jScrollPane;
148 }
149
150 /**
151 * This method initializes jTextFieldTagName
152 *
153 * @return javax.swing.JTextField
154 */
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");
161 }
162 return jTextFieldTagName;
163 }
164
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>");
174 }
175 return iComboBoxToolCode;
176 }
177
178 /**
179 * This method initializes jTextFieldToolCode
180 *
181 * @return javax.swing.JTextField
182 */
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);
190 }
191 return jTextFieldToolCode;
192 }
193
194 /**
195 * This method initializes jTextFieldToolChainFamily
196 *
197 * @return javax.swing.JTextField
198 */
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");
205 }
206 return jTextFieldToolChainFamily;
207 }
208
209 /**
210 * This method initializes jTextFieldFeatureFlag
211 *
212 * @return javax.swing.JTextField
213 */
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");
220 }
221 return jTextFieldFeatureFlag;
222 }
223
224 /**
225 This method initializes jButtonOk
226
227 @return javax.swing.JButton
228
229 **/
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);
236 }
237 return jButtonOk;
238 }
239
240 /**
241 This method initializes jButtonCancel
242
243 @return javax.swing.JButton
244
245 **/
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);
252 }
253 return jButtonCancel;
254 }
255
256 public static void main(String[] args) {
257
258 }
259
260 /**
261 This is the default constructor
262
263 **/
264 public SourceFilesDlg(SourceFilesIdentification inSourceFilesIdentification, IFrame iFrame, String fileName) {
265 super(iFrame, true);
266 init(inSourceFilesIdentification, fileName);
267 }
268
269 /**
270 This method initializes this
271
272 **/
273 private void init() {
274 this.setSize(510, 240);
275 this.setContentPane(getJScrollPane());
276 this.setTitle("Source Files");
277 this.setViewMode(false);
278 this.centerWindow();
279 }
280
281 /**
282 This method initializes this
283 Fill values to all fields if these values are not empty
284
285
286 @param inSourceFiles The input data of SourceFilesDocument.SourceFiles
287
288 **/
289 private void init(SourceFilesIdentification inSourceFilesIdentifications, String fileName) {
290 init();
291 //this.sfid = inSourceFilesIdentifications;
292 this.msaFileName = fileName;
293
294 if (inSourceFilesIdentifications != null) {
295 this.jTextFieldFileName.setText(inSourceFilesIdentifications.getFilename());
296 this.jTextFieldTagName.setText(inSourceFilesIdentifications.getTagName());
297
298 //
299 // Generate Tool Code selection list
300 //
301 Vector<String> v = ed.getVToolCode();
302 boolean isFind = false;
303 String strToolCode = inSourceFilesIdentifications.getToolCode();
304
305 //
306 // If the input value is not in the default list, add it to the list
307 //
308 if (strToolCode != null) {
309 for (int index = 0; index < v.size(); index++) {
310 if (v.elementAt(index).equals(strToolCode)) {
311 isFind = true;
312 break;
313 }
314 }
315 if (!isFind && !isEmpty(strToolCode)) {
316 v.addElement(strToolCode);
317 }
318 }
319
320 Tools.generateComboBoxByVector(iComboBoxToolCode, v);
321 this.iComboBoxToolCode.setSelectedItem(strToolCode);
322
323 this.jTextFieldToolChainFamily.setText(inSourceFilesIdentifications.getToolChainFamily());
324 jTextFieldFeatureFlag.setText(inSourceFilesIdentifications.getFeatureFlag());
325 this.jArchCheckBox.setSelectedItems(inSourceFilesIdentifications.getSupArchList());
326 }
327 }
328
329 /**
330 Disable all components when the mode is view
331
332 @param isView true - The view mode; false - The non-view mode
333
334 **/
335 public void setViewMode(boolean isView) {
336 if (isView) {
337 this.jTextFieldFileName.setEnabled(!isView);
338 this.jButtonOpenFile.setEnabled(!isView);
339 }
340 }
341
342 /**
343 This method initializes jContentPane
344
345 @return javax.swing.JPanel jContentPane
346
347 **/
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));
371
372 jContentPane = new JPanel();
373 jContentPane.setLayout(null);
374 jContentPane.setPreferredSize(new java.awt.Dimension(490, 185));
375
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));
382
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);
396 }
397 return jContentPane;
398 }
399
400 /* (non-Javadoc)
401 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
402 *
403 * Override actionPerformed to listen all actions
404 *
405 */
406 public void actionPerformed(ActionEvent arg0) {
407 if (arg0.getSource() == jButtonOpenFile) {
408 selectFile();
409 }
410
411 if (arg0.getSource() == jButtonOk) {
412 if (checkAdd()) {
413 getCurrentSourceFiles();
414 this.returnType = DataType.RETURN_TYPE_OK;
415 this.setVisible(false);
416 }
417 }
418
419 if (arg0.getSource() == jButtonCancel) {
420 this.returnType = DataType.RETURN_TYPE_CANCEL;
421 this.setVisible(false);
422 }
423 }
424
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)) {
431 toolCode = "";
432 }
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);
439 }
440 return sfid;
441 }
442
443 /**
444 Data validation for all fields
445
446 @retval true - All datas are valid
447 @retval false - At least one data is invalid
448
449 **/
450 public boolean checkAdd() {
451 //
452 // Check Filename
453 //
454 if (isEmpty(this.jTextFieldFileName.getText())) {
455 Log.wrn("Update Source Files", "File Name couldn't be empty");
456 return false;
457 }
458 if (!DataValidation.isFilename(this.jTextFieldFileName.getText())) {
459 Log.wrn("Update Source Files", "Incorrect data type for File Name");
460 return false;
461 }
462
463 //
464 // Check TagName
465 //
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");
469 return false;
470 }
471 }
472
473 //
474 // Check ToolCode
475 //
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");
479 return false;
480 }
481 }
482
483 //
484 // Check ToolChainFamily
485 //
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");
489 return false;
490 }
491 }
492
493 //
494 // Check FeatureFlag
495 //
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");
499 return false;
500 }
501 }
502
503 return true;
504 }
505
506 /**
507 Display a file open browser to let user select file
508
509 **/
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();
517 String s = "";
518 for (int index = 0; index < f.length; index++) {
519 s = s + f[index].getName() + ";";
520 }
521 this.jTextFieldFileName.setText(s);
522 }
523 }
524
525 public SourceFilesIdentification[] getSfid() {
526 return sfid;
527 }
528
529 public void setSfid(SourceFilesIdentification[] sfid) {
530 this.sfid = sfid;
531 }
532 }