]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
Adjust module order list after specifying FvBinding for ModuleSA.
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
1 package org.tianocore.frameworkwizard.platform.ui;
2
3 import java.awt.BorderLayout;
4 import java.awt.Dimension;
5 import java.awt.Toolkit;
6
7 import javax.swing.JFrame;
8 import javax.swing.JOptionPane;
9 import javax.swing.JPanel;
10 import javax.swing.JDialog;
11 import javax.swing.JTabbedPane;
12 import javax.swing.JLabel;
13 import javax.swing.JScrollPane;
14 import javax.swing.JTable;
15 import javax.swing.JTextArea;
16 import javax.swing.JSplitPane;
17 import javax.swing.JButton;
18 import javax.swing.ListSelectionModel;
19 import javax.swing.event.ListSelectionEvent;
20 import javax.swing.event.ListSelectionListener;
21 import javax.swing.event.TableModelEvent;
22 import javax.swing.event.TableModelListener;
23 import javax.swing.table.DefaultTableModel;
24 import javax.swing.table.TableModel;
25
26 import org.tianocore.frameworkwizard.common.DataValidation;
27 import org.tianocore.frameworkwizard.common.GlobalData;
28 import org.tianocore.frameworkwizard.common.IDefaultTableModel;
29 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;
30 import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;
31 import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;
32 import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;
33 import org.tianocore.frameworkwizard.packaging.PackageIdentification;
34
35 import java.awt.FlowLayout;
36 import java.awt.event.ActionEvent;
37 import java.awt.event.ActionListener;
38 import java.util.ArrayList;
39 import java.util.HashMap;
40 import java.util.Iterator;
41 import java.util.ListIterator;
42 import java.util.Vector;
43
44 import javax.swing.JTextField;
45 import java.awt.GridLayout;
46 import javax.swing.JComboBox;
47
48 public class FpdModuleSA extends JDialog implements ActionListener {
49
50 /**
51 *
52 */
53 private static final long serialVersionUID = 1L;
54 static JFrame frame;
55 private JPanel jContentPane = null;
56 private JTabbedPane jTabbedPane = null;
57 private JPanel jPanelPcd = null;
58 private JPanel jPanelLibrary = null;
59 private JLabel jLabelPcdData = null;
60 private JScrollPane jScrollPaneTablePcd = null;
61 private JTable jTablePcd = null;
62 private JPanel jPanelPcdSouth = null;
63 private JScrollPane jScrollPanePcdHelp = null;
64 private JTextArea jTextAreaPcdHelp = null;
65 private JPanel jPanelContentPaneSouth = null;
66 private JSplitPane jSplitPane = null;
67 private JPanel jPanelLibraryLeft = null;
68 private JPanel jPanelLibraryRight = null;
69 private JLabel jLabelLibClass = null;
70 private JLabel jLabelQualifiedInstance = null;
71 private JScrollPane jScrollPaneSelectedInstances = null;
72 private JTable jTableSelectedInstances = null;
73 private JScrollPane jScrollPaneLibClass = null;
74 private JTable jTableLibClass = null;
75 private JScrollPane jScrollPaneQualifiedInstance = null;
76 private JTable jTableLibInstances = null;
77 private JPanel jPanelLibrarySouth = null;
78 private JPanel jPanelLibraryCenter = null;
79 private JScrollPane jScrollPaneInstanceHelp = null;
80 private JTextArea jTextAreaInstanceHelp = null;
81 private JLabel jLabelSelectedInstances = null;
82 private JLabel jLabelInstanceHelp = null;
83 private JButton jButtonAdd = null;
84 private JButton jButtonDeleteInstance = null;
85 private JLabel jLabelPcdHelp = null;
86 private JButton jButtonOk = null;
87 private JButton jButtonCancel = null;
88 private IDefaultTableModel model = null;
89 private IDefaultTableModel selectedInstancesTableModel = null;
90 private IDefaultTableModel libClassTableModel = null;
91 private IDefaultTableModel libInstanceTableModel = null;
92 private DefaultTableModel optionsTableModel = null;
93 private FpdFileContents ffc = null;
94 private String moduleKey = null;
95 private int moduleSaNum = -1;
96 private HashMap<String, ArrayList<String>> classInstanceMap = null;
97 private ArrayList<String> classProduced = null;
98 private HashMap<String, ArrayList<String>> classConsumed = null;
99 private JPanel jPanelModuleSaOpts = null;
100 private JLabel jLabelFvBinding = null;
101 private JTextField jTextFieldFvBinding = null;
102 private JLabel jLabelFfsFileGuid = null;
103 private JTextField jTextFieldFileGuid = null;
104 private JLabel jLabelFfsFormatKey = null;
105 private JTextField jTextFieldFfsKey = null;
106 private JScrollPane jScrollPaneModuleSaOptions = null;
107 private JTable jTableModuleSaOptions = null;
108 private JButton jButtonNew = null;
109 private JButton jButtonDeleteOption = null;
110 private JPanel jPanelPcdFields = null;
111 private JPanel jPanelPcdFieldsSecondRow = null;
112 private JPanel jPanelPcdFieldsThirdRow = null;
113 private JPanel jPanelPcdFieldsFirstRow = null;
114 private JLabel jLabelItemType = null;
115 private JComboBox jComboBoxItemType = null;
116 private JLabel jLabelMaxDatumSize = null;
117 private JTextField jTextFieldMaxDatumSize = null;
118 private JLabel jLabelPcdDefaultValue = null;
119 private JTextField jTextFieldPcdDefault = null;
120 private JButton jButtonUpdatePcd = null;
121 private JComboBox jComboBoxFeatureFlagValue = null;
122 private OpeningPlatformType docConsole = null;
123 private JPanel jPanelCustomToolChain = null;
124 private JPanel jPanelToolchainS = null;
125 private JPanel jPanelLibraryCenterN = null;
126 private JPanel jPanelLibraryCenterC = null; // @jve:decl-index=0:visual-constraint="20,224"
127
128 private final int buildTargetWidth = 150;
129 private final int toolChainFamilyWidth = 150;
130 private final int supportArchWidth = 150;
131 private final int toolCmdCodeWidth = 200;
132 private final int tagNameWidth = 150;
133 private final int argWidth = 400;
134
135 /**
136 * This is the default constructor
137 */
138 public FpdModuleSA() {
139 super();
140 initialize();
141 }
142 public FpdModuleSA(FpdFileContents ffc) {
143 this();
144 this.ffc = ffc;
145 }
146
147 public void setKey(String k, int i, OpeningPlatformType dc){
148 this.moduleKey = k;
149 moduleSaNum = i;
150 this.docConsole = dc;
151 classProduced = null;
152 classConsumed = null;
153 jTabbedPane.setSelectedIndex(0);
154 initPcdBuildDefinition(i);
155 }
156
157 /**
158 init will be called each time FpdModuleSA object is to be shown.
159 @param key Module information.
160 **/
161 public void initPcdBuildDefinition(int i) {
162 //
163 // display pcd for key.
164 //
165 model.setRowCount(0);
166 jTextAreaPcdHelp.setText("");
167 jComboBoxItemType.setSelectedIndex(-1);
168 jTextFieldMaxDatumSize.setText("");
169 jTextFieldPcdDefault.setText("");
170 int pcdCount = ffc.getPcdDataCount(i);
171 if (pcdCount != 0) {
172 String[][] saa = new String[pcdCount][7];
173 ffc.getPcdData(i, saa);
174 for (int j = 0; j < saa.length; ++j) {
175 model.addRow(saa[j]);
176 }
177 }
178 }
179
180 public void initLibraries(String key) {
181 //
182 // display library classes that need to be resolved. also potential instances for them.
183 //
184 resolveLibraryInstances(moduleKey);
185 //
186 // display lib instances already selected for key
187 //
188 selectedInstancesTableModel.setRowCount(0);
189 int instanceCount = ffc.getLibraryInstancesCount(key);
190 if (instanceCount != 0) {
191 String[][] saa = new String[instanceCount][5];
192 ffc.getLibraryInstances(key, saa);
193 for (int i = 0; i < saa.length; ++i) {
194 ModuleIdentification mi = WorkspaceProfile.getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);
195 if (mi != null) {
196 //
197 // ToDo: verify this instance first.
198 //
199 saa[i][0] = mi.getName();
200 saa[i][2] = mi.getVersion();
201 saa[i][4] = mi.getPackageId().getVersion();
202 //
203 // re-evaluate lib instance usage when adding a already-selected lib instance.
204 //
205 resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);
206 selectedInstancesTableModel.addRow(saa[i]);
207 }
208 }
209 }
210 showClassToResolved();
211 }
212
213 public void initFvInfo (String key) {
214 //
215 // display module SA options
216 //
217 jTextFieldFvBinding.setText("");
218 String fvBinding = ffc.getFvBinding(key);
219 if (fvBinding != null) {
220 jTextFieldFvBinding.setText(fvBinding);
221 }
222 jTextFieldFileGuid.setText("");
223 String fileGuid = ffc.getFfsFileNameGuid(key);
224 if (fileGuid != null) {
225 jTextFieldFileGuid.setText(fileGuid);
226 }
227 jTextFieldFfsKey.setText("");
228 String ffsKey = ffc.getFfsFormatKey(key);
229 if (ffsKey != null) {
230 jTextFieldFfsKey.setText(ffsKey);
231 }
232 }
233
234 public void initToolChainOptions(String key) {
235
236 optionsTableModel.setRowCount(0);
237 String[][] saa = new String[ffc.getModuleSAOptionsCount(key)][6];
238 ffc.getModuleSAOptions(key, saa);
239 for (int i = 0; i < saa.length; ++i) {
240 optionsTableModel.addRow(saa[i]);
241 }
242 }
243
244 private void resolveLibraryInstances(String key) {
245 ModuleIdentification mi = WorkspaceProfile.getModuleId(key);
246 PackageIdentification[] depPkgList = null;
247 try{
248 //
249 // Get dependency pkg list into which we will search lib instances.
250 //
251 depPkgList = SurfaceAreaQuery.getDependencePkg(null, mi);
252 //
253 // Get the lib class consumed, produced by this module itself.
254 //
255 Vector<String> vClassConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);
256
257 if (this.classConsumed == null) {
258 this.classConsumed = new HashMap<String, ArrayList<String>>();
259 }
260
261 for(int i = 0; i < vClassConsumed.size(); ++i){
262 ArrayList<String> consumedBy = this.classConsumed.get(vClassConsumed.get(i));
263 if (consumedBy == null) {
264 consumedBy = new ArrayList<String>();
265 }
266 consumedBy.add(key);
267 this.classConsumed.put(vClassConsumed.get(i), consumedBy);
268 }
269
270 Vector<String> vClassProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED", mi);
271 if (this.classProduced == null) {
272 this.classProduced = new ArrayList<String>();
273 }
274 for(int i = 0; i < vClassProduced.size(); ++i){
275 if (!this.classProduced.contains(vClassProduced.get(i))){
276 this.classProduced.add(vClassProduced.get(i));
277 }
278 }
279
280 //
281 // find potential instances in all pkgs for classes still in classConsumed.
282 //
283 if (classInstanceMap == null){
284 classInstanceMap = new HashMap<String, ArrayList<String>>();
285 }
286 Iterator<String> lic = this.classConsumed.keySet().iterator();
287 while(lic.hasNext()){
288 String cls = lic.next();
289 if (this.classProduced.contains(cls) || classInstanceMap.containsKey(cls)) {
290 continue;
291 }
292 ArrayList<String> instances = getInstancesForClass(cls, depPkgList);
293 if (instances.size() == 0){
294 JOptionPane.showMessageDialog(frame, "No Applicable Instance for Library Class " +
295 cls + ", Platform Build will Fail.");
296 }
297 classInstanceMap.put(cls, instances);
298
299 }
300
301 // showClassToResolved();
302 }
303 catch(Exception e) {
304 e.printStackTrace();
305 }
306 }
307
308 private ArrayList<String> getInstancesForClass(String cls, PackageIdentification[] depPkgList) throws Exception{
309 ArrayList<String> al = new ArrayList<String>();
310
311 // for (int i = 0; i < depPkgList.length; ++i) {
312 Iterator ismi = GlobalData.vModuleList.iterator();
313 while(ismi.hasNext()) {
314 ModuleIdentification mi = (ModuleIdentification)ismi.next();
315 // if (!mi.getPackageId().getGuid().equalsIgnoreCase(depPkgList[i].getGuid())) {
316 // continue;
317 // }
318 String[] clsProduced = getClassProduced(mi);
319
320 boolean isPotential = false;
321 for (int j = 0; j < clsProduced.length; ++j) {
322 if (clsProduced[j] == null) {
323 continue;
324 }
325 if (clsProduced[j].equals(cls)){
326 isPotential = true;
327 }
328 if (classProduced.contains(clsProduced[j])) {
329 isPotential = false;
330 break;
331 }
332 }
333 if (isPotential) {
334 al.add(mi.getGuid() + " " + mi.getVersion() + " " +
335 mi.getPackageId().getGuid() + " " + mi.getPackageId().getVersion());
336 }
337 }
338 // }
339
340 return al;
341 }
342
343 private void removeInstance(String key) {
344 ModuleIdentification mi = WorkspaceProfile.getModuleId(key);
345 //
346 // remove pcd information of instance from current ModuleSA
347 //
348 ffc.removePcdData(moduleKey, mi);
349 //
350 // remove class produced by this instance and add back these produced class to be bound.
351 //
352 String[] clsProduced = getClassProduced(mi);
353 for (int i = 0; i < clsProduced.length; ++i) {
354
355 classProduced.remove(clsProduced[i]);
356 }
357 //
358 // remove class consumed by this instance. we do not need to bound it now.
359 //
360 String[] clsConsumed = getClassConsumed(mi);
361 for (int i = 0; i < clsConsumed.length; ++i) {
362 ArrayList<String> al = classConsumed.get(clsConsumed[i]);
363
364 if (al == null ) {
365 classConsumed.remove(clsConsumed[i]);
366 continue;
367 }
368 al.remove(key);
369 if (al.size() == 0) {
370 classConsumed.remove(clsConsumed[i]);
371 }
372
373 }
374
375 showClassToResolved();
376
377 }
378
379
380 private String[] getClassProduced(ModuleIdentification mi){
381
382 try{
383 Vector<String> clsProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED", mi);
384 String[] sClassProduced = new String[clsProduced.size()];
385 for (int i = 0; i < clsProduced.size(); ++i) {
386 sClassProduced[i] = clsProduced.get(i);
387 }
388 return sClassProduced;
389
390 }catch (Exception e) {
391 e.printStackTrace();
392 }
393 return new String[0];
394
395 }
396
397 private String[] getClassConsumed(ModuleIdentification mi){
398
399 try{
400 Vector<String> clsConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);
401 String[] sClassConsumed = new String[clsConsumed.size()];
402 for (int i = 0; i < clsConsumed.size(); ++i) {
403 sClassConsumed[i] = clsConsumed.get(i);
404 }
405 return sClassConsumed;
406 }catch (Exception e) {
407 e.printStackTrace();
408 }
409 return new String[0];
410 }
411
412 private void showClassToResolved(){
413 libClassTableModel.setRowCount(0);
414 if (classConsumed.size() == 0) {
415 return;
416 }
417 Iterator<String> li = classConsumed.keySet().iterator();
418 while(li.hasNext()){
419
420 String[] s = {li.next()};
421 // if (classConsumed.get(s[0]) == null) {
422 // continue;
423 // }
424 // if (classConsumed.get(s[0]).size() == 0) {
425 // continue;
426 // }
427 if (!classProduced.contains(s[0])){
428 libClassTableModel.addRow(s);
429 }
430 }
431 libInstanceTableModel.setRowCount(0);
432 }
433
434 private void addLibInstance (ModuleIdentification libMi) throws Exception{
435
436 //
437 // Add pcd information of selected instance to current moduleSA
438 //
439 ffc.addFrameworkModulesPcdBuildDefs(libMi, null, ffc.getModuleSA(moduleKey));
440
441 ffc.genLibraryInstance(libMi, moduleKey);
442 }
443 /**
444 * This method initializes this
445 *
446 * @return void
447 */
448 private void initialize() {
449 this.setSize(877, 555);
450 this.setResizable(false);
451 this.centerWindow();
452 this.setModal(true);
453 this.setTitle("Module Settings");
454 this.setContentPane(getJContentPane());
455 }
456
457 /**
458 * This method initializes jContentPane
459 *
460 * @return javax.swing.JPanel
461 */
462 private JPanel getJContentPane() {
463 if (jContentPane == null) {
464 jContentPane = new JPanel();
465 jContentPane.setLayout(new BorderLayout());
466 jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);
467 jContentPane.add(getJPanelContentPaneSouth(), java.awt.BorderLayout.SOUTH);
468 }
469 return jContentPane;
470 }
471
472 /**
473 * This method initializes jTabbedPane
474 *
475 * @return javax.swing.JTabbedPane
476 */
477 private JTabbedPane getJTabbedPane() {
478 if (jTabbedPane == null) {
479 jTabbedPane = new JTabbedPane();
480 jTabbedPane.addTab("PCD Build Definition", null, getJPanelPcd(), null);
481 jTabbedPane.addTab("Libraries", null, getJPanelLibrary(), null);
482 jTabbedPane.addTab("FV Info", null, getJPanelModuleSaOpts(), null);
483 jTabbedPane.addTab("Custom Toolchain", null, getJPanelCustomToolChain(), null);
484
485 }
486 return jTabbedPane;
487 }
488
489 /**
490 * This method initializes jPanelPcd
491 *
492 * @return javax.swing.JPanel
493 */
494 private JPanel getJPanelPcd() {
495 if (jPanelPcd == null) {
496 jLabelPcdData = new JLabel();
497 jLabelPcdData.setText(" PCD Data");
498 jPanelPcd = new JPanel();
499 jPanelPcd.setLayout(new BorderLayout());
500 jPanelPcd.add(jLabelPcdData, java.awt.BorderLayout.NORTH);
501 jPanelPcd.add(getJScrollPaneTablePcd(), java.awt.BorderLayout.CENTER);
502 jPanelPcd.add(getJPanelPcdSouth(), java.awt.BorderLayout.SOUTH);
503 jPanelPcd.addComponentListener(new java.awt.event.ComponentAdapter() {
504 public void componentShown(java.awt.event.ComponentEvent e) {
505 initPcdBuildDefinition(moduleSaNum);
506 }
507 });
508
509 }
510 return jPanelPcd;
511 }
512
513 /**
514 * This method initializes jPanelLibrary
515 *
516 * @return javax.swing.JPanel
517 */
518 private JPanel getJPanelLibrary() {
519 if (jPanelLibrary == null) {
520 jPanelLibrary = new JPanel();
521 jPanelLibrary.setLayout(new BorderLayout());
522 jPanelLibrary.add(getJSplitPane(), java.awt.BorderLayout.NORTH);
523 jPanelLibrary.add(getJPanelLibrarySouth(), java.awt.BorderLayout.SOUTH);
524 jPanelLibrary.add(getJPanelLibraryCenter(), java.awt.BorderLayout.CENTER);
525 jPanelLibrary.addComponentListener(new java.awt.event.ComponentAdapter() {
526 public void componentShown(java.awt.event.ComponentEvent e) {
527 initLibraries(moduleKey);
528 }
529 });
530 }
531 return jPanelLibrary;
532 }
533
534 /**
535 * This method initializes jScrollPaneTablePcd
536 *
537 * @return javax.swing.JScrollPane
538 */
539 private JScrollPane getJScrollPaneTablePcd() {
540 if (jScrollPaneTablePcd == null) {
541 jScrollPaneTablePcd = new JScrollPane();
542 jScrollPaneTablePcd.setViewportView(getJTablePcd());
543 }
544 return jScrollPaneTablePcd;
545 }
546
547 /**
548 * This method initializes jTable
549 *
550 * @return javax.swing.JTable
551 */
552 private JTable getJTablePcd() {
553 if (jTablePcd == null) {
554 model = new IDefaultTableModel();
555 jTablePcd = new JTable(model);
556 jTablePcd.setRowHeight(20);
557 jTablePcd.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
558 model.addColumn("CName");
559 model.addColumn("TokenSpaceGUID");
560 model.addColumn("ItemType");
561 model.addColumn("Token");
562 model.addColumn("MaxDatumSize");
563 model.addColumn("DataType");
564 model.addColumn("DefaultValue");
565
566 jTablePcd.getColumnModel().getColumn(0).setMinWidth(250);
567
568 jTablePcd.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
569 jTablePcd.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
570 public void valueChanged(ListSelectionEvent e) {
571
572 if (e.getValueIsAdjusting()){
573 return;
574 }
575 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
576 if (lsm.isSelectionEmpty()) {
577 return;
578 }
579 else{
580 int selectedRow = lsm.getMinSelectionIndex();
581 String cName = model.getValueAt(selectedRow, 0)+"";
582 String tsGuid = model.getValueAt(selectedRow, 1)+"";
583 String itemType = model.getValueAt(selectedRow, 2)+"";
584 //
585 // array for pcd related information: helpText, itemType, moduleType.
586 //
587 String[] pcdInfo = {"", "", ""};
588 getPcdInfo(cName, tsGuid, pcdInfo);
589 jTextAreaPcdHelp.setText(pcdInfo[0]);
590 initComboBox(pcdInfo[1], pcdInfo[2]);
591 jComboBoxItemType.setSelectedItem(itemType);
592 jTextFieldMaxDatumSize.setEnabled(true);
593 jTextFieldMaxDatumSize.setVisible(true);
594 jTextFieldMaxDatumSize.setText(jTablePcd.getValueAt(selectedRow, 4)+"");
595 jTextFieldPcdDefault.setEnabled(true);
596 jTextFieldPcdDefault.setText(jTablePcd.getValueAt(selectedRow, 6)+"");
597 if (model.getValueAt(selectedRow, 5).equals("VOID*")) {
598 if (pcdInfo[1].equals("FEATURE_FLAG")) {
599 jTextFieldMaxDatumSize.setVisible(false);
600 }
601 else if (pcdInfo[1].equals("FIXED_AT_BUILD")) {
602 try{
603 jTextFieldMaxDatumSize.setEnabled(false);
604 jTextFieldMaxDatumSize.setText(ffc.setMaxSizeForPointer(jTablePcd.getValueAt(selectedRow, 6)+"")+"");
605 }
606 catch(Exception except){
607 JOptionPane.showMessageDialog(frame, "Unacceptable PCD Value: " + except.getMessage());
608 }
609 }
610 else{
611 jTextFieldMaxDatumSize.setText(jTablePcd.getValueAt(selectedRow, 4)+"");
612 }
613 }
614 else {
615 jTextFieldMaxDatumSize.setEnabled(false);
616 }
617
618 if (!model.getValueAt(selectedRow, 2).equals("DYNAMIC") && !model.getValueAt(selectedRow, 2).equals("DYNAMIC_EX")) {
619 jTextFieldPcdDefault.setText(model.getValueAt(selectedRow, 6)+"");
620 if (model.getValueAt(selectedRow, 2).equals("FEATURE_FLAG")){
621 jTextFieldPcdDefault.setVisible(false);
622 jComboBoxFeatureFlagValue.setVisible(true);
623 jComboBoxFeatureFlagValue.setSelectedItem(model.getValueAt(selectedRow, 6)+"");
624 }
625 else{
626 jTextFieldPcdDefault.setVisible(true);
627 jTextFieldPcdDefault.setEnabled(true);
628 jComboBoxFeatureFlagValue.setVisible(false);
629 }
630 }
631 else{
632 jTextFieldPcdDefault.setEnabled(false);
633 }
634 }
635
636
637 }
638 });
639
640 }
641 return jTablePcd;
642 }
643
644 private void initComboBox(String originalType, String mType) {
645 jComboBoxItemType.removeAllItems();
646 jComboBoxItemType.addItem(originalType);
647 if (originalType.equals("PATCHABLE_IN_MODULE") && mType.equalsIgnoreCase("false")) {
648 jComboBoxItemType.addItem("FIXED_AT_BUILD");
649 }
650 if (originalType.equals("DYNAMIC")) {
651 jComboBoxItemType.addItem("FIXED_AT_BUILD");
652 jComboBoxItemType.addItem("PATCHABLE_IN_MODULE");
653 }
654 }
655
656 private void getPcdInfo(String cName, String tsGuid, String[] sa) {
657 String[][] saa = new String[ffc.getLibraryInstancesCount(moduleKey)][5];
658 ffc.getLibraryInstances(moduleKey, saa);
659
660 try{
661 if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(moduleKey), cName, tsGuid, sa)) {
662 return;
663 }
664 for (int j = 0; j < saa.length; ++j) {
665 if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]),
666 cName, tsGuid, sa)) {
667 return;
668 }
669 }
670 }
671 catch(Exception e) {
672 JOptionPane.showMessageDialog(this, "Get PCD details fail: " + e.getMessage());
673 }
674 }
675
676 /**
677 * This method initializes jPanelPcdSouth
678 *
679 * @return javax.swing.JPanel
680 */
681 private JPanel getJPanelPcdSouth() {
682 if (jPanelPcdSouth == null) {
683 jLabelPcdHelp = new JLabel();
684 jLabelPcdHelp.setText("PCD Description");
685 jPanelPcdSouth = new JPanel();
686 jPanelPcdSouth.setPreferredSize(new java.awt.Dimension(607,200));
687 jPanelPcdSouth.add(jLabelPcdHelp, null);
688 jPanelPcdSouth.add(getJScrollPanePcdHelp(), null);
689 jPanelPcdSouth.add(getJPanelPcdFields(), null);
690 }
691 return jPanelPcdSouth;
692 }
693
694 /**
695 * This method initializes jScrollPanePcdHelp
696 *
697 * @return javax.swing.JScrollPane
698 */
699 private JScrollPane getJScrollPanePcdHelp() {
700 if (jScrollPanePcdHelp == null) {
701 jScrollPanePcdHelp = new JScrollPane();
702 jScrollPanePcdHelp.setPreferredSize(new java.awt.Dimension(500,100));
703 jScrollPanePcdHelp.setViewportView(getJTextAreaPcdHelp());
704 }
705 return jScrollPanePcdHelp;
706 }
707
708 /**
709 * This method initializes jTextAreaPcdHelp
710 *
711 * @return javax.swing.JTextArea
712 */
713 private JTextArea getJTextAreaPcdHelp() {
714 if (jTextAreaPcdHelp == null) {
715 jTextAreaPcdHelp = new JTextArea();
716 jTextAreaPcdHelp.setEditable(false);
717 }
718 return jTextAreaPcdHelp;
719 }
720
721 /**
722 * This method initializes jPanelContentPaneSouth
723 *
724 * @return javax.swing.JPanel
725 */
726 private JPanel getJPanelContentPaneSouth() {
727 if (jPanelContentPaneSouth == null) {
728 FlowLayout flowLayout = new FlowLayout();
729 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
730 jPanelContentPaneSouth = new JPanel();
731 jPanelContentPaneSouth.setLayout(flowLayout);
732 jPanelContentPaneSouth.add(getJButtonOk(), null);
733 jPanelContentPaneSouth.add(getJButtonCancel(), null);
734 }
735 return jPanelContentPaneSouth;
736 }
737
738 /**
739 * This method initializes jSplitPane
740 *
741 * @return javax.swing.JSplitPane
742 */
743 private JSplitPane getJSplitPane() {
744 if (jSplitPane == null) {
745 jSplitPane = new JSplitPane();
746 jSplitPane.setDividerLocation(200);
747 jSplitPane.setLeftComponent(getJPanelLibraryLeft());
748 jSplitPane.setRightComponent(getJPanelLibraryRight());
749 jSplitPane.setPreferredSize(new java.awt.Dimension(202,200));
750 }
751 return jSplitPane;
752 }
753
754 /**
755 * This method initializes jPanelLibraryLeft
756 *
757 * @return javax.swing.JPanel
758 */
759 private JPanel getJPanelLibraryLeft() {
760 if (jPanelLibraryLeft == null) {
761 jLabelLibClass = new JLabel();
762 jLabelLibClass.setText("Library Classes Uninstantiated");
763 jPanelLibraryLeft = new JPanel();
764 jPanelLibraryLeft.add(jLabelLibClass, null);
765 jPanelLibraryLeft.add(getJScrollPaneLibClass(), null);
766 }
767 return jPanelLibraryLeft;
768 }
769
770 /**
771 * This method initializes jPanelLibraryRight
772 *
773 * @return javax.swing.JPanel
774 */
775 private JPanel getJPanelLibraryRight() {
776 if (jPanelLibraryRight == null) {
777 jLabelQualifiedInstance = new JLabel();
778 jLabelQualifiedInstance.setText("Instances Available");
779 jPanelLibraryRight = new JPanel();
780 jPanelLibraryRight.add(jLabelQualifiedInstance, null);
781 jPanelLibraryRight.add(getJScrollPaneQualifiedInstance(), null);
782 }
783 return jPanelLibraryRight;
784 }
785
786 /**
787 * This method initializes jScrollPaneSelectedInstances
788 *
789 * @return javax.swing.JScrollPane
790 */
791 private JScrollPane getJScrollPaneSelectedInstances() {
792 if (jScrollPaneSelectedInstances == null) {
793 jScrollPaneSelectedInstances = new JScrollPane();
794 jScrollPaneSelectedInstances.setPreferredSize(new java.awt.Dimension(600,150));
795 jScrollPaneSelectedInstances.setViewportView(getJTableSelectedInstances());
796 }
797 return jScrollPaneSelectedInstances;
798 }
799
800 /**
801 * This method initializes jTableSelectedInstances
802 *
803 * @return javax.swing.JTable
804 */
805 private JTable getJTableSelectedInstances() {
806 if (jTableSelectedInstances == null) {
807 selectedInstancesTableModel = new IDefaultTableModel();
808 selectedInstancesTableModel.addColumn("Name");
809 selectedInstancesTableModel.addColumn("ModuleGUID");
810 selectedInstancesTableModel.addColumn("ModuleVersion");
811 selectedInstancesTableModel.addColumn("PackageGUID");
812 selectedInstancesTableModel.addColumn("PackageVersion");
813 jTableSelectedInstances = new JTable(selectedInstancesTableModel);
814 jTableSelectedInstances.setRowHeight(20);
815
816 jTableSelectedInstances.getColumnModel().getColumn(0).setMinWidth(250);
817
818 jTableSelectedInstances.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
819 jTableSelectedInstances.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
820
821 }
822 return jTableSelectedInstances;
823 }
824
825 /**
826 * This method initializes jScrollPaneLibClass
827 *
828 * @return javax.swing.JScrollPane
829 */
830 private JScrollPane getJScrollPaneLibClass() {
831 if (jScrollPaneLibClass == null) {
832 jScrollPaneLibClass = new JScrollPane();
833 jScrollPaneLibClass.setPreferredSize(new java.awt.Dimension(200,170));
834 jScrollPaneLibClass.setViewportView(getJTableLibClass());
835 }
836 return jScrollPaneLibClass;
837 }
838
839 /**
840 * This method initializes jTableLibClass
841 *
842 * @return javax.swing.JTable
843 */
844 private JTable getJTableLibClass() {
845 if (jTableLibClass == null) {
846 libClassTableModel = new IDefaultTableModel();
847 libClassTableModel.addColumn("LibraryClass");
848 jTableLibClass = new JTable(libClassTableModel);
849 jTableLibClass.setRowHeight(20);
850 jTableLibClass.setShowGrid(false);
851 jTableLibClass.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
852 jTableLibClass.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
853 public void valueChanged(ListSelectionEvent e) {
854 if (e.getValueIsAdjusting()){
855 return;
856 }
857 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
858 if (lsm.isSelectionEmpty()) {
859 return;
860 }
861 else{
862 int selectedRow2 = lsm.getMinSelectionIndex();
863 if (selectedRow2 < 0) {
864 return;
865 }
866 //
867 // display potential lib instances according to class selection
868 //
869 libInstanceTableModel.setRowCount(0);
870 String cls = libClassTableModel.getValueAt(selectedRow2, 0).toString();
871 ArrayList<String> al = classInstanceMap.get(cls);
872 ListIterator<String> li = al.listIterator();
873 while(li.hasNext()) {
874 String instance = li.next();
875 String[] s = {"", "", "", "", ""};
876 if (WorkspaceProfile.getModuleId(instance) != null) {
877 s[0] = WorkspaceProfile.getModuleId(instance).getName();
878 }
879
880 String[] instancePart = instance.split(" ");
881 for (int i = 0; i < instancePart.length; ++i){
882 s[i+1] = instancePart[i];
883 }
884 libInstanceTableModel.addRow(s);
885 }
886
887 }
888 }
889 });
890 }
891 return jTableLibClass;
892 }
893
894 /**
895 * This method initializes jScrollPaneQualifiedInstance
896 *
897 * @return javax.swing.JScrollPane
898 */
899 private JScrollPane getJScrollPaneQualifiedInstance() {
900 if (jScrollPaneQualifiedInstance == null) {
901 jScrollPaneQualifiedInstance = new JScrollPane();
902 jScrollPaneQualifiedInstance.setPreferredSize(new java.awt.Dimension(600,170));
903 jScrollPaneQualifiedInstance.setViewportView(getJTableLibInstances());
904 }
905 return jScrollPaneQualifiedInstance;
906 }
907
908 /**
909 * This method initializes jTableLibInstances
910 *
911 * @return javax.swing.JTable
912 */
913 private JTable getJTableLibInstances() {
914 if (jTableLibInstances == null) {
915 libInstanceTableModel = new IDefaultTableModel();
916 libInstanceTableModel.addColumn("Name");
917 libInstanceTableModel.addColumn("ModuleGUID");
918 libInstanceTableModel.addColumn("ModuleVersion");
919 libInstanceTableModel.addColumn("PackageGUID");
920 libInstanceTableModel.addColumn("PackageVersion");
921 jTableLibInstances = new JTable(libInstanceTableModel);
922 jTableLibInstances.setRowHeight(20);
923
924 jTableLibInstances.getColumnModel().getColumn(0).setMinWidth(250);
925
926 jTableLibInstances.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
927 jTableLibInstances.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
928
929 }
930 return jTableLibInstances;
931 }
932
933 /**
934 * This method initializes jPanelLibrarySouth
935 *
936 * @return javax.swing.JPanel
937 */
938 private JPanel getJPanelLibrarySouth() {
939 if (jPanelLibrarySouth == null) {
940 jPanelLibrarySouth = new JPanel();
941 }
942 return jPanelLibrarySouth;
943 }
944
945 /**
946 * This method initializes jPanelLibraryCenter
947 *
948 * @return javax.swing.JPanel
949 */
950 private JPanel getJPanelLibraryCenter() {
951 if (jPanelLibraryCenter == null) {
952 jLabelInstanceHelp = new JLabel();
953 jLabelInstanceHelp.setText("Instance Description");
954 jLabelSelectedInstances = new JLabel();
955 jLabelSelectedInstances.setText("Selected Instances");
956 jPanelLibraryCenter = new JPanel();
957 jPanelLibraryCenter.setLayout(new BorderLayout());
958
959 jPanelLibraryCenter.add(getJPanelLibraryCenterC(), java.awt.BorderLayout.CENTER);
960 jPanelLibraryCenter.add(getJPanelLibraryCenterN(), java.awt.BorderLayout.NORTH);
961
962 }
963 return jPanelLibraryCenter;
964 }
965
966 /**
967 * This method initializes jScrollPaneInstanceHelp
968 *
969 * @return javax.swing.JScrollPane
970 */
971 private JScrollPane getJScrollPaneInstanceHelp() {
972 if (jScrollPaneInstanceHelp == null) {
973 jScrollPaneInstanceHelp = new JScrollPane();
974 jScrollPaneInstanceHelp.setPreferredSize(new java.awt.Dimension(400,50));
975 jScrollPaneInstanceHelp.setViewportView(getJTextAreaInstanceHelp());
976 }
977 return jScrollPaneInstanceHelp;
978 }
979
980 /**
981 * This method initializes jTextAreaInstanceHelp
982 *
983 * @return javax.swing.JTextArea
984 */
985 private JTextArea getJTextAreaInstanceHelp() {
986 if (jTextAreaInstanceHelp == null) {
987 jTextAreaInstanceHelp = new JTextArea();
988 jTextAreaInstanceHelp.setEditable(false);
989 }
990 return jTextAreaInstanceHelp;
991 }
992
993 /**
994 * This method initializes jButtonAdd
995 *
996 * @return javax.swing.JButton
997 */
998 private JButton getJButtonAdd() {
999 if (jButtonAdd == null) {
1000 jButtonAdd = new JButton();
1001 jButtonAdd.setPreferredSize(new java.awt.Dimension(80,20));
1002 jButtonAdd.setText("Add");
1003 jButtonAdd.addActionListener(new java.awt.event.ActionListener() {
1004 public void actionPerformed(java.awt.event.ActionEvent e) {
1005 int row = jTableLibInstances.getSelectedRow();
1006 if (row < 0) {
1007 return;
1008 }
1009
1010 String instanceValue = libInstanceTableModel.getValueAt(row, 1) + " " +
1011 libInstanceTableModel.getValueAt(row, 2) + " " +
1012 libInstanceTableModel.getValueAt(row, 3) + " " +
1013 libInstanceTableModel.getValueAt(row, 4);
1014 ModuleIdentification libMi = WorkspaceProfile.getModuleId(instanceValue);
1015 try {
1016 addLibInstance (libMi);
1017 }
1018 catch (Exception exception) {
1019 JOptionPane.showMessageDialog(frame, "Adding Instance" + libMi.getName() + ": "+ exception.getMessage());
1020 return;
1021 }
1022 docConsole.setSaved(false);
1023 Object[] s = {libInstanceTableModel.getValueAt(row, 0), libInstanceTableModel.getValueAt(row, 1),
1024 libInstanceTableModel.getValueAt(row, 2), libInstanceTableModel.getValueAt(row, 3),
1025 libInstanceTableModel.getValueAt(row, 4)};
1026 selectedInstancesTableModel.addRow(s);
1027 resolveLibraryInstances(instanceValue);
1028 showClassToResolved();
1029 }
1030 });
1031 }
1032 return jButtonAdd;
1033 }
1034
1035 /**
1036 * This method initializes jButton1
1037 *
1038 * @return javax.swing.JButton
1039 */
1040 private JButton getJButtonDeleteInstance() {
1041 if (jButtonDeleteInstance == null) {
1042 jButtonDeleteInstance = new JButton();
1043 jButtonDeleteInstance.setPreferredSize(new java.awt.Dimension(80,20));
1044 jButtonDeleteInstance.setText("Delete");
1045 jButtonDeleteInstance.addActionListener(new java.awt.event.ActionListener() {
1046 public void actionPerformed(java.awt.event.ActionEvent e) {
1047 int row = jTableSelectedInstances.getSelectedRow();
1048 if (row < 0) {
1049 return;
1050 }
1051 docConsole.setSaved(false);
1052 removeInstance(selectedInstancesTableModel.getValueAt(row, 1) + " " +
1053 selectedInstancesTableModel.getValueAt(row, 2) + " " +
1054 selectedInstancesTableModel.getValueAt(row, 3) + " " +
1055 selectedInstancesTableModel.getValueAt(row, 4));
1056 ffc.removeLibraryInstance(moduleKey, row);
1057 selectedInstancesTableModel.removeRow(row);
1058
1059 }
1060 });
1061 }
1062 return jButtonDeleteInstance;
1063 }
1064
1065 /**
1066 * This method initializes jButton2
1067 *
1068 * @return javax.swing.JButton
1069 */
1070 private JButton getJButtonOk() {
1071 if (jButtonOk == null) {
1072 jButtonOk = new JButton();
1073 jButtonOk.setPreferredSize(new java.awt.Dimension(80,20));
1074 jButtonOk.setText("Ok");
1075 jButtonOk.addActionListener(this);
1076 }
1077 return jButtonOk;
1078 }
1079
1080 /**
1081 * This method initializes jButton3
1082 *
1083 * @return javax.swing.JButton
1084 */
1085 private JButton getJButtonCancel() {
1086 if (jButtonCancel == null) {
1087 jButtonCancel = new JButton();
1088 jButtonCancel.setPreferredSize(new java.awt.Dimension(80,20));
1089 jButtonCancel.setText("Cancel");
1090 jButtonCancel.setVisible(false);
1091 }
1092 return jButtonCancel;
1093 }
1094 public void actionPerformed(ActionEvent arg0) {
1095
1096 if (arg0.getSource() == jButtonOk) {
1097 if (jTableModuleSaOptions.isEditing()) {
1098 jTableModuleSaOptions.getCellEditor().stopCellEditing();
1099 }
1100 this.setVisible(false);
1101 }
1102 }
1103 /**
1104 * This method initializes jPanelModuleSaOpts
1105 *
1106 * @return javax.swing.JPanel
1107 */
1108 private JPanel getJPanelModuleSaOpts() {
1109 if (jPanelModuleSaOpts == null) {
1110 FlowLayout flowLayout4 = new FlowLayout();
1111 flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
1112 jLabelFfsFormatKey = new JLabel();
1113 jLabelFfsFormatKey.setText("FFS Format Key");
1114 jLabelFfsFormatKey.setPreferredSize(new java.awt.Dimension(90,16));
1115 jLabelFfsFileGuid = new JLabel();
1116 jLabelFfsFileGuid.setText("FFS File GUID");
1117 jLabelFfsFileGuid.setPreferredSize(new java.awt.Dimension(90,16));
1118 jLabelFfsFileGuid.setVisible(false);
1119 jLabelFvBinding = new JLabel();
1120 jLabelFvBinding.setText("FV Binding");
1121 jLabelFvBinding.setPreferredSize(new java.awt.Dimension(90,16));
1122 jPanelModuleSaOpts = new JPanel();
1123 jPanelModuleSaOpts.setLayout(flowLayout4);
1124 jPanelModuleSaOpts.add(jLabelFvBinding, null);
1125 jPanelModuleSaOpts.add(getJTextFieldFvBinding(), null);
1126 jPanelModuleSaOpts.add(jLabelFfsFileGuid, null);
1127 jPanelModuleSaOpts.add(getJTextFieldFileGuid(), null);
1128 jPanelModuleSaOpts.add(jLabelFfsFormatKey, null);
1129 jPanelModuleSaOpts.add(getJTextFieldFfsKey(), null);
1130 jPanelModuleSaOpts.addComponentListener(new java.awt.event.ComponentAdapter() {
1131 public void componentShown(java.awt.event.ComponentEvent e) {
1132 initFvInfo(moduleKey);
1133 }
1134 });
1135 }
1136 return jPanelModuleSaOpts;
1137 }
1138 /**
1139 * This method initializes jTextField
1140 *
1141 * @return javax.swing.JTextField
1142 */
1143 private JTextField getJTextFieldFvBinding() {
1144 if (jTextFieldFvBinding == null) {
1145 jTextFieldFvBinding = new JTextField();
1146 jTextFieldFvBinding.setPreferredSize(new java.awt.Dimension(400,20));
1147 jTextFieldFvBinding.setEditable(true);
1148 jTextFieldFvBinding.addFocusListener(new java.awt.event.FocusAdapter() {
1149 public void focusLost(java.awt.event.FocusEvent e) {
1150 String originalFvBinding = ffc.getFvBinding(moduleKey);
1151 String newFvBinding = jTextFieldFvBinding.getText();
1152 if (newFvBinding.equals(originalFvBinding)) {
1153 return;
1154 }
1155 if (newFvBinding.length() == 0 && originalFvBinding == null) {
1156 return;
1157 }
1158
1159 ffc.setFvBinding(moduleKey, newFvBinding);
1160 String moduleInfo[] = moduleKey.split(" ");
1161 String fvNames[] = newFvBinding.split(" ");
1162 for (int i = 0; i < fvNames.length; ++i) {
1163 ffc.addModuleIntoBuildOptionsUserExtensions(fvNames[i], moduleInfo[0], moduleInfo[1], moduleInfo[2], moduleInfo[3], moduleInfo[4]);
1164 }
1165 docConsole.setSaved(false);
1166 }
1167 });
1168
1169 }
1170 return jTextFieldFvBinding;
1171 }
1172 /**
1173 * This method initializes jTextField1
1174 *
1175 * @return javax.swing.JTextField
1176 */
1177 private JTextField getJTextFieldFileGuid() {
1178 if (jTextFieldFileGuid == null) {
1179 jTextFieldFileGuid = new JTextField();
1180 jTextFieldFileGuid.setPreferredSize(new java.awt.Dimension(300,20));
1181 jTextFieldFileGuid.setVisible(false);
1182 jTextFieldFileGuid.addFocusListener(new java.awt.event.FocusAdapter() {
1183 public void focusLost(java.awt.event.FocusEvent e) {
1184 String originalFileGuid = ffc.getFfsFileNameGuid(moduleKey);
1185 String newFileGuid = jTextFieldFileGuid.getText();
1186 if (newFileGuid.equals(originalFileGuid)) {
1187 return;
1188 }
1189 if (newFileGuid.length() == 0 && originalFileGuid == null) {
1190 return;
1191 }
1192 if (newFileGuid.length() > 0) {
1193 if (!DataValidation.isGuid(newFileGuid)) {
1194 JOptionPane.showMessageDialog(frame, "FFS File Guid is NOT GUID Type.");
1195 return;
1196 }
1197 }
1198
1199 docConsole.setSaved(false);
1200 if (newFileGuid.length() == 0) {
1201 newFileGuid = null;
1202 }
1203 ffc.setFfsFileNameGuid(moduleKey, newFileGuid);
1204 }
1205 });
1206
1207 }
1208 return jTextFieldFileGuid;
1209 }
1210 /**
1211 * This method initializes jTextFieldFfsKey
1212 *
1213 * @return javax.swing.JTextField
1214 */
1215 private JTextField getJTextFieldFfsKey() {
1216 if (jTextFieldFfsKey == null) {
1217 jTextFieldFfsKey = new JTextField();
1218 jTextFieldFfsKey.setPreferredSize(new java.awt.Dimension(250,20));
1219 jTextFieldFfsKey.addFocusListener(new java.awt.event.FocusAdapter() {
1220 public void focusLost(java.awt.event.FocusEvent e) {
1221 String originalFfsKey = ffc.getFfsFormatKey(moduleKey);
1222 String newFfsKey = jTextFieldFfsKey.getText();
1223 if (newFfsKey.equals(originalFfsKey)) {
1224 return;
1225 }
1226 if (newFfsKey.length() == 0 && originalFfsKey == null) {
1227 return;
1228 }
1229 docConsole.setSaved(false);
1230 ffc.setFfsFormatKey(moduleKey, newFfsKey);
1231 }
1232 });
1233
1234 }
1235 return jTextFieldFfsKey;
1236 }
1237 /**
1238 * This method initializes jScrollPaneModuleSaOptions
1239 *
1240 * @return javax.swing.JScrollPane
1241 */
1242 private JScrollPane getJScrollPaneModuleSaOptions() {
1243 if (jScrollPaneModuleSaOptions == null) {
1244 jScrollPaneModuleSaOptions = new JScrollPane();
1245 jScrollPaneModuleSaOptions.setPreferredSize(new java.awt.Dimension(600,350));
1246 jScrollPaneModuleSaOptions.setViewportView(getJTableModuleSaOptions());
1247 }
1248 return jScrollPaneModuleSaOptions;
1249 }
1250 /**
1251 * This method initializes jTableModuleSaOptions
1252 *
1253 * @return javax.swing.JTable
1254 */
1255 private JTable getJTableModuleSaOptions() {
1256 if (jTableModuleSaOptions == null) {
1257 optionsTableModel = new DefaultTableModel();
1258 optionsTableModel.addColumn("BuildTargets");
1259 optionsTableModel.addColumn("ToolChainFamily");
1260 optionsTableModel.addColumn("TagName");
1261 optionsTableModel.addColumn("ToolCode");
1262 optionsTableModel.addColumn("SupportedArchs");
1263 optionsTableModel.addColumn("Contents");
1264 jTableModuleSaOptions = new JTable(optionsTableModel);
1265 jTableModuleSaOptions.setRowHeight(20);
1266
1267 jTableModuleSaOptions.getColumnModel().getColumn(0).setMinWidth(buildTargetWidth);
1268 jTableModuleSaOptions.getColumnModel().getColumn(1).setMinWidth(toolChainFamilyWidth);
1269 jTableModuleSaOptions.getColumnModel().getColumn(2).setMinWidth(tagNameWidth);
1270 jTableModuleSaOptions.getColumnModel().getColumn(3).setMinWidth(toolCmdCodeWidth);
1271 jTableModuleSaOptions.getColumnModel().getColumn(4).setMinWidth(supportArchWidth);
1272 jTableModuleSaOptions.getColumnModel().getColumn(5).setMinWidth(argWidth);
1273 // javax.swing.table.TableColumn toolFamilyCol = jTableModuleSaOptions.getColumnModel().getColumn(1);
1274 // JComboBox cb = new JComboBox();
1275 // cb.addItem("MSFT");
1276 // cb.addItem("GCC");
1277 // cb.addItem("CYGWIN");
1278 // cb.addItem("INTEL");
1279 // cb.addItem("USER_DEFINED");
1280 // toolFamilyCol.setCellEditor(new DefaultCellEditor(cb));
1281
1282 Vector<String> vArch = new Vector<String>();
1283 vArch.add("IA32");
1284 vArch.add("X64");
1285 vArch.add("IPF");
1286 vArch.add("EBC");
1287 vArch.add("ARM");
1288 vArch.add("PPC");
1289 jTableModuleSaOptions.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch));
1290
1291 jTableModuleSaOptions.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());
1292
1293 jTableModuleSaOptions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
1294 jTableModuleSaOptions.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
1295 jTableModuleSaOptions.getModel().addTableModelListener(new TableModelListener() {
1296 public void tableChanged(TableModelEvent arg0) {
1297 // TODO Auto-generated method stub
1298 int row = arg0.getFirstRow();
1299 TableModel m = (TableModel)arg0.getSource();
1300
1301 if (arg0.getType() == TableModelEvent.UPDATE){
1302 //ToDo Data Validition check.
1303 String targets = m.getValueAt(row, 0) + "";
1304 Vector<Object> targetName = null;
1305 if (targets.length() > 0) {
1306 targetName = new Vector<Object>();
1307 String[] sArray = targets.split(" ");
1308 for (int i = 0; i < sArray.length; ++i) {
1309 targetName.add(sArray[i]);
1310 }
1311 }
1312
1313 String toolChain = m.getValueAt(row, 1) + "";
1314 String tagName = m.getValueAt(row, 2) + "";
1315 String toolCode = m.getValueAt(row, 3) + "";
1316 String archs = m.getValueAt(row, 4) + "";
1317 Vector<Object> supArch = null;
1318 if (archs.length() > 0) {
1319 supArch = new Vector<Object>();
1320 String[] sArray1 = archs.split(" ");
1321 for (int i = 0; i < sArray1.length; ++i) {
1322 supArch.add(sArray1[i]);
1323 }
1324 }
1325
1326 String contents = m.getValueAt(row, 5) + "";
1327 docConsole.setSaved(false);
1328 ffc.updateModuleSAOptionsOpt(moduleKey, row, targetName, toolChain, tagName, toolCode, supArch, contents);
1329 }
1330 }
1331 });
1332 }
1333 return jTableModuleSaOptions;
1334 }
1335 /**
1336 * This method initializes jButtonNew
1337 *
1338 * @return javax.swing.JButton
1339 */
1340 private JButton getJButtonNew() {
1341 if (jButtonNew == null) {
1342 jButtonNew = new JButton();
1343 jButtonNew.setPreferredSize(new java.awt.Dimension(80,20));
1344 jButtonNew.setText("New");
1345 jButtonNew.addActionListener(new java.awt.event.ActionListener() {
1346 public void actionPerformed(java.awt.event.ActionEvent e) {
1347 String[] row = {"", "", "", "", "", ""};
1348 optionsTableModel.addRow(row);
1349 Vector<Object> v = new Vector<Object>();
1350 Vector<Object> v1 = null;
1351 docConsole.setSaved(false);
1352 ffc.genModuleSAOptionsOpt(moduleKey, v, "", "", "", v1, "");
1353 }
1354 });
1355 }
1356 return jButtonNew;
1357 }
1358 /**
1359 * This method initializes jButtonDelete
1360 *
1361 * @return javax.swing.JButton
1362 */
1363 private JButton getJButtonDeleteOption() {
1364 if (jButtonDeleteOption == null) {
1365 jButtonDeleteOption = new JButton();
1366 jButtonDeleteOption.setPreferredSize(new java.awt.Dimension(80,20));
1367 jButtonDeleteOption.setText("Delete");
1368 jButtonDeleteOption.addActionListener(new java.awt.event.ActionListener() {
1369 public void actionPerformed(java.awt.event.ActionEvent e) {
1370 if (jTableModuleSaOptions.getSelectedRow() < 0) {
1371 return;
1372 }
1373 docConsole.setSaved(false);
1374 ffc.removeModuleSAOptionsOpt(moduleKey, jTableModuleSaOptions.getSelectedRow());
1375 optionsTableModel.removeRow(jTableModuleSaOptions.getSelectedRow());
1376 }
1377 });
1378 }
1379 return jButtonDeleteOption;
1380 }
1381
1382 /**
1383 Start the window at the center of screen
1384
1385 **/
1386 protected void centerWindow(int intWidth, int intHeight) {
1387 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
1388 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);
1389 }
1390
1391 /**
1392 Start the window at the center of screen
1393
1394 **/
1395 protected void centerWindow() {
1396 centerWindow(this.getSize().width, this.getSize().height);
1397 }
1398 /**
1399 * This method initializes jPanelPcdFields
1400 *
1401 * @return javax.swing.JPanel
1402 */
1403 private JPanel getJPanelPcdFields() {
1404 if (jPanelPcdFields == null) {
1405 GridLayout gridLayout = new GridLayout();
1406 gridLayout.setRows(3);
1407 gridLayout.setColumns(2);
1408 jPanelPcdFields = new JPanel();
1409 jPanelPcdFields.setLayout(gridLayout);
1410 jPanelPcdFields.setPreferredSize(new java.awt.Dimension(600,90));
1411 jPanelPcdFields.add(getJPanelPcdFieldsFirstRow(), null);
1412 jPanelPcdFields.add(getJPanelPcdFieldsSecondRow(), null);
1413 jPanelPcdFields.add(getJPanelPcdFieldsThirdRow(), null);
1414 }
1415 return jPanelPcdFields;
1416 }
1417 /**
1418 * This method initializes jPanelPcdFieldsSecondRow
1419 *
1420 * @return javax.swing.JPanel
1421 */
1422 private JPanel getJPanelPcdFieldsSecondRow() {
1423 if (jPanelPcdFieldsSecondRow == null) {
1424 FlowLayout flowLayout2 = new FlowLayout();
1425 flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
1426 jLabelMaxDatumSize = new JLabel();
1427 jLabelMaxDatumSize.setText("Max Datum Size");
1428 jPanelPcdFieldsSecondRow = new JPanel();
1429 jPanelPcdFieldsSecondRow.setLayout(flowLayout2);
1430 jPanelPcdFieldsSecondRow.add(jLabelMaxDatumSize, null);
1431 jPanelPcdFieldsSecondRow.add(getJTextFieldMaxDatumSize(), null);
1432 }
1433 return jPanelPcdFieldsSecondRow;
1434 }
1435 /**
1436 * This method initializes jPanelPcdFieldsThirdRow
1437 *
1438 * @return javax.swing.JPanel
1439 */
1440 private JPanel getJPanelPcdFieldsThirdRow() {
1441 if (jPanelPcdFieldsThirdRow == null) {
1442 FlowLayout flowLayout3 = new FlowLayout();
1443 flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
1444 jLabelPcdDefaultValue = new JLabel();
1445 jLabelPcdDefaultValue.setText("Default Value");
1446 jLabelPcdDefaultValue.setPreferredSize(new java.awt.Dimension(91,16));
1447 jPanelPcdFieldsThirdRow = new JPanel();
1448 jPanelPcdFieldsThirdRow.setLayout(flowLayout3);
1449 jPanelPcdFieldsThirdRow.add(jLabelPcdDefaultValue, null);
1450 jPanelPcdFieldsThirdRow.add(getJTextFieldPcdDefault(), null);
1451 jPanelPcdFieldsThirdRow.add(getJComboBoxFeatureFlagValue(), null);
1452 jPanelPcdFieldsThirdRow.add(getJButtonUpdatePcd(), null);
1453 }
1454 return jPanelPcdFieldsThirdRow;
1455 }
1456 /**
1457 * This method initializes jPanelPcdFieldsFirstRow
1458 *
1459 * @return javax.swing.JPanel
1460 */
1461 private JPanel getJPanelPcdFieldsFirstRow() {
1462 if (jPanelPcdFieldsFirstRow == null) {
1463 FlowLayout flowLayout1 = new FlowLayout();
1464 flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
1465 jLabelItemType = new JLabel();
1466 jLabelItemType.setText("Item Type");
1467 jLabelItemType.setPreferredSize(new java.awt.Dimension(91,16));
1468 jPanelPcdFieldsFirstRow = new JPanel();
1469 jPanelPcdFieldsFirstRow.setLayout(flowLayout1);
1470 jPanelPcdFieldsFirstRow.add(jLabelItemType, null);
1471 jPanelPcdFieldsFirstRow.add(getJComboBoxItemType(), null);
1472 }
1473 return jPanelPcdFieldsFirstRow;
1474 }
1475 /**
1476 * This method initializes jComboBoxItemType
1477 *
1478 * @return javax.swing.JComboBox
1479 */
1480 private JComboBox getJComboBoxItemType() {
1481 if (jComboBoxItemType == null) {
1482 jComboBoxItemType = new JComboBox();
1483 jComboBoxItemType.setPreferredSize(new java.awt.Dimension(200,20));
1484 jComboBoxItemType.addItemListener(new java.awt.event.ItemListener() {
1485 public void itemStateChanged(java.awt.event.ItemEvent e) {
1486 int row = jTablePcd.getSelectedRow();
1487 if (row < 0 || model.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {
1488 return;
1489 }
1490 if (jComboBoxItemType.getItemCount() == 3) {
1491 if (!jComboBoxItemType.getSelectedItem().equals("DYNAMIC")) {
1492
1493 if (jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {
1494 jTextFieldPcdDefault.setText("");
1495 jTextFieldPcdDefault.setEnabled(true);
1496 }
1497 }
1498 else{
1499
1500 }
1501 }
1502 }
1503 });
1504 }
1505 return jComboBoxItemType;
1506 }
1507
1508 private void pcdDynamicToNonDynamic(String cName, String tsGuid) {
1509 String[][] saa = new String[ffc.getDynamicPcdBuildDataCount()][5];
1510 ffc.getDynamicPcdBuildData(saa);
1511 String maxSize = "";
1512 String value = "";
1513 for (int i = 0; i < saa.length; ++i) {
1514 if (saa[i][0].equals(cName) && saa[i][2].equals(tsGuid)) {
1515 maxSize = saa[i][3];
1516 value = ffc.getDynamicPcdBuildDataValue(i);
1517 break;
1518 }
1519 }
1520
1521 ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);
1522 for (int i = 0; i < al.size(); ++i) {
1523 String mKey = moduleInfo (al.get(i));
1524 ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", maxSize, value);
1525 String itemType = jComboBoxItemType.getSelectedItem()+"";
1526 al.set(i, mKey + " " + itemType);
1527 }
1528
1529 ffc.removeDynamicPcdBuildData(cName, tsGuid);
1530 }
1531
1532 private void pcdNonDynamicToDynamic(String cName, String tsGuid) {
1533 ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);
1534 for (int i = 0; i < al.size(); ++i) {
1535 String mKey = moduleInfo (al.get(i));
1536 ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", jTextFieldMaxDatumSize.getText(), jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");
1537 String itemType = jComboBoxItemType.getSelectedItem()+"";
1538 al.set(i, mKey + " " + itemType);
1539 }
1540 try{
1541 ffc.addDynamicPcdBuildData(cName, jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 5)+"", jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");
1542 }
1543 catch(Exception e){
1544 JOptionPane.showMessageDialog(frame, "PCD value format: " + e.getMessage());
1545 }
1546 }
1547
1548 private String moduleInfo (String pcdInfo) {
1549
1550 return pcdInfo.substring(0, pcdInfo.lastIndexOf(" "));
1551 }
1552
1553 /**
1554 * This method initializes jTextFieldMaxDatumSize
1555 *
1556 * @return javax.swing.JTextField
1557 */
1558 private JTextField getJTextFieldMaxDatumSize() {
1559 if (jTextFieldMaxDatumSize == null) {
1560 jTextFieldMaxDatumSize = new JTextField();
1561 jTextFieldMaxDatumSize.setPreferredSize(new java.awt.Dimension(200,20));
1562 }
1563 return jTextFieldMaxDatumSize;
1564 }
1565 /**
1566 * This method initializes jTextField4
1567 *
1568 * @return javax.swing.JTextField
1569 */
1570 private JTextField getJTextFieldPcdDefault() {
1571 if (jTextFieldPcdDefault == null) {
1572 jTextFieldPcdDefault = new JTextField();
1573 jTextFieldPcdDefault.setPreferredSize(new java.awt.Dimension(200,20));
1574 }
1575 return jTextFieldPcdDefault;
1576 }
1577 /**
1578 * This method initializes jButton6
1579 *
1580 * @return javax.swing.JButton
1581 */
1582 private JButton getJButtonUpdatePcd() {
1583 if (jButtonUpdatePcd == null) {
1584 jButtonUpdatePcd = new JButton();
1585 jButtonUpdatePcd.setPreferredSize(new java.awt.Dimension(150,20));
1586 jButtonUpdatePcd.setText("Update PCD Data");
1587 jButtonUpdatePcd.addActionListener(new java.awt.event.ActionListener() {
1588 public void actionPerformed(java.awt.event.ActionEvent e) {
1589 int row = jTablePcd.getSelectedRow();
1590 if (row < 0) {
1591 return;
1592 }
1593 docConsole.setSaved(false);
1594 String oldItemType = model.getValueAt(row, 2)+"";
1595 String newItemType = jComboBoxItemType.getSelectedItem()+"";
1596 model.setValueAt(newItemType, row, 2);
1597 model.setValueAt(jTextFieldMaxDatumSize.getText(), row, 4);
1598 model.setValueAt(jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem(), row, 6);
1599 if (oldItemType.equals("DYNAMIC") && !newItemType.equals("DYNAMIC")) {
1600 pcdDynamicToNonDynamic(model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"");
1601 }
1602 if (!oldItemType.equals("DYNAMIC") && newItemType.equals("DYNAMIC")) {
1603 pcdNonDynamicToDynamic(model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"");
1604 }
1605 ffc.updatePcdData(moduleKey, model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+"");
1606 }
1607 });
1608 }
1609 return jButtonUpdatePcd;
1610 }
1611 /**
1612 * This method initializes jComboBoxFeatureFlagValue
1613 *
1614 * @return javax.swing.JComboBox
1615 */
1616 private JComboBox getJComboBoxFeatureFlagValue() {
1617 if (jComboBoxFeatureFlagValue == null) {
1618 jComboBoxFeatureFlagValue = new JComboBox();
1619 jComboBoxFeatureFlagValue.setPreferredSize(new java.awt.Dimension(100,20));
1620 jComboBoxFeatureFlagValue.setVisible(false);
1621 jComboBoxFeatureFlagValue.addItem("TRUE");
1622 jComboBoxFeatureFlagValue.addItem("FALSE");
1623 }
1624 return jComboBoxFeatureFlagValue;
1625 }
1626 /**
1627 * This method initializes jPanelCustomToolChain
1628 *
1629 * @return javax.swing.JPanel
1630 */
1631 private JPanel getJPanelCustomToolChain() {
1632 if (jPanelCustomToolChain == null) {
1633 jPanelCustomToolChain = new JPanel();
1634 jPanelCustomToolChain.setLayout(new BorderLayout());
1635 jPanelCustomToolChain.add(getJPanelToolchainS(), java.awt.BorderLayout.SOUTH);
1636 jPanelCustomToolChain.add(getJScrollPaneModuleSaOptions(), java.awt.BorderLayout.CENTER);
1637 jPanelCustomToolChain.addComponentListener(new java.awt.event.ComponentAdapter() {
1638 public void componentShown(java.awt.event.ComponentEvent e) {
1639 initToolChainOptions(moduleKey);
1640 }
1641 });
1642 }
1643 return jPanelCustomToolChain;
1644 }
1645 /**
1646 * This method initializes jPanelToolchainS
1647 *
1648 * @return javax.swing.JPanel
1649 */
1650 private JPanel getJPanelToolchainS() {
1651 if (jPanelToolchainS == null) {
1652 jPanelToolchainS = new JPanel();
1653 jPanelToolchainS.add(getJButtonNew(), null);
1654 jPanelToolchainS.add(getJButtonDeleteOption(), null);
1655 }
1656 return jPanelToolchainS;
1657 }
1658
1659 /**
1660 * This method initializes jPanelLibraryCenterN
1661 *
1662 * @return javax.swing.JPanel
1663 */
1664 private JPanel getJPanelLibraryCenterN() {
1665 if (jPanelLibraryCenterN == null) {
1666 FlowLayout flowLayout5 = new FlowLayout();
1667 flowLayout5.setAlignment(java.awt.FlowLayout.CENTER);
1668 flowLayout5.setHgap(10);
1669 jPanelLibraryCenterN = new JPanel();
1670 jPanelLibraryCenterN.setLayout(flowLayout5);
1671 jPanelLibraryCenterN.add(jLabelInstanceHelp, null);
1672 jPanelLibraryCenterN.add(getJScrollPaneInstanceHelp(), null);
1673 jPanelLibraryCenterN.add(getJButtonAdd(), null);
1674 jPanelLibraryCenterN.add(getJButtonDeleteInstance(), null);
1675 }
1676 return jPanelLibraryCenterN;
1677 }
1678 /**
1679 * This method initializes jPanelLibraryCenterC
1680 *
1681 * @return javax.swing.JPanel
1682 */
1683 private JPanel getJPanelLibraryCenterC() {
1684 if (jPanelLibraryCenterC == null) {
1685 jPanelLibraryCenterC = new JPanel();
1686 jPanelLibraryCenterC.add(jLabelSelectedInstances, null);
1687 jPanelLibraryCenterC.add(getJScrollPaneSelectedInstances(), null);
1688 }
1689 return jPanelLibraryCenterC;
1690 }
1691
1692
1693 } // @jve:decl-index=0:visual-constraint="10,10"