3 The file is used to create, update FrameworkModules of Fpd file
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 package org
.tianocore
.frameworkwizard
.platform
.ui
;
17 import java
.awt
.BorderLayout
;
18 import java
.awt
.Dimension
;
19 import java
.awt
.FontMetrics
;
21 import javax
.swing
.JFrame
;
22 import javax
.swing
.JOptionPane
;
23 import javax
.swing
.JPanel
;
24 import javax
.swing
.JSplitPane
;
25 import javax
.swing
.JLabel
;
26 import javax
.swing
.JScrollPane
;
27 import javax
.swing
.JTable
;
28 import javax
.swing
.JButton
;
29 import javax
.swing
.ListSelectionModel
;
30 import javax
.swing
.event
.TableModelEvent
;
31 import javax
.swing
.table
.DefaultTableModel
;
32 import javax
.swing
.table
.TableModel
;
34 import org
.tianocore
.PlatformSurfaceAreaDocument
;
35 import org
.tianocore
.frameworkwizard
.common
.GlobalData
;
36 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningPlatformType
;
37 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
38 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.SurfaceAreaQuery
;
39 import org
.tianocore
.frameworkwizard
.platform
.ui
.global
.WorkspaceProfile
;
40 import org
.tianocore
.frameworkwizard
.module
.Identifications
.ModuleIdentification
;
42 import java
.awt
.FlowLayout
;
43 import java
.awt
.event
.ActionEvent
;
44 import java
.awt
.event
.KeyEvent
;
45 import java
.awt
.event
.MouseEvent
;
46 import java
.util
.ArrayList
;
47 import java
.util
.HashMap
;
48 import java
.util
.Iterator
;
50 import java
.util
.Vector
;
52 public class FpdFrameworkModules
extends IInternalFrame
{
57 private static final long serialVersionUID
= 1L;
59 private static final int timeToWait
= 2000;
61 private long savedMs
= 0;
63 String searchField
= "";
65 public static final int forceDbgColForFpdModTable
= 7;
69 private JSplitPane jSplitPane
= null;
71 private JPanel jPanelTop
= null;
73 private JPanel jPanelBottom
= null;
75 private JLabel jLabel
= null;
77 private JScrollPane jScrollPaneAllModules
= null;
79 private JTable jTableAllModules
= null;
81 private JPanel jPanelTopSouth
= null;
83 private JButton jButtonAddModule
= null;
85 private JLabel jLabelModulesAdded
= null;
87 private JPanel jPanelBottomSouth
= null;
89 private JScrollPane jScrollPaneFpdModules
= null;
91 private JTable jTableFpdModules
= null;
93 private JButton jButtonSettings
= null;
95 private JButton jButtonRemoveModule
= null;
97 private NonEditableTableModel modelAllModules
= null;
99 private FpdModulesTableModel modelFpdModules
= null;
101 private FpdModuleSA settingDlg
= null;
103 private FpdFileContents ffc
= null;
105 private OpeningPlatformType docConsole
= null;
107 private Map
<String
, ArrayList
<String
>> fpdMsa
= null;
109 private ArrayList
<ModuleIdentification
> miList
= null;
112 * Column settings for displaying all modules in workspace
114 private final int modNameColForAllModTable
= 0;
116 private final int pkgNameColForAllModTable
= 1;
118 private final int pathColForAllModTable
= 2;
120 private final int typeColForAllModTable
= 3;
122 private final int pkgVerColForAllModTable
= 5;
124 private final int modVerColForAllModTable
= 4;
127 * Column settings for display modules in the FPD file
129 private final int modNameColForFpdModTable
= 0;
131 private final int pkgNameColForFpdModTable
= 1;
133 private final int pathColForFpdModTable
= 2;
135 private final int archColForFpdModTable
= 3;
137 private final int pkgVerColForFpdModTable
= 6;
139 private final int modVerColForFpdModTable
= 5;
141 private final int typeColForFpdModTable
= 4;
144 * FpdFileContents structure
146 private final int ffcModGuid
= 0;
148 private final int ffcModVer
= 1;
150 private final int ffcPkgGuid
= 2;
152 private final int ffcPkgVer
= 3;
154 private final int ffcModArch
= 4;
157 * Set Column Widths, Only the PATH should not have a max width.
159 private final int modNameMinWidth
= 168;
161 private final int modNamePrefWidth
= 200;
163 private final int modNameMaxWidth
= 350;
165 private final int pkgNameMinWidth
= 100;
167 private final int pkgNamePrefWidth
= 130;
169 private final int pkgNameMaxWidth
= 150;
171 private final int verMinWidth
= 60;
173 private final int verMaxWidth
= 80;
175 private final int verPrefWidth
= 70;
177 private final int pathPrefWidth
= 600;
179 private final int pathMinWidth
= 280;
181 private final int archPrefWidth
= 80;
183 private final int archMinWidth
= 60;
185 private final int archMaxWidth
= 100;
187 private final int typePrefWidth
= 145;
189 private final int typeMinWidth
= 100;
191 private final int typeMaxWidth
= 155;
193 private JButton jButtonApriori
= null;
196 * This method initializes jSplitPane
198 * This is the main edit window
200 * @return javax.swing.JSplitPane jSplitPane
202 private JSplitPane
getJSplitPane() {
203 if (jSplitPane
== null) {
204 jSplitPane
= new JSplitPane();
205 jSplitPane
.setOrientation(javax
.swing
.JSplitPane
.VERTICAL_SPLIT
);
206 jSplitPane
.setDividerLocation(250);
207 jSplitPane
.setBottomComponent(getJPanelBottom());
208 jSplitPane
.setTopComponent(getJPanelTop());
214 * This method initializes jPanelTop
216 * This panel contains the All Modules Table
218 * @return javax.swing.JPanel jPanelTop
220 private JPanel
getJPanelTop() {
221 if (jPanelTop
== null) {
222 jLabel
= new JLabel();
223 jLabel
.setText(" Modules in Workspace");
224 jPanelTop
= new JPanel();
225 jPanelTop
.setLayout(new BorderLayout());
226 jPanelTop
.add(jLabel
, java
.awt
.BorderLayout
.NORTH
);
227 jPanelTop
.add(getJScrollPaneAllModules(), java
.awt
.BorderLayout
.CENTER
);
228 jPanelTop
.add(getJPanelTopSouth(), java
.awt
.BorderLayout
.SOUTH
);
234 * This method initializes jPanelBottom
236 * This panel contains the FPD Modules Table
238 * @return javax.swing.JPanel jPanelBottom
240 private JPanel
getJPanelBottom() {
241 if (jPanelBottom
== null) {
242 jLabelModulesAdded
= new JLabel();
243 jLabelModulesAdded
.setText(" Modules Added into Platform");
244 jPanelBottom
= new JPanel();
245 jPanelBottom
.setLayout(new BorderLayout());
246 jPanelBottom
.add(jLabelModulesAdded
, java
.awt
.BorderLayout
.NORTH
);
247 jPanelBottom
.add(getJPanelBottomSouth(), java
.awt
.BorderLayout
.SOUTH
);
248 jPanelBottom
.add(getJScrollPaneFpdModules(), java
.awt
.BorderLayout
.CENTER
);
254 * This method initializes jScrollPaneAllModules
256 * @return javax.swing.JScrollPane jScrollPaneAllModules
258 private JScrollPane
getJScrollPaneAllModules() {
259 if (jScrollPaneAllModules
== null) {
260 jScrollPaneAllModules
= new JScrollPane();
261 jScrollPaneAllModules
.setPreferredSize(new java
.awt
.Dimension(600, 200));
262 jScrollPaneAllModules
.setViewportView(getJTableAllModules());
264 return jScrollPaneAllModules
;
268 * This method initializes jTableAllModules
270 * @return javax.swing.JTable jTableAllModules
272 private JTable
getJTableAllModules() {
273 if (jTableAllModules
== null) {
274 modelAllModules
= new NonEditableTableModel();
275 TableSorter sorter
= new TableSorter(modelAllModules
);
276 jTableAllModules
= new JTable(sorter
);
277 sorter
.setTableHeader(jTableAllModules
.getTableHeader());
278 jTableAllModules
.setRowHeight(20);
279 modelAllModules
.addColumn("<html>Module<br>Name</html>");
280 modelAllModules
.addColumn("<html>Package<br>Name</html>");
281 modelAllModules
.addColumn("Path");
282 modelAllModules
.addColumn("<html>Module<br>Type</html>");
283 modelAllModules
.addColumn("<html>Module<br>Version</html>");
284 modelAllModules
.addColumn("<html>Package<br>Version</html>");
286 javax
.swing
.table
.TableColumn column
= null;
287 column
= jTableAllModules
.getColumnModel().getColumn(modNameColForAllModTable
);
288 column
.setPreferredWidth(modNamePrefWidth
);
289 column
.setMinWidth(modNameMinWidth
);
290 column
.setMaxWidth(modNameMaxWidth
);
291 column
= jTableAllModules
.getColumnModel().getColumn(modVerColForAllModTable
);
292 column
.setPreferredWidth(verPrefWidth
);
293 column
.setMaxWidth(verMaxWidth
);
294 column
.setMinWidth(verMinWidth
);
295 column
= jTableAllModules
.getColumnModel().getColumn(pkgNameColForAllModTable
);
296 column
.setPreferredWidth(pkgNamePrefWidth
);
297 column
.setMinWidth(pkgNameMinWidth
);
298 column
.setMaxWidth(pkgNameMaxWidth
);
299 column
= jTableAllModules
.getColumnModel().getColumn(pkgVerColForAllModTable
);
300 column
.setPreferredWidth(verPrefWidth
);
301 column
.setMaxWidth(verMaxWidth
);
302 column
.setMinWidth(verMinWidth
);
303 column
= jTableAllModules
.getColumnModel().getColumn(typeColForAllModTable
);
304 column
.setPreferredWidth(typePrefWidth
);
305 column
.setMaxWidth(typeMaxWidth
);
306 column
.setMinWidth(typeMinWidth
);
307 column
= jTableAllModules
.getColumnModel().getColumn(pathColForAllModTable
);
308 column
.setPreferredWidth(pathPrefWidth
);
309 column
.setMinWidth(pathMinWidth
);
311 jTableAllModules
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
312 jTableAllModules
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
313 jTableAllModules
.addMouseListener(new java
.awt
.event
.MouseAdapter() {
314 public void mouseClicked(java
.awt
.event
.MouseEvent e
) {
315 if (e
.getButton() == MouseEvent
.BUTTON1
&& e
.getClickCount() == 2) {
316 java
.awt
.Point p
= e
.getPoint();
317 int rowIndex
= jTableAllModules
.rowAtPoint(p
);
318 TableSorter sorter
= (TableSorter
) jTableAllModules
.getModel();
319 rowIndex
= sorter
.getModelRowIndex(rowIndex
);
320 addModuleIntoPlatform (rowIndex
);
324 jTableAllModules
.addKeyListener(new java
.awt
.event
.KeyAdapter() {
325 public void keyPressed(java
.awt
.event
.KeyEvent e
) {
326 if (e
.getKeyCode() == KeyEvent
.VK_ENTER
) {
327 int selectedRow
= jTableAllModules
.getSelectedRow();
328 if (selectedRow
< 0) {
331 TableSorter sorter
= (TableSorter
) jTableAllModules
.getModel();
332 selectedRow
= sorter
.getModelRowIndex(selectedRow
);
333 addModuleIntoPlatform (selectedRow
);
338 jTableAllModules
.addKeyListener(new java
.awt
.event
.KeyAdapter() {
339 public void keyTyped(java
.awt
.event
.KeyEvent e
) {
341 if (System
.currentTimeMillis() - savedMs
< timeToWait
) {
342 searchField
+= e
.getKeyChar();
345 searchField
= "" + e
.getKeyChar();
348 int viewIndex
= gotoFoundRow (searchField
, jTableAllModules
);
350 jTableAllModules
.changeSelection(viewIndex
, 0, false, false);
352 savedMs
= System
.currentTimeMillis();
358 return jTableAllModules
;
361 private int gotoFoundRow (String s
, JTable model
) {
362 for (int i
= 0; i
< model
.getRowCount(); ++i
) {
363 if (model
.getValueAt(i
, 0) != null && model
.getValueAt(i
, 0).toString().regionMatches(true, 0, s
, 0, s
.length())) {
371 * This method initializes jPanelTopSouth
373 * This panel contains the ADD button
375 * @return javax.swing.JPanel jPanelTopSouth
377 private JPanel
getJPanelTopSouth() {
378 if (jPanelTopSouth
== null) {
379 FlowLayout flowLayout
= new FlowLayout();
380 flowLayout
.setAlignment(java
.awt
.FlowLayout
.RIGHT
);
381 jPanelTopSouth
= new JPanel();
382 jPanelTopSouth
.setLayout(flowLayout
);
383 jPanelTopSouth
.add(getJButtonAddModule(), null);
385 return jPanelTopSouth
;
388 private void addModuleIntoPlatform (int selectedRow
) {
389 String path
= modelAllModules
.getValueAt(selectedRow
, pathColForAllModTable
) + "";
390 ModuleIdentification mi
= miList
.get(selectedRow
);
391 Vector
<String
> vArchs
= null;
393 vArchs
= WorkspaceProfile
.getModuleSupArchs(mi
);
395 catch (Exception exp
) {
396 JOptionPane
.showMessageDialog(frame
, exp
.getMessage());
399 if (vArchs
== null) {
400 JOptionPane
.showMessageDialog(frame
, "No Supported Architectures specified in MSA file.");
404 String archsAdded
= "";
405 String mg
= mi
.getGuid();
406 String mv
= mi
.getVersion();
407 String pg
= mi
.getPackageId().getGuid();
408 String pv
= mi
.getPackageId().getVersion();
409 String mType
= SurfaceAreaQuery
.getModuleType(mi
);
411 ArrayList
<String
> al
= fpdMsa
.get(mg
+ mv
+ pg
+ pv
);
414 // if existing ModuleSA does not specify version info.
416 al
= fpdMsa
.get(mg
+ "null" + pg
+ "null");
418 al
= fpdMsa
.get(mg
+ "null" + pg
+ pv
);
420 al
= fpdMsa
.get(mg
+ mv
+ pg
+ "null");
422 al
= new ArrayList
<String
>();
423 fpdMsa
.put(mg
+ mv
+ pg
+ pv
, al
);
429 // filter from module SupArchs what archs has been added.
431 for (int i
= 0; i
< al
.size(); ++i
) {
432 vArchs
.remove(al
.get(i
));
435 // check whether archs conform to SupArch of platform.
437 Vector
<Object
> platformSupArch
= new Vector
<Object
>();
438 ffc
.getPlatformDefsSupportedArchs(platformSupArch
);
439 vArchs
.retainAll(platformSupArch
);
441 // Archs this Module supported have already been added.
443 if (vArchs
.size() == 0) {
444 JOptionPane
.showMessageDialog(frame
, "This Module has already been added.");
447 //ToDo put Arch instead of null
448 boolean errorOccurred
= false;
449 for (int i
= 0; i
< vArchs
.size(); ++i
) {
450 String arch
= vArchs
.get(i
);
452 archsAdded
+= arch
+ " ";
453 String
[] row
= { "", "", "", "", "", "", "" };
456 row
[modNameColForFpdModTable
] = mi
.getName();
457 row
[pkgNameColForFpdModTable
] = mi
.getPackageId().getName();
458 row
[pathColForFpdModTable
] = path
;
459 row
[archColForFpdModTable
] = arch
;
460 row
[pkgVerColForFpdModTable
] = pv
;
461 row
[modVerColForFpdModTable
] = mv
;
462 row
[typeColForFpdModTable
] = mType
;
465 modelFpdModules
.addRow(row
);
467 docConsole
.setSaved(false);
469 //ToDo : specify archs need to add.
470 ffc
.addFrameworkModulesPcdBuildDefs(mi
, arch
, null);
471 } catch (Exception exception
) {
472 JOptionPane
.showMessageDialog(frame
, "Adding " + row
[modNameColForFpdModTable
] + " with Supporting Architectures: " + arch
473 + ": " + exception
.getMessage());
474 errorOccurred
= true;
478 String s
= "This Module with Architecture " + archsAdded
;
480 s
+= " was added with Error. Platform may NOT Build.";
482 s
+= " was added Successfully.";
484 JOptionPane
.showMessageDialog(frame
, s
);
485 TableSorter sorterFpdModules
= (TableSorter
)jTableFpdModules
.getModel();
486 int viewIndex
= sorterFpdModules
.getViewIndexArray()[modelFpdModules
.getRowCount() - 1];
487 jTableFpdModules
.changeSelection(viewIndex
, 0, false, false);
492 * This method initializes jButtonAddModule
494 * @return javax.swing.JButton jButtonAddModule
496 private JButton
getJButtonAddModule() {
497 if (jButtonAddModule
== null) {
498 jButtonAddModule
= new JButton();
499 jButtonAddModule
.setPreferredSize(new java
.awt
.Dimension(130, 20));
500 jButtonAddModule
.setText("Add a Module");
501 jButtonAddModule
.addActionListener(new java
.awt
.event
.ActionListener() {
502 public void actionPerformed(java
.awt
.event
.ActionEvent e
) {
503 int selectedRow
= jTableAllModules
.getSelectedRow();
504 if (selectedRow
< 0) {
508 TableSorter sorter
= (TableSorter
) jTableAllModules
.getModel();
509 selectedRow
= sorter
.getModelRowIndex(selectedRow
);
510 addModuleIntoPlatform (selectedRow
);
514 return jButtonAddModule
;
518 * This method initializes jPanelBottomSouth
520 * This panel contains the Settings and Remove Buttons
522 * @return javax.swing.JPanel jPanelBottomSouth
524 private JPanel
getJPanelBottomSouth() {
525 if (jPanelBottomSouth
== null) {
526 FlowLayout flowLayout1
= new FlowLayout();
527 flowLayout1
.setAlignment(java
.awt
.FlowLayout
.RIGHT
);
528 jPanelBottomSouth
= new JPanel();
529 jPanelBottomSouth
.setLayout(flowLayout1
);
530 jPanelBottomSouth
.add(getJButtonSettings(), null);
531 jPanelBottomSouth
.add(getJButtonRemoveModule(), null);
532 jPanelBottomSouth
.add(getJButtonApriori(), null);
534 return jPanelBottomSouth
;
538 * This method initializes jScrollPaneFpdModules
540 * @return javax.swing.JScrollPane jScrollPaneFpdModules
542 private JScrollPane
getJScrollPaneFpdModules() {
543 if (jScrollPaneFpdModules
== null) {
544 jScrollPaneFpdModules
= new JScrollPane();
545 jScrollPaneFpdModules
.setPreferredSize(new java
.awt
.Dimension(453, 200));
546 jScrollPaneFpdModules
.setViewportView(getJTableFpdModules());
548 return jScrollPaneFpdModules
;
552 * This method initializes jTableFpdModules
554 * @return javax.swing.JTable jTableFpdModules
556 private JTable
getJTableFpdModules() {
557 if (jTableFpdModules
== null) {
558 modelFpdModules
= new FpdModulesTableModel();
559 TableSorter sorter
= new TableSorter(modelFpdModules
);
560 jTableFpdModules
= new JTable(sorter
);
561 sorter
.setTableHeader(jTableFpdModules
.getTableHeader());
562 jTableFpdModules
.setRowHeight(20);
563 modelFpdModules
.addColumn("<html>Module<br>Name</html>");
564 modelFpdModules
.addColumn("<html>Package<br>Name</html>");
565 modelFpdModules
.addColumn("Path");
566 modelFpdModules
.addColumn("<html>Supported<br>Architectures</html>");
567 modelFpdModules
.addColumn("<html>Module<br>Type</html>");
568 modelFpdModules
.addColumn("<html>Module<br>Version</html>");
569 modelFpdModules
.addColumn("<html>Package<br>Version</html>");
570 modelFpdModules
.addColumn("<html>Force<br>Debug</html>");
572 javax
.swing
.table
.TableColumn column
= null;
573 column
= jTableFpdModules
.getColumnModel().getColumn(modNameColForFpdModTable
);
574 column
.setPreferredWidth(modNamePrefWidth
);
575 column
.setMinWidth(modNameMinWidth
);
576 column
.setMaxWidth(modNameMaxWidth
);
577 column
= jTableFpdModules
.getColumnModel().getColumn(modVerColForFpdModTable
);
578 column
.setPreferredWidth(verPrefWidth
);
579 column
.setMaxWidth(verMaxWidth
);
580 column
.setMinWidth(verMinWidth
);
581 column
= jTableFpdModules
.getColumnModel().getColumn(pkgNameColForFpdModTable
);
582 column
.setPreferredWidth(pkgNamePrefWidth
);
583 column
.setMinWidth(pkgNameMinWidth
);
584 column
.setMaxWidth(pkgNameMaxWidth
);
585 column
= jTableFpdModules
.getColumnModel().getColumn(pkgVerColForFpdModTable
);
586 column
.setPreferredWidth(verPrefWidth
);
587 column
.setMaxWidth(verMaxWidth
);
588 column
.setMinWidth(verMinWidth
);
589 column
= jTableFpdModules
.getColumnModel().getColumn(archColForFpdModTable
);
590 column
.setPreferredWidth(archPrefWidth
);
591 column
.setMaxWidth(archMaxWidth
);
592 column
.setMinWidth(archMinWidth
);
593 column
= jTableFpdModules
.getColumnModel().getColumn(pathColForFpdModTable
);
594 column
.setPreferredWidth(pathPrefWidth
);
595 column
.setMinWidth(pathMinWidth
);
596 column
= jTableFpdModules
.getColumnModel().getColumn(typeColForFpdModTable
);
597 column
.setPreferredWidth(typePrefWidth
);
598 column
.setMaxWidth(typeMaxWidth
);
599 column
.setMinWidth(typeMinWidth
);
601 jTableFpdModules
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
602 jTableFpdModules
.setAutoResizeMode(JTable
.AUTO_RESIZE_OFF
);
604 jTableFpdModules
.addMouseListener(new java
.awt
.event
.MouseAdapter() {
605 public void mouseClicked(java
.awt
.event
.MouseEvent e
) {
606 if (e
.getButton() == MouseEvent
.BUTTON1
&& e
.getClickCount() == 2) {
607 java
.awt
.Point p
= e
.getPoint();
608 int rowIndex
= jTableFpdModules
.rowAtPoint(p
);
609 TableSorter sorter
= (TableSorter
) jTableFpdModules
.getModel();
610 rowIndex
= sorter
.getModelRowIndex(rowIndex
);
611 showSettingsDlg (rowIndex
);
616 jTableFpdModules
.addKeyListener(new java
.awt
.event
.KeyAdapter() {
617 public void keyPressed(java
.awt
.event
.KeyEvent e
) {
618 if (e
.getKeyCode() == KeyEvent
.VK_ENTER
) {
619 int selectedRow
= jTableFpdModules
.getSelectedRow();
620 if (selectedRow
< 0) {
623 TableSorter sorter
= (TableSorter
) jTableFpdModules
.getModel();
624 selectedRow
= sorter
.getModelRowIndex(selectedRow
);
625 showSettingsDlg (selectedRow
);
630 jTableFpdModules
.addKeyListener(new java
.awt
.event
.KeyAdapter() {
631 public void keyTyped(java
.awt
.event
.KeyEvent e
) {
633 if (System
.currentTimeMillis() - savedMs
< timeToWait
) {
634 searchField
+= e
.getKeyChar();
637 searchField
= "" + e
.getKeyChar();
640 int viewIndex
= gotoFoundRow (searchField
, jTableFpdModules
);
642 jTableFpdModules
.changeSelection(viewIndex
, 0, false, false);
644 savedMs
= System
.currentTimeMillis();
648 jTableFpdModules
.getModel().addTableModelListener(this);
650 return jTableFpdModules
;
653 public void tableChanged(TableModelEvent arg0
) {
654 if (arg0
.getType() == TableModelEvent
.UPDATE
){
655 int row
= arg0
.getFirstRow();
656 int column
= arg0
.getColumn();
657 TableModel m
= (TableModel
)arg0
.getSource();
659 if (column
!= forceDbgColForFpdModTable
) {
662 String s
= m
.getValueAt(row
, column
)+"";
663 boolean dbgEnable
= new Boolean(s
);
664 ffc
.setModuleSAForceDebug(row
, dbgEnable
);
665 docConsole
.setSaved(false);
669 private void showSettingsDlg (int row
) {
671 if (ffc
.adjustPcd(row
)) {
672 JOptionPane
.showMessageDialog(frame
, "Pcd entries sync. with those in MSA files.");
673 docConsole
.setSaved(false);
676 catch (Exception exp
) {
677 JOptionPane
.showMessageDialog(frame
, exp
.getMessage());
681 if (settingDlg
== null) {
682 settingDlg
= new FpdModuleSA(ffc
);
685 String
[] sa
= new String
[5];
686 ffc
.getFrameworkModuleInfo(row
, sa
);
687 String mg
= sa
[ffcModGuid
];
688 String mv
= sa
[ffcModVer
];
689 String pg
= sa
[ffcPkgGuid
];
690 String pv
= sa
[ffcPkgVer
];
691 String arch
= sa
[ffcModArch
];
692 settingDlg
.setKey(mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
, row
, docConsole
);
693 settingDlg
.setVisible(true);
696 * This method initializes jButtonSettings
698 * @return javax.swing.JButton jButtonSettings
700 private JButton
getJButtonSettings() {
701 if (jButtonSettings
== null) {
702 jButtonSettings
= new JButton();
703 jButtonSettings
.setPreferredSize(new java
.awt
.Dimension(130,20));
704 jButtonSettings
.setText("Settings");
705 jButtonSettings
.addActionListener(new java
.awt
.event
.ActionListener() {
706 public void actionPerformed(java
.awt
.event
.ActionEvent e
) {
707 int selectedRow
= jTableFpdModules
.getSelectedRow();
708 if (selectedRow
< 0) {
712 TableSorter sorter
= (TableSorter
) jTableFpdModules
.getModel();
713 selectedRow
= sorter
.getModelRowIndex(selectedRow
);
714 showSettingsDlg (selectedRow
);
718 return jButtonSettings
;
722 * This method initializes jButtonRemoveModule
724 * @return javax.swing.JButton jButtonRemoveModule
726 private JButton
getJButtonRemoveModule() {
727 if (jButtonRemoveModule
== null) {
728 jButtonRemoveModule
= new JButton();
729 jButtonRemoveModule
.setText("Remove Module");
730 FontMetrics fm
= jButtonRemoveModule
.getFontMetrics(jButtonRemoveModule
.getFont());
731 jButtonRemoveModule
.setPreferredSize(new Dimension (fm
.stringWidth(jButtonRemoveModule
.getText()) + 40, 20));
732 jButtonRemoveModule
.addActionListener(new java
.awt
.event
.ActionListener() {
733 public void actionPerformed(java
.awt
.event
.ActionEvent e
) {
734 int selectedRow
= jTableFpdModules
.getSelectedRow();
735 if (selectedRow
< 0) {
738 int nextSelection
= selectedRow
;
740 TableSorter sorter
= (TableSorter
) jTableFpdModules
.getModel();
741 selectedRow
= sorter
.getModelRowIndex(selectedRow
);
743 String
[] sa
= new String
[5];
744 ffc
.getFrameworkModuleInfo(selectedRow
, sa
);
745 String mg
= sa
[ffcModGuid
];
746 String mv
= sa
[ffcModVer
];
747 String pg
= sa
[ffcPkgGuid
];
748 String pv
= sa
[ffcPkgVer
];
749 String arch
= sa
[ffcModArch
];
751 // sync. module order list in BuildOptions-UserExtensions.
753 String moduleKey
= mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
;
754 String fvBindings
= ffc
.getFvBinding(moduleKey
);
755 if (fvBindings
!= null) {
756 String
[] fvArray
= fvBindings
.split(" ");
757 for (int i
= 0; i
< fvArray
.length
; ++i
) {
758 ffc
.removeModuleInBuildOptionsUserExtensions(fvArray
[i
].trim(), "IMAGES", 1, mg
, mv
, pg
, pv
, arch
);
762 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(mg
+ " " + mv
+ " " + pg
+ " " + pv
+ " " + arch
);
764 mv
= mi
.getVersion();
765 pv
= mi
.getPackageId().getVersion();
769 ffc
.removeModuleSA(selectedRow
);
771 catch (Exception exp
) {
772 JOptionPane
.showMessageDialog(frame
, exp
.getMessage());
777 // if no arch specified in ModuleSA
778 fpdMsa
.remove(mg
+ mv
+ pg
+ pv
);
781 ArrayList
<String
> al
= fpdMsa
.get(mg
+ mv
+ pg
+ pv
);
784 if (al
.size() == 0) {
785 fpdMsa
.remove(mg
+ mv
+ pg
+ pv
);
790 modelFpdModules
.removeRow(selectedRow
);
791 if (nextSelection
>= jTableFpdModules
.getRowCount()) {
792 nextSelection
= jTableFpdModules
.getRowCount() - 1;
794 jTableFpdModules
.changeSelection(nextSelection
, 0, false, false);
795 docConsole
.setSaved(false);
799 return jButtonRemoveModule
;
803 * This method initializes jButtonApriori
805 * @return javax.swing.JButton
807 private JButton
getJButtonApriori() {
808 if (jButtonApriori
== null) {
809 jButtonApriori
= new JButton();
810 jButtonApriori
.setText("Apriori Files");
811 FontMetrics fm
= jButtonApriori
.getFontMetrics(jButtonApriori
.getFont());
812 int buttonWidth
= fm
.stringWidth(jButtonApriori
.getText()) + 40;
813 if (jButtonRemoveModule
.getWidth() > buttonWidth
) {
814 buttonWidth
= jButtonRemoveModule
.getWidth();
816 jButtonApriori
.setPreferredSize(new Dimension (buttonWidth
, 20));
817 jButtonApriori
.addActionListener(new java
.awt
.event
.ActionListener() {
818 public void actionPerformed(ActionEvent arg0
) {
819 new GenAprioriFileDialog(ffc
, docConsole
).setVisible(true);
822 return jButtonApriori
;
829 public static void main(String
[] args
) {
830 // Set the pane visable
831 new FpdFrameworkModules().setVisible(true);
835 * This is the default constructor
837 public FpdFrameworkModules() {
842 public FpdFrameworkModules(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
) {
848 public FpdFrameworkModules(OpeningPlatformType opt
) {
849 this(opt
.getXmlFpd());
853 private void init(PlatformSurfaceAreaDocument
.PlatformSurfaceArea fpd
) {
856 ffc
= new FpdFileContents(fpd
);
860 if (fpdMsa
== null) {
861 fpdMsa
= new HashMap
<String
, ArrayList
<String
>>();
864 if (ffc
.getFrameworkModulesCount() > 0) {
865 String
[][] saa
= new String
[ffc
.getFrameworkModulesCount()][5];
866 ffc
.getFrameworkModulesInfo(saa
);
867 for (int i
= 0; i
< saa
.length
; ++i
) {
868 ModuleIdentification mi
= WorkspaceProfile
.getModuleId(saa
[i
][ffcModGuid
] + " " + saa
[i
][ffcModVer
] + " "
869 + saa
[i
][ffcPkgGuid
] + " " + saa
[i
][ffcPkgVer
]);
870 Object
[] row
= { "", "", "", "", "", "", "", "" };
872 row
[modNameColForFpdModTable
] = mi
.getName();
873 row
[modVerColForFpdModTable
] = mi
.getVersion();
874 row
[typeColForFpdModTable
] = SurfaceAreaQuery
.getModuleType(mi
);
875 row
[pkgNameColForFpdModTable
] = mi
.getPackageId().getName();
876 row
[pkgVerColForFpdModTable
] = mi
.getPackageId().getVersion();
877 row
[archColForFpdModTable
] = saa
[i
][ffcModArch
];
879 row
[pathColForFpdModTable
] = mi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
880 } catch (Exception e
) {
881 JOptionPane
.showMessageDialog(frame
, "Show FPD Modules:" + e
.getMessage());
884 String fpdMsaKey
= saa
[i
][ffcModGuid
] + row
[modVerColForFpdModTable
]
885 + saa
[i
][ffcPkgGuid
] + row
[pkgVerColForFpdModTable
];
886 ArrayList
<String
> al
= fpdMsa
.get(fpdMsaKey
);
888 al
= new ArrayList
<String
>();
889 fpdMsa
.put(fpdMsaKey
, al
);
891 al
.add(saa
[i
][ffcModArch
]);
894 row
[modNameColForFpdModTable
] = saa
[i
][ffcModGuid
];
895 row
[modVerColForFpdModTable
] = saa
[i
][ffcModVer
];
896 row
[pkgNameColForFpdModTable
] = saa
[i
][ffcPkgGuid
];
897 row
[pkgVerColForFpdModTable
] = saa
[i
][ffcPkgVer
];
898 row
[archColForFpdModTable
] = saa
[i
][ffcModArch
];
900 row
[forceDbgColForFpdModTable
] = ffc
.getModuleSAForceDebug(i
);
901 modelFpdModules
.addRow(row
);
904 TableSorter sorter
= (TableSorter
)jTableFpdModules
.getModel();
905 sorter
.setSortState(modNameColForFpdModTable
, TableSorter
.ASCENDING
);
912 private void showAllModules() {
914 if (miList
== null) {
915 miList
= new ArrayList
<ModuleIdentification
>();
918 String
[] s
= { "", "", "", "", "", "" };
920 Iterator ismi
= GlobalData
.vModuleList
.iterator();
921 while (ismi
.hasNext()) {
922 ModuleIdentification mi
= (ModuleIdentification
) ismi
.next();
923 s
[modNameColForAllModTable
] = mi
.getName();
924 s
[modVerColForAllModTable
] = mi
.getVersion();
925 s
[typeColForAllModTable
] = SurfaceAreaQuery
.getModuleType(mi
);
926 s
[pkgNameColForAllModTable
] = mi
.getPackageId().getName();
927 s
[pkgVerColForAllModTable
] = mi
.getPackageId().getVersion();
929 s
[pathColForAllModTable
] = mi
.getPath().substring(System
.getenv("WORKSPACE").length() + 1);
930 } catch (Exception e
) {
931 JOptionPane
.showMessageDialog(frame
, "Show All Modules:" + e
.getMessage());
933 modelAllModules
.addRow(s
);
938 TableSorter sorter
= (TableSorter
)jTableAllModules
.getModel();
939 sorter
.setSortState(modNameColForAllModTable
, TableSorter
.ASCENDING
);
943 * This method initializes this
947 private void initialize() {
948 this.setSize(633, 533);
949 this.setTitle("Framework Modules");
950 this.setContentPane(getJSplitPane());
951 this.setVisible(true);
955 } // @jve:decl-index=0:visual-constraint="10,10"
957 class NonEditableTableModel
extends DefaultTableModel
{
961 private static final long serialVersionUID
= 1L;
963 public boolean isCellEditable(int row
, int col
) {
968 class FpdModulesTableModel
extends DefaultTableModel
{
973 private static final long serialVersionUID
= 1L;
975 public Class
<?
> getColumnClass (int c
) {
976 if (getValueAt(0, c
) != null){
977 return getValueAt(0, c
).getClass();
982 public boolean isCellEditable (int row
, int col
) {
983 if (col
== FpdFrameworkModules
.forceDbgColForFpdModTable
) {