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