]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/dialog/ExternsDlg.java
1. Fix EDKT273 "Externs are not being grouped together in MSA Files"
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / dialog / ExternsDlg.java
index c85a2231c3865690b99791455333f5b9c5c9fbdc..6ff84ffc7845b183fa5dea5bada4dd79308f9e95 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
  \r
 /** @file\r
  \r
- The file is used to create, update DataHub of MSA/MBD file\r
+ The file is used to create, update Externs section of the MSA file\r
  \r
  Copyright (c) 2006, Intel Corporation\r
  All rights reserved. This program and the accompanying materials\r
  \r
  Copyright (c) 2006, Intel Corporation\r
  All rights reserved. This program and the accompanying materials\r
@@ -34,15 +34,15 @@ import org.tianocore.frameworkwizard.common.Tools;
 import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;\r
 import org.tianocore.frameworkwizard.common.ui.IDialog;\r
 import org.tianocore.frameworkwizard.common.ui.IFrame;\r
 import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;\r
 import org.tianocore.frameworkwizard.common.ui.IDialog;\r
 import org.tianocore.frameworkwizard.common.ui.IFrame;\r
+import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
 import org.tianocore.frameworkwizard.module.Identifications.Externs.ExternsIdentification;\r
 \r
 /**\r
 import org.tianocore.frameworkwizard.module.Identifications.Externs.ExternsIdentification;\r
 \r
 /**\r
- The class is used to create, update DataHub of MSA/MBD file \r
- It extends IInternalFrame\r
\r
-\r
-\r
- **/\r
+ * The class is used to create, update Externs section of the MSA file\r
+ * \r
+ * It extends IDialog\r
+ * \r
+ */\r
 public class ExternsDlg extends IDialog implements ItemListener {\r
 \r
     ///\r
 public class ExternsDlg extends IDialog implements ItemListener {\r
 \r
     ///\r
@@ -61,11 +61,9 @@ public class ExternsDlg extends IDialog implements ItemListener {
 \r
     private JScrollPane jScrollPane = null;\r
 \r
 \r
     private JScrollPane jScrollPane = null;\r
 \r
-    private JComboBox jComboBoxPcdIsDriver = null;\r
+    private JLabel jLabelSpecification = null;\r
 \r
 \r
-    private JLabel jLabelC_Name = null;\r
-\r
-    private JTextField jTextFieldC_Name = null;\r
+    private JTextField jTextFieldSpecification = null;\r
 \r
     private JLabel jLabelFeatureFlag = null;\r
 \r
 \r
     private JLabel jLabelFeatureFlag = null;\r
 \r
@@ -79,6 +77,58 @@ public class ExternsDlg extends IDialog implements ItemListener {
 \r
     private JButton jButtonCancel = null;\r
 \r
 \r
     private JButton jButtonCancel = null;\r
 \r
+    private StarLabel jStarLabel1 = null;\r
+\r
+    private JPanel jPanelSpecification = null;\r
+\r
+    private JPanel jPanelImage = null;\r
+\r
+    private JPanel jPanelDriver = null;\r
+\r
+    private JPanel jPanelLibrary = null;\r
+\r
+    private JPanel jPanelCallBack = null;\r
+\r
+    private JLabel jLabelModuleEntryPoint = null;\r
+\r
+    private JTextField jTextFieldModuleEntryPoint = null;\r
+\r
+    private JLabel jLabelModuleUnloadImage = null;\r
+\r
+    private JTextField jTextFieldModuleUnloadImage = null;\r
+\r
+    private JLabel jLabelDriverBinding = null;\r
+\r
+    private JTextField jTextFieldDriverBinding = null;\r
+\r
+    private JLabel jLabelComponentName = null;\r
+\r
+    private JTextField jTextFieldComponentName = null;\r
+\r
+    private JLabel jLabelDriverConfig = null;\r
+\r
+    private JTextField jTextFieldDriverConfig = null;\r
+\r
+    private JLabel jLabelDriverDiagnostic = null;\r
+\r
+    private JTextField jTextFieldDriverDiagnostic = null;\r
+\r
+    private JLabel jLabelConstructor = null;\r
+\r
+    private JTextField jTextFieldConstructor = null;\r
+\r
+    private JLabel jLabelDestructor = null;\r
+\r
+    private JTextField jTextFieldDestructor = null;\r
+\r
+    private JLabel jLabelVirtualAddressMap = null;\r
+\r
+    private JTextField jTextFieldVirtualAddressMap = null;\r
+\r
+    private JLabel jLabelExitBootServices = null;\r
+\r
+    private JTextField jTextFieldExitBootServices = null;\r
+\r
     //\r
     // Not used by UI\r
     //\r
     //\r
     // Not used by UI\r
     //\r
@@ -95,7 +145,7 @@ public class ExternsDlg extends IDialog implements ItemListener {
     private JComboBox getJComboBoxType() {\r
         if (jComboBoxType == null) {\r
             jComboBoxType = new JComboBox();\r
     private JComboBox getJComboBoxType() {\r
         if (jComboBoxType == null) {\r
             jComboBoxType = new JComboBox();\r
-            jComboBoxType.setBounds(new java.awt.Rectangle(160, 10, 320, 20));\r
+            jComboBoxType.setBounds(new java.awt.Rectangle(168, 12, 320, 20));\r
             jComboBoxType.setPreferredSize(new java.awt.Dimension(320, 20));\r
             jComboBoxType.addItemListener(this);\r
         }\r
             jComboBoxType.setPreferredSize(new java.awt.Dimension(320, 20));\r
             jComboBoxType.addItemListener(this);\r
         }\r
@@ -115,35 +165,19 @@ public class ExternsDlg extends IDialog implements ItemListener {
         return jScrollPane;\r
     }\r
 \r
         return jScrollPane;\r
     }\r
 \r
-    /**\r
-     * This method initializes jComboBoxPcdIsDriver    \r
-     *         \r
-     * @return javax.swing.JComboBox   \r
-     */\r
-    private JComboBox getJComboBoxPcdIsDriver() {\r
-        if (jComboBoxPcdIsDriver == null) {\r
-            jComboBoxPcdIsDriver = new JComboBox();\r
-            jComboBoxPcdIsDriver.setLocation(new java.awt.Point(160, 35));\r
-            jComboBoxPcdIsDriver.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jComboBoxPcdIsDriver.setSize(new java.awt.Dimension(320, 20));\r
-            jComboBoxPcdIsDriver.addItemListener(this);\r
-        }\r
-        return jComboBoxPcdIsDriver;\r
-    }\r
-\r
     /**\r
      This method initializes jTextFieldC_Name  \r
      \r
      @return javax.swing.JTextField    \r
      \r
      **/\r
     /**\r
      This method initializes jTextFieldC_Name  \r
      \r
      @return javax.swing.JTextField    \r
      \r
      **/\r
-    private JTextField getJTextFieldC_Name() {\r
-        if (jTextFieldC_Name == null) {\r
-            jTextFieldC_Name = new JTextField();\r
-            jTextFieldC_Name.setBounds(new java.awt.Rectangle(160, 35, 320, 20));\r
-            jTextFieldC_Name.setPreferredSize(new java.awt.Dimension(320, 20));\r
+    private JTextField getJTextFieldSpecification() {\r
+        if (jTextFieldSpecification == null) {\r
+            jTextFieldSpecification = new JTextField();\r
+            jTextFieldSpecification.setPreferredSize(new java.awt.Dimension(320, 20));\r
+            jTextFieldSpecification.setBounds(new java.awt.Rectangle(168, 0, 320, 20));\r
         }\r
         }\r
-        return jTextFieldC_Name;\r
+        return jTextFieldSpecification;\r
     }\r
 \r
     /**\r
     }\r
 \r
     /**\r
@@ -155,8 +189,9 @@ public class ExternsDlg extends IDialog implements ItemListener {
     private JTextField getJTextFieldFeatureFlag() {\r
         if (jTextFieldFeatureFlag == null) {\r
             jTextFieldFeatureFlag = new JTextField();\r
     private JTextField getJTextFieldFeatureFlag() {\r
         if (jTextFieldFeatureFlag == null) {\r
             jTextFieldFeatureFlag = new JTextField();\r
-            jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(160, 60, 320, 20));\r
+            jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(168, 87, 320, 20));\r
             jTextFieldFeatureFlag.setPreferredSize(new java.awt.Dimension(320, 20));\r
             jTextFieldFeatureFlag.setPreferredSize(new java.awt.Dimension(320, 20));\r
+            jTextFieldFeatureFlag.setEnabled(false);\r
         }\r
         return jTextFieldFeatureFlag;\r
     }\r
         }\r
         return jTextFieldFeatureFlag;\r
     }\r
@@ -170,7 +205,7 @@ public class ExternsDlg extends IDialog implements ItemListener {
     private JButton getJButtonOk() {\r
         if (jButtonOk == null) {\r
             jButtonOk = new JButton();\r
     private JButton getJButtonOk() {\r
         if (jButtonOk == null) {\r
             jButtonOk = new JButton();\r
-            jButtonOk.setBounds(new java.awt.Rectangle(290, 120, 90, 20));\r
+            jButtonOk.setBounds(new java.awt.Rectangle(300, 187, 90, 20));\r
             jButtonOk.setText("Ok");\r
             jButtonOk.addActionListener(this);\r
         }\r
             jButtonOk.setText("Ok");\r
             jButtonOk.addActionListener(this);\r
         }\r
@@ -186,13 +221,273 @@ public class ExternsDlg extends IDialog implements ItemListener {
     private JButton getJButtonCancel() {\r
         if (jButtonCancel == null) {\r
             jButtonCancel = new JButton();\r
     private JButton getJButtonCancel() {\r
         if (jButtonCancel == null) {\r
             jButtonCancel = new JButton();\r
-            jButtonCancel.setBounds(new java.awt.Rectangle(390, 120, 90, 20));\r
+            jButtonCancel.setBounds(new java.awt.Rectangle(400, 187, 90, 20));\r
             jButtonCancel.setText("Cancel");\r
             jButtonCancel.addActionListener(this);\r
         }\r
         return jButtonCancel;\r
     }\r
 \r
             jButtonCancel.setText("Cancel");\r
             jButtonCancel.addActionListener(this);\r
         }\r
         return jButtonCancel;\r
     }\r
 \r
+    /**\r
+     * This method initializes jPanelSpecification     \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelSpecification() {\r
+        if (jPanelSpecification == null) {\r
+            jPanelSpecification = new JPanel();\r
+            jPanelSpecification.setBounds(new java.awt.Rectangle(0, 37, 505, 20));\r
+            jPanelSpecification.setLayout(null);\r
+\r
+            jLabelSpecification = new JLabel();\r
+            jLabelSpecification.setBounds(new java.awt.Rectangle(12, 0, 140, 20));\r
+            jLabelSpecification.setText("Specification Name");\r
+\r
+            jPanelSpecification.add(jLabelSpecification, null);\r
+            jPanelSpecification.add(getJTextFieldSpecification(), null);\r
+        }\r
+        return jPanelSpecification;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelImage     \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelImage() {\r
+        if (jPanelImage == null) {\r
+            jLabelModuleUnloadImage = new JLabel();\r
+            jLabelModuleUnloadImage.setBounds(new java.awt.Rectangle(12, 25, 140, 20));\r
+            jLabelModuleUnloadImage.setText("Module Unload Image");\r
+            jLabelModuleEntryPoint = new JLabel();\r
+            jLabelModuleEntryPoint.setBounds(new java.awt.Rectangle(12, 0, 140, 20));\r
+            jLabelModuleEntryPoint.setText("Module Entry Point");\r
+            jPanelImage = new JPanel();\r
+            jPanelImage.setBounds(new java.awt.Rectangle(0, 37, 505, 45));\r
+            jPanelImage.setLayout(null);\r
+            jPanelImage.add(jLabelModuleEntryPoint, null);\r
+            jPanelImage.add(getJTextFieldModuleEntryPoint(), null);\r
+            jPanelImage.add(jLabelModuleUnloadImage, null);\r
+            jPanelImage.add(getJTextFieldModuleUnloadImage(), null);\r
+        }\r
+        return jPanelImage;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelDriver    \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelDriver() {\r
+        if (jPanelDriver == null) {\r
+            jStarLabel1 = new StarLabel();\r
+            jStarLabel1.setLocation(new java.awt.Point(0, 0));\r
+            jLabelDriverDiagnostic = new JLabel();\r
+            jLabelDriverDiagnostic.setBounds(new java.awt.Rectangle(12, 75, 140, 20));\r
+            jLabelDriverDiagnostic.setText("Driver Diagnostic");\r
+            jLabelDriverConfig = new JLabel();\r
+            jLabelDriverConfig.setBounds(new java.awt.Rectangle(12, 50, 140, 20));\r
+            jLabelDriverConfig.setText("Driver Config");\r
+            jLabelComponentName = new JLabel();\r
+            jLabelComponentName.setBounds(new java.awt.Rectangle(12, 25, 140, 20));\r
+            jLabelComponentName.setText("Component Name");\r
+            jLabelDriverBinding = new JLabel();\r
+            jLabelDriverBinding.setBounds(new java.awt.Rectangle(12, 0, 140, 20));\r
+            jLabelDriverBinding.setText("Driver Binding");\r
+            jPanelDriver = new JPanel();\r
+            jPanelDriver.setBounds(new java.awt.Rectangle(0, 37, 505, 95));\r
+            jPanelDriver.setLayout(null);\r
+            jPanelDriver.add(jStarLabel1, null);\r
+            jPanelDriver.add(jLabelDriverBinding, null);\r
+            jPanelDriver.add(getJTextFieldDriverBinding(), null);\r
+            jPanelDriver.add(jLabelComponentName, null);\r
+            jPanelDriver.add(getJTextFieldComponentName(), null);\r
+            jPanelDriver.add(jLabelDriverConfig, null);\r
+            jPanelDriver.add(getJTextFieldDriverConfig(), null);\r
+            jPanelDriver.add(jLabelDriverDiagnostic, null);\r
+            jPanelDriver.add(getJTextFieldDriverDiagnostic(), null);\r
+        }\r
+        return jPanelDriver;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelLibrary   \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelLibrary() {\r
+        if (jPanelLibrary == null) {\r
+            jLabelDestructor = new JLabel();\r
+            jLabelDestructor.setBounds(new java.awt.Rectangle(12, 25, 140, 20));\r
+            jLabelDestructor.setText("Destructor");\r
+            jLabelConstructor = new JLabel();\r
+            jLabelConstructor.setBounds(new java.awt.Rectangle(12, 0, 140, 20));\r
+            jLabelConstructor.setText("Constructor");\r
+            jPanelLibrary = new JPanel();\r
+            jPanelLibrary.setBounds(new java.awt.Rectangle(0, 37, 505, 45));\r
+            jPanelLibrary.setLayout(null);\r
+            jPanelLibrary.add(jLabelConstructor, null);\r
+            jPanelLibrary.add(getJTextFieldConstructor(), null);\r
+            jPanelLibrary.add(jLabelDestructor, null);\r
+            jPanelLibrary.add(getJTextFieldDestructor(), null);\r
+        }\r
+        return jPanelLibrary;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelCallBack  \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelCallBack() {\r
+        if (jPanelCallBack == null) {\r
+            jLabelExitBootServices = new JLabel();\r
+            jLabelExitBootServices.setBounds(new java.awt.Rectangle(12, 25, 140, 20));\r
+            jLabelExitBootServices.setText("Exit Boot Services");\r
+            jLabelVirtualAddressMap = new JLabel();\r
+            jLabelVirtualAddressMap.setBounds(new java.awt.Rectangle(12, 0, 140, 20));\r
+            jLabelVirtualAddressMap.setText("Virtual Address Map");\r
+            jPanelCallBack = new JPanel();\r
+            jPanelCallBack.setBounds(new java.awt.Rectangle(0, 37, 505, 45));\r
+            jPanelCallBack.setLayout(null);\r
+            jPanelCallBack.add(jLabelVirtualAddressMap, null);\r
+            jPanelCallBack.add(getJTextFieldVirtualAddressMap(), null);\r
+            jPanelCallBack.add(jLabelExitBootServices, null);\r
+            jPanelCallBack.add(getJTextFieldExitBootServices(), null);\r
+        }\r
+        return jPanelCallBack;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldModuleEntryPoint      \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldModuleEntryPoint() {\r
+        if (jTextFieldModuleEntryPoint == null) {\r
+            jTextFieldModuleEntryPoint = new JTextField();\r
+            jTextFieldModuleEntryPoint.setBounds(new java.awt.Rectangle(168, 0, 320, 20));\r
+        }\r
+        return jTextFieldModuleEntryPoint;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldModuleUnloadImage     \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldModuleUnloadImage() {\r
+        if (jTextFieldModuleUnloadImage == null) {\r
+            jTextFieldModuleUnloadImage = new JTextField();\r
+            jTextFieldModuleUnloadImage.setBounds(new java.awt.Rectangle(168, 25, 320, 20));\r
+        }\r
+        return jTextFieldModuleUnloadImage;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldDriverBinding \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldDriverBinding() {\r
+        if (jTextFieldDriverBinding == null) {\r
+            jTextFieldDriverBinding = new JTextField();\r
+            jTextFieldDriverBinding.setBounds(new java.awt.Rectangle(168, 0, 320, 20));\r
+        }\r
+        return jTextFieldDriverBinding;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldComponentName \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldComponentName() {\r
+        if (jTextFieldComponentName == null) {\r
+            jTextFieldComponentName = new JTextField();\r
+            jTextFieldComponentName.setBounds(new java.awt.Rectangle(168, 25, 320, 20));\r
+        }\r
+        return jTextFieldComponentName;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldDriverConfig  \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldDriverConfig() {\r
+        if (jTextFieldDriverConfig == null) {\r
+            jTextFieldDriverConfig = new JTextField();\r
+            jTextFieldDriverConfig.setBounds(new java.awt.Rectangle(168, 50, 320, 20));\r
+        }\r
+        return jTextFieldDriverConfig;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldDriverDiagnostic      \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldDriverDiagnostic() {\r
+        if (jTextFieldDriverDiagnostic == null) {\r
+            jTextFieldDriverDiagnostic = new JTextField();\r
+            jTextFieldDriverDiagnostic.setBounds(new java.awt.Rectangle(168, 75, 320, 20));\r
+        }\r
+        return jTextFieldDriverDiagnostic;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldConstructor   \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldConstructor() {\r
+        if (jTextFieldConstructor == null) {\r
+            jTextFieldConstructor = new JTextField();\r
+            jTextFieldConstructor.setBounds(new java.awt.Rectangle(168, 0, 320, 20));\r
+        }\r
+        return jTextFieldConstructor;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldDestructor    \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldDestructor() {\r
+        if (jTextFieldDestructor == null) {\r
+            jTextFieldDestructor = new JTextField();\r
+            jTextFieldDestructor.setBounds(new java.awt.Rectangle(168, 25, 320, 20));\r
+        }\r
+        return jTextFieldDestructor;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldVirtualAddressMap     \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldVirtualAddressMap() {\r
+        if (jTextFieldVirtualAddressMap == null) {\r
+            jTextFieldVirtualAddressMap = new JTextField();\r
+            jTextFieldVirtualAddressMap.setBounds(new java.awt.Rectangle(168, 0, 320, 20));\r
+        }\r
+        return jTextFieldVirtualAddressMap;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jTextFieldExitBootServices      \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldExitBootServices() {\r
+        if (jTextFieldExitBootServices == null) {\r
+            jTextFieldExitBootServices = new JTextField();\r
+            jTextFieldExitBootServices.setBounds(new java.awt.Rectangle(168, 25, 320, 20));\r
+        }\r
+        return jTextFieldExitBootServices;\r
+    }\r
+\r
     public static void main(String[] args) {\r
 \r
     }\r
     public static void main(String[] args) {\r
 \r
     }\r
@@ -202,7 +497,7 @@ public class ExternsDlg extends IDialog implements ItemListener {
      \r
      **/\r
     private void init() {\r
      \r
      **/\r
     private void init() {\r
-        this.setSize(500, 180);\r
+        this.setSize(515, 250);\r
         this.setContentPane(getJScrollPane());\r
         this.setTitle("Externs");\r
         initFrame();\r
         this.setContentPane(getJScrollPane());\r
         this.setTitle("Externs");\r
         initFrame();\r
@@ -221,14 +516,56 @@ public class ExternsDlg extends IDialog implements ItemListener {
         this.id = inExternsId;\r
 \r
         if (this.id != null) {\r
         this.id = inExternsId;\r
 \r
         if (this.id != null) {\r
-            if (id.getType().equals(EnumerationData.EXTERNS_PCD_IS_DRIVER)) {\r
-                this.jComboBoxPcdIsDriver.setSelectedItem(id.getName());\r
-            } else {\r
-                this.jTextFieldC_Name.setText(id.getName());    \r
-            }\r
-            this.jComboBoxType.setSelectedItem(id.getType());\r
+            String type = id.getType();\r
+            //\r
+            // Filter the type to lock down the type\r
+            //\r
+            this.jComboBoxType.removeAllItems();\r
+            this.jComboBoxType.addItem(type);\r
+\r
             this.jTextFieldFeatureFlag.setText(id.getFeatureFlag());\r
             this.jArchCheckBox.setSelectedItems(id.getSupArchList());\r
             this.jTextFieldFeatureFlag.setText(id.getFeatureFlag());\r
             this.jArchCheckBox.setSelectedItems(id.getSupArchList());\r
+\r
+            //\r
+            // Init specification\r
+            //\r
+            if (type.equals(EnumerationData.EXTERNS_SPECIFICATION)) {\r
+                this.jTextFieldSpecification.setText(id.getName0());\r
+            }\r
+\r
+            //\r
+            // Init image\r
+            //\r
+            if (type.equals(EnumerationData.EXTERNS_IMAGE)) {\r
+                this.jTextFieldModuleEntryPoint.setText(id.getName0());\r
+                this.jTextFieldModuleUnloadImage.setText(id.getName1());\r
+            }\r
+\r
+            //\r
+            // Init library\r
+            //\r
+            if (type.equals(EnumerationData.EXTERNS_LIBRARY)) {\r
+                this.jTextFieldConstructor.setText(id.getName0());\r
+                this.jTextFieldDestructor.setText(id.getName1());\r
+            }\r
+\r
+            //\r
+            // Init driver\r
+            //\r
+            if (type.equals(EnumerationData.EXTERNS_DRIVER)) {\r
+                this.jTextFieldDriverBinding.setText(id.getName0());\r
+                this.jTextFieldComponentName.setText(id.getName1());\r
+                this.jTextFieldDriverConfig.setText(id.getName2());\r
+                this.jTextFieldDriverDiagnostic.setText(id.getName3());\r
+            }\r
+\r
+            //\r
+            // Init library\r
+            //\r
+            if (type.equals(EnumerationData.EXTERNS_CALL_BACK)) {\r
+                this.jTextFieldVirtualAddressMap.setText(id.getName0());\r
+                this.jTextFieldExitBootServices.setText(id.getName1());\r
+            }\r
         }\r
     }\r
 \r
         }\r
     }\r
 \r
@@ -253,24 +590,23 @@ public class ExternsDlg extends IDialog implements ItemListener {
     private JPanel getJContentPane() {\r
         if (jContentPane == null) {\r
             jArchCheckBox = new ArchCheckBox();\r
     private JPanel getJContentPane() {\r
         if (jContentPane == null) {\r
             jArchCheckBox = new ArchCheckBox();\r
-            jArchCheckBox.setBounds(new java.awt.Rectangle(160, 85, 320, 20));\r
+            jArchCheckBox.setBounds(new java.awt.Rectangle(168, 62, 320, 20));\r
             jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
             jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jLabelC_Name = new JLabel();\r
-            jLabelC_Name.setBounds(new java.awt.Rectangle(15, 35, 140, 20));\r
-            jLabelC_Name.setText("Value");\r
+\r
             jLabelName = new JLabel();\r
             jLabelName = new JLabel();\r
-            jLabelName.setText("Choose Type");\r
-            jLabelName.setBounds(new java.awt.Rectangle(15, 10, 140, 20));\r
+            jLabelName.setText("Choose Extern Type");\r
+            jLabelName.setBounds(new java.awt.Rectangle(12, 12, 155, 20));\r
             jLabelArch = new JLabel();\r
             jLabelArch = new JLabel();\r
-            jLabelArch.setBounds(new java.awt.Rectangle(15, 85, 140, 20));\r
-            jLabelArch.setText("Arch");\r
+            jLabelArch.setBounds(new java.awt.Rectangle(12, 62, 155, 20));\r
+            jLabelArch.setText("Supported Architectures");\r
             jLabelFeatureFlag = new JLabel();\r
             jLabelFeatureFlag = new JLabel();\r
-            jLabelFeatureFlag.setBounds(new java.awt.Rectangle(15, 60, 140, 20));\r
-            jLabelFeatureFlag.setText("Feature Flag");\r
+            jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 87, 155, 20));\r
+            jLabelFeatureFlag.setText("Feature Flag Expression");\r
+            jLabelFeatureFlag.setEnabled(false);\r
 \r
             jContentPane = new JPanel();\r
             jContentPane.setLayout(null);\r
 \r
             jContentPane = new JPanel();\r
             jContentPane.setLayout(null);\r
-            jContentPane.setPreferredSize(new java.awt.Dimension(490, 145));\r
+            jContentPane.setPreferredSize(new java.awt.Dimension(505, 200));\r
 \r
             jContentPane.add(jLabelName, null);\r
             jContentPane.add(getJComboBoxType(), null);\r
 \r
             jContentPane.add(jLabelName, null);\r
             jContentPane.add(getJComboBoxType(), null);\r
@@ -278,12 +614,15 @@ public class ExternsDlg extends IDialog implements ItemListener {
             jContentPane.add(jLabelArch, null);\r
             jContentPane.add(getJTextFieldFeatureFlag(), null);\r
 \r
             jContentPane.add(jLabelArch, null);\r
             jContentPane.add(getJTextFieldFeatureFlag(), null);\r
 \r
-            jContentPane.add(getJComboBoxPcdIsDriver(), null);\r
-            jContentPane.add(jLabelC_Name, null);\r
-            jContentPane.add(getJTextFieldC_Name(), null);\r
             jContentPane.add(jArchCheckBox, null);\r
             jContentPane.add(getJButtonOk(), null);\r
             jContentPane.add(getJButtonCancel(), null);\r
             jContentPane.add(jArchCheckBox, null);\r
             jContentPane.add(getJButtonOk(), null);\r
             jContentPane.add(getJButtonCancel(), null);\r
+\r
+            jContentPane.add(getJPanelSpecification(), null);\r
+            jContentPane.add(getJPanelImage(), null);\r
+            jContentPane.add(getJPanelDriver(), null);\r
+            jContentPane.add(getJPanelLibrary(), null);\r
+            jContentPane.add(getJPanelCallBack(), null);\r
         }\r
         return jContentPane;\r
     }\r
         }\r
         return jContentPane;\r
     }\r
@@ -294,7 +633,11 @@ public class ExternsDlg extends IDialog implements ItemListener {
      **/\r
     private void initFrame() {\r
         Tools.generateComboBoxByVector(this.jComboBoxType, ed.getVExternTypes());\r
      **/\r
     private void initFrame() {\r
         Tools.generateComboBoxByVector(this.jComboBoxType, ed.getVExternTypes());\r
-        Tools.generateComboBoxByVector(this.jComboBoxPcdIsDriver, ed.getVPcdDriverTypes());\r
+        this.jPanelSpecification.setVisible(true);\r
+        this.jPanelImage.setVisible(false);\r
+        this.jPanelLibrary.setVisible(false);\r
+        this.jPanelDriver.setVisible(false);\r
+        this.jPanelCallBack.setVisible(false);\r
     }\r
 \r
     /* (non-Javadoc)\r
     }\r
 \r
     /* (non-Javadoc)\r
@@ -306,7 +649,7 @@ public class ExternsDlg extends IDialog implements ItemListener {
     public void actionPerformed(ActionEvent arg0) {\r
         if (arg0.getSource() == jButtonOk) {\r
             if (checkAdd()) {\r
     public void actionPerformed(ActionEvent arg0) {\r
         if (arg0.getSource() == jButtonOk) {\r
             if (checkAdd()) {\r
-                getCurrentExterns();\r
+                this.getCurrentExterns();\r
                 this.returnType = DataType.RETURN_TYPE_OK;\r
                 this.setVisible(false);\r
             }\r
                 this.returnType = DataType.RETURN_TYPE_OK;\r
                 this.setVisible(false);\r
             }\r
@@ -331,43 +674,132 @@ public class ExternsDlg extends IDialog implements ItemListener {
         //\r
 \r
         //\r
         //\r
 \r
         //\r
-        // When and only When type is not "Pcd Is Driver"\r
+        // Check specification\r
         //\r
         //\r
-        if (!this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_PCD_IS_DRIVER)) {\r
+        if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_SPECIFICATION)) {\r
+            if (isEmpty(this.jTextFieldSpecification.getText())) {\r
+                Log.wrn("Update Externs", "Please type specification's name");\r
+                return false;\r
+            }\r
+            if (!DataValidation.isSentence(this.jTextFieldSpecification.getText())) {\r
+                Log.wrn("Update Externs", "Incorrect data type for Specification");\r
+                return false;\r
+            }\r
+\r
             //\r
             //\r
-            // Check CName \r
+            // No need to check feature flag, return true directly here.\r
             //\r
             //\r
-            if (isEmpty(this.jTextFieldC_Name.getText())) {\r
-                Log.err("Value couldn't be empty");\r
+            return true;\r
+        }\r
+\r
+        //\r
+        // Check image\r
+        //\r
+        if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_IMAGE)) {\r
+            if (isEmpty(this.jTextFieldModuleEntryPoint.getText())\r
+                && isEmpty(this.jTextFieldModuleUnloadImage.getText())) {\r
+                Log.wrn("Update Externs", "At least one of ModuleEntryPoint or ModuleUnloadImage should have a value");\r
                 return false;\r
             }\r
                 return false;\r
             }\r
+            if (!isEmpty(this.jTextFieldModuleEntryPoint.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldModuleEntryPoint.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for Module Entry Point");\r
+                    return false;\r
+                }\r
+            }\r
+            if (!isEmpty(this.jTextFieldModuleUnloadImage.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldModuleUnloadImage.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for Module Unload Image");\r
+                    return false;\r
+                }\r
+            }\r
+        }\r
 \r
 \r
-            if (!isEmpty(this.jTextFieldC_Name.getText())) {\r
-                if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_SPECIFICATION)) {\r
-                    if (!DataValidation.isSentence(this.jTextFieldC_Name.getText())) {\r
-                        Log.err("Incorrect data type for Specification");\r
-                        return false;\r
-                    }\r
-                } else {\r
-                    if (!DataValidation.isC_NameType(this.jTextFieldC_Name.getText())) {\r
-                        Log.err("Incorrect data type for C_Name");\r
-                        return false;\r
-                    }\r
+        //\r
+        // Check library\r
+        //\r
+        if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_LIBRARY)) {\r
+            if (isEmpty(this.jTextFieldConstructor.getText()) && isEmpty(this.jTextFieldDestructor.getText())) {\r
+                Log.wrn("Update Externs", "At least one of Constructor or Destructor should have a value");\r
+                return false;\r
+            }\r
+            if (!isEmpty(this.jTextFieldConstructor.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldConstructor.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for Constructor");\r
+                    return false;\r
                 }\r
             }\r
                 }\r
             }\r
+            if (!isEmpty(this.jTextFieldDestructor.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldDestructor.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for Destructor");\r
+                    return false;\r
+                }\r
+            }\r
+        }\r
 \r
 \r
-            //\r
-            // Check FeatureFlag\r
-            //\r
-            if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
-                if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
-                    Log.err("Incorrect data type for Feature Flag");\r
+        //\r
+        // Check driver\r
+        //\r
+        if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_DRIVER)) {\r
+            if (isEmpty(this.jTextFieldDriverBinding.getText())) {\r
+                Log.wrn("Update Externs", "DriverBinding must have a value");\r
+                return false;\r
+            }\r
+            if (!isEmpty(this.jTextFieldDriverBinding.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldDriverBinding.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for DriverBinding");\r
+                    return false;\r
+                }\r
+            }\r
+            if (!isEmpty(this.jTextFieldComponentName.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldComponentName.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for ComponentName");\r
+                    return false;\r
+                }\r
+            }\r
+            if (!isEmpty(this.jTextFieldDriverConfig.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldDriverConfig.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for DriverConfig");\r
+                    return false;\r
+                }\r
+            }\r
+            if (!isEmpty(this.jTextFieldDriverDiagnostic.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldDriverDiagnostic.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for DriverDiagnostic");\r
                     return false;\r
                 }\r
             }\r
                     return false;\r
                 }\r
             }\r
-        } else {\r
-            if (this.jComboBoxPcdIsDriver.getSelectedItem().toString().equals(DataType.EMPTY_SELECT_ITEM)) {\r
-                Log.err("You must select one PCD DRIVER type");\r
+        }\r
+\r
+        //\r
+        // Check call back\r
+        //\r
+        if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_CALL_BACK)) {\r
+            if (isEmpty(this.jTextFieldVirtualAddressMap.getText())\r
+                && isEmpty(this.jTextFieldExitBootServices.getText())) {\r
+                Log.wrn("Update Externs", "At least one of VirtualAddressMap or ExitBootServices should have a value");\r
+                return false;\r
+            }\r
+            if (!isEmpty(this.jTextFieldVirtualAddressMap.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldVirtualAddressMap.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for Virtual Address Map");\r
+                    return false;\r
+                }\r
+            }\r
+            if (!isEmpty(this.jTextFieldExitBootServices.getText())) {\r
+                if (!DataValidation.isC_NameType(this.jTextFieldExitBootServices.getText())) {\r
+                    Log.wrn("Update Externs", "Incorrect data type for Exit Boot Services");\r
+                    return false;\r
+                }\r
+            }\r
+        }\r
+\r
+        //\r
+        // Check FeatureFlag\r
+        //\r
+        if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
+            if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
+                Log.wrn("Update Externs", "Incorrect data type for Feature Flag");\r
                 return false;\r
             }\r
         }\r
                 return false;\r
             }\r
         }\r
@@ -377,17 +809,45 @@ public class ExternsDlg extends IDialog implements ItemListener {
 \r
     private ExternsIdentification getCurrentExterns() {\r
         String arg0 = "";\r
 \r
     private ExternsIdentification getCurrentExterns() {\r
         String arg0 = "";\r
-        if (this.jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_PCD_IS_DRIVER)) {\r
-            arg0 = this.jComboBoxPcdIsDriver.getSelectedItem().toString();\r
-        } else {\r
-            arg0 = this.jTextFieldC_Name.getText();    \r
+        String arg1 = "";\r
+        String arg2 = "";\r
+        String arg3 = "";\r
+\r
+        String type = this.jComboBoxType.getSelectedItem().toString();\r
+        String featureFlag = this.jTextFieldFeatureFlag.getText();\r
+        Vector<String> arch = this.jArchCheckBox.getSelectedItemsVector();\r
+\r
+        if (type.equals(EnumerationData.EXTERNS_SPECIFICATION)) {\r
+            arg0 = this.jTextFieldSpecification.getText();\r
+            id = new ExternsIdentification(arg0, type);\r
         }\r
         }\r
-        String arg1 = this.jComboBoxType.getSelectedItem().toString();\r
 \r
 \r
-        String arg2 = this.jTextFieldFeatureFlag.getText();\r
-        Vector<String> arg3 = this.jArchCheckBox.getSelectedItemsVector();\r
+        if (type.equals(EnumerationData.EXTERNS_IMAGE)) {\r
+            arg0 = this.jTextFieldModuleEntryPoint.getText();\r
+            arg1 = this.jTextFieldModuleUnloadImage.getText();\r
+            id = new ExternsIdentification(arg0, arg1, type, featureFlag, arch);\r
+        }\r
+\r
+        if (type.equals(EnumerationData.EXTERNS_LIBRARY)) {\r
+            arg0 = this.jTextFieldConstructor.getText();\r
+            arg1 = this.jTextFieldDestructor.getText();\r
+            id = new ExternsIdentification(arg0, arg1, type, featureFlag, arch);\r
+        }\r
+\r
+        if (type.equals(EnumerationData.EXTERNS_DRIVER)) {\r
+            arg0 = this.jTextFieldDriverBinding.getText();\r
+            arg1 = this.jTextFieldComponentName.getText();\r
+            arg2 = this.jTextFieldDriverConfig.getText();\r
+            arg3 = this.jTextFieldDriverDiagnostic.getText();\r
+            id = new ExternsIdentification(arg0, arg1, arg2, arg3, type, featureFlag, arch);\r
+        }\r
+\r
+        if (type.equals(EnumerationData.EXTERNS_CALL_BACK)) {\r
+            arg0 = this.jTextFieldVirtualAddressMap.getText();\r
+            arg1 = this.jTextFieldExitBootServices.getText();\r
+            id = new ExternsIdentification(arg0, arg1, type, featureFlag, arch);\r
+        }\r
 \r
 \r
-        id = new ExternsIdentification(arg0, arg1, arg2, arg3);\r
         return id;\r
     }\r
 \r
         return id;\r
     }\r
 \r
@@ -399,12 +859,66 @@ public class ExternsDlg extends IDialog implements ItemListener {
      */\r
     public void itemStateChanged(ItemEvent arg0) {\r
         if (arg0.getSource() == jComboBoxType && arg0.getStateChange() == ItemEvent.SELECTED) {\r
      */\r
     public void itemStateChanged(ItemEvent arg0) {\r
         if (arg0.getSource() == jComboBoxType && arg0.getStateChange() == ItemEvent.SELECTED) {\r
-            if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_PCD_IS_DRIVER)) {\r
-                this.jComboBoxPcdIsDriver.setVisible(true);\r
-                this.jTextFieldC_Name.setVisible(false);\r
-            } else {\r
-                this.jComboBoxPcdIsDriver.setVisible(false);\r
-                this.jTextFieldC_Name.setVisible(true);\r
+            if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_SPECIFICATION)) {\r
+                this.jPanelSpecification.setVisible(true);\r
+                this.jPanelImage.setVisible(false);\r
+                this.jPanelLibrary.setVisible(false);\r
+                this.jPanelDriver.setVisible(false);\r
+                this.jPanelCallBack.setVisible(false);\r
+                this.jLabelArch.setEnabled(false);\r
+                this.jArchCheckBox.setAllItemsEnabled(false);\r
+                this.jLabelArch.setLocation(12, 62);\r
+                this.jArchCheckBox.setLocation(168, 62);\r
+                this.jLabelFeatureFlag.setLocation(12, 87);\r
+                this.jTextFieldFeatureFlag.setLocation(168, 87);\r
+            } else if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_IMAGE)) {\r
+                this.jPanelSpecification.setVisible(false);\r
+                this.jPanelImage.setVisible(true);\r
+                this.jPanelLibrary.setVisible(false);\r
+                this.jPanelDriver.setVisible(false);\r
+                this.jPanelCallBack.setVisible(false);\r
+                this.jLabelArch.setEnabled(true);\r
+                this.jArchCheckBox.setAllItemsEnabled(true);\r
+                this.jLabelArch.setLocation(12, 87);\r
+                this.jArchCheckBox.setLocation(168, 87);\r
+                this.jLabelFeatureFlag.setLocation(12, 112);\r
+                this.jTextFieldFeatureFlag.setLocation(168, 112);\r
+            } else if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_LIBRARY)) {\r
+                this.jPanelSpecification.setVisible(false);\r
+                this.jPanelImage.setVisible(false);\r
+                this.jPanelLibrary.setVisible(true);\r
+                this.jPanelDriver.setVisible(false);\r
+                this.jPanelCallBack.setVisible(false);\r
+                this.jLabelArch.setEnabled(true);\r
+                this.jArchCheckBox.setAllItemsEnabled(true);\r
+                this.jLabelArch.setLocation(12, 87);\r
+                this.jArchCheckBox.setLocation(168, 87);\r
+                this.jLabelFeatureFlag.setLocation(12, 112);\r
+                this.jTextFieldFeatureFlag.setLocation(168, 112);\r
+            } else if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_DRIVER)) {\r
+                this.jPanelSpecification.setVisible(false);\r
+                this.jPanelImage.setVisible(false);\r
+                this.jPanelLibrary.setVisible(false);\r
+                this.jPanelDriver.setVisible(true);\r
+                this.jPanelCallBack.setVisible(false);\r
+                this.jLabelArch.setEnabled(true);\r
+                this.jArchCheckBox.setAllItemsEnabled(true);\r
+                this.jLabelArch.setLocation(12, 137);\r
+                this.jArchCheckBox.setLocation(168, 137);\r
+                this.jLabelFeatureFlag.setLocation(12, 162);\r
+                this.jTextFieldFeatureFlag.setLocation(168, 162);\r
+            } else if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_CALL_BACK)) {\r
+                this.jPanelSpecification.setVisible(false);\r
+                this.jPanelImage.setVisible(false);\r
+                this.jPanelLibrary.setVisible(false);\r
+                this.jPanelDriver.setVisible(false);\r
+                this.jPanelCallBack.setVisible(true);\r
+                this.jLabelArch.setEnabled(true);\r
+                this.jArchCheckBox.setAllItemsEnabled(true);\r
+                this.jLabelArch.setLocation(12, 87);\r
+                this.jArchCheckBox.setLocation(168, 87);\r
+                this.jLabelFeatureFlag.setLocation(12, 112);\r
+                this.jTextFieldFeatureFlag.setLocation(168, 112);\r
             }\r
         }\r
     }\r
             }\r
         }\r
     }\r