]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdModuleSA.java
Add null pointer check to drop-down list of platform Pcd editor.
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdModuleSA.java
index db54307c4343afeb04c2d3d119a0bbca8085b93b..1fd0210613f83f32d8aa9d3e2392e186e1d2189c 100644 (file)
@@ -160,6 +160,9 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         jTabbedPane.setSelectedIndex(0);\r
         initPcdBuildDefinition(i);\r
         ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
+        if (mi == null) {\r
+            return;\r
+        }\r
         int tabIndex = jTabbedPane.indexOfTab("Libraries");\r
         if (mi.isLibrary()) {\r
             jTabbedPane.setEnabledAt(tabIndex, false);\r
@@ -193,18 +196,24 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     }\r
     \r
     public void initLibraries(String key) {\r
+        libClassTableModel.setRowCount(0);\r
+        libInstanceTableModel.setRowCount(0);\r
+        selectedInstancesTableModel.setRowCount(0);\r
+        Vector<String> errorMsg = new Vector<String>();\r
         try {\r
             //\r
             // display library classes that need to be resolved. also potential instances for them.\r
             //\r
-            resolveLibraryInstances(moduleKey);\r
+            resolveLibraryInstances(moduleKey, errorMsg);\r
         } catch (Exception e) {\r
-            JOptionPane.showMessageDialog(frame, e.getCause() + " " + e.getMessage());\r
+            String exceptionMsg = e.getCause() + " " + e.getMessage();\r
+            errorMsg.add(exceptionMsg);\r
+            JOptionPane.showMessageDialog(frame, exceptionMsg);\r
         }\r
         //\r
         // display lib instances already selected for key\r
         //\r
-        selectedInstancesTableModel.setRowCount(0);\r
+        \r
         int instanceCount = ffc.getLibraryInstancesCount(key);\r
         if (instanceCount != 0) {\r
             String[][] saa = new String[instanceCount][5];\r
@@ -223,15 +232,25 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                     // re-evaluate lib instance usage when adding a already-selected lib instance.\r
                     //\r
                     try {\r
-                        resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4]);\r
+                        resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4], errorMsg);\r
                     } catch (Exception e) {\r
-                        JOptionPane.showMessageDialog(frame, e.getCause() + " " + e.getMessage());\r
+                        String exceptionMsg = e.getCause() + " " + e.getMessage();\r
+                        if (!errorMsg.contains(exceptionMsg)) {\r
+                            JOptionPane.showMessageDialog(frame, e.getCause() + " " + e.getMessage());\r
+                        }\r
                     }\r
                     selectedInstancesTableModel.addRow(saa[i]);\r
                 }\r
             }\r
         }\r
 \r
+        if (errorMsg.size() > 0) {\r
+            String errors = "";\r
+            for (int i = 0; i < errorMsg.size(); ++i) {\r
+                errors += " " + errorMsg.get(i) + "\n";\r
+            }\r
+            JOptionPane.showMessageDialog(frame, errors);\r
+        }\r
         showClassToResolved();\r
     }\r
     \r
@@ -323,7 +342,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         }\r
     }\r
     \r
