3 The file is used to create, update Include of MSA/MBD 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
.module
.ui
;
17 import java
.awt
.Dimension
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ComponentEvent
;
20 import java
.awt
.event
.MouseEvent
;
21 import java
.util
.Vector
;
23 import javax
.swing
.JButton
;
24 import javax
.swing
.JPanel
;
25 import javax
.swing
.JScrollPane
;
26 import javax
.swing
.JTable
;
27 import javax
.swing
.ListSelectionModel
;
28 import javax
.swing
.event
.ListSelectionEvent
;
30 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
31 import org
.tianocore
.PackageDependenciesDocument
.PackageDependencies
;
32 import org
.tianocore
.PackageDependenciesDocument
.PackageDependencies
.Package
;
33 import org
.tianocore
.frameworkwizard
.common
.DataType
;
34 import org
.tianocore
.frameworkwizard
.common
.IDefaultTableModel
;
35 import org
.tianocore
.frameworkwizard
.common
.Log
;
36 import org
.tianocore
.frameworkwizard
.common
.Tools
;
37 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
38 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
39 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
40 import org
.tianocore
.frameworkwizard
.module
.Identifications
.PackageDependencies
.PackageDependenciesIdentification
;
41 import org
.tianocore
.frameworkwizard
.module
.Identifications
.PackageDependencies
.PackageDependenciesVector
;
42 import org
.tianocore
.frameworkwizard
.module
.ui
.dialog
.PackageDepDlg
;
43 import org
.tianocore
.frameworkwizard
.packaging
.PackageIdentification
;
44 import org
.tianocore
.frameworkwizard
.workspace
.WorkspaceTools
;
47 The class is used to create, update Include of MSA/MBD file
48 It extends IInternalFrame
53 public class ModulePackageDependencies
extends IInternalFrame
{
56 /// Define class Serial Version UID
58 private static final long serialVersionUID
= 3465193035145152131L;
61 //Define class members
63 private JPanel jContentPane
= null;
65 private JButton jButtonAdd
= null;
67 private JButton jButtonRemove
= null;
69 private JButton jButtonUpdate
= null;
71 private JScrollPane jScrollPane
= null;
73 private JScrollPane jScrollPaneTable
= null;
75 private JTable jTable
= null;
80 private OpeningModuleType omt
= null;
82 private ModuleSurfaceArea msa
= null;
84 private PackageDependencies pd
= null;
86 private PackageDependenciesIdentification pdid
= null;
88 private PackageDependenciesVector vid
= new PackageDependenciesVector();
90 private WorkspaceTools wt
= new WorkspaceTools();
92 private Vector
<PackageIdentification
> vPackage
= wt
.getAllPackages();
94 private IDefaultTableModel model
= null;
96 private int selectedRow
= -1;
99 This method initializes jButtonAdd
101 @return javax.swing.JButton jButtonAdd
104 private JButton
getJButtonAdd() {
105 if (jButtonAdd
== null) {
106 jButtonAdd
= new JButton();
107 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 445, 80, 20));
108 jButtonAdd
.setText("Add");
109 jButtonAdd
.addActionListener(this);
110 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
116 This method initializes jButtonRemove
118 @return javax.swing.JButton jButtonRemove
121 private JButton
getJButtonRemove() {
122 if (jButtonRemove
== null) {
123 jButtonRemove
= new JButton();
124 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 445, 80, 20));
125 jButtonRemove
.setText("Remove");
126 jButtonRemove
.addActionListener(this);
127 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
129 return jButtonRemove
;
133 This method initializes jButtonUpdate
135 @return javax.swing.JButton jButtonUpdate
138 private JButton
getJButtonUpdate() {
139 if (jButtonUpdate
== null) {
140 jButtonUpdate
= new JButton();
141 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 445, 80, 20));
142 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
143 jButtonUpdate
.setText("Edit");
144 jButtonUpdate
.addActionListener(this);
146 return jButtonUpdate
;
150 This method initializes jScrollPane
152 @return javax.swing.JScrollPane
154 private JScrollPane
getJScrollPane() {
155 if (jScrollPane
== null) {
156 jScrollPane
= new JScrollPane();
157 jScrollPane
.setViewportView(getJContentPane());
163 This method initializes jScrollPaneTable
165 @return javax.swing.JScrollPane
167 private JScrollPane
getJScrollPaneTable() {
168 if (jScrollPaneTable
== null) {
169 jScrollPaneTable
= new JScrollPane();
170 jScrollPaneTable
.setBounds(new java
.awt
.Rectangle(15, 10, 470, 420));
171 jScrollPaneTable
.setPreferredSize(new Dimension(470, 420));
172 jScrollPaneTable
.setViewportView(getJTable());
174 return jScrollPaneTable
;
178 This method initializes jTable
180 @return javax.swing.JTable
182 private JTable
getJTable() {
183 if (jTable
== null) {
184 jTable
= new JTable();
185 model
= new IDefaultTableModel();
186 jTable
= new JTable(model
);
187 jTable
.setRowHeight(20);
189 model
.addColumn("Package Name");
190 model
.addColumn("Package Version");
192 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
193 jTable
.getSelectionModel().addListSelectionListener(this);
194 jTable
.getModel().addTableModelListener(this);
195 jTable
.addMouseListener(this);
200 public static void main(String
[] args
) {
205 This is the default constructor
208 public ModulePackageDependencies() {
211 this.setVisible(true);
215 This is the override edit constructor
220 public ModulePackageDependencies(OpeningModuleType inOmt
) {
223 this.msa
= omt
.getXmlMsa();
224 init(msa
.getPackageDependencies());
225 this.setVisible(true);
229 This method initializes this
232 private void init() {
233 this.setSize(500, 515);
234 this.setContentPane(getJScrollPane());
235 this.setTitle("Package Dependencies");
239 This method initializes this
240 Fill values to all fields if these values are not empty
242 @param inPackageDependencies
245 private void init(PackageDependencies inPackageDependencies
) {
247 this.pd
= inPackageDependencies
;
249 if (this.pd
!= null) {
250 if (this.pd
.getPackageList().size() > 0) {
251 for (int index
= 0; index
< this.pd
.getPackageList().size(); index
++) {
253 String arg1
= pd
.getPackageList().get(index
).getPackageVersion();
254 String arg2
= pd
.getPackageList().get(index
).getPackageGuid();
256 // If no guid, skip current item
261 for (int indexJ
= 0; indexJ
< this.vPackage
.size(); indexJ
++) {
262 if (vPackage
.get(indexJ
).getGuid().equals(arg2
)) {
263 arg0
= vPackage
.get(indexJ
).getName();
266 String arg3
= pd
.getPackageList().get(index
).getFeatureFlag();
267 Vector
<String
> arg4
= Tools
.convertListToVector(pd
.getPackageList().get(index
).getSupArchList());
268 pdid
= new PackageDependenciesIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
269 vid
.addPackageDependencies(pdid
);
277 This method initializes jContentPane
279 @return javax.swing.JPanel jContentPane
282 private JPanel
getJContentPane() {
283 if (jContentPane
== null) {
284 jContentPane
= new JPanel();
285 jContentPane
.setLayout(null);
286 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
288 jContentPane
.add(getJButtonAdd(), null);
289 jContentPane
.add(getJButtonRemove(), null);
290 jContentPane
.add(getJButtonUpdate(), null);
291 jContentPane
.add(getJScrollPaneTable(), null);
296 private void showEdit(int index
) {
297 PackageDepDlg pdd
= new PackageDepDlg(vid
.getPackageDependencies(index
), new IFrame());
298 int result
= pdd
.showDialog();
299 if (result
== DataType
.RETURN_TYPE_OK
) {
301 this.vid
.addPackageDependencies(pdd
.getPdid());
303 this.vid
.setPackageDependencies(pdd
.getPdid(), index
);
309 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
318 private void clearAll() {
320 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
321 model
.removeRow(index
);
327 Read content of vector and put then into table
330 private void showTable() {
333 if (vid
.size() > 0) {
334 for (int index
= 0; index
< vid
.size(); index
++) {
335 model
.addRow(vid
.toStringVector(index
));
338 this.jTable
.repaint();
339 this.jTable
.updateUI();
340 //this.jScrollPane.setViewportView(this.jTable);
344 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
346 * Override actionPerformed to listen all actions
349 public void actionPerformed(ActionEvent arg0
) {
350 if (arg0
.getSource() == jButtonAdd
) {
353 if (arg0
.getSource() == jButtonUpdate
) {
354 if (this.selectedRow
< 0) {
355 Log
.err("Please select one record first.");
358 showEdit(selectedRow
);
361 if (arg0
.getSource() == jButtonRemove
) {
362 if (jTable
.isEditing()) {
363 jTable
.getCellEditor().stopCellEditing();
365 if (selectedRow
> -1) {
366 this.model
.removeRow(selectedRow
);
367 this.vid
.removePackageDependencies(selectedRow
);
375 Save all components of Includes
376 if exists includes, set the value directly
377 if not exists includes, new an instance first
385 int count
= this.vid
.size();
387 this.pd
= PackageDependencies
.Factory
.newInstance();
389 for (int index
= 0; index
< count
; index
++) {
390 Package p
= Package
.Factory
.newInstance();
392 if (!isEmpty(vid
.getPackageDependencies(index
).getVersion())) {
393 p
.setPackageVersion(vid
.getPackageDependencies(index
).getVersion());
395 if (!isEmpty(vid
.getPackageDependencies(index
).getGuid())) {
396 p
.setPackageGuid(vid
.getPackageDependencies(index
).getGuid());
398 if (!isEmpty(vid
.getPackageDependencies(index
).getFeatureFlag())) {
399 p
.setFeatureFlag(vid
.getPackageDependencies(index
).getFeatureFlag());
401 if (vid
.getPackageDependencies(index
).getSupArchList() != null
402 && vid
.getPackageDependencies(index
).getSupArchList().size() > 0) {
403 p
.setSupArchList(vid
.getPackageDependencies(index
).getSupArchList());
406 this.pd
.addNewPackage();
407 this.pd
.setPackageArray(index
, p
);
410 this.msa
.setPackageDependencies(pd
);
411 this.omt
.setSaved(false);
412 } catch (Exception e
) {
414 Log
.err("Update Package Dependencies", e
.getMessage());
419 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
422 public void valueChanged(ListSelectionEvent arg0
) {
423 if (arg0
.getValueIsAdjusting()) {
426 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
427 if (lsm
.isSelectionEmpty()) {
430 selectedRow
= lsm
.getMinSelectionIndex();
435 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
438 public void mouseClicked(MouseEvent arg0
) {
439 if (arg0
.getClickCount() == 2) {
440 if (this.selectedRow
< 0) {
443 showEdit(selectedRow
);
449 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
451 * Override componentResized to resize all components when frame's size is changed
453 public void componentResized(ComponentEvent arg0
) {
454 int intCurrentWidth
= this.getJContentPane().getWidth();
455 int intCurrentHeight
= this.getJContentPane().getHeight();
456 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
457 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
459 resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
460 relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
,
461 DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
, DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
462 relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
,
463 DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
, DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
464 relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
,
465 DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
, DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);