3 The file is used to create, update DataHub 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
.ItemListener
;
21 import java
.awt
.event
.MouseEvent
;
22 import java
.util
.Vector
;
24 import javax
.swing
.JButton
;
25 import javax
.swing
.JPanel
;
26 import javax
.swing
.JScrollPane
;
27 import javax
.swing
.JTable
;
28 import javax
.swing
.ListSelectionModel
;
29 import javax
.swing
.event
.ListSelectionEvent
;
31 import org
.tianocore
.ExternsDocument
;
32 import org
.tianocore
.PcdDriverTypes
;
33 import org
.tianocore
.ExternsDocument
.Externs
;
34 import org
.tianocore
.ExternsDocument
.Externs
.Extern
;
35 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
36 import org
.tianocore
.frameworkwizard
.common
.DataType
;
37 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
38 import org
.tianocore
.frameworkwizard
.common
.IDefaultTableModel
;
39 import org
.tianocore
.frameworkwizard
.common
.Log
;
40 import org
.tianocore
.frameworkwizard
.common
.Tools
;
41 import org
.tianocore
.frameworkwizard
.common
.Identifications
.OpeningModuleType
;
42 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
44 import org
.tianocore
.frameworkwizard
.module
.Identifications
.Externs
.ExternsIdentification
;
45 import org
.tianocore
.frameworkwizard
.module
.Identifications
.Externs
.ExternsVector
;
46 import org
.tianocore
.frameworkwizard
.module
.ui
.dialog
.ExternsDlg
;
49 The class is used to create, update DataHub of MSA/MBD file
50 It extends IInternalFrame
55 public class ModuleExterns
extends IInternalFrame
implements ItemListener
{
58 /// Define class Serial Version UID
60 private static final long serialVersionUID
= -7382008402932047191L;
63 //Define class members
65 private JPanel jContentPane
= null;
67 private JButton jButtonAdd
= null;
69 private JButton jButtonRemove
= null;
71 private JButton jButtonUpdate
= null;
73 private JScrollPane jScrollPane
= null;
75 private JScrollPane jScrollPaneTable
= null;
77 private JTable jTable
= null;
82 private OpeningModuleType omt
= null;
84 private ModuleSurfaceArea msa
= null;
86 private ExternsDocument
.Externs externs
= null;
88 private ExternsIdentification id
= null;
90 private ExternsVector vid
= new ExternsVector();
92 private IDefaultTableModel model
= null;
94 private int selectedRow
= -1;
97 This method initializes jButtonAdd
99 @return javax.swing.JButton jButtonAdd
102 private JButton
getJButtonAdd() {
103 if (jButtonAdd
== null) {
104 jButtonAdd
= new JButton();
105 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 80, 20));
106 jButtonAdd
.setText("Add");
107 jButtonAdd
.addActionListener(this);
108 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
114 This method initializes jButtonRemove
116 @return javax.swing.JButton jButtonRemove
119 private JButton
getJButtonRemove() {
120 if (jButtonRemove
== null) {
121 jButtonRemove
= new JButton();
122 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 80, 20));
123 jButtonRemove
.setText("Remove");
124 jButtonRemove
.addActionListener(this);
125 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
127 return jButtonRemove
;
131 This method initializes jButtonUpdate
133 @return javax.swing.JButton jButtonUpdate
136 private JButton
getJButtonUpdate() {
137 if (jButtonUpdate
== null) {
138 jButtonUpdate
= new JButton();
139 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 80, 20));
140 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
141 jButtonUpdate
.setText("Edit");
142 jButtonUpdate
.addActionListener(this);
144 return jButtonUpdate
;
148 This method initializes jScrollPane
150 @return javax.swing.JScrollPane
152 private JScrollPane
getJScrollPane() {
153 if (jScrollPane
== null) {
154 jScrollPane
= new JScrollPane();
155 jScrollPane
.setViewportView(getJContentPane());
161 This method initializes jScrollPaneTable
163 @return javax.swing.JScrollPane
165 private JScrollPane
getJScrollPaneTable() {
166 if (jScrollPaneTable
== null) {
167 jScrollPaneTable
= new JScrollPane();
168 jScrollPaneTable
.setBounds(new java
.awt
.Rectangle(15, 10, 470, 420));
169 jScrollPaneTable
.setPreferredSize(new Dimension(470, 420));
170 jScrollPaneTable
.setViewportView(getJTable());
172 return jScrollPaneTable
;
176 This method initializes jTable
178 @return javax.swing.JTable
180 private JTable
getJTable() {
181 if (jTable
== null) {
182 jTable
= new JTable();
183 model
= new IDefaultTableModel();
184 jTable
= new JTable(model
);
185 jTable
.setRowHeight(20);
187 model
.addColumn("Name");
188 model
.addColumn("Type");
190 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
191 jTable
.getSelectionModel().addListSelectionListener(this);
192 jTable
.getModel().addTableModelListener(this);
193 jTable
.addMouseListener(this);
198 public static void main(String
[] args
) {
203 This method initializes this
206 private void init() {
207 this.setSize(500, 515);
208 this.setContentPane(getJScrollPane());
209 this.setTitle("Externs");
213 This method initializes this
214 Fill values to all fields if these values are not empty
216 @param inPackageDependencies
219 private void init(Externs inExterns
) {
221 this.externs
= inExterns
;
223 if (this.externs
!= null) {
227 if (this.externs
.getPcdIsDriver() != null) {
228 String arg0
= this.externs
.getPcdIsDriver().toString();
229 String arg1
= EnumerationData
.EXTERNS_PCD_IS_DRIVER
;
231 id
= new ExternsIdentification(arg0
, arg1
, null, null);
238 if (this.externs
.getSpecificationList().size() > 0) {
239 for (int index
= 0; index
< this.externs
.getSpecificationList().size(); index
++) {
240 String arg0
= externs
.getSpecificationList().get(index
);
241 String arg1
= EnumerationData
.EXTERNS_SPECIFICATION
;
243 id
= new ExternsIdentification(arg0
, arg1
, null, null);
251 if (this.externs
.getExternList().size() > 0) {
252 for (int index
= 0; index
< this.externs
.getExternList().size(); index
++) {
255 if (this.externs
.getExternList().get(index
).getModuleEntryPoint() != null) {
256 arg0
= this.externs
.getExternList().get(index
).getModuleEntryPoint();
257 arg1
= EnumerationData
.EXTERNS_MODULE_ENTRY_POINT
;
259 if (this.externs
.getExternList().get(index
).getModuleUnloadImage() != null) {
260 arg0
= this.externs
.getExternList().get(index
).getModuleUnloadImage();
261 arg1
= EnumerationData
.EXTERNS_MODULE_UNLOAD_IMAGE
;
264 if (this.externs
.getExternList().get(index
).getConstructor() != null) {
265 arg0
= this.externs
.getExternList().get(index
).getConstructor();
266 arg1
= EnumerationData
.EXTERNS_CONSTRUCTOR
;
268 if (this.externs
.getExternList().get(index
).getDestructor() != null) {
269 arg0
= this.externs
.getExternList().get(index
).getDestructor();
270 arg1
= EnumerationData
.EXTERNS_DESTRUCTOR
;
273 if (this.externs
.getExternList().get(index
).getDriverBinding() != null) {
274 arg0
= this.externs
.getExternList().get(index
).getDriverBinding();
275 arg1
= EnumerationData
.EXTERNS_DRIVER_BINDING
;
277 if (this.externs
.getExternList().get(index
).getComponentName() != null) {
278 arg0
= this.externs
.getExternList().get(index
).getComponentName();
279 arg1
= EnumerationData
.EXTERNS_COMPONENT_NAME
;
281 if (this.externs
.getExternList().get(index
).getDriverConfig() != null) {
282 arg0
= this.externs
.getExternList().get(index
).getDriverConfig();
283 arg1
= EnumerationData
.EXTERNS_DRIVER_CONFIG
;
285 if (this.externs
.getExternList().get(index
).getDriverDiag() != null) {
286 arg0
= this.externs
.getExternList().get(index
).getDriverDiag();
287 arg1
= EnumerationData
.EXTERNS_DRIVER_DIAG
;
290 if (this.externs
.getExternList().get(index
).getSetVirtualAddressMapCallBack() != null) {
291 arg0
= this.externs
.getExternList().get(index
).getSetVirtualAddressMapCallBack();
292 arg1
= EnumerationData
.EXTERNS_SET_VIRTUAL_ADDRESS_MAP_CALL_BACK
;
294 if (this.externs
.getExternList().get(index
).getExitBootServicesCallBack() != null) {
295 arg0
= this.externs
.getExternList().get(index
).getExitBootServicesCallBack();
296 arg1
= EnumerationData
.EXTERNS_EXIT_BOOT_SERVICES_CALL_BACK
;
299 String arg2
= externs
.getExternList().get(index
).getFeatureFlag();
300 Vector
<String
> arg3
= Tools
301 .convertListToVector(externs
.getExternList().get(index
).getSupArchList());
303 id
= new ExternsIdentification(arg0
, arg1
, arg2
, arg3
);
312 This is the default constructor
315 public ModuleExterns() {
318 this.setVisible(true);
322 This is the override edit constructor
324 @param inExterns The input data of ExternsDocument.Externs
327 public ModuleExterns(OpeningModuleType inOmt
) {
330 this.msa
= omt
.getXmlMsa();
331 init(msa
.getExterns());
332 this.setVisible(true);
336 This method initializes jContentPane
338 @return javax.swing.JPanel jContentPane
341 private JPanel
getJContentPane() {
342 if (jContentPane
== null) {
343 jContentPane
= new JPanel();
344 jContentPane
.setLayout(null);
345 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
347 jContentPane
.add(getJButtonAdd(), null);
348 jContentPane
.add(getJButtonRemove(), null);
349 jContentPane
.add(getJButtonUpdate(), null);
350 jContentPane
.add(getJScrollPaneTable(), null);
355 private void showEdit(int index
) {
356 ExternsDlg dlg
= new ExternsDlg(vid
.getExterns(index
), new IFrame());
357 int result
= dlg
.showDialog();
358 if (result
== DataType
.RETURN_TYPE_OK
) {
360 this.vid
.addExterns(dlg
.getId());
362 this.vid
.setExterns(dlg
.getId(), index
);
368 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
377 private void clearAll() {
379 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
380 model
.removeRow(index
);
386 Read content of vector and put then into table
389 private void showTable() {
392 if (vid
.size() > 0) {
393 for (int index
= 0; index
< vid
.size(); index
++) {
394 model
.addRow(vid
.toStringVector(index
));
397 this.jTable
.repaint();
398 this.jTable
.updateUI();
402 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
404 * Override actionPerformed to listen all actions
407 public void actionPerformed(ActionEvent arg0
) {
408 if (arg0
.getSource() == jButtonAdd
) {
411 if (arg0
.getSource() == jButtonUpdate
) {
412 if (this.selectedRow
< 0) {
413 Log
.err("Please select one record first.");
416 showEdit(selectedRow
);
419 if (arg0
.getSource() == jButtonRemove
) {
420 if (jTable
.isEditing()) {
421 jTable
.getCellEditor().stopCellEditing();
423 if (selectedRow
> -1) {
424 this.model
.removeRow(selectedRow
);
425 this.vid
.removeExterns(selectedRow
);
433 Save all components of Externs
434 if exists externs, set the value directly
435 if not exists externs, new an instance first
440 int count
= this.vid
.size();
442 this.externs
= Externs
.Factory
.newInstance();
444 // // Save PcdIsDriver first
446 // if (!this.jComboBoxPcdIsDriver.getSelectedItem().toString().equals(DataType.EMPTY_SELECT_ITEM)) {
447 // externs.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getSelectedItem()
452 for (int index
= 0; index
< count
; index
++) {
454 // Save Pcd Is Driver
456 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_PCD_IS_DRIVER
)) {
457 externs
.setPcdIsDriver(PcdDriverTypes
.Enum
.forString(vid
.getExterns(index
).getName()));
464 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_SPECIFICATION
)) {
465 if (!isEmpty(vid
.getExterns(index
).getName())) {
466 this.externs
.addNewSpecification();
467 this.externs
.setSpecificationArray(externs
.getSpecificationList().size() - 1,
468 vid
.getExterns(index
).getName());
474 Extern e
= Extern
.Factory
.newInstance();
476 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_MODULE_ENTRY_POINT
)) {
477 if (!isEmpty(vid
.getExterns(index
).getName())) {
478 e
.setModuleEntryPoint(vid
.getExterns(index
).getName());
481 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_MODULE_UNLOAD_IMAGE
)) {
482 if (!isEmpty(vid
.getExterns(index
).getName())) {
483 e
.setModuleUnloadImage(vid
.getExterns(index
).getName());
487 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_CONSTRUCTOR
)) {
488 if (!isEmpty(vid
.getExterns(index
).getName())) {
489 e
.setConstructor(vid
.getExterns(index
).getName());
492 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DESTRUCTOR
)) {
493 if (!isEmpty(vid
.getExterns(index
).getName())) {
494 e
.setDestructor(vid
.getExterns(index
).getName());
498 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER_BINDING
)) {
499 if (!isEmpty(vid
.getExterns(index
).getName())) {
500 e
.setDriverBinding(vid
.getExterns(index
).getName());
503 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_COMPONENT_NAME
)) {
504 if (!isEmpty(vid
.getExterns(index
).getName())) {
505 e
.setComponentName(vid
.getExterns(index
).getName());
508 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER_CONFIG
)) {
509 if (!isEmpty(vid
.getExterns(index
).getName())) {
510 e
.setDriverConfig(vid
.getExterns(index
).getName());
513 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER_DIAG
)) {
514 if (!isEmpty(vid
.getExterns(index
).getName())) {
515 e
.setDriverDiag(vid
.getExterns(index
).getName());
519 if (vid
.getExterns(index
).getType()
520 .equals(EnumerationData
.EXTERNS_SET_VIRTUAL_ADDRESS_MAP_CALL_BACK
)) {
521 if (!isEmpty(vid
.getExterns(index
).getName())) {
522 e
.setSetVirtualAddressMapCallBack(vid
.getExterns(index
).getName());
525 if (vid
.getExterns(index
).getType()
526 .equals(EnumerationData
.EXTERNS_EXIT_BOOT_SERVICES_CALL_BACK
)) {
527 if (!isEmpty(vid
.getExterns(index
).getName())) {
528 e
.setExitBootServicesCallBack(vid
.getExterns(index
).getName());
532 if (!isEmpty(vid
.getExterns(index
).getFeatureFlag())) {
533 e
.setFeatureFlag(vid
.getExterns(index
).getFeatureFlag());
535 if (vid
.getExterns(index
).getSupArchList() != null
536 && vid
.getExterns(index
).getSupArchList().size() > 0) {
537 e
.setSupArchList(vid
.getExterns(index
).getSupArchList());
540 this.externs
.addNewExtern();
541 this.externs
.setExternArray(this.externs
.getExternList().size() - 1, e
);
546 this.msa
.setExterns(externs
);
547 this.omt
.setSaved(false);
548 } catch (Exception e
) {
549 Log
.err("Update Externs", e
.getMessage());
554 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
557 public void valueChanged(ListSelectionEvent arg0
) {
558 if (arg0
.getValueIsAdjusting()) {
561 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
562 if (lsm
.isSelectionEmpty()) {
565 selectedRow
= lsm
.getMinSelectionIndex();
570 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
573 public void mouseClicked(MouseEvent arg0
) {
574 if (arg0
.getClickCount() == 2) {
575 if (this.selectedRow
< 0) {
578 showEdit(selectedRow
);
584 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
586 * Override componentResized to resize all components when frame's size is changed
588 public void componentResized(ComponentEvent arg0
) {
589 int intCurrentWidth
= this.getJContentPane().getWidth();
590 int intCurrentHeight
= this.getJContentPane().getHeight();
591 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
592 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
594 resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
595 relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
,
596 DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
, DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
597 relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
,
598 DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
, DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
599 relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
,
600 DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
, DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);