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
.ExternsDocument
.Externs
;
33 import org
.tianocore
.ExternsDocument
.Externs
.Extern
;
34 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
35 import org
.tianocore
.frameworkwizard
.common
.DataType
;
36 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
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
.Externs
.ExternsIdentification
;
44 import org
.tianocore
.frameworkwizard
.module
.Identifications
.Externs
.ExternsVector
;
45 import org
.tianocore
.frameworkwizard
.module
.ui
.dialog
.ExternsDlg
;
48 The class is used to create, update DataHub of MSA/MBD file
49 It extends IInternalFrame
54 public class ModuleExterns
extends IInternalFrame
implements ItemListener
{
57 /// Define class Serial Version UID
59 private static final long serialVersionUID
= -7382008402932047191L;
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 ExternsDocument
.Externs externs
= null;
87 private ExternsIdentification id
= null;
89 private ExternsVector vid
= new ExternsVector();
91 private IDefaultTableModel model
= null;
93 private int selectedRow
= -1;
96 This method initializes jButtonAdd
98 @return javax.swing.JButton jButtonAdd
101 private JButton
getJButtonAdd() {
102 if (jButtonAdd
== null) {
103 jButtonAdd
= new JButton();
104 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 90, 20));
105 jButtonAdd
.setText("Add");
106 jButtonAdd
.addActionListener(this);
107 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(90, 20));
113 This method initializes jButtonRemove
115 @return javax.swing.JButton jButtonRemove
118 private JButton
getJButtonRemove() {
119 if (jButtonRemove
== null) {
120 jButtonRemove
= new JButton();
121 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 90, 20));
122 jButtonRemove
.setText("Remove");
123 jButtonRemove
.addActionListener(this);
124 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(90, 20));
126 return jButtonRemove
;
130 This method initializes jButtonUpdate
132 @return javax.swing.JButton jButtonUpdate
135 private JButton
getJButtonUpdate() {
136 if (jButtonUpdate
== null) {
137 jButtonUpdate
= new JButton();
138 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 90, 20));
139 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(90, 20));
140 jButtonUpdate
.setText("Edit");
141 jButtonUpdate
.addActionListener(this);
143 return jButtonUpdate
;
147 This method initializes jScrollPane
149 @return javax.swing.JScrollPane
151 private JScrollPane
getJScrollPane() {
152 if (jScrollPane
== null) {
153 jScrollPane
= new JScrollPane();
154 jScrollPane
.setViewportView(getJContentPane());
160 This method initializes jScrollPaneTable
162 @return javax.swing.JScrollPane
164 private JScrollPane
getJScrollPaneTable() {
165 if (jScrollPaneTable
== null) {
166 jScrollPaneTable
= new JScrollPane();
167 jScrollPaneTable
.setBounds(new java
.awt
.Rectangle(15, 10, 470, 420));
168 jScrollPaneTable
.setPreferredSize(new Dimension(470, 420));
169 jScrollPaneTable
.setViewportView(getJTable());
171 return jScrollPaneTable
;
175 This method initializes jTable
177 @return javax.swing.JTable
179 private JTable
getJTable() {
180 if (jTable
== null) {
181 jTable
= new JTable();
182 model
= new IDefaultTableModel();
183 jTable
= new JTable(model
);
184 jTable
.setRowHeight(20);
186 model
.addColumn("Type");
187 model
.addColumn("Name");
188 model
.addColumn("Value");
190 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
191 jTable
.getSelectionModel().addListSelectionListener(this);
192 jTable
.getModel().addTableModelListener(this);
193 jTable
.addMouseListener(this);
199 This method initializes this
202 private void init() {
203 this.setSize(500, 515);
204 this.setContentPane(getJScrollPane());
205 this.setTitle("Externs");
209 This method initializes this
210 Fill values to all fields if these values are not empty
212 @param inPackageDependencies
215 private void init(Externs inExterns
) {
217 this.externs
= inExterns
;
219 if (this.externs
!= null) {
223 if (this.externs
.getSpecificationList().size() > 0) {
224 for (int index
= 0; index
< this.externs
.getSpecificationList().size(); index
++) {
225 String arg0
= externs
.getSpecificationList().get(index
);
226 String arg1
= EnumerationData
.EXTERNS_SPECIFICATION
;
228 id
= new ExternsIdentification(arg0
, arg1
);
236 if (this.externs
.getExternList().size() > 0) {
237 for (int index
= 0; index
< this.externs
.getExternList().size(); index
++) {
241 String featureFlag
= externs
.getExternList().get(index
).getFeatureFlag();
242 Vector
<String
> arch
= Tools
243 .convertListToVector(externs
.getExternList().get(index
).getSupArchList());
248 if (this.externs
.getExternList().get(index
).getModuleEntryPoint() != null
249 || this.externs
.getExternList().get(index
).getModuleUnloadImage() != null) {
250 String moduleEntryPoint
= this.externs
.getExternList().get(index
).getModuleEntryPoint();
251 String moduleUnloadImage
= this.externs
.getExternList().get(index
).getModuleUnloadImage();
252 String type
= EnumerationData
.EXTERNS_IMAGE
;
253 id
= new ExternsIdentification(moduleEntryPoint
, moduleUnloadImage
, type
, featureFlag
, arch
);
259 if (this.externs
.getExternList().get(index
).getConstructor() != null
260 || this.externs
.getExternList().get(index
).getDestructor() != null) {
261 String constructor
= this.externs
.getExternList().get(index
).getConstructor();
262 String destructor
= this.externs
.getExternList().get(index
).getDestructor();
263 String type
= EnumerationData
.EXTERNS_LIBRARY
;
264 id
= new ExternsIdentification(constructor
, destructor
, type
, featureFlag
, arch
);
270 if (this.externs
.getExternList().get(index
).getDriverBinding() != null) {
271 String driverBinding
= this.externs
.getExternList().get(index
).getDriverBinding();
272 String componentName
= this.externs
.getExternList().get(index
).getComponentName();
273 String driverConfig
= this.externs
.getExternList().get(index
).getDriverConfig();
274 String driverDiag
= this.externs
.getExternList().get(index
).getDriverDiag();
275 String type
= EnumerationData
.EXTERNS_DRIVER
;
276 id
= new ExternsIdentification(driverBinding
, componentName
, driverConfig
, driverDiag
, type
,
281 // Get Call Back Data
283 if (this.externs
.getExternList().get(index
).getSetVirtualAddressMapCallBack() != null
284 || this.externs
.getExternList().get(index
).getExitBootServicesCallBack() != null) {
285 String virtualAddressMap
= this.externs
.getExternList().get(index
)
286 .getSetVirtualAddressMapCallBack();
287 String exitBootServices
= this.externs
.getExternList().get(index
).getExitBootServicesCallBack();
288 String type
= EnumerationData
.EXTERNS_CALL_BACK
;
289 id
= new ExternsIdentification(virtualAddressMap
, exitBootServices
, type
, featureFlag
, arch
);
303 This is the default constructor
306 public ModuleExterns() {
309 this.setVisible(true);
313 This is the override edit constructor
315 @param inExterns The input data of ExternsDocument.Externs
318 public ModuleExterns(OpeningModuleType inOmt
) {
321 this.msa
= omt
.getXmlMsa();
322 init(msa
.getExterns());
323 this.setVisible(true);
327 This method initializes jContentPane
329 @return javax.swing.JPanel jContentPane
332 private JPanel
getJContentPane() {
333 if (jContentPane
== null) {
334 jContentPane
= new JPanel();
335 jContentPane
.setLayout(null);
336 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
338 jContentPane
.add(getJButtonAdd(), null);
339 jContentPane
.add(getJButtonRemove(), null);
340 jContentPane
.add(getJButtonUpdate(), null);
341 jContentPane
.add(getJScrollPaneTable(), null);
346 private void showEdit(int index
) {
347 ExternsDlg dlg
= new ExternsDlg(vid
.getExterns(index
), new IFrame(), omt
.getId());
348 int result
= dlg
.showDialog();
349 if (result
== DataType
.RETURN_TYPE_OK
) {
351 this.vid
.addExterns(dlg
.getId());
353 this.vid
.setExterns(dlg
.getId(), index
);
359 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
368 private void clearAll() {
370 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
371 model
.removeRow(index
);
377 Read content of vector and put then into table
380 private void showTable() {
383 if (vid
.size() > 0) {
384 for (int index
= 0; index
< vid
.size(); index
++) {
390 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_SPECIFICATION
)) {
397 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_IMAGE
)) {
404 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_LIBRARY
)) {
411 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER
)) {
418 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_CALL_BACK
)) {
422 model
.addRow(vid
.toStringVector(index
));
423 jTable
.setRowHeight(index
, line
* 18);
426 this.jTable
.repaint();
427 this.jTable
.updateUI();
431 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
433 * Override actionPerformed to listen all actions
436 public void actionPerformed(ActionEvent arg0
) {
437 if (arg0
.getSource() == jButtonAdd
) {
440 if (arg0
.getSource() == jButtonUpdate
) {
441 if (this.selectedRow
< 0) {
442 Log
.wrn("Update Externs", "Please select one record first.");
445 showEdit(selectedRow
);
448 if (arg0
.getSource() == jButtonRemove
) {
449 if (jTable
.isEditing()) {
450 jTable
.getCellEditor().stopCellEditing();
452 if (selectedRow
> -1) {
453 this.model
.removeRow(selectedRow
);
454 this.vid
.removeExterns(selectedRow
);
462 Save all components of Externs
463 if exists externs, set the value directly
464 if not exists externs, new an instance first
469 int count
= this.vid
.size();
472 // Save pcd and flash map information first
474 Externs ex
= Externs
.Factory
.newInstance();
475 if (this.externs
!= null) {
476 if (this.externs
.getPcdIsDriver() != null) {
477 ex
.setPcdIsDriver(this.externs
.getPcdIsDriver());
479 if (this.externs
.getTianoR8FlashMapH()) {
480 ex
.setTianoR8FlashMapH(this.externs
.getTianoR8FlashMapH());
489 for (int index
= 0; index
< count
; index
++) {
493 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_SPECIFICATION
)) {
494 if (!isEmpty(vid
.getExterns(index
).getName0())) {
495 this.externs
.addNewSpecification();
496 this.externs
.setSpecificationArray(externs
.getSpecificationList().size() - 1,
497 vid
.getExterns(index
).getName0());
502 Extern e
= Extern
.Factory
.newInstance();
506 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_IMAGE
)) {
507 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())) {
508 e
= Extern
.Factory
.newInstance();
509 if (!isEmpty(vid
.getExterns(index
).getName0())) {
510 e
.setModuleEntryPoint(vid
.getExterns(index
).getName0());
512 if (!isEmpty(vid
.getExterns(index
).getName1())) {
513 e
.setModuleUnloadImage(vid
.getExterns(index
).getName1());
521 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_LIBRARY
)) {
522 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())) {
523 e
= Extern
.Factory
.newInstance();
524 if (!isEmpty(vid
.getExterns(index
).getName0())) {
525 e
.setConstructor(vid
.getExterns(index
).getName0());
527 if (!isEmpty(vid
.getExterns(index
).getName1())) {
528 e
.setDestructor(vid
.getExterns(index
).getName1());
536 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_CALL_BACK
)) {
537 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())) {
538 e
= Extern
.Factory
.newInstance();
539 if (!isEmpty(vid
.getExterns(index
).getName0())) {
540 e
.setSetVirtualAddressMapCallBack(vid
.getExterns(index
).getName0());
542 if (!isEmpty(vid
.getExterns(index
).getName1())) {
543 e
.setExitBootServicesCallBack(vid
.getExterns(index
).getName1());
551 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER
)) {
552 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())
553 || !isEmpty(vid
.getExterns(index
).getName2()) || !isEmpty(vid
.getExterns(index
).getName3())) {
554 e
= Extern
.Factory
.newInstance();
555 if (!isEmpty(vid
.getExterns(index
).getName0())) {
556 e
.setDriverBinding(vid
.getExterns(index
).getName0());
558 if (!isEmpty(vid
.getExterns(index
).getName1())) {
559 e
.setComponentName(vid
.getExterns(index
).getName1());
561 if (!isEmpty(vid
.getExterns(index
).getName2())) {
562 e
.setDriverConfig(vid
.getExterns(index
).getName2());
564 if (!isEmpty(vid
.getExterns(index
).getName3())) {
565 e
.setDriverDiag(vid
.getExterns(index
).getName3());
573 if (!isEmpty(vid
.getExterns(index
).getFeatureFlag())) {
574 e
.setFeatureFlag(vid
.getExterns(index
).getFeatureFlag());
576 if (vid
.getExterns(index
).getSupArchList() != null
577 && vid
.getExterns(index
).getSupArchList().size() > 0) {
578 e
.setSupArchList(vid
.getExterns(index
).getSupArchList());
581 this.externs
.addNewExtern();
582 this.externs
.setExternArray(this.externs
.getExternList().size() - 1, e
);
586 this.msa
.setExterns(externs
);
587 this.omt
.setSaved(false);
588 } catch (Exception e
) {
589 Log
.wrn("Update Externs", e
.getMessage());
590 Log
.err("Update Externs", e
.getMessage());
595 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
598 public void valueChanged(ListSelectionEvent arg0
) {
599 if (arg0
.getValueIsAdjusting()) {
602 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
603 if (lsm
.isSelectionEmpty()) {
606 selectedRow
= lsm
.getMinSelectionIndex();
611 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
614 public void mouseClicked(MouseEvent arg0
) {
615 if (arg0
.getClickCount() == 2) {
616 if (this.selectedRow
< 0) {
619 showEdit(selectedRow
);
625 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
627 * Override componentResized to resize all components when frame's size is changed
629 public void componentResized(ComponentEvent arg0
) {
630 int intCurrentWidth
= this.getJContentPane().getWidth();
631 int intCurrentHeight
= this.getJContentPane().getHeight();
632 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
633 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
635 Tools
.resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
637 Tools
.relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
638 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
,
639 DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
640 Tools
.relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
641 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
,
642 DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
643 Tools
.relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
644 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
,
645 DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);