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.
16 package org
.tianocore
.frameworkwizard
.module
.ui
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ComponentEvent
;
20 import java
.awt
.event
.ItemEvent
;
21 import java
.util
.Vector
;
23 import javax
.swing
.JButton
;
24 import javax
.swing
.JComboBox
;
25 import javax
.swing
.JLabel
;
26 import javax
.swing
.JPanel
;
27 import javax
.swing
.JScrollPane
;
28 import javax
.swing
.JTextArea
;
29 import javax
.swing
.JTextField
;
31 import org
.tianocore
.DataHubUsage
;
32 import org
.tianocore
.DataHubsDocument
;
33 import org
.tianocore
.DataHubsDocument
.DataHubs
;
34 import org
.tianocore
.DataHubsDocument
.DataHubs
.DataHubRecord
;
35 import org
.tianocore
.ModuleSurfaceAreaDocument
.ModuleSurfaceArea
;
36 import org
.tianocore
.frameworkwizard
.common
.DataType
;
37 import org
.tianocore
.frameworkwizard
.common
.DataValidation
;
38 import org
.tianocore
.frameworkwizard
.common
.EnumerationData
;
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
.IInternalFrame
;
43 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
44 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
45 import org
.tianocore
.frameworkwizard
.module
.Identifications
.DataHubs
.DataHubsIdentification
;
46 import org
.tianocore
.frameworkwizard
.module
.Identifications
.DataHubs
.DataHubsVector
;
49 The class is used to create, update DataHub of MSA/MBD file
50 It extends IInternalFrame
55 public class ModuleDataHubs
extends IInternalFrame
{
58 /// Define class Serial Version UID
60 private static final long serialVersionUID
= -3667906991966638892L;
63 //Define class members
65 private JPanel jContentPane
= null;
67 private JLabel jLabelUsage
= null;
69 private JComboBox jComboBoxUsage
= null;
71 private JLabel jLabelDataHubRecord
= null;
73 private JTextField jTextFieldDataHubRecord
= null;
75 private StarLabel jStarLabel1
= null;
77 private StarLabel jStarLabel2
= null;
79 private JLabel jLabelFeatureFlag
= null;
81 private JTextField jTextFieldFeatureFlag
= null;
83 private JLabel jLabelArch
= null;
85 private JTextArea jTextAreaList
= null;
87 private JComboBox jComboBoxList
= null;
89 private JButton jButtonAdd
= null;
91 private JButton jButtonRemove
= null;
93 private JButton jButtonUpdate
= null;
95 private JScrollPane jScrollPane
= null;
97 private JScrollPane jScrollPaneList
= null;
99 private ICheckBoxList iCheckBoxListArch
= null;
101 private JScrollPane jScrollPaneArch
= null;
103 private JLabel jLabelHelpText
= null;
105 private JTextField jTextFieldHelpText
= null;
110 private int intSelectedItemId
= 0;
112 private OpeningModuleType omt
= null;
114 private ModuleSurfaceArea msa
= null;
116 private DataHubsDocument
.DataHubs dataHubs
= null;
118 private DataHubsIdentification id
= null;
120 private DataHubsVector vid
= new DataHubsVector();
122 private EnumerationData ed
= new EnumerationData();
125 This method initializes jComboBoxUsage
127 @return javax.swing.JComboBox jComboBoxUsage
130 private JComboBox
getJComboBoxUsage() {
131 if (jComboBoxUsage
== null) {
132 jComboBoxUsage
= new JComboBox();
133 jComboBoxUsage
.setBounds(new java
.awt
.Rectangle(160, 35, 320, 20));
134 jComboBoxUsage
.setPreferredSize(new java
.awt
.Dimension(320, 20));
136 return jComboBoxUsage
;
140 This method initializes jTextFieldDataHubRecord
142 @return javax.swing.JTextField jTextFieldDataHubRecord
145 private JTextField
getJTextFieldDataHubRecord() {
146 if (jTextFieldDataHubRecord
== null) {
147 jTextFieldDataHubRecord
= new JTextField();
148 jTextFieldDataHubRecord
.setBounds(new java
.awt
.Rectangle(160, 10, 320, 20));
149 jTextFieldDataHubRecord
.setPreferredSize(new java
.awt
.Dimension(320, 20));
150 jTextFieldDataHubRecord
.setToolTipText("Enter the C Name of the Data Hub Record");
152 return jTextFieldDataHubRecord
;
156 * This method initializes jTextFieldFeatureFlag
158 * @return javax.swing.JTextField
160 private JTextField
getJTextFieldFeatureFlag() {
161 if (jTextFieldFeatureFlag
== null) {
162 jTextFieldFeatureFlag
= new JTextField();
163 jTextFieldFeatureFlag
.setBounds(new java
.awt
.Rectangle(160, 85, 320, 20));
164 jTextFieldFeatureFlag
.setPreferredSize(new java
.awt
.Dimension(320, 20));
166 return jTextFieldFeatureFlag
;
170 This method initializes jComboBoxFileList
172 @return javax.swing.JComboBox jComboBoxFileList
175 private JComboBox
getJComboBoxList() {
176 if (jComboBoxList
== null) {
177 jComboBoxList
= new JComboBox();
178 jComboBoxList
.setBounds(new java
.awt
.Rectangle(15, 195, 210, 20));
179 jComboBoxList
.addItemListener(this);
180 jComboBoxList
.addActionListener(this);
181 jComboBoxList
.setPreferredSize(new java
.awt
.Dimension(210, 20));
183 return jComboBoxList
;
187 This method initializes jButtonAdd
189 @return javax.swing.JButton jButtonAdd
192 private JButton
getJButtonAdd() {
193 if (jButtonAdd
== null) {
194 jButtonAdd
= new JButton();
195 jButtonAdd
.setBounds(new java
.awt
.Rectangle(230, 195, 80, 20));
196 jButtonAdd
.setText("Add");
197 jButtonAdd
.addActionListener(this);
198 jButtonAdd
.setPreferredSize(new java
.awt
.Dimension(80, 20));
204 This method initializes jButtonRemove
206 @return javax.swing.JButton jButtonRemove
209 private JButton
getJButtonRemove() {
210 if (jButtonRemove
== null) {
211 jButtonRemove
= new JButton();
212 jButtonRemove
.setBounds(new java
.awt
.Rectangle(400, 195, 80, 20));
213 jButtonRemove
.setText("Remove");
214 jButtonRemove
.addActionListener(this);
215 jButtonRemove
.setPreferredSize(new java
.awt
.Dimension(80, 20));
217 return jButtonRemove
;
221 This method initializes jButtonUpdate
223 @return javax.swing.JButton jButtonUpdate
226 private JButton
getJButtonUpdate() {
227 if (jButtonUpdate
== null) {
228 jButtonUpdate
= new JButton();
229 jButtonUpdate
.setBounds(new java
.awt
.Rectangle(315, 195, 80, 20));
230 jButtonUpdate
.setPreferredSize(new java
.awt
.Dimension(80, 20));
231 jButtonUpdate
.setText("Update");
232 jButtonUpdate
.addActionListener(this);
234 return jButtonUpdate
;
238 * This method initializes jScrollPaneFileList
240 * @return javax.swing.JScrollPane
242 private JScrollPane
getJScrollPaneList() {
243 if (jScrollPaneList
== null) {
244 jScrollPaneList
= new JScrollPane();
245 jScrollPaneList
.setBounds(new java
.awt
.Rectangle(15, 220, 465, 240));
246 jScrollPaneList
.setViewportView(getJTextAreaList());
247 jScrollPaneList
.setPreferredSize(new java
.awt
.Dimension(465, 240));
249 return jScrollPaneList
;
253 This method initializes jScrollPane
255 @return javax.swing.JScrollPane
257 private JScrollPane
getJScrollPane() {
258 if (jScrollPane
== null) {
259 jScrollPane
= new JScrollPane();
260 jScrollPane
.setViewportView(getJContentPane());
266 * This method initializes jTextAreaFileList
268 * @return javax.swing.JTextArea
270 private JTextArea
getJTextAreaList() {
271 if (jTextAreaList
== null) {
272 jTextAreaList
= new JTextArea();
273 jTextAreaList
.setEditable(false);
276 return jTextAreaList
;
280 This method initializes iCheckBoxListArch
282 @return ICheckBoxList
284 private ICheckBoxList
getICheckBoxListSupportedArchitectures() {
285 if (iCheckBoxListArch
== null) {
286 iCheckBoxListArch
= new ICheckBoxList();
287 iCheckBoxListArch
.addFocusListener(this);
288 iCheckBoxListArch
.setToolTipText(DataType
.SUP_ARCH_LIST_HELP_TEXT
);
290 return iCheckBoxListArch
;
294 This method initializes jScrollPaneArch
296 @return javax.swing.JScrollPane
299 private JScrollPane
getJScrollPaneArch() {
300 if (jScrollPaneArch
== null) {
301 jScrollPaneArch
= new JScrollPane();
302 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(160, 110, 320, 80));
303 jScrollPaneArch
.setPreferredSize(new java
.awt
.Dimension(320, 80));
304 jScrollPaneArch
.setViewportView(getICheckBoxListSupportedArchitectures());
306 return jScrollPaneArch
;
310 This method initializes jTextFieldHelpText
312 @return javax.swing.JTextField
315 private JTextField
getJTextFieldHelpText() {
316 if (jTextFieldHelpText
== null) {
317 jTextFieldHelpText
= new JTextField();
318 jTextFieldHelpText
.setBounds(new java
.awt
.Rectangle(160, 60, 320, 20));
319 jTextFieldHelpText
.setPreferredSize(new java
.awt
.Dimension(320, 20));
321 return jTextFieldHelpText
;
324 public static void main(String
[] args
) {
329 This method initializes this
332 private void init() {
333 this.setSize(500, 515);
334 this.setContentPane(getJScrollPane());
335 this.setTitle("Data Hubs");
337 this.setViewMode(false);
341 This method initializes this
342 Fill values to all fields if these values are not empty
344 @param inPackageDependencies
347 private void init(DataHubs inDataHubs
) {
349 this.dataHubs
= inDataHubs
;
351 if (this.dataHubs
!= null) {
352 if (this.dataHubs
.getDataHubRecordList().size() > 0) {
353 for (int index
= 0; index
< this.dataHubs
.getDataHubRecordList().size(); index
++) {
354 String arg0
= dataHubs
.getDataHubRecordList().get(index
).getDataHubCName();
356 if (dataHubs
.getDataHubRecordList().get(index
).getUsage() != null) {
357 arg1
= dataHubs
.getDataHubRecordList().get(index
).getUsage().toString();
360 String arg2
= dataHubs
.getDataHubRecordList().get(index
).getFeatureFlag();
361 Vector
<String
> arg3
= Tools
.convertListToVector(dataHubs
.getDataHubRecordList().get(index
)
363 String arg4
= dataHubs
.getDataHubRecordList().get(index
).getHelpText();
365 id
= new DataHubsIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
373 Tools
.generateComboBoxByVector(jComboBoxList
, vid
.getDataHubsName());
378 This is the default constructor
381 public ModuleDataHubs() {
384 this.setVisible(true);
388 This is the override edit constructor
390 @param inDataHubs The input DataHubsDocument.DataHubs
393 public ModuleDataHubs(OpeningModuleType inOmt
) {
396 this.msa
= omt
.getXmlMsa();
397 init(msa
.getDataHubs());
398 this.setVisible(true);
402 Disable all components when the mode is view
404 @param isView true - The view mode; false - The non-view mode
407 public void setViewMode(boolean isView
) {
409 this.jTextFieldDataHubRecord
.setEnabled(!isView
);
410 this.jComboBoxUsage
.setEnabled(!isView
);
415 This method initializes jContentPane
417 @return javax.swing.JPanel jContentPane
420 private JPanel
getJContentPane() {
421 if (jContentPane
== null) {
422 jLabelDataHubRecord
= new JLabel();
423 jLabelDataHubRecord
.setBounds(new java
.awt
.Rectangle(15, 10, 140, 20));
424 jLabelDataHubRecord
.setText("Data Hub Record");
425 jLabelUsage
= new JLabel();
426 jLabelUsage
.setText("Usage");
427 jLabelUsage
.setBounds(new java
.awt
.Rectangle(15, 35, 140, 20));
428 jLabelArch
= new JLabel();
429 jLabelArch
.setBounds(new java
.awt
.Rectangle(15, 110, 140, 20));
430 jLabelArch
.setText("Arch");
431 jLabelFeatureFlag
= new JLabel();
432 jLabelFeatureFlag
.setBounds(new java
.awt
.Rectangle(15, 85, 140, 20));
433 jLabelFeatureFlag
.setText("Feature Flag");
434 jLabelHelpText
= new JLabel();
435 jLabelHelpText
.setBounds(new java
.awt
.Rectangle(14, 60, 140, 20));
436 jLabelHelpText
.setText("Help Text");
438 jContentPane
= new JPanel();
439 jContentPane
.setLayout(null);
440 jContentPane
.setPreferredSize(new java
.awt
.Dimension(490, 475));
442 jContentPane
.add(jLabelDataHubRecord
, null);
443 jContentPane
.add(jLabelUsage
, null);
444 jContentPane
.add(jLabelFeatureFlag
, null);
445 jContentPane
.add(jLabelArch
, null);
447 jContentPane
.add(getJTextFieldDataHubRecord(), null);
448 jContentPane
.add(getJComboBoxUsage(), null);
449 jContentPane
.add(getJTextFieldFeatureFlag(), null);
451 jStarLabel1
= new StarLabel();
452 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
453 jStarLabel2
= new StarLabel();
454 jStarLabel2
.setLocation(new java
.awt
.Point(0, 35));
456 jContentPane
.add(jStarLabel1
, null);
457 jContentPane
.add(jStarLabel2
, null);
459 jContentPane
.add(getJComboBoxList(), null);
460 jContentPane
.add(getJButtonAdd(), null);
461 jContentPane
.add(getJButtonRemove(), null);
462 jContentPane
.add(getJButtonUpdate(), null);
463 jContentPane
.add(getJScrollPaneList(), null);
464 jContentPane
.add(getJScrollPaneArch(), null);
465 jContentPane
.add(jLabelHelpText
, null);
466 jContentPane
.add(getJTextFieldHelpText(), null);
472 This method initializes Usage type
475 private void initFrame() {
476 Tools
.generateComboBoxByVector(jComboBoxUsage
, ed
.getVDataHubUsage());
477 this.iCheckBoxListArch
.setAllItems(ed
.getVSupportedArchitectures());
481 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
483 * Override actionPerformed to listen all actions
486 public void actionPerformed(ActionEvent arg0
) {
487 if (arg0
.getSource() == jButtonAdd
) {
493 if (arg0
.getSource() == jButtonRemove
) {
496 if (arg0
.getSource() == jButtonUpdate
) {
505 Data validation for all fields
507 @retval true - All datas are valid
508 @retval false - At least one data is invalid
511 public boolean checkAdd() {
513 // Check if all fields have correct data types
517 // Check DataHubRecord
519 if (isEmpty(this.jTextFieldDataHubRecord
.getText())) {
520 Log
.err("Data Hub Record couldn't be empty");
524 if (!isEmpty(this.jTextFieldDataHubRecord
.getText())) {
525 if (!DataValidation
.isC_NameType(this.jTextFieldDataHubRecord
.getText())) {
526 Log
.err("Incorrect data type for Data Hub Record");
534 if (!isEmpty(this.jTextFieldFeatureFlag
.getText())) {
535 if (!DataValidation
.isFeatureFlag(this.jTextFieldFeatureFlag
.getText())) {
536 Log
.err("Incorrect data type for Feature Flag");
545 Save all components of DataHubs
546 if exists dataHubs, set the value directly
547 if not exists dataHubs, new an instance first
552 int count
= this.vid
.size();
554 this.dataHubs
= DataHubs
.Factory
.newInstance();
556 for (int index
= 0; index
< count
; index
++) {
557 DataHubRecord p
= DataHubRecord
.Factory
.newInstance();
558 if (!isEmpty(vid
.getDataHubs(index
).getName())) {
559 p
.setDataHubCName(vid
.getDataHubs(index
).getName());
561 if (!isEmpty(vid
.getDataHubs(index
).getUsage())) {
562 p
.setUsage(DataHubUsage
.Enum
.forString(vid
.getDataHubs(index
).getUsage()));
564 if (!isEmpty(vid
.getDataHubs(index
).getFeatureFlag())) {
565 p
.setFeatureFlag(vid
.getDataHubs(index
).getFeatureFlag());
567 if (vid
.getDataHubs(index
).getSupArchList() != null
568 && vid
.getDataHubs(index
).getSupArchList().size() > 0) {
569 p
.setSupArchList(vid
.getDataHubs(index
).getSupArchList());
571 if (!isEmpty(vid
.getDataHubs(index
).getHelp())) {
572 p
.setHelpText(vid
.getDataHubs(index
).getHelp());
574 this.dataHubs
.addNewDataHubRecord();
575 this.dataHubs
.setDataHubRecordArray(dataHubs
.getDataHubRecordList().size() - 1, p
);
579 this.msa
.setDataHubs(dataHubs
);
580 this.omt
.setSaved(false);
581 } catch (Exception e
) {
582 Log
.err("Update Data Hubs", e
.getMessage());
587 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
589 * Override componentResized to resize all components when frame's size is changed
591 public void componentResized(ComponentEvent arg0
) {
592 int intCurrentWidth
= this.getJContentPane().getWidth();
593 int intCurrentHeight
= this.getJContentPane().getHeight();
594 int intPreferredWidth
= this.getJContentPane().getPreferredSize().width
;
595 int intPreferredHeight
= this.getJContentPane().getPreferredSize().height
;
597 resizeComponentWidth(jTextFieldDataHubRecord
, intCurrentWidth
, intPreferredWidth
);
598 resizeComponentWidth(jComboBoxUsage
, intCurrentWidth
, intPreferredWidth
);
599 resizeComponentWidth(jTextFieldHelpText
, intCurrentWidth
, intPreferredWidth
);
600 resizeComponentWidth(jTextFieldFeatureFlag
, intCurrentWidth
, intPreferredWidth
);
601 resizeComponentWidth(jScrollPaneArch
, intCurrentWidth
, intPreferredWidth
);
603 resizeComponentWidth(jComboBoxList
, intCurrentWidth
, intPreferredWidth
);
604 resizeComponent(jScrollPaneList
, intCurrentWidth
, intCurrentHeight
, intPreferredWidth
, intPreferredHeight
);
606 relocateComponentX(jButtonAdd
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_ADD_BUTTON
);
607 relocateComponentX(jButtonRemove
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON
);
608 relocateComponentX(jButtonUpdate
, intCurrentWidth
, intPreferredWidth
, DataType
.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON
);
611 private DataHubsIdentification
getCurrentDataHubs() {
612 String arg0
= this.jTextFieldDataHubRecord
.getText();
613 String arg1
= this.jComboBoxUsage
.getSelectedItem().toString();
615 String arg2
= this.jTextFieldFeatureFlag
.getText();
616 Vector
<String
> arg3
= this.iCheckBoxListArch
.getAllCheckedItemsString();
617 String arg4
= this.jTextFieldHelpText
.getText();
619 id
= new DataHubsIdentification(arg0
, arg1
, arg2
, arg3
, arg4
);
624 Add current item to Vector
627 private void addToList() {
628 intSelectedItemId
= vid
.size();
630 vid
.addDataHubs(getCurrentDataHubs());
632 jComboBoxList
.addItem(id
.getName());
633 jComboBoxList
.setSelectedItem(id
.getName());
636 // Reset select item index
638 intSelectedItemId
= vid
.size();
641 // Reload all fields of selected item
652 Remove current item from Vector
655 private void removeFromList() {
657 // Check if exist items
659 if (this.vid
.size() < 1) {
663 int intTempIndex
= intSelectedItemId
;
665 jComboBoxList
.removeItemAt(intSelectedItemId
);
667 vid
.removeDataHubs(intTempIndex
);
670 // Reload all fields of selected item
681 Update current item of Vector
684 private void updateForList() {
686 // Check if exist items
688 if (this.vid
.size() < 1) {
693 // Backup selected item index
695 int intTempIndex
= intSelectedItemId
;
697 vid
.updateDataHubs(getCurrentDataHubs(), intTempIndex
);
699 jComboBoxList
.removeAllItems();
700 for (int index
= 0; index
< vid
.size(); index
++) {
701 jComboBoxList
.addItem(vid
.getDataHubs(index
).getName());
705 // Restore selected item index
707 intSelectedItemId
= intTempIndex
;
710 // Reset select item index
712 jComboBoxList
.setSelectedIndex(intSelectedItemId
);
715 // Reload all fields of selected item
726 Refresh all fields' values of selected item of Vector
729 private void reloadFromList() {
730 if (vid
.size() > 0) {
732 // Get selected item index
734 intSelectedItemId
= jComboBoxList
.getSelectedIndex();
736 this.jTextFieldDataHubRecord
.setText(vid
.getDataHubs(intSelectedItemId
).getName());
737 this.jComboBoxUsage
.setSelectedItem(vid
.getDataHubs(intSelectedItemId
).getUsage());
738 this.jTextFieldHelpText
.setText(vid
.getDataHubs(intSelectedItemId
).getHelp());
740 jTextFieldFeatureFlag
.setText(vid
.getDataHubs(intSelectedItemId
).getFeatureFlag());
741 iCheckBoxListArch
.setAllItemsUnchecked();
742 iCheckBoxListArch
.initCheckedItem(true, vid
.getDataHubs(intSelectedItemId
).getSupArchList());
751 Update list area pane via the elements of Vector
754 private void reloadListArea() {
755 String strListItem
= "";
756 for (int index
= 0; index
< vid
.size(); index
++) {
757 strListItem
= strListItem
+ vid
.getDataHubs(index
).getName() + DataType
.UNIX_LINE_SEPARATOR
;
759 this.jTextAreaList
.setText(strListItem
);
763 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
765 * Reflesh the frame when selected item changed
768 public void itemStateChanged(ItemEvent arg0
) {
769 if (arg0
.getSource() == this.jComboBoxList
&& arg0
.getStateChange() == ItemEvent
.SELECTED
) {