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