]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdLibClassDecls.java
Replaced set*(null) with unset*() to clear empty attributes that were causing invalid...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdLibClassDecls.java
index 61d69b191690c452b2cb0a7328d987ddba3c0a0e..4d35348dcf0e11da298c7687accf9a9b7238631f 100644 (file)
@@ -16,13 +16,16 @@ import java.awt.Dimension;
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ComponentEvent;\r
 import java.io.File;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+import java.util.Set;\r
 import java.util.Vector;\r
 \r
 import javax.swing.AbstractAction;\r
 import javax.swing.JFileChooser;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JPanel;\r
-import javax.swing.JRadioButton;\r
 import javax.swing.JTable;\r
 import javax.swing.JTextField;\r
 import javax.swing.JComboBox;\r
@@ -40,6 +43,7 @@ import javax.swing.event.TableModelListener;
 import javax.swing.table.DefaultTableModel;\r
 import javax.swing.table.TableModel;\r
 \r
+import org.apache.xmlbeans.XmlObject;\r
 import org.tianocore.PackageSurfaceAreaDocument;\r
 import org.tianocore.frameworkwizard.common.DataValidation;\r
 import org.tianocore.frameworkwizard.common.Tools;\r
@@ -48,8 +52,11 @@ import org.tianocore.frameworkwizard.common.ui.IInternalFrame;
 import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
 import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;\r
 import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
+import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
+import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
+import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
+import org.tianocore.frameworkwizard.platform.ui.id.PackageIdentification;\r
 \r
