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