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