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