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;
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, 195, 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, 195, 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, 195, 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("Type");
189 model
.addColumn("Name");
190 model
.addColumn("Value");
192 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
193 jTable
.getSelectionModel().addListSelectionListener(this);
194 jTable
.getModel().addTableModelListener(this);
195 jTable
.addMouseListener(this);
201 This method initializes this
204 private void init() {
205 this.setSize(500, 515);
206 this.setContentPane(getJScrollPane());
207 this.setTitle("Externs");
211 This method initializes this
212 Fill values to all fields if these values are not empty
214 @param inPackageDependencies
217 private void init(Externs inExterns
) {
219 this.externs
= inExterns
;
221 if (this.externs
!= null) {
225 if (this.externs
.getSpecificationList().size() > 0) {
226 for (int index
= 0; index
< this.externs
.getSpecificationList().size(); index
++) {
227 String arg0
= externs
.getSpecificationList().get(index
);
228 String arg1
= EnumerationData
.EXTERNS_SPECIFICATION
;
230 id
= new ExternsIdentification(arg0
, arg1
);
238 if (this.externs
.getExternList().size() > 0) {
239 for (int index
= 0; index
< this.externs
.getExternList().size(); index
++) {
243 String featureFlag
= externs
.getExternList().get(index
).getFeatureFlag();
244 Vector
<String
> arch
= Tools
245 .convertListToVector(externs
.getExternList().get(index
).getSupArchList());
250 if (this.externs
.getExternList().get(index
).getModuleEntryPoint() != null
251 || this.externs
.getExternList().get(index
).getModuleUnloadImage() != null) {
252 String moduleEntryPoint
= this.externs
.getExternList().get(index
).getModuleEntryPoint();
253 String moduleUnloadImage
= this.externs
.getExternList().get(index
).getModuleUnloadImage();
254 String type
= EnumerationData
.EXTERNS_IMAGE
;
255 id
= new ExternsIdentification(moduleEntryPoint
, moduleUnloadImage
, type
, featureFlag
, arch
);
261 if (this.externs
.getExternList().get(index
).getConstructor() != null
262 || this.externs
.getExternList().get(index
).getDestructor() != null) {
263 String constructor
= this.externs
.getExternList().get(index
).getConstructor();
264 String destructor
= this.externs
.getExternList().get(index
).getDestructor();
265 String type
= EnumerationData
.EXTERNS_LIBRARY
;
266 id
= new ExternsIdentification(constructor
, destructor
, type
, featureFlag
, arch
);
272 if (this.externs
.getExternList().get(index
).getDriverBinding() != null) {
273 String driverBinding
= this.externs
.getExternList().get(index
).getDriverBinding();
274 String componentName
= this.externs
.getExternList().get(index
).getComponentName();
275 String driverConfig
= this.externs
.getExternList().get(index
).getDriverConfig();
276 String driverDiag
= this.externs
.getExternList().get(index
).getDriverDiag();
277 String type
= EnumerationData
.EXTERNS_DRIVER
;
278 id
= new ExternsIdentification(driverBinding
, componentName
, driverConfig
, driverDiag
, type
,
283 // Get Call Back Data
285 if (this.externs
.getExternList().get(index
).getSetVirtualAddressMapCallBack() != null
286 || this.externs
.getExternList().get(index
).getExitBootServicesCallBack() != null) {
287 String virtualAddressMap
= this.externs
.getExternList().get(index
)
288 .getSetVirtualAddressMapCallBack();
289 String exitBootServices
= this.externs
.getExternList().get(index
).getExitBootServicesCallBack();
290 String type
= EnumerationData
.EXTERNS_CALL_BACK
;
291 id
= new ExternsIdentification(virtualAddressMap
, exitBootServices
, type
, featureFlag
, arch
);
305 This is the default constructor
308 public ModuleExterns() {
311 this.setVisible(true);
315 This is the override edit constructor
317 @param inExterns The input data of ExternsDocument.Externs
320 public ModuleExterns(OpeningModuleType inOmt
, IFrame iFrame
) {
323 this.msa
= omt
.getXmlMsa();
324 this.parentFrame
= iFrame
;
325 init(msa
.getExterns());
326 this.setVisible(true);
330 This method initializes jContentPane
332 @return javax.swing.JPanel jContentPane
335 private JPanel
getJContentPane() {
336 if (jContentPane
== null) {
337 jContentPane
= new JPanel();
338 jContentPane
.setLayout(null);
339 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 490));
341 jContentPane
.add(getJButtonAdd(), null);
342 jContentPane
.add(getJButtonRemove(), null);
343 jContentPane
.add(getJButtonUpdate(), null);
344 jContentPane
.add(getJScrollPaneTable(), null);
349 private void showEdit(int index
) {
350 ExternsDlg dlg
= new ExternsDlg(vid
.getExterns(index
), this.parentFrame
, omt
.getId());
351 int result
= dlg
.showDialog();
352 if (result
== DataType
.RETURN_TYPE_OK
) {
354 this.vid
.addExterns(dlg
.getId());
356 this.vid
.setExterns(dlg
.getId(), index
);
362 if (result
== DataType
.RETURN_TYPE_CANCEL
) {
371 private void clearAll() {
373 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
374 model
.removeRow(index
);
380 Read content of vector and put then into table
383 private void showTable() {
386 if (vid
.size() > 0) {
387 for (int index
= 0; index
< vid
.size(); index
++) {
393 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_SPECIFICATION
)) {
400 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_IMAGE
)) {
407 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_LIBRARY
)) {
414 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER
)) {
421 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_CALL_BACK
)) {
425 model
.addRow(vid
.toStringVector(index
));
426 jTable
.setRowHeight(index
, line
* 18);
429 this.jTable
.repaint();
430 this.jTable
.updateUI();
434 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
436 * Override actionPerformed to listen all actions
439 public void actionPerformed(ActionEvent arg0
) {
440 if (arg0
.getSource() == jButtonAdd
) {
443 if (arg0
.getSource() == jButtonUpdate
) {
444 if (this.selectedRow
< 0) {
445 Log
.wrn("Update Externs", "Please select one record first.");
448 showEdit(selectedRow
);
451 if (arg0
.getSource() == jButtonRemove
) {
452 if (jTable
.isEditing()) {
453 jTable
.getCellEditor().stopCellEditing();
455 if (selectedRow
> -1) {
456 this.model
.removeRow(selectedRow
);
457 this.vid
.removeExterns(selectedRow
);
465 Save all components of Externs
466 if exists externs, set the value directly
467 if not exists externs, new an instance first
472 int count
= this.vid
.size();
475 // Save pcd and flash map information first
477 Externs ex
= Externs
.Factory
.newInstance();
478 if (this.externs
!= null) {
479 if (this.externs
.getPcdIsDriver() != null) {
480 ex
.setPcdIsDriver(this.externs
.getPcdIsDriver());
482 if (this.externs
.getTianoR8FlashMapH()) {
483 ex
.setTianoR8FlashMapH(this.externs
.getTianoR8FlashMapH());
492 for (int index
= 0; index
< count
; index
++) {
496 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_SPECIFICATION
)) {
497 if (!isEmpty(vid
.getExterns(index
).getName0())) {
498 this.externs
.addNewSpecification();
499 this.externs
.setSpecificationArray(externs
.getSpecificationList().size() - 1,
500 vid
.getExterns(index
).getName0());
505 Extern e
= Extern
.Factory
.newInstance();
509 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_IMAGE
)) {
510 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())) {
511 e
= Extern
.Factory
.newInstance();
512 if (!isEmpty(vid
.getExterns(index
).getName0())) {
513 e
.setModuleEntryPoint(vid
.getExterns(index
).getName0());
515 if (!isEmpty(vid
.getExterns(index
).getName1())) {
516 e
.setModuleUnloadImage(vid
.getExterns(index
).getName1());
524 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_LIBRARY
)) {
525 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())) {
526 e
= Extern
.Factory
.newInstance();
527 if (!isEmpty(vid
.getExterns(index
).getName0())) {
528 e
.setConstructor(vid
.getExterns(index
).getName0());
530 if (!isEmpty(vid
.getExterns(index
).getName1())) {
531 e
.setDestructor(vid
.getExterns(index
).getName1());
539 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_CALL_BACK
)) {
540 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())) {
541 e
= Extern
.Factory
.newInstance();
542 if (!isEmpty(vid
.getExterns(index
).getName0())) {
543 e
.setSetVirtualAddressMapCallBack(vid
.getExterns(index
).getName0());
545 if (!isEmpty(vid
.getExterns(index
).getName1())) {
546 e
.setExitBootServicesCallBack(vid
.getExterns(index
).getName1());
554 if (vid
.getExterns(index
).getType().equals(EnumerationData
.EXTERNS_DRIVER
)) {
555 if (!isEmpty(vid
.getExterns(index
).getName0()) || !isEmpty(vid
.getExterns(index
).getName1())
556 || !isEmpty(vid
.getExterns(index
).getName2()) || !isEmpty(vid
.getExterns(index
).getName3())) {
557 e
= Extern
.Factory
.newInstance();
558 if (!isEmpty(vid
.getExterns(index
).getName0())) {
559 e
.setDriverBinding(vid
.getExterns(index
).getName0());
561 if (!isEmpty(vid
.getExterns(index
).getName1())) {
562 e
.setComponentName(vid
.getExterns(index
).getName1());
564 if (!isEmpty(vid
.getExterns(index
).getName2())) {
565 e
.setDriverConfig(vid
.getExterns(index
).getName2());
567 if (!isEmpty(vid
.getExterns(index
).getName3())) {
568 e
.setDriverDiag(vid
.getExterns(index
).getName3());
576 if (!isEmpty(vid
.getExterns(index
).getFeatureFlag())) {
577 e
.setFeatureFlag(vid
.getExterns(index
).getFeatureFlag());
579 if (vid
.getExterns(index
).getSupArchList() != null
580 && vid
.getExterns(index
).getSupArchList().size() > 0) {
581 e
.setSupArchList(vid
.getExterns(index
).getSupArchList());
584 this.externs
.addNewExtern();
585 this.externs
.setExternArray(this.externs
.getExternList().size() - 1, e
);
589 this.msa
.setExterns(externs
);
590 this.omt
.setSaved(false);
591 } catch (Exception e
) {
592 Log
.wrn("Update Externs", e
.getMessage());
593 Log
.err("Update Externs", e
.getMessage());
598 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
601 public void valueChanged(ListSelectionEvent arg0
) {
602 if (arg0
.getValueIsAdjusting()) {
605 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
606 if (lsm
.isSelectionEmpty()) {
609 selectedRow
= lsm
.getMinSelectionIndex();
614 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
617 public void mouseClicked(MouseEvent arg0
) {
618 if (arg0
.getClickCount() == 2) {
619 if (this.selectedRow
< 0) {
622 showEdit(selectedRow
);
628 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
630 * Override componentResized to resize all components when frame's size is changed
632 public void componentResized(ComponentEvent arg0
) {
633 int intCurrentWidth
= this.getJContentPane().getWidth();
634 int intCurrentHeight
= this.getJContentPane().getHeight();
635 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
636 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
638 Tools
.resizeComponent(this.jScrollPaneTable
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
640 Tools
.relocateComponent(this.jButtonAdd
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
641 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
,
642 DataType
.SPACE_TO_BOTTOM_FOR_ADD_BUTTON
);
643 Tools
.relocateComponent(this.jButtonRemove
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
644 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
,
645 DataType
.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON
);
646 Tools
.relocateComponent(this.jButtonUpdate
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
,
647 intPreferredHeight
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
,
648 DataType
.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON
);