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