]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Added code to fetch more detailed error message from XMLBeans when there's error...
[mirror_edk2.git] / Tools / Java / 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
3658f95e 33import org.tianocore.frameworkwizard.common.GlobalData;\r
d6d24759 34import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
a13899c5 35import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
3658f95e 36import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
1bf9fa5a 37import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
3658f95e 38import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
a13899c5 39\r
40import java.awt.FlowLayout;\r
2a06ac5b 41import java.awt.event.KeyEvent;\r
a0783edc 42import java.awt.event.MouseEvent;\r
a13899c5 43import java.util.ArrayList;\r
44import java.util.HashMap;\r
45import java.util.Iterator;\r
46import java.util.Map;\r
bf5abaff 47import java.util.Vector;\r
a13899c5 48\r
49public class FpdFrameworkModules extends IInternalFrame {\r
50\r
44053733 51 /**\r
df4b9c3e 52 * Initialize Globals\r
44053733 53 */\r
54 private static final long serialVersionUID = 1L;\r
d78abb5a 55 \r
9babb67e 56 private static final int timeToWait = 2000;\r
2a06ac5b 57 \r
58 private long savedMs = 0;\r
59 \r
60 String searchField = "";\r
61 \r
d78abb5a 62 public static final int forceDbgColForFpdModTable = 7;\r
a8a9de7c 63\r
a13899c5 64 static JFrame frame;\r
a8a9de7c 65\r
a13899c5 66 private JSplitPane jSplitPane = null;\r
a8a9de7c 67\r
4da2e625 68 private JPanel jPanelTop = null;\r
a8a9de7c 69\r
4da2e625 70 private JPanel jPanelBottom = null;\r
a8a9de7c 71\r
a13899c5 72 private JLabel jLabel = null;\r
a8a9de7c 73\r
4da2e625 74 private JScrollPane jScrollPaneAllModules = null;\r
a8a9de7c 75\r
4da2e625 76 private JTable jTableAllModules = null;\r
a8a9de7c 77\r
4da2e625 78 private JPanel jPanelTopSouth = null;\r
a8a9de7c 79\r
4da2e625 80 private JButton jButtonAddModule = null;\r
a8a9de7c 81\r
4da2e625 82 private JLabel jLabelModulesAdded = null;\r
a8a9de7c 83\r
4da2e625 84 private JPanel jPanelBottomSouth = null;\r
a8a9de7c 85\r
4da2e625 86 private JScrollPane jScrollPaneFpdModules = null;\r
a8a9de7c 87\r
4da2e625 88 private JTable jTableFpdModules = null;\r
a8a9de7c 89\r
4da2e625 90 private JButton jButtonSettings = null;\r
a8a9de7c 91\r
4da2e625 92 private JButton jButtonRemoveModule = null;\r
a8a9de7c 93\r
4da2e625 94 private NonEditableTableModel modelAllModules = null;\r
a8a9de7c 95\r
d78abb5a 96 private FpdModulesTableModel modelFpdModules = null;\r
a8a9de7c 97\r
a13899c5 98 private FpdModuleSA settingDlg = null;\r
a8a9de7c 99\r
a13899c5 100 private FpdFileContents ffc = null;\r
a8a9de7c 101\r
d6d24759 102 private OpeningPlatformType docConsole = null;\r
a8a9de7c 103\r
bf5abaff 104 private Map<String, ArrayList<String>> fpdMsa = null;\r
a8a9de7c 105\r
a13899c5 106 private ArrayList<ModuleIdentification> miList = null;\r
df4b9c3e 107 \r
108 /**\r
109 * Column settings for displaying all modules in workspace\r
110 */\r
d208e1e2 111 private final int modNameColForAllModTable = 0;\r
93fd07b1 112 \r
d208e1e2 113 private final int pkgNameColForAllModTable = 1;\r
93fd07b1 114 \r
d208e1e2 115 private final int pathColForAllModTable = 2;\r
93fd07b1 116 \r
df4b9c3e 117 private final int typeColForAllModTable = 3;\r
118 \r
119 private final int pkgVerColForAllModTable = 5;\r
93fd07b1 120 \r
d208e1e2 121 private final int modVerColForAllModTable = 4;\r
93fd07b1 122 \r
df4b9c3e 123 /**\r
124 * Column settings for display modules in the FPD file\r
125 */\r
d208e1e2 126 private final int modNameColForFpdModTable = 0;\r
93fd07b1 127 \r
d208e1e2 128 private final int pkgNameColForFpdModTable = 1;\r
93fd07b1 129 \r
d208e1e2 130 private final int pathColForFpdModTable = 2;\r
93fd07b1 131 \r
d208e1e2 132 private final int archColForFpdModTable = 3;\r
93fd07b1 133 \r
4cd31580 134 private final int pkgVerColForFpdModTable = 6;\r
a8a9de7c 135\r
4cd31580 136 private final int modVerColForFpdModTable = 5;\r
137 \r
138 private final int typeColForFpdModTable = 4;\r
d208e1e2 139 \r
df4b9c3e 140 /**\r
141 * FpdFileContents structure\r
142 */\r
d208e1e2 143 private final int ffcModGuid = 0;\r
144 \r
145 private final int ffcModVer = 1;\r
146 \r
147 private final int ffcPkgGuid = 2;\r
148 \r
149 private final int ffcPkgVer = 3;\r
150 \r
151 private final int ffcModArch = 4;\r
df4b9c3e 152 \r
153 /**\r
154 * Set Column Widths, Only the PATH should not have a max width.\r
155 */\r
d208e1e2 156 private final int modNameMinWidth = 168;\r
a8a9de7c 157 \r
d208e1e2 158 private final int modNamePrefWidth = 200;\r
df4b9c3e 159 \r
160 private final int modNameMaxWidth = 350;\r
a8a9de7c 161\r
d208e1e2 162 private final int pkgNameMinWidth = 100;\r
a8a9de7c 163 \r
df4b9c3e 164 private final int pkgNamePrefWidth = 130;\r
a8a9de7c 165 \r
d208e1e2 166 private final int pkgNameMaxWidth = 150;\r
a8a9de7c 167 \r
df4b9c3e 168 private final int verMinWidth = 60;\r
a8a9de7c 169 \r
d208e1e2 170 private final int verMaxWidth = 80;\r
a8a9de7c 171 \r
df4b9c3e 172 private final int verPrefWidth = 70;\r
a8a9de7c 173 \r
4033708d 174 private final int pathPrefWidth = 600;\r
a8a9de7c 175 \r
d208e1e2 176 private final int pathMinWidth = 280;\r
a8a9de7c 177 \r
d208e1e2 178 private final int archPrefWidth = 80;\r
a8a9de7c 179 \r
d208e1e2 180 private final int archMinWidth = 60;\r
a8a9de7c 181 \r
d208e1e2 182 private final int archMaxWidth = 100;\r
a8a9de7c 183 \r
df4b9c3e 184 private final int typePrefWidth = 145;\r
185 \r
186 private final int typeMinWidth = 100;\r
187 \r
188 private final int typeMaxWidth = 155;\r
189 \r
a13899c5 190 /**\r
df4b9c3e 191 * This method initializes jSplitPane\r
192 * \r
193 * This is the main edit window\r
a13899c5 194 * \r
df4b9c3e 195 * @return javax.swing.JSplitPane jSplitPane \r
a13899c5 196 */\r
197 private JSplitPane getJSplitPane() {\r
198 if (jSplitPane == null) {\r
199 jSplitPane = new JSplitPane();\r
200 jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
201 jSplitPane.setDividerLocation(250);\r
4da2e625 202 jSplitPane.setBottomComponent(getJPanelBottom());\r
203 jSplitPane.setTopComponent(getJPanelTop());\r
a13899c5 204 }\r
205 return jSplitPane;\r
206 }\r
207\r
208 /**\r
df4b9c3e 209 * This method initializes jPanelTop\r
210 * \r
211 * This panel contains the All Modules Table \r
a13899c5 212 * \r
df4b9c3e 213 * @return javax.swing.JPanel jPanelTop\r
a13899c5 214 */\r
4da2e625 215 private JPanel getJPanelTop() {\r
216 if (jPanelTop == null) {\r
a13899c5 217 jLabel = new JLabel();\r
1b69863a 218 jLabel.setText(" Modules in Workspace");\r
4da2e625 219 jPanelTop = new JPanel();\r
220 jPanelTop.setLayout(new BorderLayout());\r
221 jPanelTop.add(jLabel, java.awt.BorderLayout.NORTH);\r
222 jPanelTop.add(getJScrollPaneAllModules(), java.awt.BorderLayout.CENTER);\r
223 jPanelTop.add(getJPanelTopSouth(), java.awt.BorderLayout.SOUTH);\r
a13899c5 224 }\r
4da2e625 225 return jPanelTop;\r
a13899c5 226 }\r
227\r
228 /**\r
df4b9c3e 229 * This method initializes jPanelBottom\r
a13899c5 230 * \r
df4b9c3e 231 * This panel contains the FPD Modules Table\r
232 * \r
233 * @return javax.swing.JPanel jPanelBottom\r
a13899c5 234 */\r
4da2e625 235 private JPanel getJPanelBottom() {\r
236 if (jPanelBottom == null) {\r
237 jLabelModulesAdded = new JLabel();\r
1b69863a 238 jLabelModulesAdded.setText(" Modules Added into Platform");\r
4da2e625 239 jPanelBottom = new JPanel();\r
240 jPanelBottom.setLayout(new BorderLayout());\r
241 jPanelBottom.add(jLabelModulesAdded, java.awt.BorderLayout.NORTH);\r
242 jPanelBottom.add(getJPanelBottomSouth(), java.awt.BorderLayout.SOUTH);\r
243 jPanelBottom.add(getJScrollPaneFpdModules(), java.awt.BorderLayout.CENTER);\r
a13899c5 244 }\r
4da2e625 245 return jPanelBottom;\r
a13899c5 246 }\r
247\r
248 /**\r
df4b9c3e 249 * This method initializes jScrollPaneAllModules \r
a13899c5 250 * \r
df4b9c3e 251 * @return javax.swing.JScrollPane jScrollPaneAllModules\r
a13899c5 252 */\r
4da2e625 253 private JScrollPane getJScrollPaneAllModules() {\r
254 if (jScrollPaneAllModules == null) {\r
255 jScrollPaneAllModules = new JScrollPane();\r
a8a9de7c 256 jScrollPaneAllModules.setPreferredSize(new java.awt.Dimension(600, 200));\r
4da2e625 257 jScrollPaneAllModules.setViewportView(getJTableAllModules());\r
a13899c5 258 }\r
4da2e625 259 return jScrollPaneAllModules;\r
a13899c5 260 }\r
261\r
262 /**\r
df4b9c3e 263 * This method initializes jTableAllModules\r
a13899c5 264 * \r
df4b9c3e 265 * @return javax.swing.JTable jTableAllModules\r
a13899c5 266 */\r
4da2e625 267 private JTable getJTableAllModules() {\r
268 if (jTableAllModules == null) {\r
269 modelAllModules = new NonEditableTableModel();\r
add40ab2 270 TableSorter sorter = new TableSorter(modelAllModules);\r
271 jTableAllModules = new JTable(sorter);\r
272 sorter.setTableHeader(jTableAllModules.getTableHeader());\r
4da2e625 273 jTableAllModules.setRowHeight(20);\r
a8a9de7c 274 modelAllModules.addColumn("<html>Module<br>Name</html>");\r
a8a9de7c 275 modelAllModules.addColumn("<html>Package<br>Name</html>");\r
4da2e625 276 modelAllModules.addColumn("Path");\r
df4b9c3e 277 modelAllModules.addColumn("<html>Module<br>Type</html>");\r
93fd07b1 278 modelAllModules.addColumn("<html>Module<br>Version</html>");\r
df4b9c3e 279 modelAllModules.addColumn("<html>Package<br>Version</html>");\r
93fd07b1 280 \r
a8a9de7c 281 javax.swing.table.TableColumn column = null;\r
d208e1e2 282 column = jTableAllModules.getColumnModel().getColumn(modNameColForAllModTable);\r
283 column.setPreferredWidth(modNamePrefWidth);\r
284 column.setMinWidth(modNameMinWidth);\r
df4b9c3e 285 column.setMaxWidth(modNameMaxWidth);\r
d208e1e2 286 column = jTableAllModules.getColumnModel().getColumn(modVerColForAllModTable);\r
287 column.setPreferredWidth(verPrefWidth);\r
288 column.setMaxWidth(verMaxWidth);\r
289 column.setMinWidth(verMinWidth);\r
290 column = jTableAllModules.getColumnModel().getColumn(pkgNameColForAllModTable);\r
291 column.setPreferredWidth(pkgNamePrefWidth);\r
292 column.setMinWidth(pkgNameMinWidth);\r
293 column.setMaxWidth(pkgNameMaxWidth);\r
294 column = jTableAllModules.getColumnModel().getColumn(pkgVerColForAllModTable);\r
295 column.setPreferredWidth(verPrefWidth);\r
296 column.setMaxWidth(verMaxWidth);\r
297 column.setMinWidth(verMinWidth);\r
df4b9c3e 298 column = jTableAllModules.getColumnModel().getColumn(typeColForAllModTable);\r
299 column.setPreferredWidth(typePrefWidth);\r
300 column.setMaxWidth(typeMaxWidth);\r
301 column.setMinWidth(typeMinWidth);\r
d208e1e2 302 column = jTableAllModules.getColumnModel().getColumn(pathColForAllModTable);\r
303 column.setPreferredWidth(pathPrefWidth);\r
304 column.setMinWidth(pathMinWidth);\r
a8a9de7c 305\r
4da2e625 306 jTableAllModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
4033708d 307 jTableAllModules.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
a0783edc 308 jTableAllModules.addMouseListener(new java.awt.event.MouseAdapter() {\r
309 public void mouseClicked(java.awt.event.MouseEvent e) {\r
310 if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {\r
311 java.awt.Point p = e.getPoint();\r
312 int rowIndex = jTableAllModules.rowAtPoint(p);\r
313 TableSorter sorter = (TableSorter) jTableAllModules.getModel();\r
314 rowIndex = sorter.getModelRowIndex(rowIndex);\r
315 addModuleIntoPlatform (rowIndex);\r
316 }\r
317 }\r
318 });\r
2a06ac5b 319 jTableAllModules.addKeyListener(new java.awt.event.KeyAdapter() {\r
320 public void keyPressed(java.awt.event.KeyEvent e) {\r
321 if (e.getKeyCode() == KeyEvent.VK_ENTER) {\r
322 int selectedRow = jTableAllModules.getSelectedRow();\r
323 if (selectedRow < 0) {\r
324 return;\r
325 }\r
326 TableSorter sorter = (TableSorter) jTableAllModules.getModel();\r
327 selectedRow = sorter.getModelRowIndex(selectedRow);\r
328 addModuleIntoPlatform (selectedRow);\r
329 }\r
330 }\r
331 });\r
332 \r
333 jTableAllModules.addKeyListener(new java.awt.event.KeyAdapter() {\r
334 public void keyTyped(java.awt.event.KeyEvent e) {\r
335\r
336 if (System.currentTimeMillis() - savedMs < timeToWait) {\r
337 searchField += e.getKeyChar();\r
338 }\r
339 else {\r
340 searchField = "" + e.getKeyChar(); \r
341 }\r
342 \r
9babb67e 343 int viewIndex = gotoFoundRow (searchField, jTableAllModules);\r
2a06ac5b 344 if (viewIndex >= 0){\r
345 jTableAllModules.changeSelection(viewIndex, 0, false, false);\r
346 }\r
347 savedMs = System.currentTimeMillis();\r
348 }\r
349 });\r
a0783edc 350 \r
351 \r
a13899c5 352 }\r
4da2e625 353 return jTableAllModules;\r
a13899c5 354 }\r
2a06ac5b 355 \r
9babb67e 356 private int gotoFoundRow (String s, JTable model) {\r
2a06ac5b 357 for (int i = 0; i < model.getRowCount(); ++i) {\r
358 if (model.getValueAt(i, 0) != null && model.getValueAt(i, 0).toString().regionMatches(true, 0, s, 0, s.length())) {\r
9babb67e 359 return i;\r
2a06ac5b 360 }\r
361 }\r
362 return -1;\r
363 }\r
a13899c5 364\r
365 /**\r
df4b9c3e 366 * This method initializes jPanelTopSouth\r
367 * \r
368 * This panel contains the ADD button\r
369 * \r
370 * @return javax.swing.JPanel jPanelTopSouth\r
a13899c5 371 */\r
4da2e625 372 private JPanel getJPanelTopSouth() {\r
373 if (jPanelTopSouth == null) {\r
a13899c5 374 FlowLayout flowLayout = new FlowLayout();\r
375 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
4da2e625 376 jPanelTopSouth = new JPanel();\r
377 jPanelTopSouth.setLayout(flowLayout);\r
378 jPanelTopSouth.add(getJButtonAddModule(), null);\r
a13899c5 379 }\r
4da2e625 380 return jPanelTopSouth;\r
a13899c5 381 }\r
a0783edc 382 \r
383 private void addModuleIntoPlatform (int selectedRow) {\r
384 String path = modelAllModules.getValueAt(selectedRow, pathColForAllModTable) + "";\r
385 ModuleIdentification mi = miList.get(selectedRow);\r
386 Vector<String> vArchs = null;\r
387 try {\r
388 vArchs = WorkspaceProfile.getModuleSupArchs(mi);\r
389 }\r
390 catch (Exception exp) {\r
391 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
392 }\r
393\r
394 if (vArchs == null) {\r
395 JOptionPane.showMessageDialog(frame, "No Supported Architectures specified in MSA file.");\r
396 return;\r
397 }\r
398\r
399 String archsAdded = "";\r
400 String mg = mi.getGuid();\r
401 String mv = mi.getVersion();\r
402 String pg = mi.getPackageId().getGuid();\r
403 String pv = mi.getPackageId().getVersion();\r
404 String mType = SurfaceAreaQuery.getModuleType(mi);\r
405\r
406 ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
407 if (al == null) {\r
408 //\r
409 // if existing ModuleSA does not specify version info.\r
410 //\r
411 al = fpdMsa.get(mg + "null" + pg + "null");\r
412 if (al == null) {\r
413 al = fpdMsa.get(mg + "null" + pg + pv);\r
414 if (al == null){\r
415 al = fpdMsa.get(mg + mv + pg + "null");\r
416 if (al == null) {\r
417 al = new ArrayList<String>();\r
418 fpdMsa.put(mg + mv + pg + pv, al); \r
419 }\r
420 }\r
421 }\r
422 }\r
423 //\r
424 // filter from module SupArchs what archs has been added.\r
425 //\r
426 for (int i = 0; i < al.size(); ++i) {\r
427 vArchs.remove(al.get(i));\r
428 }\r
429 //\r
430 // check whether archs conform to SupArch of platform.\r
431 //\r
432 Vector<Object> platformSupArch = new Vector<Object>();\r
433 ffc.getPlatformDefsSupportedArchs(platformSupArch);\r
434 vArchs.retainAll(platformSupArch);\r
435 //\r
436 // Archs this Module supported have already been added.\r
437 //\r
438 if (vArchs.size() == 0) {\r
439 JOptionPane.showMessageDialog(frame, "This Module has already been added.");\r
440 return;\r
441 }\r
442 //ToDo put Arch instead of null\r
443 boolean errorOccurred = false;\r
444 for (int i = 0; i < vArchs.size(); ++i) {\r
445 String arch = vArchs.get(i);\r
446 al.add(arch);\r
447 archsAdded += arch + " ";\r
448 String[] row = { "", "", "", "", "", "", "" };\r
449\r
450 if (mi != null) {\r
451 row[modNameColForFpdModTable] = mi.getName();\r
452 row[pkgNameColForFpdModTable] = mi.getPackageId().getName();\r
453 row[pathColForFpdModTable] = path;\r
454 row[archColForFpdModTable] = arch;\r
455 row[pkgVerColForFpdModTable] = pv;\r
456 row[modVerColForFpdModTable] = mv;\r
457 row[typeColForFpdModTable] = mType;\r
458\r
459 }\r
460 modelFpdModules.addRow(row);\r
461\r
462 docConsole.setSaved(false);\r
463 try {\r
464 //ToDo : specify archs need to add.\r
465 ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
466 } catch (Exception exception) {\r
467 JOptionPane.showMessageDialog(frame, "Adding " + row[modNameColForFpdModTable] + " with Supporting Architectures: " + arch\r
468 + ": " + exception.getMessage());\r
469 errorOccurred = true;\r
470 }\r
471 }\r
472\r
473 String s = "This Module with Architecture " + archsAdded;\r
474 if (errorOccurred) {\r
475 s += " was added with Error. Platform may NOT Build.";\r
476 } else {\r
477 s += " was added Successfully.";\r
478 }\r
479 JOptionPane.showMessageDialog(frame, s);\r
480 TableSorter sorterFpdModules = (TableSorter)jTableFpdModules.getModel();\r
481 int viewIndex = sorterFpdModules.getViewIndexArray()[modelFpdModules.getRowCount() - 1];\r
482 jTableFpdModules.changeSelection(viewIndex, 0, false, false);\r
483\r
484 }\r
a13899c5 485\r
486 /**\r
df4b9c3e 487 * This method initializes jButtonAddModule \r
a13899c5 488 * \r
df4b9c3e 489 * @return javax.swing.JButton jButtonAddModule\r
a13899c5 490 */\r
4da2e625 491 private JButton getJButtonAddModule() {\r
492 if (jButtonAddModule == null) {\r
493 jButtonAddModule = new JButton();\r
a8a9de7c 494 jButtonAddModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
4da2e625 495 jButtonAddModule.setText("Add a Module");\r
496 jButtonAddModule.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 497 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 498 int selectedRow = jTableAllModules.getSelectedRow();\r
a8a9de7c 499 if (selectedRow < 0) {\r
a13899c5 500 return;\r
501 }\r
a8a9de7c 502\r
503 TableSorter sorter = (TableSorter) jTableAllModules.getModel();\r
d78abb5a 504 selectedRow = sorter.getModelRowIndex(selectedRow);\r
a0783edc 505 addModuleIntoPlatform (selectedRow); \r
82961247 506 }\r
a13899c5 507 });\r
508 }\r
4da2e625 509 return jButtonAddModule;\r
a13899c5 510 }\r
511\r
512 /**\r
df4b9c3e 513 * This method initializes jPanelBottomSouth\r
514 * \r
515 * This panel contains the Settings and Remove Buttons\r
a13899c5 516 * \r
df4b9c3e 517 * @return javax.swing.JPanel jPanelBottomSouth\r
a13899c5 518 */\r
4da2e625 519 private JPanel getJPanelBottomSouth() {\r
520 if (jPanelBottomSouth == null) {\r
a13899c5 521 FlowLayout flowLayout1 = new FlowLayout();\r
522 flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);\r
4da2e625 523 jPanelBottomSouth = new JPanel();\r
524 jPanelBottomSouth.setLayout(flowLayout1);\r
525 jPanelBottomSouth.add(getJButtonSettings(), null);\r
526 jPanelBottomSouth.add(getJButtonRemoveModule(), null);\r
a13899c5 527 }\r
4da2e625 528 return jPanelBottomSouth;\r
a13899c5 529 }\r
530\r
531 /**\r
df4b9c3e 532 * This method initializes jScrollPaneFpdModules\r
a13899c5 533 * \r
df4b9c3e 534 * @return javax.swing.JScrollPane jScrollPaneFpdModules\r
a13899c5 535 */\r
4da2e625 536 private JScrollPane getJScrollPaneFpdModules() {\r
537 if (jScrollPaneFpdModules == null) {\r
538 jScrollPaneFpdModules = new JScrollPane();\r
a8a9de7c 539 jScrollPaneFpdModules.setPreferredSize(new java.awt.Dimension(453, 200));\r
4da2e625 540 jScrollPaneFpdModules.setViewportView(getJTableFpdModules());\r
a13899c5 541 }\r
4da2e625 542 return jScrollPaneFpdModules;\r
a13899c5 543 }\r
544\r
545 /**\r
df4b9c3e 546 * This method initializes jTableFpdModules\r
a13899c5 547 * \r
df4b9c3e 548 * @return javax.swing.JTable jTableFpdModules\r
a13899c5 549 */\r
4da2e625 550 private JTable getJTableFpdModules() {\r
551 if (jTableFpdModules == null) {\r
d78abb5a 552 modelFpdModules = new FpdModulesTableModel();\r
add40ab2 553 TableSorter sorter = new TableSorter(modelFpdModules);\r
554 jTableFpdModules = new JTable(sorter);\r
555 sorter.setTableHeader(jTableFpdModules.getTableHeader());\r
4da2e625 556 jTableFpdModules.setRowHeight(20);\r
a8a9de7c 557 modelFpdModules.addColumn("<html>Module<br>Name</html>");\r
a8a9de7c 558 modelFpdModules.addColumn("<html>Package<br>Name</html>");\r
4da2e625 559 modelFpdModules.addColumn("Path");\r
93fd07b1 560 modelFpdModules.addColumn("<html>Supported<br>Architectures</html>");\r
4cd31580 561 modelFpdModules.addColumn("<html>Module<br>Type</html>");\r
93fd07b1 562 modelFpdModules.addColumn("<html>Module<br>Version</html>");\r
df4b9c3e 563 modelFpdModules.addColumn("<html>Package<br>Version</html>");\r
d78abb5a 564 modelFpdModules.addColumn("<html>Force<br>Debug</html>");\r
93fd07b1 565 \r
a8a9de7c 566 javax.swing.table.TableColumn column = null;\r
d208e1e2 567 column = jTableFpdModules.getColumnModel().getColumn(modNameColForFpdModTable);\r
568 column.setPreferredWidth(modNamePrefWidth);\r
569 column.setMinWidth(modNameMinWidth);\r
df4b9c3e 570 column.setMaxWidth(modNameMaxWidth);\r
d208e1e2 571 column = jTableFpdModules.getColumnModel().getColumn(modVerColForFpdModTable);\r
572 column.setPreferredWidth(verPrefWidth);\r
573 column.setMaxWidth(verMaxWidth);\r
574 column.setMinWidth(verMinWidth);\r
575 column = jTableFpdModules.getColumnModel().getColumn(pkgNameColForFpdModTable);\r
576 column.setPreferredWidth(pkgNamePrefWidth);\r
577 column.setMinWidth(pkgNameMinWidth);\r
578 column.setMaxWidth(pkgNameMaxWidth);\r
579 column = jTableFpdModules.getColumnModel().getColumn(pkgVerColForFpdModTable);\r
580 column.setPreferredWidth(verPrefWidth);\r
581 column.setMaxWidth(verMaxWidth);\r
582 column.setMinWidth(verMinWidth);\r
583 column = jTableFpdModules.getColumnModel().getColumn(archColForFpdModTable);\r
584 column.setPreferredWidth(archPrefWidth);\r
585 column.setMaxWidth(archMaxWidth);\r
586 column.setMinWidth(archMinWidth);\r
587 column = jTableFpdModules.getColumnModel().getColumn(pathColForFpdModTable);\r
588 column.setPreferredWidth(pathPrefWidth);\r
589 column.setMinWidth(pathMinWidth);\r
4cd31580 590 column = jTableFpdModules.getColumnModel().getColumn(typeColForFpdModTable);\r
591 column.setPreferredWidth(typePrefWidth);\r
592 column.setMaxWidth(typeMaxWidth);\r
593 column.setMinWidth(typeMinWidth);\r
a8a9de7c 594\r
4da2e625 595 jTableFpdModules.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
4033708d 596 jTableFpdModules.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
e7cc0547 597 \r
a0783edc 598 jTableFpdModules.addMouseListener(new java.awt.event.MouseAdapter() {\r
599 public void mouseClicked(java.awt.event.MouseEvent e) {\r
600 if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {\r
601 java.awt.Point p = e.getPoint();\r
602 int rowIndex = jTableFpdModules.rowAtPoint(p);\r
603 TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
604 rowIndex = sorter.getModelRowIndex(rowIndex);\r
605 showSettingsDlg (rowIndex);\r
606 }\r
607 }\r
608 });\r
609 \r
2a06ac5b 610 jTableFpdModules.addKeyListener(new java.awt.event.KeyAdapter() {\r
611 public void keyPressed(java.awt.event.KeyEvent e) {\r
612 if (e.getKeyCode() == KeyEvent.VK_ENTER) {\r
613 int selectedRow = jTableFpdModules.getSelectedRow();\r
614 if (selectedRow < 0) {\r
615 return;\r
616 }\r
617 TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
618 selectedRow = sorter.getModelRowIndex(selectedRow);\r
619 showSettingsDlg (selectedRow);\r
620 }\r
621 }\r
622 });\r
623 \r
624 jTableFpdModules.addKeyListener(new java.awt.event.KeyAdapter() {\r
625 public void keyTyped(java.awt.event.KeyEvent e) {\r
626\r
627 if (System.currentTimeMillis() - savedMs < timeToWait) {\r
628 searchField += e.getKeyChar();\r
629 }\r
630 else {\r
631 searchField = "" + e.getKeyChar(); \r
632 }\r
633 \r
9babb67e 634 int viewIndex = gotoFoundRow (searchField, jTableFpdModules);\r
2a06ac5b 635 if (viewIndex >= 0){\r
636 jTableFpdModules.changeSelection(viewIndex, 0, false, false);\r
637 }\r
638 savedMs = System.currentTimeMillis();\r
639 }\r
640 });\r
641 \r
e7cc0547 642 jTableFpdModules.getModel().addTableModelListener(this);\r
a13899c5 643 }\r
4da2e625 644 return jTableFpdModules;\r
a13899c5 645 }\r
646\r
e7cc0547 647 public void tableChanged(TableModelEvent arg0) {\r
648 if (arg0.getType() == TableModelEvent.UPDATE){\r
649 int row = arg0.getFirstRow();\r
650 int column = arg0.getColumn();\r
651 TableModel m = (TableModel)arg0.getSource();\r
652 \r
653 if (column != forceDbgColForFpdModTable) {\r
654 return;\r
655 }\r
656 String s = m.getValueAt(row, column)+"";\r
657 boolean dbgEnable = new Boolean(s);\r
658 ffc.setModuleSAForceDebug(row, dbgEnable);\r
659 docConsole.setSaved(false);\r
660 }\r
661 }\r
a0783edc 662 \r
663 private void showSettingsDlg (int row) {\r
664 try {\r
665 if (ffc.adjustPcd(row)) {\r
666 docConsole.setSaved(false);\r
667 }\r
668 }\r
669 catch (Exception exp) {\r
670 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
9d6f6d70 671// return;\r
a0783edc 672 }\r
673 \r
674 if (settingDlg == null) {\r
675 settingDlg = new FpdModuleSA(ffc);\r
676 }\r
677\r
678 String[] sa = new String[5];\r
679 ffc.getFrameworkModuleInfo(row, sa);\r
680 String mg = sa[ffcModGuid];\r
681 String mv = sa[ffcModVer];\r
682 String pg = sa[ffcPkgGuid];\r
683 String pv = sa[ffcPkgVer];\r
684 String arch = sa[ffcModArch];\r
685 settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv + " " + arch, row, docConsole);\r
686 settingDlg.setVisible(true);\r
687 }\r
a13899c5 688 /**\r
df4b9c3e 689 * This method initializes jButtonSettings\r
a13899c5 690 * \r
df4b9c3e 691 * @return javax.swing.JButton jButtonSettings\r
a13899c5 692 */\r
4da2e625 693 private JButton getJButtonSettings() {\r
694 if (jButtonSettings == null) {\r
695 jButtonSettings = new JButton();\r
696 jButtonSettings.setPreferredSize(new java.awt.Dimension(130,20));\r
697 jButtonSettings.setText("Settings");\r
698 jButtonSettings.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 699 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 700 int selectedRow = jTableFpdModules.getSelectedRow();\r
a8a9de7c 701 if (selectedRow < 0) {\r
a13899c5 702 return;\r
703 }\r
a8a9de7c 704\r
705 TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
d78abb5a 706 selectedRow = sorter.getModelRowIndex(selectedRow);\r
a0783edc 707 showSettingsDlg (selectedRow);\r
a13899c5 708 }\r
709 });\r
710 }\r
4da2e625 711 return jButtonSettings;\r
a13899c5 712 }\r
713\r
714 /**\r
df4b9c3e 715 * This method initializes jButtonRemoveModule\r
a13899c5 716 * \r
df4b9c3e 717 * @return javax.swing.JButton jButtonRemoveModule\r
a13899c5 718 */\r
4da2e625 719 private JButton getJButtonRemoveModule() {\r
720 if (jButtonRemoveModule == null) {\r
721 jButtonRemoveModule = new JButton();\r
a8a9de7c 722 jButtonRemoveModule.setPreferredSize(new java.awt.Dimension(130, 20));\r
4da2e625 723 jButtonRemoveModule.setText("Remove Module");\r
724 jButtonRemoveModule.addActionListener(new java.awt.event.ActionListener() {\r
a13899c5 725 public void actionPerformed(java.awt.event.ActionEvent e) {\r
4da2e625 726 int selectedRow = jTableFpdModules.getSelectedRow();\r
a8a9de7c 727 if (selectedRow < 0) {\r
a13899c5 728 return;\r
729 }\r
bc9b3706 730 int nextSelection = selectedRow;\r
a8a9de7c 731\r
732 TableSorter sorter = (TableSorter) jTableFpdModules.getModel();\r
d78abb5a 733 selectedRow = sorter.getModelRowIndex(selectedRow);\r
a8a9de7c 734\r
bf5abaff 735 String[] sa = new String[5];\r
736 ffc.getFrameworkModuleInfo(selectedRow, sa);\r
d208e1e2 737 String mg = sa[ffcModGuid];\r
738 String mv = sa[ffcModVer];\r
739 String pg = sa[ffcPkgGuid];\r
740 String pv = sa[ffcPkgVer];\r
741 String arch = sa[ffcModArch];\r
a0783edc 742 //\r
743 // sync. module order list in BuildOptions-UserExtensions.\r
744 //\r
745 String moduleKey = mg + " " + mv + " " + pg + " " + pv + " " + arch;\r
746 String fvBindings = ffc.getFvBinding(moduleKey);\r
747 if (fvBindings != null) {\r
748 String[] fvArray = fvBindings.split(" ");\r
749 for (int i = 0; i < fvArray.length; ++i) {\r
750 ffc.removeModuleInBuildOptionsUserExtensions(fvArray[i].trim(), mg, mv, pg, pv, arch);\r
751 }\r
752 }\r
753 \r
1bf9fa5a 754 ModuleIdentification mi = WorkspaceProfile.getModuleId(mg + " " + mv + " " + pg + " " + pv + " " + arch);\r
ac66fadf 755 if (mi != null) {\r
756 mv = mi.getVersion();\r
757 pv = mi.getPackageId().getVersion();\r
758 }\r
759 \r
760 try {\r
761 ffc.removeModuleSA(selectedRow); \r
762 }\r
763 catch (Exception exp) {\r
bc9b3706 764 JOptionPane.showMessageDialog(frame, exp.getMessage());\r
ac66fadf 765 return;\r
766 }\r
767 \r
bf5abaff 768 if (arch == null) {\r
769 // if no arch specified in ModuleSA\r
a8a9de7c 770 fpdMsa.remove(mg + mv + pg + pv);\r
d96d701f 771 \r
a8a9de7c 772 } else {\r
773 ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
ac66fadf 774 if (al != null) {\r
775 al.remove(arch);\r
776 if (al.size() == 0) {\r
777 fpdMsa.remove(mg + mv + pg + pv);\r
778 }\r
bf5abaff 779 }\r
780 }\r
ac66fadf 781 \r
782 modelFpdModules.removeRow(selectedRow);\r
bc9b3706 783 if (nextSelection >= jTableFpdModules.getRowCount()) {\r
784 nextSelection = jTableFpdModules.getRowCount() - 1;\r
785 }\r
786 jTableFpdModules.changeSelection(nextSelection, 0, false, false);\r
ac66fadf 787 docConsole.setSaved(false);\r
a13899c5 788 }\r
789 });\r
790 }\r
4da2e625 791 return jButtonRemoveModule;\r
a13899c5 792 }\r
793\r
794 /**\r
df4b9c3e 795 * \r
a13899c5 796 * @param args\r
797 */\r
798 public static void main(String[] args) {\r
4cd31580 799 // Set the pane visable\r
a13899c5 800 new FpdFrameworkModules().setVisible(true);\r
801 }\r
802\r
803 /**\r
804 * This is the default constructor\r
805 */\r
806 public FpdFrameworkModules() {\r
807 super();\r
808 initialize();\r
809 }\r
810\r
a8a9de7c 811 public FpdFrameworkModules(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
a13899c5 812 this();\r
813 init(fpd);\r
a8a9de7c 814\r
a13899c5 815 }\r
a8a9de7c 816\r
d6d24759 817 public FpdFrameworkModules(OpeningPlatformType opt) {\r
818 this(opt.getXmlFpd());\r
819 docConsole = opt;\r
820 }\r
a8a9de7c 821\r
a13899c5 822 private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
a8a9de7c 823\r
824 if (ffc == null) {\r
a13899c5 825 ffc = new FpdFileContents(fpd);\r
826 ffc.initDynPcdMap();\r
827 }\r
a8a9de7c 828\r
a13899c5 829 if (fpdMsa == null) {\r
bf5abaff 830 fpdMsa = new HashMap<String, ArrayList<String>>();\r
a13899c5 831 }\r
a8a9de7c 832\r
a13899c5 833 if (ffc.getFrameworkModulesCount() > 0) {\r
834 String[][] saa = new String[ffc.getFrameworkModulesCount()][5];\r
835 ffc.getFrameworkModulesInfo(saa);\r
836 for (int i = 0; i < saa.length; ++i) {\r
1bf9fa5a 837 ModuleIdentification mi = WorkspaceProfile.getModuleId(saa[i][ffcModGuid] + " " + saa[i][ffcModVer] + " "\r
d208e1e2 838 + saa[i][ffcPkgGuid] + " " + saa[i][ffcPkgVer]);\r
d78abb5a 839 Object[] row = { "", "", "", "", "", "", "", "" };\r
f3b0ed9a 840 if (mi != null) {\r
d208e1e2 841 row[modNameColForFpdModTable] = mi.getName();\r
842 row[modVerColForFpdModTable] = mi.getVersion();\r
3658f95e 843 row[typeColForFpdModTable] = SurfaceAreaQuery.getModuleType(mi);\r
844 row[pkgNameColForFpdModTable] = mi.getPackageId().getName();\r
845 row[pkgVerColForFpdModTable] = mi.getPackageId().getVersion();\r
d96d701f 846 row[archColForFpdModTable] = saa[i][ffcModArch];\r
a8a9de7c 847 try {\r
3658f95e 848 row[pathColForFpdModTable] = mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
a8a9de7c 849 } catch (Exception e) {\r
850 JOptionPane.showMessageDialog(frame, "Show FPD Modules:" + e.getMessage());\r
bf5abaff 851 }\r
d96d701f 852 \r
d96d701f 853 String fpdMsaKey = saa[i][ffcModGuid] + row[modVerColForFpdModTable]\r
854 + saa[i][ffcPkgGuid] + row[pkgVerColForFpdModTable];\r
855 ArrayList<String> al = fpdMsa.get(fpdMsaKey);\r
856 if (al == null) {\r
857 al = new ArrayList<String>();\r
858 fpdMsa.put(fpdMsaKey, al);\r
859 }\r
860 al.add(saa[i][ffcModArch]);\r
bf5abaff 861 }\r
701d95b3 862 else {\r
863 row[modNameColForFpdModTable] = saa[i][ffcModGuid];\r
864 row[modVerColForFpdModTable] = saa[i][ffcModVer];\r
865 row[pkgNameColForFpdModTable] = saa[i][ffcPkgGuid];\r
866 row[pkgVerColForFpdModTable] = saa[i][ffcPkgVer];\r
867 row[archColForFpdModTable] = saa[i][ffcModArch];\r
868 }\r
d78abb5a 869 row[forceDbgColForFpdModTable] = ffc.getModuleSAForceDebug(i);\r
1bf9fa5a 870 modelFpdModules.addRow(row);\r
a8a9de7c 871\r
a13899c5 872 }\r
f4c4325b 873 TableSorter sorter = (TableSorter)jTableFpdModules.getModel();\r
d78abb5a 874 sorter.setSortState(modNameColForFpdModTable, TableSorter.ASCENDING);\r
a13899c5 875 }\r
a8a9de7c 876\r
a13899c5 877 showAllModules();\r
a8a9de7c 878\r
a13899c5 879 }\r
a8a9de7c 880\r
a13899c5 881 private void showAllModules() {\r
a8a9de7c 882\r
a13899c5 883 if (miList == null) {\r
884 miList = new ArrayList<ModuleIdentification>();\r
885 }\r
a8a9de7c 886\r
df4b9c3e 887 String[] s = { "", "", "", "", "", "" };\r
3658f95e 888 \r
889 Iterator ismi = GlobalData.vModuleList.iterator();\r
a8a9de7c 890 while (ismi.hasNext()) {\r
891 ModuleIdentification mi = (ModuleIdentification) ismi.next();\r
d208e1e2 892 s[modNameColForAllModTable] = mi.getName();\r
893 s[modVerColForAllModTable] = mi.getVersion();\r
3658f95e 894 s[typeColForAllModTable] = SurfaceAreaQuery.getModuleType(mi);\r
895 s[pkgNameColForAllModTable] = mi.getPackageId().getName();\r
896 s[pkgVerColForAllModTable] = mi.getPackageId().getVersion();\r
bf5abaff 897 try {\r
3658f95e 898 s[pathColForAllModTable] = mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
a8a9de7c 899 } catch (Exception e) {\r
900 JOptionPane.showMessageDialog(frame, "Show All Modules:" + e.getMessage());\r
bf5abaff 901 }\r
4da2e625 902 modelAllModules.addRow(s);\r
a13899c5 903 miList.add(mi);\r
904 }\r
3658f95e 905 \r
f4c4325b 906 \r
907 TableSorter sorter = (TableSorter)jTableAllModules.getModel();\r
d78abb5a 908 sorter.setSortState(modNameColForAllModTable, TableSorter.ASCENDING);\r
a13899c5 909 }\r
a8a9de7c 910\r
a13899c5 911 /**\r
912 * This method initializes this\r
913 * \r
914 * @return void\r
915 */\r
916 private void initialize() {\r
917 this.setSize(633, 533);\r
918 this.setTitle("Framework Modules");\r
919 this.setContentPane(getJSplitPane());\r
920 this.setVisible(true);\r
a8a9de7c 921\r
a13899c5 922 }\r
a13899c5 923\r
a8a9de7c 924} // @jve:decl-index=0:visual-constraint="10,10"\r
a13899c5 925\r
926class NonEditableTableModel extends DefaultTableModel {\r
44053733 927 /**\r
928 * \r
929 */\r
930 private static final long serialVersionUID = 1L;\r
931\r
a13899c5 932 public boolean isCellEditable(int row, int col) {\r
933 return false;\r
934 }\r
935}\r
d78abb5a 936\r
937class FpdModulesTableModel extends DefaultTableModel {\r
938\r
939 /**\r
940 * \r
941 */\r
942 private static final long serialVersionUID = 1L;\r
943 \r
944 public Class<?> getColumnClass (int c) {\r
945 if (getValueAt(0, c) != null){\r
946 return getValueAt(0, c).getClass();\r
947 }\r
948 return String.class;\r
949 }\r
950 \r
951 public boolean isCellEditable (int row, int col) {\r
952 if (col == FpdFrameworkModules.forceDbgColForFpdModTable) {\r
953 return true;\r
954 }\r
955 return false;\r
956 }\r
957}\r