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