]> 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 b53cbf72437e2a61c1a83739f84c6a3d4a934d92..6ff84ffc7845b183fa5dea5bada4dd79308f9e95 100644 (file)
@@ -34,6 +34,7 @@ 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.StarLabel;\r
 import org.tianocore.frameworkwizard.module.Identifications.Externs.ExternsIdentification;\r
 \r
 /**\r
@@ -60,11 +61,9 @@ public class ExternsDlg extends IDialog implements ItemListener {
 \r
     private JScrollPane jScrollPane = null;\r
 \r
-    private JComboBox jComboBoxPcdIsDriver = null;\r
+    private JLabel jLabelSpecification = null;\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
@@ -78,6 +77,58 @@ public class ExternsDlg extends IDialog implements ItemListener {
 \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
@@ -114,35 +165,19 @@ public class ExternsDlg extends IDialog implements ItemListener {
         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(168, 37));\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
-    private JTextField getJTextFieldC_Name() {\r
-        if (jTextFieldC_Name == null) {\r
-            jTextFieldC_Name = new JTextField();\r
-            jTextFieldC_Name.setBounds(new java.awt.Rectangle(168, 37, 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
-        return jTextFieldC_Name;\r
+        return jTextFieldSpecification;\r
     }\r
 \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
-            jButtonOk.setBounds(new java.awt.Rectangle(300, 122, 90, 20));\r
+            jButtonOk.setBounds(new java.awt.Rectangle(300, 187, 90, 20));\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
-            jButtonCancel.setBounds(new java.awt.Rectangle(400, 122, 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
+    /**\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
@@ -202,7 +497,7 @@ public class ExternsDlg extends IDialog implements ItemListener {
      \r
      **/\r
     private void init() {\r
-        this.setSize(515, 200);\r
+        this.setSize(515, 250);\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
-            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
+\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
@@ -255,23 +592,21 @@ public class ExternsDlg extends IDialog implements ItemListener {
             jArchCheckBox = new ArchCheckBox();\r
             jArchCheckBox.setBounds(new java.awt.Rectangle(168, 62, 320, 20));\r
             jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jLabelC_Name = new JLabel();\r
-            jLabelC_Name.setBounds(new java.awt.Rectangle(12, 37, 140, 20));\r
-            jLabelC_Name.setText("Enter Value");\r
+\r
             jLabelName = new JLabel();\r
             jLabelName.setText("Choose Extern Type");\r
-            jLabelName.setBounds(new java.awt.Rectangle(12, 12, 168, 20));\r
+            jLabelName.setBounds(new java.awt.Rectangle(12, 12, 155, 20));\r
             jLabelArch = new JLabel();\r
-            jLabelArch.setBounds(new java.awt.Rectangle(12, 62, 168, 20));\r
+            jLabelArch.setBounds(new java.awt.Rectangle(12, 62, 155, 20));\r
             jLabelArch.setText("Supported Architectures");\r
             jLabelFeatureFlag = new JLabel();\r
-            jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 87, 168, 20));\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
-            jContentPane.setPreferredSize(new java.awt.Dimension(505, 155));\r
+            jContentPane.setPreferredSize(new java.awt.Dimension(505, 200));\r
 \r
             jContentPane.add(jLabelName, null);\r
             jContentPane.add(getJComboBoxType(), null);\r
@@ -279,12 +614,15 @@ public class ExternsDlg extends IDialog implements ItemListener {
             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
+\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
@@ -295,7 +633,11 @@ public class ExternsDlg extends IDialog implements ItemListener {
      **/\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
@@ -307,7 +649,7 @@ public class ExternsDlg extends IDialog implements ItemListener {
     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
@@ -332,43 +674,132 @@ public class ExternsDlg extends IDialog implements ItemListener {
         //\r
 \r
         //\r
-        // When and only When type is not "Pcd Is Driver"\r
+        // Check specification\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
-            // Check CName \r
+            // No need to check feature flag, return true directly here.\r
             //\r
-            if (isEmpty(this.jTextFieldC_Name.getText())) {\r
-                Log.wrn("Update Externs", "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
+            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
-            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.wrn("Update Externs", "Incorrect data type for Specification");\r
-                        return false;\r
-                    }\r
-                } else {\r
-                    if (!DataValidation.isC_NameType(this.jTextFieldC_Name.getText())) {\r
-                        Log.wrn("Update Externs", "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
+            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
-            // 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
+        //\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
-        } else {\r
-            if (this.jComboBoxPcdIsDriver.getSelectedItem().toString().equals(DataType.EMPTY_SELECT_ITEM)) {\r
-                Log.wrn("Update Externs", "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
@@ -378,17 +809,45 @@ public class ExternsDlg extends IDialog implements ItemListener {
 \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
-        String arg1 = this.jComboBoxType.getSelectedItem().toString();\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
-        id = new ExternsIdentification(arg0, arg1, arg2, arg3);\r
         return id;\r
     }\r
 \r
@@ -400,19 +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
-            if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_PCD_IS_DRIVER)) {\r
-                this.jComboBoxPcdIsDriver.setVisible(true);\r
-                this.jTextFieldC_Name.setVisible(false);\r
-                this.jLabelArch.setEnabled(false);\r
-                this.jArchCheckBox.setAllItemsEnabled(false);\r
-            } else if (jComboBoxType.getSelectedItem().toString().equals(EnumerationData.EXTERNS_SPECIFICATION)) {\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
-            } else {\r
-                this.jComboBoxPcdIsDriver.setVisible(false);\r
-                this.jTextFieldC_Name.setVisible(true);\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