3 The file is used to create, update PCD 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
.PcdCodedDocument
;
31 import org
.tianocore
.PcdItemTypes
;
32 import org
.tianocore
.PcdUsage
;
33 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
34 import org
.tianocore
.PcdCodedDocument
.PcdCoded
;
35 import org
.tianocore
.PcdCodedDocument
.PcdCoded
.PcdEntry
;
36 import org
.tianocore
.frameworkwizard
.common
.DataType
;
37 import org
.tianocore
.frameworkwizard
.common
.IDefaultTableModel
;
38 import org
.tianocore
.frameworkwizard
.common
.Log
;
39 import org
.tianocore
.frameworkwizard
.common
.Tools
;
40 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
41 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
42 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
43 import org
.tianocore
.frameworkwizard
.module
.Identifications
.PcdCoded
.PcdCodedIdentification
;
44 import org
.tianocore
.frameworkwizard
.module
.Identifications
.PcdCoded
.PcdCodedVector
;
45 import org
.tianocore
.frameworkwizard
.module
.ui
.dialog
.PCDsDlg
;
48 The class is used to create, update PCD of MSA/MBD file
49 It extends IInternalFrame
54 public class ModulePCDs
extends IInternalFrame
{
57 /// Define class Serial Version UID
59 private static final long serialVersionUID
= 2227717658188438696L;
62 //Define class members
64 private JPanel jContentPane
= null;
66 private JButton jButtonAdd
= null;
68 private JButton jButtonRemove
= null;
70 private JButton jButtonUpdate
= null;
72 private JScrollPane jScrollPane
= null;
74 private JScrollPane jScrollPaneTable
= null;
76 private JTable jTable
= null;
81 private OpeningModuleType omt
= null;
83 private ModuleSurfaceArea msa
= null;
85 private PcdCodedDocument
.PcdCoded pcds
= null;
87 private PcdCodedIdentification id
= null;
89 private PcdCodedVector vid
= new PcdCodedVector();
91 private IDefaultTableModel model
= null;
93 private int selectedRow
= -1;
95 private IFrame parentFrame
= null;
98 This method initializes jButtonAdd
100 @return javax.swing.JButton jButtonAdd
103 private JButton
getJButtonAdd() {
104 if (jButtonAdd
== null) {
105 jButtonAdd
= new JButton();
106 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 245, 90, 20));
107 jButtonAdd
.setText("Add");
108 jButtonAdd
.addActionListener(this);
109 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(90, 20));
115 This method initializes jButtonRemove
117 @return javax.swing.JButton jButtonRemove
120 private JButton
getJButtonRemove() {
121 if (jButtonRemove
== null) {
122 jButtonRemove
= new JButton();
123 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 245, 90, 20));
124 jButtonRemove
.setText("Remove");
125 jButtonRemove
.addActionListener(this);
126 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(90, 20));
128 return jButtonRemove
;
132 This method initializes jButtonUpdate
134 @return javax.swing.JButton jButtonUpdate
137 private JButton
getJButtonUpdate() {
138 if (jButtonUpdate
== null) {
139 jButtonUpdate
= new JButton();
140 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 245, 90, 20));
141 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(90, 20));
142 jButtonUpdate
.setText("Edit");
143 jButtonUpdate
.addActionListener(this);
145 return jButtonUpdate
;
149 This method initializes jScrollPane
151 @return javax.swing.JScrollPane
153 private JScrollPane
getJScrollPane() {
154 if (jScrollPane
== null) {
155 jScrollPane
= new JScrollPane();
156 jScrollPane
.setViewportView(getJContentPane());
162 This method initializes jScrollPaneTable
164 @return javax.swing.JScrollPane
166 private JScrollPane
getJScrollPaneTable() {
167 if (jScrollPaneTable
== null) {
168 jScrollPaneTable
= new JScrollPane();
169 jScrollPaneTable
.setBounds(new java
.awt
.Rectangle(15, 10, 470, 420));
170 jScrollPaneTable
.setPreferredSize(new Dimension(470, 420));
171 jScrollPaneTable
.setViewportView(getJTable());
173 return jScrollPaneTable
;
177 This method initializes jTable
179 @return javax.swing.JTable
181 private JTable
getJTable() {
182 if (jTable
== null) {
183 jTable
= new JTable();
184 model
= new IDefaultTableModel();
185 jTable
= new JTable(model
);
186 jTable
.setRowHeight(20);
188 model
.addColumn("Name");
189 model
.addColumn("Type");
190 model
.addColumn("Value");
191 model
.addColumn("Usage");
193 jTable
.setSelectionMode(ListSelectionModel
.MULTIPLE_INTERVAL_SELECTION
);
194 jTable
.getSelectionModel().addListSelectionListener(this);
195 jTable
.getModel().addTableModelListener(this);
196 jTable
.addMouseListener(this);
201 public static void main(String
[] args
) {
206 This method initializes this
209 private void init() {
210 this.setSize(500, 515);
211 this.setContentPane(getJScrollPane());
212 this.setTitle("Pcd Coded");
216 This method initializes this
217 Fill values to all fields if these values are not empty
219 @param inPackageDependencies
222 private void init(PcdCoded inPcdCodeds
) {
224 this.pcds
= inPcdCodeds
;
226 if (this.pcds
!= null) {
227 if (this.pcds
.getPcdEntryList().size() > 0) {
228 for (int index
= 0; index
< this.pcds
.getPcdEntryList().size(); index
++) {
229 String arg0
= pcds
.getPcdEntryList().get(index
).getCName();
230 String arg1
= pcds
.getPcdEntryList().get(index
).getTokenSpaceGuidCName();
232 String arg2
= pcds
.getPcdEntryList().get(index
).getFeatureFlag();
233 Vector
<String
> arg3
= Tools
.convertListToVector(pcds
.getPcdEntryList().get(index
).getSupArchList());
235 String arg4
= pcds
.getPcdEntryList().get(index
).getDefaultValue();
236 String arg5
= pcds
.getPcdEntryList().get(index
).getHelpText();
238 if (pcds
.getPcdEntryList().get(index
).getPcdItemType() != null) {
239 arg6
= pcds
.getPcdEntryList().get(index
).getPcdItemType().toString();
242 if (pcds
.getPcdEntryList().get(index
).getUsage() != null) {
243 arg7
= pcds
.getPcdEntryList().get(index
).getUsage().toString();
245 id
= new PcdCodedIdentification(arg0
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
, arg7
);
254 This is the default constructor
257 public ModulePCDs() {
260 this.setVisible(true);
264 This is the override edit constructor
266 @param inPcds The input data of PCDsDocument.PCDs
269 public ModulePCDs(OpeningModuleType inOmt
, IFrame iFrame
) {
272 this.msa
= omt
.getXmlMsa();
273 this.parentFrame
= iFrame
;
274 init(msa
.getPcdCoded());
275 this.setVisible(true);
279 This method initializes jContentPane
281 @return javax.swing.JPanel jContentPane
284 private JPanel
getJContentPane() {
285 if (jContentPane
== null) {
286 jContentPane
= new JPanel();
287 jContentPane
.setLayout(null);
288 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
290 jContentPane
.add(getJButtonAdd(), null);
291 jContentPane
.add(getJButtonRemove(), null);
292 jContentPane
.add(getJButtonUpdate(), null);
293 jContentPane
.add(getJScrollPaneTable(), null);
298 private void showEdit(int index
) {
299 PCDsDlg dlg
= new PCDsDlg(vid
.getPcdCoded(index
), this.parentFrame
, omt
.getId());
300 int result
= dlg
.showDialog();
301 if (result
== DataType
.RETURN_TYPE_OK
) {
303 this.vid
.addPcdCoded(dlg
.getId());
305 this.vid
.setPcdCoded(dlg
.getId(), index
);
311 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
320 private void clearAll() {
322 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
323 model
.removeRow(index
);
329 Read content of vector and put then into table
332 private void showTable() {
335 if (vid
.size() > 0) {
336 for (int index
= 0; index
< vid
.size(); index
++) {
337 model
.addRow(vid
.toStringVector(index
));
340 this.jTable
.repaint();
341 this.jTable
.updateUI();
345 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
347 * Override actionPerformed to listen all actions
350 public void actionPerformed(ActionEvent arg0
) {
351 if (arg0
.getSource() == jButtonAdd
) {
354 if (arg0
.getSource() == jButtonUpdate
) {
355 if (this.selectedRow
< 0) {
356 Log
.wrn("Update PcdCoded", "Please select one record first.");
359 showEdit(selectedRow
);
362 if (arg0
.getSource() == jButtonRemove
) {
363 if (jTable
.isEditing()) {
364 jTable
.getCellEditor().stopCellEditing();
367 int selectedRows
[] = this.jTable
.getSelectedRows();
369 if (selectedRows
!= null) {
370 for (int index
= selectedRows
.length
- 1; index
> -1; index
--) {
371 this.model
.removeRow(selectedRows
[index
]);
372 this.vid
.removePcdCoded(selectedRows
[index
]);
381 Save all components of PCDs
382 if exists pcds, set the value directly
383 if not exists pcds, new an instance first
388 int count
= this.vid
.size();
390 this.pcds
= PcdCoded
.Factory
.newInstance();
392 for (int index
= 0; index
< count
; index
++) {
393 PcdEntry p
= PcdEntry
.Factory
.newInstance();
394 if (!isEmpty(vid
.getPcdCoded(index
).getName())) {
395 p
.setCName(vid
.getPcdCoded(index
).getName());
397 if (!isEmpty(vid
.getPcdCoded(index
).getGuid())) {
398 p
.setTokenSpaceGuidCName(vid
.getPcdCoded(index
).getGuid());
400 if (!isEmpty(vid
.getPcdCoded(index
).getFeatureFlag())) {
401 p
.setFeatureFlag(vid
.getPcdCoded(index
).getFeatureFlag());
403 if (vid
.getPcdCoded(index
).getSupArchList() != null
404 && vid
.getPcdCoded(index
).getSupArchList().size() > 0) {
405 p
.setSupArchList(vid
.getPcdCoded(index
).getSupArchList());
407 if (!isEmpty(vid
.getPcdCoded(index
).getValue())) {
408 p
.setDefaultValue(vid
.getPcdCoded(index
).getValue());
410 if (!isEmpty(vid
.getPcdCoded(index
).getHelp())) {
411 p
.setHelpText(vid
.getPcdCoded(index
).getHelp());
413 if (!isEmpty(vid
.getPcdCoded(index
).getType())) {
414 p
.setPcdItemType(PcdItemTypes
.Enum
.forString(vid
.getPcdCoded(index
).getType()));
416 if (!isEmpty(vid
.getPcdCoded(index
).getUsage())) {
417 p
.setUsage(PcdUsage
.Enum
.forString(vid
.getPcdCoded(index
).getUsage()));
419 this.pcds
.addNewPcdEntry();
420 this.pcds
.setPcdEntryArray(pcds
.getPcdEntryList().size() - 1, p
);
424 this.msa
.setPcdCoded(pcds
);
425 this.omt
.setSaved(false);
426 } catch (Exception e
) {
427 Log
.wrn("Update PcdCoded", e
.getMessage());
428 Log
.err("Update PcdCoded", e
.getMessage());
433 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
436 public void valueChanged(ListSelectionEvent arg0
) {
437 if (arg0
.getValueIsAdjusting()) {
440 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
441 if (lsm
.isSelectionEmpty()) {
444 selectedRow
= lsm
.getMinSelectionIndex();
449 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
452 public void mouseClicked(MouseEvent arg0
) {
453 if (arg0
.getClickCount() == 2) {
454 if (this.selectedRow
< 0) {
457 showEdit(selectedRow
);
463 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
465 * Override componentResized to resize all components when frame's size is changed
467 public void componentResized(ComponentEvent arg0
) {
468 int intCurrentWidth
= this.getJContentPane().getWidth();
469 int intCurrentHeight
= this.getJContentPane().getHeight();
470 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
471 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
473 Tools
.resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
475 Tools
.relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
476 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
,
477 DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
478 Tools
.relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
479 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
,
480 DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
481 Tools
.relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
482 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
,
483 DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);