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