-import javax.swing.JCheckBox;\r
 \r
 /**\r
  GUI for create library definition elements of spd file.\r
@@ -70,10 +77,6 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
 \r
     private JPanel jContentPane = null;\r
 \r
-    private JRadioButton jRadioButtonAdd = null;\r
-\r
-    private JRadioButton jRadioButtonSelect = null;\r
-\r
     private JTextField jTextFieldAdd = null;\r
 \r
     private JComboBox jComboBoxSelect = null;\r
@@ -84,13 +87,11 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
 \r
     private JButton jButtonRemove = null;\r
 \r
-    private JButton jButtonClearAll = null;\r
+    private JButton jButtonRemoveAll = null;\r
 \r
-    private JButton jButtonOk = null;\r
+    private JLabel jLabelHdr = null;\r
 \r
-    private JLabel jLabel = null;\r
-\r
-    private JTextField jTextField = null;\r
+    private JTextField jTextFieldHdr = null;\r
 \r
     private JButton jButtonBrowse = null;\r
     \r
@@ -102,7 +103,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
     \r
     private OpeningPackageType docConsole = null;\r
 \r
-    private JLabel jLabel1 = null;\r
+    private JLabel jLabel1ClassName = null;\r
     \r
     private JScrollPane topScrollPane = null;  //  @jve:decl-index=0:visual-constraint="10,53"\r
     \r
@@ -110,37 +111,42 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
 \r
     private StarLabel starLabel = null;\r
 \r
-    private JLabel jLabel2 = null;\r
+    private JLabel jLabel2HelpText = null;\r
 \r
     private JTextField jTextFieldHelp = null;\r
 \r
-    private JLabel jLabel3 = null;\r
-\r
-    private JTextField jTextField1 = null;\r
+    private JLabel jLabel3RecInstName = null;\r
 \r
-    private JLabel jLabel4 = null;\r
+    private JTextField jTextField1RecInstName = null;\r
 \r
-    private JTextField jTextField2 = null;\r
+    private JLabel jLabel4RecInstVer = null;\r
 \r
-    private JLabel jLabel5 = null;\r
+    private JTextField jTextField2RecInstVer = null;\r
 \r
-    private JCheckBox jCheckBox = null;\r
+    private JLabel jLabel5SupArchList = null;\r
 \r
-    private JCheckBox jCheckBox1 = null;\r
+    private JLabel jLabel6SupModList = null;\r
+    \r
+    private JScrollPane jScrollPaneModules = null;\r
+    \r
+    private JScrollPane jScrollPane1Arch = null;\r
+    \r
+    private ICheckBoxList iCheckBoxListModules = null;\r
 \r
-    private JCheckBox jCheckBox2 = null;\r
+    private ICheckBoxList iCheckBoxList = null;\r
 \r
-    private JCheckBox jCheckBox3 = null;\r
+    private JComboBox jComboBox = null;\r
 \r
-    private JLabel jLabel6 = null;\r
-    \r
-    private JScrollPane jScrollPaneArch = null;\r
+    private int cnClassName = 0;\r
+    private int cnHdrFile = 1;\r
+    private int cnHelpText = 2;\r
+    private int cnRecInstName = 3;\r
+    private int cnRecInstVer = 4;\r
+    private int cnSupArch = 5;\r
+    private int cnSupMod = 6;\r
     \r
-    private ICheckBoxList iCheckBoxListArch = null;\r
+    HashMap<String, String> libNameGuidMap = new HashMap<String, String>();\r
 \r
-    private JCheckBox jCheckBox4 = null;\r
-\r
-    private JCheckBox jCheckBox5 = null;\r
 \r
     /**\r
       This method initializes this\r
@@ -152,40 +158,6 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
 \r
     }\r
 \r
-    /**\r
-      This method initializes jRadioButtonAdd  \r
-       \r
-      @return javax.swing.JRadioButton \r
-     **/\r
-    private JRadioButton getJRadioButtonAdd() {\r
-        if (jRadioButtonAdd == null) {\r
-            jRadioButtonAdd = new JRadioButton();\r
-            jRadioButtonAdd.setBounds(new java.awt.Rectangle(9,63,197,20));\r
-            jRadioButtonAdd.setText("Library Class Name");\r
-            jRadioButtonAdd.addActionListener(this);\r
-            jRadioButtonAdd.setSelected(true);\r
-            jRadioButtonAdd.setVisible(false);\r
-        }\r
-        return jRadioButtonAdd;\r
-    }\r
-\r
-    /**\r
-      This method initializes jRadioButtonSelect       \r
-       \r
-      @return javax.swing.JRadioButton \r
-     **/\r
-    private JRadioButton getJRadioButtonSelect() {\r
-        if (jRadioButtonSelect == null) {\r
-            jRadioButtonSelect = new JRadioButton();\r
-            jRadioButtonSelect.setBounds(new java.awt.Rectangle(9,10,198,20));\r
-            jRadioButtonSelect.setText("Select Existing Library Class");\r
-            jRadioButtonSelect.addActionListener(this);\r
-            jRadioButtonSelect.setSelected(true);\r
-            jRadioButtonSelect.setVisible(false);\r
-        }\r
-        return jRadioButtonSelect;\r
-    }\r
-\r
     /**\r
       This method initializes jTextFieldAdd    \r
        \r
@@ -221,12 +193,15 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
       This method initializes jScrollPane      \r
        \r
       @return javax.swing.JScrollPane  \r
+\r
+      Used for the Table of Library Classes that are provided by this package\r
+\r
      **/\r
     private JScrollPane getJScrollPane() {\r
         if (jScrollPane == null) {\r
             jScrollPane = new JScrollPane();\r
-            jScrollPane.setBounds(new java.awt.Rectangle(12,351,608,139));\r
-            jScrollPane.setPreferredSize(new java.awt.Dimension(330,150));\r
+            jScrollPane.setBounds(new java.awt.Rectangle(12,351,608,253));\r
+            jScrollPane.setPreferredSize(new java.awt.Dimension(390,150));\r
             jScrollPane.setViewportView(getJTable());\r
         }\r
         return jScrollPane;\r
@@ -242,14 +217,17 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
            model = new DefaultTableModel();\r
            jTable = new JTable(model);\r
            jTable.setRowHeight(20);\r
-           jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
-           model.addColumn("LibraryClass");\r
-           model.addColumn("IncludeHeader");\r
-           model.addColumn("HelpText");\r
-           model.addColumn("RecommendedInstance");\r
-           model.addColumn("InstanceVersion");\r
-           model.addColumn("SupportedArch");\r
-           model.addColumn("SupportedModule");\r
+//           jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
+           jTable.setColumnSelectionAllowed(false);\r
+           model.addColumn("Class Name");\r
+           model.addColumn("Header");\r
+           model.addColumn("Help Text");\r
+           model.addColumn("Reserved");\r
+           model.addColumn("Reserved");\r
+//           model.addColumn("Recommended Instance");\r
+//           model.addColumn("Version");\r
+           model.addColumn("Sup. Arch");\r
+           model.addColumn("Mod. Types");\r
            \r
            Vector<String> vArch = new Vector<String>();\r
            vArch.add("IA32");\r
@@ -258,7 +236,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
            vArch.add("EBC");\r
            vArch.add("ARM");\r
            vArch.add("PPC");\r
-           jTable.getColumnModel().getColumn(5).setCellEditor(new ListEditor(vArch));\r
+//           jTable.getColumnModel().getColumn(cnSupArch).setCellEditor(new ListEditor(vArch));\r
            \r
            Vector<String> vModule = new Vector<String>();\r
            vModule.add("BASE");\r
@@ -273,7 +251,9 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
            vModule.add("UEFI_DRIVER");\r
            vModule.add("UEFI_APPLICATION");\r
            vModule.add("USER_DEFINED");\r
-           jTable.getColumnModel().getColumn(6).setCellEditor(new ListEditor(vModule));\r
+           vModule.add("NONE");\r
+\r
+           jTable.getColumnModel().getColumn(cnSupMod).setCellEditor(new ListEditor(vModule));\r
           \r
            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
            jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
@@ -303,25 +283,35 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
         int row = arg0.getFirstRow();\r
         TableModel m = (TableModel)arg0.getSource();\r
         if (arg0.getType() == TableModelEvent.UPDATE){\r
-            String lib = m.getValueAt(row, 0) + "";\r
-            String hdr = m.getValueAt(row, 1) + "";\r
-            String hlp = m.getValueAt(row, 2) + "";\r
-            String guid = m.getValueAt(row, 3) + "";\r
-            String ver = m.getValueAt(row, 4) + "";\r
+            String lib = m.getValueAt(row, cnClassName) + "";\r
+            String hdr = m.getValueAt(row, cnHdrFile) + "";\r
+            String hlp = m.getValueAt(row, cnHelpText) + "";\r
+            String name = m.getValueAt(row, cnRecInstName) + "";\r
+            String ver = m.getValueAt(row, cnRecInstVer) + "";\r
             String arch = null;\r
-            if (m.getValueAt(row, 5) != null) {\r
-               arch = m.getValueAt(row, 5).toString();\r
+            if (m.getValueAt(row, cnSupArch) != null) {\r
+               arch = m.getValueAt(row, cnSupArch).toString();\r
             }\r
             String module = null;\r
-            if (m.getValueAt(row, 6) != null) {\r
-                module = m.getValueAt(row, 6).toString();\r
+                   // if (lsm.isSelectionEmpty()) {\r
+            if (m.getValueAt(row, cnSupMod) != null) {\r
+                module = m.getValueAt(row, cnSupMod).toString();\r
+                if (module == "NONE") {\r
+                  module = null;\r
+                }\r
             }\r
             String[] rowData = {lib, hdr, hlp};\r
             if (!dataValidation(rowData)) {\r
                 return;\r
             }\r
             docConsole.setSaved(false);\r
-            sfc.updateSpdLibClass(row, lib, hdr, hlp, guid, ver, arch, module);\r
+            \r
+// LAH            getLibInstances(lib);\r
+\r
+// LAH            String guid = nameToGuid(name);\r
+            \r
+            // LAH WAS sfc.updateSpdLibClass(row, lib, hdr, hlp, guid, ver, arch, module);\r
+            sfc.updateSpdLibClass(row, lib, hdr, hlp, null, null, arch, module);\r
         }\r
     }\r
 \r
@@ -334,8 +324,8 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
         if (jButtonAdd == null) {\r
             jButtonAdd = new JButton();\r
             jButtonAdd.setText("Add");\r
-            jButtonAdd.setSize(new java.awt.Dimension(80,20));\r
-            jButtonAdd.setLocation(new java.awt.Point(365,315));\r
+            jButtonAdd.setSize(new java.awt.Dimension(99,20));\r
+            jButtonAdd.setLocation(new java.awt.Point(321,326));\r
             jButtonAdd.addActionListener(this);\r
         }\r
         return jButtonAdd;\r
@@ -350,8 +340,8 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
         if (jButtonRemove == null) {\r
             jButtonRemove = new JButton();\r
             jButtonRemove.setText("Remove");\r
-            jButtonRemove.setSize(new java.awt.Dimension(80,20));\r
-            jButtonRemove.setLocation(new java.awt.Point(449,315));\r
+            jButtonRemove.setSize(new java.awt.Dimension(99,20));\r
+            jButtonRemove.setLocation(new java.awt.Point(424,326));\r
             jButtonRemove.addActionListener(this);\r
         }\r
         return jButtonRemove;\r
@@ -362,32 +352,15 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
        \r
       @return javax.swing.JButton      \r
      **/\r
-    private JButton getJButtonClearAll() {\r
-        if (jButtonClearAll == null) {\r
-            jButtonClearAll = new JButton();\r
-            jButtonClearAll.setText("Clear All");\r
-            jButtonClearAll.setSize(new java.awt.Dimension(86,20));\r
-            jButtonClearAll.setLocation(new java.awt.Point(536,315));\r
-            jButtonClearAll.addActionListener(this);\r
-        }\r
-        return jButtonClearAll;\r
-    }\r
-\r
-    /**\r
-      This method initializes jButton  \r
-       \r
-      @return javax.swing.JButton      \r
-     **/\r
-    private JButton getJButtonOk() {\r
-        if (jButtonOk == null) {\r
-            jButtonOk = new JButton();\r
-            jButtonOk.setSize(new java.awt.Dimension(90, 20));\r
-            jButtonOk.setText("OK");\r
-            jButtonOk.setLocation(new java.awt.Point(290, 305));\r
-            jButtonOk.setVisible(false);\r
-            jButtonOk.addActionListener(this);\r
+    private JButton getJButtonRemoveAll() {\r
+        if (jButtonRemoveAll == null) {\r
+            jButtonRemoveAll = new JButton();\r
+            jButtonRemoveAll.setText("Remove All");\r
+            jButtonRemoveAll.setSize(new java.awt.Dimension(99,20));\r
+            jButtonRemoveAll.setLocation(new java.awt.Point(527,326));\r
+            jButtonRemoveAll.addActionListener(this);\r
         }\r
-        return jButtonOk;\r
+        return jButtonRemoveAll;\r
     }\r
 \r
     /**\r
@@ -442,6 +415,11 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
         sfc.getSpdLibClassDeclarations(saa);\r
         int i = 0;\r
         while (i < saa.length) {\r
+            if (saa[i][3] != null && saa[i][3].length() > 0) {\r
+                getLibInstances(saa[i][0]);\r
+                saa[i][3] = guidToName(saa[i][3]);\r
+            }\r
+            \r
             model.addRow(saa[i]);\r
             i++;\r
         }\r
@@ -449,7 +427,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
     private JScrollPane getJContentPane(){\r
         if (topScrollPane == null){\r
           topScrollPane = new JScrollPane();\r
-          topScrollPane.setSize(new java.awt.Dimension(634,500));\r
+          topScrollPane.setSize(new java.awt.Dimension(634,590));\r
           topScrollPane.setViewportView(getJContentPane1());\r
         }\r
         return topScrollPane;\r
@@ -461,74 +439,76 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
      **/\r
     private JPanel getJContentPane1() {\r
         if (jContentPane == null) {\r
-            jLabel6 = new JLabel();\r
-            jLabel6.setBounds(new java.awt.Rectangle(16,252,108,16));\r
-            jLabel6.setText("Supported Module");\r
-            jLabel6.setEnabled(true);\r
-            jLabel5 = new JLabel();\r
-            jLabel5.setBounds(new java.awt.Rectangle(16,215,93,16));\r
-            jLabel5.setText("Supported Arch");\r
-            jLabel5.setEnabled(true);\r
-            jLabel4 = new JLabel();\r
-            jLabel4.setBounds(new java.awt.Rectangle(16,138,196,16));\r
-            jLabel4.setEnabled(true);\r
-            jLabel4.setText("Recommended Instance Version");\r
-            jLabel3 = new JLabel();\r
-            jLabel3.setBounds(new java.awt.Rectangle(17,112,195,16));\r
-            jLabel3.setEnabled(true);\r
-            jLabel3.setText("Recommended Instance GUID");\r
-            jLabel2 = new JLabel();\r
-            jLabel2.setBounds(new java.awt.Rectangle(16,33,82,20));\r
-            jLabel2.setText("Help Text");\r
-            starLabel = new StarLabel();\r
-            starLabel.setBounds(new java.awt.Rectangle(1,33,10,20));\r
-            jLabel1 = new JLabel();\r
-            jLabel1.setBounds(new java.awt.Rectangle(16,6,82,20));\r
-            jLabel1.setText("Library Class");\r
+            // Library Class\r
             jStarLabel1 = new StarLabel();\r
             jStarLabel1.setLocation(new java.awt.Point(1,7));\r
+            jLabel1ClassName = new JLabel();\r
+            jLabel1ClassName.setBounds(new java.awt.Rectangle(16,6,82,20));\r
+            jLabel1ClassName.setText("Library Class");\r
+\r
+            // Help Text\r
+            starLabel = new StarLabel();\r
+            starLabel.setBounds(new java.awt.Rectangle(1,33,10,20));\r
+            jLabel2HelpText = new JLabel();\r
+            jLabel2HelpText.setBounds(new java.awt.Rectangle(16,33,82,20));\r
+            jLabel2HelpText.setText("Help Text");\r
+\r
+            // Header File\r
             jStarLabel2 = new StarLabel();\r
-            jStarLabel2.setLocation(new java.awt.Point(-1,74));\r
-            jLabel = new JLabel();\r
-            jLabel.setBounds(new java.awt.Rectangle(14,74,199,22));\r
-            jLabel.setText("Include Header for Specified Class");\r
+            jStarLabel2.setLocation(new java.awt.Point(1,74));\r
+            jLabelHdr = new JLabel();\r
+            jLabelHdr.setBounds(new java.awt.Rectangle(14,74,199,22));\r
+            jLabelHdr.setText("Include Header for Specified Class");\r
+\r
+            jLabel6SupModList = new JLabel();\r
+            jLabel6SupModList.setBounds(new java.awt.Rectangle(16,252,108,16));\r
+            jLabel6SupModList.setText("Supported Module");\r
+            jLabel6SupModList.setEnabled(true);\r
+\r
+            jLabel5SupArchList = new JLabel();\r
+            jLabel5SupArchList.setBounds(new java.awt.Rectangle(15,169,93,16));\r
+            jLabel5SupArchList.setText("Supported Arch");\r
+            jLabel5SupArchList.setEnabled(true);\r
+            jLabel4RecInstVer = new JLabel();\r
+            jLabel4RecInstVer.setBounds(new java.awt.Rectangle(16,138,196,16));\r
+            jLabel4RecInstVer.setEnabled(true);\r
+            jLabel4RecInstVer.setText("Recommended Instance Version");\r
+            jLabel3RecInstName = new JLabel();\r
+            jLabel3RecInstName.setBounds(new java.awt.Rectangle(17,112,195,16));\r
+            jLabel3RecInstName.setEnabled(true);\r
+            jLabel3RecInstName.setText("Recommended Instance Name");\r
             \r
             jContentPane = new JPanel();\r
             jContentPane.setPreferredSize(new Dimension(480, 400));\r
             jContentPane.setLayout(null);\r
-            jContentPane.add(jLabel, null);\r
+            jContentPane.add(jLabelHdr, null);\r
             jContentPane.add(jStarLabel1, null);\r
             jContentPane.add(jStarLabel2, null);\r
-            jContentPane.add(getJRadioButtonAdd(), null);\r
-            jContentPane.add(getJRadioButtonSelect(), null);\r
             jContentPane.add(getJTextFieldAdd(), null);\r
             jContentPane.add(getJComboBoxSelect(), null);\r
             jContentPane.add(getJScrollPane(), null);\r
             jContentPane.add(getJButtonAdd(), null);\r
             jContentPane.add(getJButtonRemove(), null);\r
-            jContentPane.add(getJButtonClearAll(), null);\r
-            jContentPane.add(getJButtonOk(), null);\r
+            jContentPane.add(getJButtonRemoveAll(), null);\r
             \r
-            jContentPane.add(getJTextField(), null);\r
+            jContentPane.add(getJTextFieldHdr(), null);\r
             jContentPane.add(getJButtonBrowse(), null);\r
-            jContentPane.add(jLabel1, null);\r
+            jContentPane.add(jLabel1ClassName, null);\r
             jContentPane.add(starLabel, null);\r
-            jContentPane.add(jLabel2, null);\r
+            jContentPane.add(jLabel2HelpText, null);\r
             jContentPane.add(getJTextFieldHelp(), null);\r
-            jContentPane.add(jLabel3, null);\r
-            jContentPane.add(getJTextField1(), null);\r
-            jContentPane.add(jLabel4, null);\r
-            jContentPane.add(getJTextField2(), null);\r
-            jContentPane.add(jLabel5, null);\r
-            jContentPane.add(getJCheckBox(), null);\r
-            jContentPane.add(getJCheckBox1(), null);\r
-            jContentPane.add(getJCheckBox2(), null);\r
-            jContentPane.add(getJCheckBox3(), null);\r
-            jContentPane.add(jLabel6, null);\r
+// LAH Removed until we can fix permanently\r
+//            jContentPane.add(jLabel3RecInstName, null);\r
+//            jContentPane.add(getJTextField1RecInstName(), null);\r
+//            jContentPane.add(jLabel4RecInstVer, null);\r
+//            jContentPane.add(getJTextField2RecInstVer(), null);\r
+            jContentPane.add(jLabel5SupArchList, null);\r
+            jContentPane.add(jLabel6SupModList, null);\r
+            \r
+            jContentPane.add(getJScrollPaneModules(), null);\r
+            jContentPane.add(getJScrollPane1Arch(), null);\r
+// LAH            jContentPane.add(getJComboBox(), null);\r
             \r
-            jContentPane.add(getJScrollPaneArch(), null);\r
-            jContentPane.add(getJCheckBox4(), null);\r
-            jContentPane.add(getJCheckBox5(), null);\r
         }\r
         \r
         return jContentPane;\r
@@ -584,33 +564,37 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
      */\r
     public void actionPerformed(ActionEvent arg0) {\r
         \r
-        docConsole.setSaved(false);\r
-        if (arg0.getSource() == jButtonOk) {\r
-            this.save();\r
-            this.dispose();\r
-\r
-        }\r
-\r
         if (arg0.getSource() == jButtonAdd) {\r
             \r
             //ToDo: check before add\r
-            String[] row = {null, null, null, jTextField1.getText(), jTextField2.getText(), null, null};\r
-            row[0] = jTextFieldAdd.getText();\r
-            row[1] = jTextField.getText().replace('\\', '/');\r
-            row[2] = jTextFieldHelp.getText();\r
-            row[5] = booleanToString(jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected(), jCheckBox5.isSelected());\r
-            if (row[5].length() == 0){\r
-                row[5] = null;\r
+            // LAH WAS String[] row = {null, null, null, jComboBox.getSelectedItem()+"", jTextField2RecInstVer.getText(), null, null};\r
+            String[] row = {null, null, null, null, null, null, null};\r
+            row[cnClassName] = jTextFieldAdd.getText();\r
+            row[cnHdrFile] = jTextFieldHdr.getText().replace('\\', '/');\r
+            row[cnHelpText] = jTextFieldHelp.getText();\r
+            row[cnSupArch] = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
+            if (row[cnSupArch].length() == 0) {\r
+                row[cnSupArch] = null;\r
             }\r
-            row[6] = vectorToString(iCheckBoxListArch.getAllCheckedItemsString());\r
-            if (row[6].length() == 0){\r
-                row[6] = null;\r
+            row[cnSupMod] = vectorToString(iCheckBoxListModules.getAllCheckedItemsString());\r
+            if (row[cnSupMod].length() == 0){\r
+                row[cnSupMod] = null;\r
             }\r
             if (!dataValidation(row)) {\r
                 return;\r
             }\r
             model.addRow(row);\r
-            sfc.genSpdLibClassDeclarations(row[0], row[3], row[1], row[2], row[5], null, null, row[4], null, row[6]);\r
+            jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
+            docConsole.setSaved(false);\r
+            //\r
+            //convert to GUID before storing recommended lib instance.\r
+            //\r
+            getLibInstances(row[0]);\r
+\r
+// LAH            recommendGuid = nameToGuid(row[3]);\r
+\r
+// LAH WAS             sfc.genSpdLibClassDeclarations(row[0], recommendGuid, row[1], row[2], row[5], null, null, row[4], null, row[6]);\r
+            sfc.genSpdLibClassDeclarations(row[cnClassName], null, row[cnHdrFile], row[cnHelpText], row[cnSupArch], null, null, row[cnRecInstVer], null, row[cnSupMod]);\r
             \r
         }\r
         //\r
@@ -627,7 +611,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
             }\r
         }\r
 \r
-        if (arg0.getSource() == jButtonClearAll) {\r
+        if (arg0.getSource() == jButtonRemoveAll) {\r
             if (model.getRowCount() == 0) {\r
                 return;\r
             }\r
@@ -635,44 +619,18 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
             model.setRowCount(0);\r
             sfc.removeSpdLibClass();\r
         }\r
-\r
-        if (arg0.getSource() == jRadioButtonAdd) {\r
-            if (jRadioButtonAdd.isSelected()) {\r
-                jRadioButtonSelect.setSelected(false);\r
-                jTextFieldAdd.setEnabled(true);\r
-                jComboBoxSelect.setEnabled(false);\r
-            }\r
-            if (!jRadioButtonSelect.isSelected() && !jRadioButtonAdd.isSelected()) {\r
-                jRadioButtonAdd.setSelected(true);\r
-                jTextFieldAdd.setEnabled(true);\r
-                jComboBoxSelect.setEnabled(false);\r
-            }\r
-        }\r
-\r
-        if (arg0.getSource() == jRadioButtonSelect) {\r
-            if (jRadioButtonSelect.isSelected()) {\r
-                jRadioButtonAdd.setSelected(false);\r
-                jTextFieldAdd.setEnabled(false);\r
-                jComboBoxSelect.setEnabled(true);\r
-            }\r
-            if (!jRadioButtonSelect.isSelected() && !jRadioButtonAdd.isSelected()) {\r
-                jRadioButtonSelect.setSelected(true);\r
-                jTextFieldAdd.setEnabled(false);\r
-                jComboBoxSelect.setEnabled(true);\r
-            }\r
-        }\r
     }\r
 \r
     private boolean dataValidation(String[] row) {\r
-        if (!DataValidation.isKeywordType(row[0])) {\r
+        if (!DataValidation.isKeywordType(row[cnClassName])) {\r
             JOptionPane.showMessageDialog(frame, "Library Class is NOT KeyWord Type.");\r
             return false;\r
         }\r
-        if (!DataValidation.isPathAndFilename(row[1])) {\r
+        if (!DataValidation.isPathAndFilename(row[cnHdrFile])) {\r
             JOptionPane.showMessageDialog(frame, "Include Header is NOT PathAndFilename Type.");\r
         }\r
-        if (row[2].length() == 0) {\r
-            JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");\r
+        if (row[cnHelpText].length() == 0) {\r
+            JOptionPane.showMessageDialog(frame, "Help Text Must NOT be empty.");\r
         }\r
         return true;\r
     }\r
@@ -688,13 +646,13 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
        \r
       @return javax.swing.JTextField   \r
      **/\r
-    private JTextField getJTextField() {\r
-        if (jTextField == null) {\r
-            jTextField = new JTextField();\r
-            jTextField.setBounds(new java.awt.Rectangle(221,75,290,21));\r
-            jTextField.setPreferredSize(new java.awt.Dimension(260,20));\r
+    private JTextField getJTextFieldHdr() {\r
+        if (jTextFieldHdr == null) {\r
+            jTextFieldHdr = new JTextField();\r
+            jTextFieldHdr.setBounds(new java.awt.Rectangle(218,75,305,21));\r
+            jTextFieldHdr.setPreferredSize(new java.awt.Dimension(260,20));\r
         }\r
-        return jTextField;\r
+        return jTextFieldHdr;\r
     }\r
 \r
     /**\r
@@ -705,9 +663,9 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
     private JButton getJButtonBrowse() {\r
         if (jButtonBrowse == null) {\r
             jButtonBrowse = new JButton();\r
-            jButtonBrowse.setBounds(new java.awt.Rectangle(528,75,90,20));\r
+            jButtonBrowse.setBounds(new java.awt.Rectangle(527,75,90,20));\r
             jButtonBrowse.setText("Browse");\r
-            jButtonBrowse.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonBrowse.setPreferredSize(new java.awt.Dimension(99,20));\r
             jButtonBrowse.addActionListener(new AbstractAction() {\r
                 \r
                 /**\r
@@ -744,7 +702,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
                     \r
                     headerDest = theFile.getPath();\r
                     int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());\r
-                    jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
+                    jTextFieldHdr.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
                \r
                 }\r
 \r
@@ -758,7 +716,7 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
         \r
         resizeComponentWidth(this.jTextFieldAdd, this.getWidth(), intPreferredWidth);\r
         resizeComponentWidth(this.jTextFieldHelp, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
+        resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth-10);\r
         \r
     }\r
     /**\r
@@ -776,107 +734,48 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
     }\r
 \r
     /**\r
-     * This method initializes jTextField1     \r
+     * This method initializes jTextField1RecInstName  \r
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField1() {\r
-        if (jTextField1 == null) {\r
-            jTextField1 = new JTextField();\r
-            jTextField1.setBounds(new java.awt.Rectangle(220,110,291,20));\r
-            jTextField1.setEnabled(true);\r
+    private JTextField getJTextField1RecInstName() {\r
+        if (jTextField1RecInstName == null) {\r
+            jTextField1RecInstName = new JTextField();\r
+            jTextField1RecInstName.setBounds(new java.awt.Rectangle(218,110,291,20));\r
+            jTextField1RecInstName.setEnabled(true);\r
+            jTextField1RecInstName.setVisible(false);\r
         }\r
-        return jTextField1;\r
+        return jTextField1RecInstName;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField2     \r
+     * This method initializes jTextField2RecInstVer   \r
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField2() {\r
-        if (jTextField2 == null) {\r
-            jTextField2 = new JTextField();\r
-            jTextField2.setBounds(new java.awt.Rectangle(218,135,292,20));\r
-            jTextField2.setEnabled(true);\r
+    private JTextField getJTextField2RecInstVer() {\r
+        if (jTextField2RecInstVer == null) {\r
+            jTextField2RecInstVer = new JTextField();\r
+            jTextField2RecInstVer.setBounds(new java.awt.Rectangle(218,135,292,20));\r
+            jTextField2RecInstVer.setEnabled(true);\r
         }\r
-        return jTextField2;\r
+        return jTextField2RecInstVer;\r
     }\r
 \r
-    /**\r
-     * This method initializes jCheckBox       \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\r
-    private JCheckBox getJCheckBox() {\r
-        if (jCheckBox == null) {\r
-            jCheckBox = new JCheckBox();\r
-            jCheckBox.setBounds(new java.awt.Rectangle(123,213,57,21));\r
-            jCheckBox.setText("IA32");\r
-            jCheckBox.setPreferredSize(new java.awt.Dimension(21,20));\r
-        }\r
-        return jCheckBox;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jCheckBox1      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\r
-    private JCheckBox getJCheckBox1() {\r
-        if (jCheckBox1 == null) {\r
-            jCheckBox1 = new JCheckBox();\r
-            jCheckBox1.setBounds(new java.awt.Rectangle(182,213,49,20));\r
-            jCheckBox1.setText("X64");\r
-            jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));\r
-        }\r
-        return jCheckBox1;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jCheckBox2      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\r
-    private JCheckBox getJCheckBox2() {\r
-        if (jCheckBox2 == null) {\r
-            jCheckBox2 = new JCheckBox();\r
-            jCheckBox2.setText("IPF");\r
-            jCheckBox2.setSize(new java.awt.Dimension(50,20));\r
-            jCheckBox2.setLocation(new java.awt.Point(237,213));\r
-            jCheckBox2.setPreferredSize(new java.awt.Dimension(21,20));\r
-        }\r
-        return jCheckBox2;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jCheckBox3      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\r
-    private JCheckBox getJCheckBox3() {\r
-        if (jCheckBox3 == null) {\r
-            jCheckBox3 = new JCheckBox();\r
-            jCheckBox3.setBounds(new java.awt.Rectangle(286,213,50,20));\r
-            jCheckBox3.setText("EBC");\r
-            jCheckBox3.setPreferredSize(new java.awt.Dimension(21,20));\r
+    private JScrollPane getJScrollPaneModules() {\r
+        if (jScrollPaneModules == null) {\r
+            jScrollPaneModules = new JScrollPane();\r
+            jScrollPaneModules.setBounds(new java.awt.Rectangle(218,245,293,73));\r
+            jScrollPaneModules.setPreferredSize(new java.awt.Dimension(320, 80));\r
+            jScrollPaneModules.setViewportView(getICheckBoxListSupportedModules());\r
         }\r
-        return jCheckBox3;\r
-    }\r
-\r
-    private JScrollPane getJScrollPaneArch() {\r
-        if (jScrollPaneArch == null) {\r
-            jScrollPaneArch = new JScrollPane();\r
-            jScrollPaneArch.setBounds(new java.awt.Rectangle(130,252,230,88));\r
-            jScrollPaneArch.setPreferredSize(new java.awt.Dimension(320, 80));\r
-            jScrollPaneArch.setViewportView(getICheckBoxListSupportedArchitectures());\r
-        }\r
-        return jScrollPaneArch;\r
+        return jScrollPaneModules;\r
     }\r
     \r
-    private ICheckBoxList getICheckBoxListSupportedArchitectures() {\r
-        if (iCheckBoxListArch == null) {\r
-            iCheckBoxListArch = new ICheckBoxList();\r
+    private ICheckBoxList getICheckBoxListSupportedModules() {\r
+        if (iCheckBoxListModules == null) {\r
+            iCheckBoxListModules = new ICheckBoxList();\r
+            iCheckBoxListModules.setBounds(new java.awt.Rectangle(218,246,292,73));\r
             Vector<String> v = new Vector<String>();\r
             v.add("BASE");\r
             v.add("SEC");\r
@@ -890,32 +789,9 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
             v.add("UEFI_DRIVER");\r
             v.add("UEFI_APPLICATION");\r
             v.add("USER_DEFINED");\r
-            iCheckBoxListArch.setAllItems(v);\r
+            iCheckBoxListModules.setAllItems(v);\r
         }\r
-        return iCheckBoxListArch;\r
-    }\r
-    \r
-    private String booleanToString(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6){\r
-        String s = " ";\r
-        if (b1){\r
-            s += "IA32 ";\r
-        }\r
-        if (b2){\r
-            s += "X64 ";\r
-        }\r
-        if (b3){\r
-            s += "IPF ";\r
-        }\r
-        if (b4){\r
-            s += "EBC ";\r
-        }\r
-        if (b5){\r
-            s += "ARM ";\r
-        }\r
-        if (b6){\r
-            s += "PPC ";\r
-        }\r
-        return s.trim();\r
+        return iCheckBoxListModules;\r
     }\r
     \r
     private String vectorToString(Vector<String> v) {\r
@@ -926,39 +802,125 @@ public class SpdLibClassDecls extends IInternalFrame implements TableModelListen
         }\r
         return s.trim();\r
     }\r
+    \r
+    private JScrollPane getJScrollPane1Arch() {\r
+        if (jScrollPane1Arch == null) {\r
+            jScrollPane1Arch = new JScrollPane();\r
+            jScrollPane1Arch.setBounds(new java.awt.Rectangle(218,170,293,73));\r
+            jScrollPane1Arch.setPreferredSize(new java.awt.Dimension(320, 80));\r
+            jScrollPane1Arch.setViewportView(getICheckBoxList());\r
+        }\r
+        return jScrollPane1Arch;\r
+    }\r
     /**\r
-     * This method initializes jCheckBox4      \r
+     * This method initializes iCheckBoxList   \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList     \r
      */\r
-    private JCheckBox getJCheckBox4() {\r
-        if (jCheckBox4 == null) {\r
-            jCheckBox4 = new JCheckBox();\r
-            jCheckBox4.setBounds(new java.awt.Rectangle(343,213,60,20));\r
-            jCheckBox4.setText("ARM");\r
-            jCheckBox4.setPreferredSize(new Dimension(60, 20));\r
+    private ICheckBoxList getICheckBoxList() {\r
+        if (iCheckBoxList == null) {\r
+            iCheckBoxList = new ICheckBoxList();\r
+            iCheckBoxList.setBounds(new java.awt.Rectangle(218,171,292,66));\r
+            Vector<String> v = new Vector<String>();\r
+            v.add("IA32");\r
+            v.add("X64");\r
+            v.add("IPF");\r
+            v.add("EBC");\r
+            v.add("ARM");\r
+            v.add("PPC");\r
+            iCheckBoxList.setAllItems(v);\r
         }\r
-        return jCheckBox4;\r
+        return iCheckBoxList;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox5      \r
+     * This method initializes jComboBox       \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JComboBox   \r
      */\r
-    private JCheckBox getJCheckBox5() {\r
-        if (jCheckBox5 == null) {\r
-            jCheckBox5 = new JCheckBox();\r
-            jCheckBox5.setBounds(new java.awt.Rectangle(400,213,60,20));\r
-            jCheckBox5.setText("PPC");\r
-            jCheckBox5.setPreferredSize(new Dimension(60, 20));\r
+    private JComboBox getJComboBox() {\r
+        if (jComboBox == null) {\r
+            jComboBox = new JComboBox();\r
+            jComboBox.setPreferredSize(new java.awt.Dimension(31,20));\r
+            jComboBox.setSize(new java.awt.Dimension(290,20));\r
+            jComboBox.setLocation(new java.awt.Point(218,111));\r
+            jComboBox.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusGained(java.awt.event.FocusEvent e) {\r
+                    if (jTextFieldAdd.getText().length() == 0) {\r
+                        return;\r
+                    }\r
+                    jComboBox.removeAllItems();\r
+                    getLibInstances(jTextFieldAdd.getText());\r
+                    Set<String> libNames = libNameGuidMap.keySet();\r
+                    Iterator<String> si = libNames.iterator();\r
+                    while(si.hasNext()) {\r
+                        jComboBox.addItem(si.next());\r
+                    }\r
+                }\r
+            });\r
+         \r
         }\r
-        return jCheckBox5;\r
+        return jComboBox;\r
     }\r
 \r
-    public static void main(String[] args){\r
-        new SpdLibClassDecls().setVisible(true);\r
+    private void getLibInstances(String libClass){\r
+        libNameGuidMap.clear();\r
+        try {\r
+            GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
+        \r
+            Set<PackageIdentification> spi = GlobalData.getPackageList();\r
+            Iterator ispi = spi.iterator();\r
+            \r
+            while (ispi.hasNext()) {\r
+                PackageIdentification pi = (PackageIdentification) ispi.next();\r
+\r
+                Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
+                Iterator ismi = smi.iterator();\r
+                while (ismi.hasNext()) {\r
+                    ModuleIdentification mi = (ModuleIdentification) ismi.next();\r
+                    Map<String, XmlObject> m = GlobalData.getNativeMsa(mi);\r
+                    SurfaceAreaQuery.setDoc(m);\r
+                    String[] classProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
+                    for (int i = 0; i < classProduced.length; ++i) {\r
+                        if (classProduced[i].equals(libClass)) {\r
+                            libNameGuidMap.put(mi.getName(), mi.getGuid());\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        catch(Exception e){\r
+            JOptionPane.showMessageDialog(frame, "Search Instances Fail.");\r
+        }\r
+        \r
+    }\r
+\r
+    private String nameToGuid(String name) {\r
+        String s = "";\r
+        if (!libNameGuidMap.containsKey(name)) {\r
+            return s;\r
+        }\r
+        \r
+        s = libNameGuidMap.get(name);\r
+        return s;\r
     }\r
+    \r
+    private String guidToName(String guid){\r
+        String s = "";\r
+        if (!libNameGuidMap.containsValue(guid)) {\r
+            return s;\r
+        }\r
+        Set<String> key = libNameGuidMap.keySet();\r
+        Iterator<String> is = key.iterator();\r
+        while(is.hasNext()) {\r
+            s = is.next();\r
+            if (libNameGuidMap.get(s).equals(guid)) {\r
+                break;\r
+            }\r
+        }\r
+        return s;\r
+    }\r
+\r
 }\r
 \r
 \r