-    private void resolveLibraryInstances(String key) throws MultipleInstanceException, NoInstanceException{\r
+    private void resolveLibraryInstances(String key, Vector<String> errorMsg) throws MultipleInstanceException, NoInstanceException{\r
         ModuleIdentification mi = WorkspaceProfile.getModuleId(key);\r
         PackageIdentification[] depPkgList = null;\r
         \r
@@ -398,7 +417,12 @@ public class FpdModuleSA extends JDialog implements ActionListener {
             }\r
             ArrayList<String> instances = getInstancesForClass(cls, depPkgList);\r
             if (instances.size() == 0) {\r
-                throw new NoInstanceException (cls.className);\r
+//                throw new NoInstanceException (cls.className);\r
+                String exceptionMsg = new NoInstanceException (cls.className).getMessage();\r
+                if (!errorMsg.contains(exceptionMsg)) {\r
+                    errorMsg.add(exceptionMsg);    \r
+                }\r
+                \r
             }\r
             classInstanceMap.put(cls, instances);\r
 \r
@@ -475,7 +499,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
         Iterator<LibraryClassDescriptor> lcdi = this.classConsumed.keySet().iterator();\r
         while (lcdi.hasNext()) {\r
             LibraryClassDescriptor lcd = lcdi.next();\r
-            if (lcd.className.equals(className)) {\r
+            if ((lcd.className != null) && lcd.className.equals(className)) {\r
                 return this.classConsumed.get(lcd);\r
             }\r
         }\r
@@ -538,6 +562,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
     \r
     private void showClassToResolved(){\r
         libClassTableModel.setRowCount(0);\r
+        libInstanceTableModel.setRowCount(0);\r
         if (classConsumed == null || classConsumed.size() == 0) {\r
             return;\r
         }\r
@@ -553,7 +578,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                 libClassTableModel.addRow(s);\r
             }\r
         }\r
-        libInstanceTableModel.setRowCount(0);\r
+        \r
     }\r
     \r
     private void addLibInstance (ModuleIdentification libMi) throws Exception{\r
@@ -723,7 +748,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         jTextFieldMaxDatumSize.setText(model.getValueAt(selectedRow, 4)+"");\r
                         jTextFieldPcdDefault.setEnabled(true);\r
                         jTextFieldPcdDefault.setText(model.getValueAt(selectedRow, 6)+"");\r
-                        if (model.getValueAt(selectedRow, 5).equals("VOID*")) {\r
+                        if ((model.getValueAt(selectedRow, 5) != null) && model.getValueAt(selectedRow, 5).equals("VOID*")) {\r
                             if (pcdInfo[1].equals("FEATURE_FLAG")) {\r
                                 jTextFieldMaxDatumSize.setVisible(false);\r
                             }\r
@@ -1164,7 +1189,7 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                         addLibInstance (libMi);\r
                     }\r
                     catch (Exception exception) {\r
-                        JOptionPane.showMessageDialog(frame, "Adding Instance" + libMi.getName() + ": "+ exception.getMessage());\r
+                        JOptionPane.showMessageDialog(frame, "Adding Instance " + libMi.getName() + " : \n"+ exception.getMessage());\r
                         return;\r
                     }\r
                     docConsole.setSaved(false);\r
@@ -1172,12 +1197,22 @@ public class FpdModuleSA extends JDialog implements ActionListener {
                                   libInstanceTableModel.getValueAt(row, 2), libInstanceTableModel.getValueAt(row, 3),\r
                                   libInstanceTableModel.getValueAt(row, 4)};\r
                     selectedInstancesTableModel.addRow(s);\r
+                    \r
+                    Vector<String> errorMsg = new Vector<String>();\r
                     try {\r
-                        resolveLibraryInstances(instanceValue);\r
+                        resolveLibraryInstances(instanceValue, errorMsg);\r
                     }\r
                     catch (Exception exp) {\r
                         JOptionPane.showMessageDialog(frame, exp.getMessage());\r
                     }\r
+                    \r
+                    if (errorMsg.size() > 0) {\r
+                        String errors = "";\r
+                        for (int i = 0; i < errorMsg.size(); ++i) {\r
+                            errors += " " + errorMsg.get(i) + "\n";\r
+                        }\r
+                        JOptionPane.showMessageDialog(frame, errors);\r
+                    }\r
                     showClassToResolved();\r
                 }\r
             });\r
@@ -1660,25 +1695,22 @@ private JComboBox getJComboBoxItemType() {
     if (jComboBoxItemType == null) {\r
         jComboBoxItemType = new JComboBox();\r
         jComboBoxItemType.setPreferredSize(new java.awt.Dimension(200,20));\r
-//        jComboBoxItemType.addItemListener(new java.awt.event.ItemListener() {\r
-//            public void itemStateChanged(java.awt.event.ItemEvent e) {\r
-//                \r
-//                int row = jTablePcd.getSelectedRow();\r
-//                if (row < 0 || model.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {\r
-//                    return;\r
-//                }\r
-//                    if (!jComboBoxItemType.getSelectedItem().equals("DYNAMIC")) {\r
-//                        \r
-//                        if (jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
-//                            jTextFieldPcdDefault.setText("");\r
-//                            jTextFieldPcdDefault.setEnabled(true);\r
-//                        }\r
-//                    }\r
-//                    else{\r
-//                        \r
-//                    }\r
-//                }\r
-//        });\r
+        jComboBoxItemType.addItemListener(new java.awt.event.ItemListener() {\r
+            public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                \r
+                int row = jTablePcd.getSelectedRow();\r
+                if (row < 0 || model.getValueAt(row, 2).equals(jComboBoxItemType.getSelectedItem())) {\r
+                    return;\r
+                }\r
+                        \r
+                if (jComboBoxItemType.getSelectedItem() != null && jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
+                                   jTextFieldPcdDefault.setEnabled(true);\r
+                }\r
+                else {\r
+                       jTextFieldPcdDefault.setEnabled(false);\r
+                }\r
+            }        \r
+        });\r
     }\r
     return jComboBoxItemType;\r
 }\r
