]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
add ForceDebug column to FramworkModules table.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
CommitLineData
d78abb5a 1/** @file\r
2 \r
3 The file is used to create, update FrameworkModules of Fpd file\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
a13899c5 15package org.tianocore.frameworkwizard.platform.ui;\r
16\r
17import java.awt.BorderLayout;\r
18\r
19import javax.swing.JFrame;\r
20import javax.swing.JOptionPane;\r
21import javax.swing.JPanel;\r
a13899c5 22import javax.swing.JSplitPane;\r
23import javax.swing.JLabel;\r
24import javax.swing.JScrollPane;\r
25import javax.swing.JTable;\r
26import javax.swing.JButton;\r
27import javax.swing.ListSelectionModel;\r
e7cc0547 28import javax.swing.event.TableModelEvent;\r
a13899c5 29import javax.swing.table.DefaultTableModel;\r
e7cc0547 30import javax.swing.table.TableModel;\r
a13899c5 31\r
32import org.tianocore.PlatformSurfaceAreaDocument;\r
d6d24759 33import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
a13899c5 34import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
1bf9fa5a 35import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
a13899c5 36import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
37import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
38\r
39import java.awt.FlowLayout;\r
40import java.io.File;\r
41import java.util.ArrayList;\r
42import java.util.HashMap;\r
43import java.util.Iterator;\r
44import java.util.Map;\r
45import java.util.Set;\r
bf5abaff 46import java.util.Vector;\r
a13899c5 47\r
48public class FpdFrameworkModules extends IInternalFrame {\r
49\r
44053733 50 /**\r
df4b9c3e 51 * Initialize Globals\r
44053733 52 */\r
53 private static final long serialVersionUID = 1L;\r
d78abb5a 54 \r
55 public static final int forceDbgColForFpdModTable = 7;\r
a8a9de7c 56\r
a13899c5 57 static JFrame frame;\r
a8a9de7c 58\r
a13899c5 59 private JSplitPane jSplitPane = null;\r
a8a9de7c 60\r
4da2e625 61 private JPanel jPanelTop = null;\r
a8a9de7c 62\r
4da2e625 63 private JPanel jPanelBottom = null;\r
a8a9de7c 64\r
a13899c5 65 private JLabel jLabel = null;\r
a8a9de7c 66\r
4da2e625 67 private JScrollPane jScrollPaneAllModules = null;\r
a8a9de7c 68\r
4da2e625 69 private JTable jTableAllModules = null;\r
a8a9de7c 70\r
4da2e625 71 private JPanel jPanelTopSouth = null;\r
a8a9de7c 72\r
4da2e625 73 private JButton jButtonAddModule = null;\r
a8a9de7c 74\r
4da2e625 75 private JLabel jLabelModulesAdded = null;\r
a8a9de7c 76\r
4da2e625 77 private JPanel jPanelBottomSouth = null;\r
a8a9de7c 78\r
4da2e625 79 private JScrollPane jScrollPaneFpdModules = null;\r
a8a9de7c 80\r
4da2e625 81 private JTable jTableFpdModules = null;\r
a8a9de7c 82\r
4da2e625 83 private JButton jButtonSettings = null;\r
a8a9de7c 84\r
4da2e625 85 private JButton jButtonRemoveModule = null;\r
a8a9de7c 86\r
4da2e625 87 private NonEditableTableModel modelAllModules = null;\r
a8a9de7c 88\r
d78abb5a 89 private FpdModulesTableModel modelFpdModules = null;\r
a8a9de7c 90\r
a13899c5 91 private FpdModuleSA settingDlg = null;\r
a8a9de7c 92\r
a13899c5 93 private FpdFileContents ffc = null;\r
a8a9de7c 94\r
d6d24759 95 private OpeningPlatformType docConsole = null;\r
a8a9de7c 96\r
bf5abaff 97 private Map<String, ArrayList<String>> fpdMsa = null;\r
a8a9de7c 98\r
a13899c5 99 private ArrayList<ModuleIdentification> miList = null;\r
df4b9c3e 100 \r
101 /**\r
102 * Column settings for displaying all modules in workspace\r
103 */\r
d208e1e2 104 private final int modNameColForAllModTable = 0;\r
93fd07b1 105 \r
d208e1e2 106 private final int pkgNameColForAllModTable = 1;\r
93fd07b1 107 \r
d208e1e2 108 private final int pathColForAllModTable = 2;\r
93fd07b1 109 \r
df4b9c3e 110 private final int typeColForAllModTable = 3;\r
111 \r
112 private final int pkgVerColForAllModTable = 5;\r
93fd07b1 113 \r
d208e1e2 114 private final int modVerColForAllModTable = 4;\r
93fd07b1 115 \r
df4b9c3e 116 /**\r
117 * Column settings for display modules in the FPD file\r
118 */\r
d208e1e2 119 private final int modNameColForFpdModTable = 0;\r
93fd07b1 120 \r
d208e1e2 121 private final int pkgNameColForFpdModTable = 1;\r
93fd07b1 122 \r
d208e1e2 123 private final int pathColForFpdModTable = 2;\r
93fd07b1 124 \r
d208e1e2 125 private final int archColForFpdModTable = 3;\r
93fd07b1 126 \r
4cd31580 127 private final int pkgVerColForFpdModTable = 6;\r
a8a9de7c 128\r
4cd31580 129 private final int modVerColForFpdModTable = 5;\r
130 \r
131 private final int typeColForFpdModTable = 4;\r
d208e1e2 132 \r
df4b9c3e 133 /**\r
134 * FpdFileContents structure\r
135 */\r
d208e1e2 136 private final int ffcModGuid = 0;\r
137 \r
138 private final int ffcModVer = 1;\r
139 \r
140 private final int ffcPkgGuid = 2;\r
141 \r
142 private final int ffcPkgVer = 3;\r
143 \r
144 private final int ffcModArch = 4;\r
df4b9c3e 145 \r
146 /**\r
147 * Set Column Widths, Only the PATH should not have a max width.\r
148 */\r
d208e1e2 149 private final int modNameMinWidth = 168;\r
a8a9de7c 150 \r
d208e1e2 151 private final int modNamePrefWidth = 200;\r
df4b9c3e 152 \r
153 private final int modNameMaxWidth = 350;\r
a8a9de7c 154\r
d208e1e2 155 private final int pkgNameMinWidth = 100;\r
a8a9de7c 156 \r
df4b9c3e 157 private final int pkgNamePrefWidth = 130;\r
a8a9de7c 158 \r
d208e1e2 159 private final int pkgNameMaxWidth = 150;\r
a8a9de7c 160 \r
df4b9c3e 161 private final int verMinWidth = 60;\r
a8a9de7c 162 \r
d208e1e2 163 private final int verMaxWidth = 80;\r
a8a9de7c 164 \r
df4b9c3e 165 private final int verPrefWidth = 70;\r
a8a9de7c 166 \r
4033708d 167 private final int pathPrefWidth = 600;\r
a8a9de7c 168 \r
d208e1e2 169 private final int pathMinWidth = 280;\r
a8a9de7c 170 \r
d208e1e2 171 private final int archPrefWidth = 80;\r
a8a9de7c 172 \r
d208e1e2 173 private final int archMinWidth = 60;\r
a8a9de7c 174 \r
d208e1e2 175 private final int archMaxWidth = 100;\r
a8a9de7c 176 \r
df4b9c3e 177 private final int typePrefWidth = 145;\r
178 \r
179 private final int typeMinWidth = 100;\r
180 \r
181 private final int typeMaxWidth = 155;\r
182 \r
a13899c5 183 /**\r
df4b9c3e 184 * This method initializes jSplitPane\r
185 * \r
186 * This is the main edit window\r
a13899c5 187 * \r
df4b9c3e 188 * @return javax.swing.JSplitPane jSplitPane \r
a13899c5 189 */\r
190 private JSplitPane getJSplitPane() {\r
191 if (jSplitPane == null) {\r
192 jSplitPane = new JSplitPane();\r
193 jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
194 jSplitPane.setDividerLocation(250);\r
4da2e625 195 jSplitPane.setBottomComponent(getJPanelBottom());\r
196 jSplitPane.setTopComponent(getJPanelTop());\r
a13899c5 197 }\r
198 return jSplitPane;\r
199 }\r
200\r
201 /**\r
df4b9c3e 202 * This method initializes jPanelTop\r
203 * \r
204 * This panel contains the All Modules Table \r
a13899c5 205 * \r
df4b9c3e 206 * @return javax.swing.JPanel jPanelTop\r
a13899c5 207 */\r
4da2e625 208 private JPanel getJPanelTop() {\r
209 if (jPanelTop == null) {\r
a13899c5 210 jLabel = new JLabel();\r
211 jLabel.setText("Modules in Workspace");\r
4da2e625 212 jPanelTop = new JPanel();\r
213 jPanelTop.setLayout(new BorderLayout());\r
214 jPanelTop.add(jLabel, java.awt.BorderLayout.NORTH);\r
215 jPanelTop.add(getJScrollPaneAllModules(), java.awt.BorderLayout.CENTER);\r
216 jPanelTop.add(getJPanelTopSouth(), java.awt.BorderLayout.SOUTH);\r
a13899c5 217 }\r
4da2e625 218 return jPanelTop;\r
a13899c5 219 }\r
220\r
221 /**\r
df4b9c3e 222 * This method initializes jPanelBottom\r
a13899c5 223 * \r
df4b9c3e 224 * This panel contains the FPD Modules Table\r
225 * \r
226 * @return javax.swing.JPanel jPanelBottom\r
a13899c5 227 */\r
4da2e625 228 private JPanel getJPanelBottom() {\r
229 if (jPanelBottom == null) {\r
230 jLabelModulesAdded = new JLabel();\r
231 jLabelModulesAdded.setText("Modules Added");\r
232 jPanelBottom = new JPanel();\r
233 jPanelBottom.setLayout(new BorderLayout());\r
234 jPanelBottom.add(jLabelModulesAdded, java.awt.BorderLayout.NORTH);\r
235 jPanelBottom.add(getJPanelBottomSouth(), java.awt.BorderLayout.SOUTH);\r
236 jPanelBottom.add(getJScrollPaneFpdModules(), java.awt.BorderLayout.CENTER);\r
a13899c5 237 }\r
4da2e625 238 return jPanelBottom;\r
a13899c5 239 }\r
240\r
241 /**\r
df4b9c3e 242 * This method initializes jScrollPaneAllModules \r
a13899c5 243 * \r
df4b9c3e 244 * @return javax.swing.JScrollPane jScrollPaneAllModules\r
a13899c5 245 */\r
4da2e625 246 private JScrollPane getJScrollPaneAllModules() {\r
247 if (jScrollPaneAllModules == null) {\r
248 jScrollPaneAllModules = new JScrollPane();\r
a8a9de7c 249 jScrollPaneAllModules.setPreferredSize(new java.awt.Dimension(600, 200));\r
4da2e625 250 jScrollPaneAllModules.setViewportView(getJTableAllModules());\r
a13899c5 251 }\r
4da2e625 252 return jScrollPaneAllModules;\r
a13899c5 253 }\r
254\r
255 /**\r
df4b9c3e 256 * This method initializes jTableAllModules\r
a13899c5 257 * \r
df4b9c3e 258 * @return javax.swing.JTable jTableAllModules\r
a13899c5 259 */\r
4da2e625 260 private JTable getJTableAllModules() {\r
261 if (jTableAllModules == null) {\r
262 modelAllModules = new NonEditableTableModel();\r
add40ab2 263 TableSorter sorter = new TableSorter(modelAllModules);\r
264 jTableAllModules = new JTable(sorter);\r
265 sorter.setTableHeader(jTableAllModules.getTableHeader());\r
4da2e625 266 jTableAllModules.setRowHeight(20);\r
a8a9de7c 267 modelAllModules.addColumn("<html>Module<br>Name</html>");\r
a8a9de7c 268 modelAllModules.addColumn("<html>Package<br>Name</html>");\r
4da2e625 269 modelAllModules.addColumn("Path");\r
df4b9c3e 270 modelAllModules.addColumn("<html>Module<br>Type</html>");\r
93fd07b1 271 modelAllModules.addColumn("<html>Module<br>Version</html>");\r
df4b9c3e 272 modelAllModules.addColumn("<html>Package<br>Version</html>");\r
93fd07b1 273 \r
a8a9de7c 274 javax.swing.table.TableColumn column = null;\r
d208e1e2 275 column = jTableAllModules.getColumnModel().getColumn(modNameColForAllModTable);\r
276 column.setPreferredWidth(modNamePrefWidth);\r
277 column.setMinWidth(modNameMinWidth);\r
df4b9c3e 278 column.setMaxWidth(modNameMaxWidth);\r
d208e1e2 279 column = jTableAllModules.getColumnModel().getColumn(modVerColForAllModTable);\r
280 column.setPreferredWidth(verPrefWidth);\r
281 column.setMaxWidth(verMaxWidth);\r
282 column.setMinWidth(verMinWidth);\r
283 column = jTableAllModules.getColumnModel().getColumn(pkgNameColForAllModTable);\r
284 column.setPreferredWidth(pkgNamePrefWidth);\r
285 column.setMinWidth(pkgNameMinWidth);\r
286 column.setMaxWidth(pkgNameMaxWidth);\r
287 column = jTableAllModules.getColumnModel().getColumn(pkgVerColForAllModTable);\r
288 column.setPreferredWidth(verPrefWidth);\r
289 column.setMaxWidth(verMaxWidth);\r
290 column.setMinWidth(verMinWidth);\r
df4b9c3e 291 column = jTableAllModules.getColumnModel().getColumn(typeColForAllModTable);\r
292 column.setPreferredWidth(typePrefWidth);\r
293 column.setMaxWidth(typeMaxWidth);\r
294 column.setMinWidth(typeMinWidth);\r
d208e1e2 295 column = jTableAllModules.getColumnModel().getColumn(pathColForAllModTable);\r
296 column.setPreferredWidth(pathPrefWidth);\r
297 column.setMinWidth(pathMinWidth);\r
a8a9de7c 298\r
4da2e625 299 jTableAllModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
4033708d 300 jTableAllModules.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
4cd31580 301\r
a13899c5 302 }\r
4da2e625 303 return jTableAllModules;\r
a13899c5 304 }\r
305\r
306 /**\r
df4b9c3e 307 * This method initializes jPanelTopSouth\r
308 * \r
309 * This panel contains the ADD button\r
310 * \r
311 * @return javax.swing.JPanel jPanelTopSouth\r
a13899c5 312 */\r
4da2e625 313 private JPanel getJPanelTopSouth() {\r
314 if (jPanelTopSouth == null) {\r
a13899c5 315 FlowLayout flowLayout = new FlowLayout();\r
316 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
4da2e625 317 jPanelTopSouth = new JPanel();\r
318 jPanelTopSouth.setLayout(flowLayout);\r
319 jPanelTopSouth.add(getJButtonAddModule(), null);\r
a13899c5 320 }\r
4da2e625 321 return jPanelTopSouth;\r
a13899c5 322 }\r
323\r
324 /**\r
df4b9c3e 325 * This method initializes jButtonAddModule \r
a13899c5 326 * \r
df4b9c3e 327 * @return javax.swing.JButton jButtonAddModule\r
a13899c5 328 */\r
4da2e625 329 private JButton getJButtonAddModule() {\r
330 if (jButtonAddModule == null) {\r
331 jButtonAddModule = new JButton();\r
a8a9de7c 332 jButtonAddModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
4da2e625 333 jButtonAddModule.setText("Add a Module");\r
334 jButtonAddModule.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 335 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 336 int selectedRow = jTableAllModules.getSelectedRow();\r
a8a9de7c 337 if (selectedRow < 0) {\r
a13899c5 338 return;\r
339 }\r
a8a9de7c 340\r
341 TableSorter sorter = (TableSorter) jTableAllModules.getModel();\r
d78abb5a 342 selectedRow = sorter.getModelRowIndex(selectedRow);\r
d208e1e2 343 String path = modelAllModules.getValueAt(selectedRow, pathColForAllModTable) + "";\r
bf5abaff 344 ModuleIdentification mi = miList.get(selectedRow);\r
345 Vector<String> vArchs = null;\r
346 try {\r
1bf9fa5a 347 vArchs = WorkspaceProfile.getModuleSupArchs(mi);\r
bf5abaff 348 }\r
349 catch (Exception exp) {\r
350 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
a13899c5 351 }\r
a8a9de7c 352\r
bf5abaff 353 if (vArchs == null) {\r
a8a9de7c 354 JOptionPane.showMessageDialog(frame, "No Supported Architectures specified in MSA file.");\r
bf5abaff 355 return;\r
a13899c5 356 }\r
a8a9de7c 357\r
bf5abaff 358 String archsAdded = "";\r
359 String mg = mi.getGuid();\r
360 String mv = mi.getVersion();\r
361 String pg = mi.getPackage().getGuid();\r
362 String pv = mi.getPackage().getVersion();\r
4cd31580 363 String mType = mi.getModuleType();\r
a8a9de7c 364\r
bf5abaff 365 ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
366 if (al == null) {\r
d96d701f 367 //\r
368 // if existing ModuleSA does not specify version info.\r
369 //\r
370 al = fpdMsa.get(mg + "null" + pg + "null");\r
371 if (al == null) {\r
372 al = fpdMsa.get(mg + "null" + pg + pv);\r
373 if (al == null){\r
374 al = fpdMsa.get(mg + mv + pg + "null");\r
375 if (al == null) {\r
376 al = new ArrayList<String>();\r
377 fpdMsa.put(mg + mv + pg + pv, al); \r
378 }\r
379 }\r
380 }\r
bf5abaff 381 }\r
d96d701f 382 //\r
383 // filter from module SupArchs what archs has been added.\r
384 //\r
bf5abaff 385 for (int i = 0; i < al.size(); ++i) {\r
386 vArchs.remove(al.get(i));\r
387 }\r
388 //\r
d96d701f 389 // check whether archs conform to SupArch of platform.\r
390 //\r
391 Vector<Object> platformSupArch = new Vector<Object>();\r
392 ffc.getPlatformDefsSupportedArchs(platformSupArch);\r
393 vArchs.retainAll(platformSupArch);\r
394 //\r
bf5abaff 395 // Archs this Module supported have already been added.\r
396 //\r
397 if (vArchs.size() == 0) {\r
a8a9de7c 398 JOptionPane.showMessageDialog(frame, "This Module has already been added.");\r
bf5abaff 399 return;\r
af25df16 400 }\r
bf5abaff 401 //ToDo put Arch instead of null\r
34c614e1 402 boolean errorOccurred = false;\r
bf5abaff 403 for (int i = 0; i < vArchs.size(); ++i) {\r
404 String arch = vArchs.get(i);\r
405 al.add(arch);\r
406 archsAdded += arch + " ";\r
4cd31580 407 String[] row = { "", "", "", "", "", "", "" };\r
a8a9de7c 408\r
409 if (mi != null) {\r
d208e1e2 410 row[modNameColForFpdModTable] = mi.getName();\r
411 row[pkgNameColForFpdModTable] = mi.getPackage().getName();\r
412 row[pathColForFpdModTable] = path;\r
413 row[archColForFpdModTable] = arch;\r
414 row[pkgVerColForFpdModTable] = pv;\r
415 row[modVerColForFpdModTable] = mv;\r
4cd31580 416 row[typeColForFpdModTable] = mType;\r
a8a9de7c 417\r
418 }\r
419 modelFpdModules.addRow(row);\r
420\r
421 docConsole.setSaved(false);\r
422 try {\r
423 //ToDo : specify archs need to add.\r
424 ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
425 } catch (Exception exception) {\r
4cd31580 426 JOptionPane.showMessageDialog(frame, "Adding " + row[modNameColForFpdModTable] + " with Supporting Architectures: " + arch\r
a8a9de7c 427 + ": " + exception.getMessage());\r
428 errorOccurred = true;\r
429 }\r
82961247 430 }\r
a8a9de7c 431\r
432 String s = "This Module with Architecture " + archsAdded;\r
34c614e1 433 if (errorOccurred) {\r
a8a9de7c 434 s += " was added with Error. Platform may NOT Build.";\r
435 } else {\r
436 s += " was added Successfully.";\r
34c614e1 437 }\r
a8a9de7c 438 JOptionPane.showMessageDialog(frame, s);\r
1bf9fa5a 439 TableSorter sorterFpdModules = (TableSorter)jTableFpdModules.getModel();\r
d78abb5a 440 int viewIndex = sorterFpdModules.getViewIndexArray()[modelFpdModules.getRowCount() - 1];\r
1bf9fa5a 441 jTableFpdModules.changeSelection(viewIndex, 0, false, false);\r
82961247 442 }\r
a13899c5 443 });\r
444 }\r
4da2e625 445 return jButtonAddModule;\r
a13899c5 446 }\r
447\r
448 /**\r
df4b9c3e 449 * This method initializes jPanelBottomSouth\r
450 * \r
451 * This panel contains the Settings and Remove Buttons\r
a13899c5 452 * \r
df4b9c3e 453 * @return javax.swing.JPanel jPanelBottomSouth\r
a13899c5 454 */\r
4da2e625 455 private JPanel getJPanelBottomSouth() {\r
456 if (jPanelBottomSouth == null) {\r
a13899c5 457 FlowLayout flowLayout1 = new FlowLayout();\r
458 flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);\r
4da2e625 459 jPanelBottomSouth = new JPanel();\r
460 jPanelBottomSouth.setLayout(flowLayout1);\r
461 jPanelBottomSouth.add(getJButtonSettings(), null);\r
462 jPanelBottomSouth.add(getJButtonRemoveModule(), null);\r
a13899c5 463 }\r
4da2e625 464 return jPanelBottomSouth;\r
a13899c5 465 }\r
466\r
467 /**\r
df4b9c3e 468 * This method initializes jScrollPaneFpdModules\r
a13899c5 469 * \r
df4b9c3e 470 * @return javax.swing.JScrollPane jScrollPaneFpdModules\r
a13899c5 471 */\r
4da2e625 472 private JScrollPane getJScrollPaneFpdModules() {\r
473 if (jScrollPaneFpdModules == null) {\r
474 jScrollPaneFpdModules = new JScrollPane();\r
a8a9de7c 475 jScrollPaneFpdModules.setPreferredSize(new java.awt.Dimension(453, 200));\r
4da2e625 476 jScrollPaneFpdModules.setViewportView(getJTableFpdModules());\r
a13899c5 477 }\r
4da2e625 478 return jScrollPaneFpdModules;\r
a13899c5 479 }\r
480\r
481 /**\r
df4b9c3e 482 * This method initializes jTableFpdModules\r
a13899c5 483 * \r
df4b9c3e 484 * @return javax.swing.JTable jTableFpdModules\r
a13899c5 485 */\r
4da2e625 486 private JTable getJTableFpdModules() {\r
487 if (jTableFpdModules == null) {\r
d78abb5a 488 modelFpdModules = new FpdModulesTableModel();\r
add40ab2 489 TableSorter sorter = new TableSorter(modelFpdModules);\r
490 jTableFpdModules = new JTable(sorter);\r
491 sorter.setTableHeader(jTableFpdModules.getTableHeader());\r
4da2e625 492 jTableFpdModules.setRowHeight(20);\r
a8a9de7c 493 modelFpdModules.addColumn("<html>Module<br>Name</html>");\r
a8a9de7c 494 modelFpdModules.addColumn("<html>Package<br>Name</html>");\r
4da2e625 495 modelFpdModules.addColumn("Path");\r
93fd07b1 496 modelFpdModules.addColumn("<html>Supported<br>Architectures</html>");\r
4cd31580 497 modelFpdModules.addColumn("<html>Module<br>Type</html>");\r
93fd07b1 498 modelFpdModules.addColumn("<html>Module<br>Version</html>");\r
df4b9c3e 499 modelFpdModules.addColumn("<html>Package<br>Version</html>");\r
d78abb5a 500 modelFpdModules.addColumn("<html>Force<br>Debug</html>");\r
93fd07b1 501 \r
a8a9de7c 502 javax.swing.table.TableColumn column = null;\r
d208e1e2 503 column = jTableFpdModules.getColumnModel().getColumn(modNameColForFpdModTable);\r
504 column.setPreferredWidth(modNamePrefWidth);\r
505 column.setMinWidth(modNameMinWidth);\r
df4b9c3e 506 column.setMaxWidth(modNameMaxWidth);\r
d208e1e2 507 column = jTableFpdModules.getColumnModel().getColumn(modVerColForFpdModTable);\r
508 column.setPreferredWidth(verPrefWidth);\r
509 column.setMaxWidth(verMaxWidth);\r
510 column.setMinWidth(verMinWidth);\r
511 column = jTableFpdModules.getColumnModel().getColumn(pkgNameColForFpdModTable);\r
512 column.setPreferredWidth(pkgNamePrefWidth);\r
513 column.setMinWidth(pkgNameMinWidth);\r
514 column.setMaxWidth(pkgNameMaxWidth);\r
515 column = jTableFpdModules.getColumnModel().getColumn(pkgVerColForFpdModTable);\r
516 column.setPreferredWidth(verPrefWidth);\r
517 column.setMaxWidth(verMaxWidth);\r
518 column.setMinWidth(verMinWidth);\r
519 column = jTableFpdModules.getColumnModel().getColumn(archColForFpdModTable);\r
520 column.setPreferredWidth(archPrefWidth);\r
521 column.setMaxWidth(archMaxWidth);\r
522 column.setMinWidth(archMinWidth);\r
523 column = jTableFpdModules.getColumnModel().getColumn(pathColForFpdModTable);\r
524 column.setPreferredWidth(pathPrefWidth);\r
525 column.setMinWidth(pathMinWidth);\r
4cd31580 526 column = jTableFpdModules.getColumnModel().getColumn(typeColForFpdModTable);\r
527 column.setPreferredWidth(typePrefWidth);\r
528 column.setMaxWidth(typeMaxWidth);\r
529 column.setMinWidth(typeMinWidth);\r
a8a9de7c 530\r
4da2e625 531 jTableFpdModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
4033708d 532 jTableFpdModules.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
e7cc0547 533 \r
534 jTableFpdModules.getModel().addTableModelListener(this);\r
a13899c5 535 }\r
4da2e625 536 return jTableFpdModules;\r
a13899c5 537 }\r
538\r
e7cc0547 539 public void tableChanged(TableModelEvent arg0) {\r
540 if (arg0.getType() == TableModelEvent.UPDATE){\r
541 int row = arg0.getFirstRow();\r
542 int column = arg0.getColumn();\r
543 TableModel m = (TableModel)arg0.getSource();\r
544 \r
545 if (column != forceDbgColForFpdModTable) {\r
546 return;\r
547 }\r
548 String s = m.getValueAt(row, column)+"";\r
549 boolean dbgEnable = new Boolean(s);\r
550 ffc.setModuleSAForceDebug(row, dbgEnable);\r
551 docConsole.setSaved(false);\r
552 }\r
553 }\r
a13899c5 554 /**\r
df4b9c3e 555 * This method initializes jButtonSettings\r
a13899c5 556 * \r
df4b9c3e 557 * @return javax.swing.JButton jButtonSettings\r
a13899c5 558 */\r
4da2e625 559 private JButton getJButtonSettings() {\r
560 if (jButtonSettings == null) {\r
561 jButtonSettings = new JButton();\r
562 jButtonSettings.setPreferredSize(new java.awt.Dimension(130,20));\r
563 jButtonSettings.setText("Settings");\r
564 jButtonSettings.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 565 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 566 int selectedRow = jTableFpdModules.getSelectedRow();\r
a8a9de7c 567 if (selectedRow < 0) {\r
a13899c5 568 return;\r
569 }\r
a8a9de7c 570\r
571 TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
d78abb5a 572 selectedRow = sorter.getModelRowIndex(selectedRow);\r
1dac04ab 573 try {\r
574 if (ffc.adjustPcd(selectedRow)) {\r
575 docConsole.setSaved(false);\r
576 }\r
577 }\r
578 catch (Exception exp) {\r
579 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
580 return;\r
581 }\r
add40ab2 582 \r
a13899c5 583 if (settingDlg == null) {\r
584 settingDlg = new FpdModuleSA(ffc);\r
585 }\r
a8a9de7c 586\r
bf5abaff 587 String[] sa = new String[5];\r
588 ffc.getFrameworkModuleInfo(selectedRow, sa);\r
d208e1e2 589 String mg = sa[ffcModGuid];\r
590 String mv = sa[ffcModVer];\r
591 String pg = sa[ffcPkgGuid];\r
592 String pv = sa[ffcPkgVer];\r
593 String arch = sa[ffcModArch];\r
8f55ea73 594 settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv + " " + arch, selectedRow, docConsole);\r
a13899c5 595 settingDlg.setVisible(true);\r
596 }\r
597 });\r
598 }\r
4da2e625 599 return jButtonSettings;\r
a13899c5 600 }\r
601\r
602 /**\r
df4b9c3e 603 * This method initializes jButtonRemoveModule\r
a13899c5 604 * \r
df4b9c3e 605 * @return javax.swing.JButton jButtonRemoveModule\r
a13899c5 606 */\r
4da2e625 607 private JButton getJButtonRemoveModule() {\r
608 if (jButtonRemoveModule == null) {\r
609 jButtonRemoveModule = new JButton();\r
a8a9de7c 610 jButtonRemoveModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
4da2e625 611 jButtonRemoveModule.setText("Remove Module");\r
612 jButtonRemoveModule.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 613 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 614 int selectedRow = jTableFpdModules.getSelectedRow();\r
a8a9de7c 615 if (selectedRow < 0) {\r
a13899c5 616 return;\r
617 }\r
daa4663b 618 docConsole.setSaved(false);\r
a8a9de7c 619\r
620 TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
d78abb5a 621 selectedRow = sorter.getModelRowIndex(selectedRow);\r
a8a9de7c 622\r
bf5abaff 623 String[] sa = new String[5];\r
624 ffc.getFrameworkModuleInfo(selectedRow, sa);\r
d208e1e2 625 String mg = sa[ffcModGuid];\r
626 String mv = sa[ffcModVer];\r
627 String pg = sa[ffcPkgGuid];\r
628 String pv = sa[ffcPkgVer];\r
629 String arch = sa[ffcModArch];\r
1bf9fa5a 630 ModuleIdentification mi = WorkspaceProfile.getModuleId(mg + " " + mv + " " + pg + " " + pv + " " + arch);\r
bf5abaff 631 mv = mi.getVersion();\r
632 pv = mi.getPackage().getVersion();\r
4da2e625 633 modelFpdModules.removeRow(selectedRow);\r
bf5abaff 634 if (arch == null) {\r
635 // if no arch specified in ModuleSA\r
a8a9de7c 636 fpdMsa.remove(mg + mv + pg + pv);\r
d96d701f 637 \r
a8a9de7c 638 } else {\r
639 ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
bf5abaff 640 al.remove(arch);\r
641 if (al.size() == 0) {\r
a8a9de7c 642 fpdMsa.remove(mg + mv + pg + pv);\r
bf5abaff 643 }\r
644 }\r
a8a9de7c 645\r
a13899c5 646 ffc.removeModuleSA(selectedRow);\r
647 }\r
648 });\r
649 }\r
4da2e625 650 return jButtonRemoveModule;\r
a13899c5 651 }\r
652\r
653 /**\r
df4b9c3e 654 * \r
a13899c5 655 * @param args\r
656 */\r
657 public static void main(String[] args) {\r
4cd31580 658 // Set the pane visable\r
a13899c5 659 new FpdFrameworkModules().setVisible(true);\r
660 }\r
661\r
662 /**\r
663 * This is the default constructor\r
664 */\r
665 public FpdFrameworkModules() {\r
666 super();\r
667 initialize();\r
668 }\r
669\r
a8a9de7c 670 public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
a13899c5 671 this();\r
672 init(fpd);\r
a8a9de7c 673\r
a13899c5 674 }\r
a8a9de7c 675\r
d6d24759 676 public FpdFrameworkModules(OpeningPlatformType opt) {\r
677 this(opt.getXmlFpd());\r
678 docConsole = opt;\r
679 }\r
a8a9de7c 680\r
a13899c5 681 private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
682 try {\r
1bf9fa5a 683 WorkspaceProfile.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
a13899c5 684 }\r
685 catch(Exception e){\r
410e0e9f 686 JOptionPane.showMessageDialog(frame, "Error occurred when getting module data.");\r
a13899c5 687 }\r
a8a9de7c 688\r
689 if (ffc == null) {\r
a13899c5 690 ffc = new FpdFileContents(fpd);\r
691 ffc.initDynPcdMap();\r
692 }\r
a8a9de7c 693\r
a13899c5 694 if (fpdMsa == null) {\r
bf5abaff 695 fpdMsa = new HashMap<String, ArrayList<String>>();\r
a13899c5 696 }\r
a8a9de7c 697\r
a13899c5 698 if (ffc.getFrameworkModulesCount() > 0) {\r
699 String[][] saa = new String[ffc.getFrameworkModulesCount()][5];\r
700 ffc.getFrameworkModulesInfo(saa);\r
701 for (int i = 0; i < saa.length; ++i) {\r
1bf9fa5a 702 ModuleIdentification mi = WorkspaceProfile.getModuleId(saa[i][ffcModGuid] + " " + saa[i][ffcModVer] + " "\r
d208e1e2 703 + saa[i][ffcPkgGuid] + " " + saa[i][ffcPkgVer]);\r
d78abb5a 704 Object[] row = { "", "", "", "", "", "", "", "" };\r
f3b0ed9a 705 if (mi != null) {\r
d208e1e2 706 row[modNameColForFpdModTable] = mi.getName();\r
707 row[modVerColForFpdModTable] = mi.getVersion();\r
4cd31580 708 row[typeColForFpdModTable] = mi.getModuleType();\r
d208e1e2 709 row[pkgNameColForFpdModTable] = mi.getPackage().getName();\r
710 row[pkgVerColForFpdModTable] = mi.getPackage().getVersion();\r
d96d701f 711 row[archColForFpdModTable] = saa[i][ffcModArch];\r
a8a9de7c 712 try {\r
1bf9fa5a 713 row[pathColForFpdModTable] = WorkspaceProfile.getMsaFile(mi).getPath().substring(\r
a8a9de7c 714 System.getenv("WORKSPACE")\r
715 .length() + 1);\r
716 } catch (Exception e) {\r
717 JOptionPane.showMessageDialog(frame, "Show FPD Modules:" + e.getMessage());\r
bf5abaff 718 }\r
d96d701f 719 \r
d96d701f 720 String fpdMsaKey = saa[i][ffcModGuid] + row[modVerColForFpdModTable]\r
721 + saa[i][ffcPkgGuid] + row[pkgVerColForFpdModTable];\r
722 ArrayList<String> al = fpdMsa.get(fpdMsaKey);\r
723 if (al == null) {\r
724 al = new ArrayList<String>();\r
725 fpdMsa.put(fpdMsaKey, al);\r
726 }\r
727 al.add(saa[i][ffcModArch]);\r
bf5abaff 728 }\r
d78abb5a 729 row[forceDbgColForFpdModTable] = ffc.getModuleSAForceDebug(i);\r
1bf9fa5a 730 modelFpdModules.addRow(row);\r
a8a9de7c 731\r
a13899c5 732 }\r
f4c4325b 733 TableSorter sorter = (TableSorter)jTableFpdModules.getModel();\r
d78abb5a 734 sorter.setSortState(modNameColForFpdModTable, TableSorter.ASCENDING);\r
a13899c5 735 }\r
a8a9de7c 736\r
a13899c5 737 showAllModules();\r
a8a9de7c 738\r
a13899c5 739 }\r
a8a9de7c 740\r
a13899c5 741 private void showAllModules() {\r
a8a9de7c 742\r
a13899c5 743 if (miList == null) {\r
744 miList = new ArrayList<ModuleIdentification>();\r
745 }\r
1bf9fa5a 746 Set<PackageIdentification> spi = WorkspaceProfile.getPackageList();\r
a13899c5 747 Iterator ispi = spi.iterator();\r
a8a9de7c 748\r
749 while (ispi.hasNext()) {\r
750 PackageIdentification pi = (PackageIdentification) ispi.next();\r
df4b9c3e 751 String[] s = { "", "", "", "", "", "" };\r
a8a9de7c 752\r
1bf9fa5a 753 Set<ModuleIdentification> smi = WorkspaceProfile.getModules(pi);\r
a13899c5 754 Iterator ismi = smi.iterator();\r
a8a9de7c 755 while (ismi.hasNext()) {\r
756 ModuleIdentification mi = (ModuleIdentification) ismi.next();\r
d208e1e2 757 s[modNameColForAllModTable] = mi.getName();\r
758 s[modVerColForAllModTable] = mi.getVersion();\r
df4b9c3e 759 s[typeColForAllModTable] = mi.getModuleType();\r
d208e1e2 760 s[pkgNameColForAllModTable] = pi.getName();\r
761 s[pkgVerColForAllModTable] = pi.getVersion();\r
bf5abaff 762 try {\r
1bf9fa5a 763 s[pathColForAllModTable] = WorkspaceProfile.getMsaFile(mi).getPath()\r
a8a9de7c 764 .substring(System.getenv("WORKSPACE").length() + 1);\r
765 } catch (Exception e) {\r
766 JOptionPane.showMessageDialog(frame, "Show All Modules:" + e.getMessage());\r
bf5abaff 767 }\r
4da2e625 768 modelAllModules.addRow(s);\r
a13899c5 769 miList.add(mi);\r
770 }\r
771 }\r
f4c4325b 772 \r
773 TableSorter sorter = (TableSorter)jTableAllModules.getModel();\r
d78abb5a 774 sorter.setSortState(modNameColForAllModTable, TableSorter.ASCENDING);\r
a13899c5 775 }\r
a8a9de7c 776\r
a13899c5 777 /**\r
778 * This method initializes this\r
779 * \r
780 * @return void\r
781 */\r
782 private void initialize() {\r
783 this.setSize(633, 533);\r
784 this.setTitle("Framework Modules");\r
785 this.setContentPane(getJSplitPane());\r
786 this.setVisible(true);\r
a8a9de7c 787\r
a13899c5 788 }\r
a13899c5 789\r
a8a9de7c 790} // @jve:decl-index=0:visual-constraint="10,10"\r
a13899c5 791\r
792class NonEditableTableModel extends DefaultTableModel {\r
44053733 793 /**\r
794 * \r
795 */\r
796 private static final long serialVersionUID = 1L;\r
797\r
a13899c5 798 public boolean isCellEditable(int row, int col) {\r
799 return false;\r
800 }\r
801}\r
d78abb5a 802\r
803class FpdModulesTableModel extends DefaultTableModel {\r
804\r
805 /**\r
806 * \r
807 */\r
808 private static final long serialVersionUID = 1L;\r
809 \r
810 public Class<?> getColumnClass (int c) {\r
811 if (getValueAt(0, c) != null){\r
812 return getValueAt(0, c).getClass();\r
813 }\r
814 return String.class;\r
815 }\r
816 \r
817 public boolean isCellEditable (int row, int col) {\r
818 if (col == FpdFrameworkModules.forceDbgColForFpdModTable) {\r
819 return true;\r
820 }\r
821 return false;\r
822 }\r
823}\r