@@ -1717,7 +1749,7 @@ private void pcdNonDynamicToDynamic(String cName, String tsGuid) {
         al.set(i, mKey + " " + itemType);\r
     }\r
     try{\r
-        ffc.addDynamicPcdBuildData(cName, jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 3), tsGuid, "DYNAMIC", jTablePcd.getValueAt(jTablePcd.getSelectedRow(), 5)+"", jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
+        ffc.addDynamicPcdBuildData(cName, model.getValueAt(jTablePcd.getSelectedRow(), 3), tsGuid, "DYNAMIC", model.getValueAt(jTablePcd.getSelectedRow(), 5)+"", jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
     }\r
     catch(Exception e){\r
         JOptionPane.showMessageDialog(frame, "PCD value format: " + e.getMessage());\r
@@ -1783,25 +1815,37 @@ private JButton getJButtonUpdatePcd() {
                 String cName = model.getValueAt(row, 0)+"";\r
                 String tsGuid = model.getValueAt(row, 1)+"";\r
                 String oldItemType = model.getValueAt(row, 2)+"";\r
+                String dataType = model.getValueAt(row, 5)+"";\r
                 String newItemType = jComboBoxItemType.getSelectedItem()+"";\r
+                String newValue = jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem()+""; \r
+                if (newValue.length() == 0){\r
                 \r
-                model.setValueAt(jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem(), row, 6);\r
+                    if (dataType.equals("UINT8") || dataType.equals("UINT16") || dataType.equals("UINT32") || dataType.equals("UINT64")) {\r
+                        newValue = "0";\r
+                    }\r
+                    if (dataType.equals("BOOLEAN")){\r
+                        newValue = "FALSE";\r
+                    }\r
+                    if (dataType.equals("VOID*")) {\r
+                        newValue = "L\"\"";\r
+                    }\r
+                }\r
                 \r
                 String[] pcdInfo = {"", "", ""};\r
                 Vector<String> validPcdTypes = new Vector<String>();\r
                 getPcdInfo (moduleKey, cName, tsGuid, pcdInfo, validPcdTypes);\r
                 if (pcdInfo[1].equals("FIXED_AT_BUILD") && model.getValueAt(row, 5).equals("VOID*")) {\r
                     try {\r
-                        jTextFieldMaxDatumSize.setText(ffc.setMaxSizeForPointer(model.getValueAt(row, 6)+"")+"");\r
+                        jTextFieldMaxDatumSize.setText(ffc.setMaxSizeForPointer(newValue)+"");\r
                     }\r
                     catch (Exception exp) {\r
                         JOptionPane.showMessageDialog(frame, "PCD Value MalFormed: " + exp.getMessage());\r
                         return;\r
                     }\r
                 }\r
-                model.setValueAt(jTextFieldMaxDatumSize.getText(), row, 4);\r
+                String newMaxDatumSize = jTextFieldMaxDatumSize.getText();\r
                 \r
-                if (newItemType != oldItemType) {\r
+                if (!newItemType.equals(oldItemType)) {\r
                     Vector<ModuleIdentification> moduleInfo = new Vector<ModuleIdentification>();\r
                     try {\r
                         boolean changable = itemTypeCouldBeChanged (cName, tsGuid, newItemType, moduleInfo);\r
@@ -1827,8 +1871,11 @@ private JButton getJButtonUpdatePcd() {
                     model.setValueAt(newItemType, row, 2);\r
                 }\r
                 \r
-                ffc.updatePcdData(moduleKey, cName, tsGuid, model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+"");\r
+                ffc.updatePcdData(moduleKey, cName, tsGuid, model.getValueAt(row, 2)+"", newMaxDatumSize, newValue);\r
                 docConsole.setSaved(false);\r
+                model.setValueAt(newValue, row, 6);\r
+                model.setValueAt(newMaxDatumSize, row, 4);\r
+                \r
             }\r
         });\r
     }\r