]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Remove empty FfsFileNameGuid element under ModuleSaBuildOptions if user input empty...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
index f9abe9d01794a36e00af9aab61a2ba8a081038a4..f79318848918e1a1358c9e9c38091ff85831b7ce 100644 (file)
@@ -5,7 +5,6 @@ import java.awt.BorderLayout;
 import javax.swing.JFrame;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JPanel;\r
-import javax.swing.JDialog;\r
 import javax.swing.JSplitPane;\r
 import javax.swing.JLabel;\r
 import javax.swing.JScrollPane;\r
@@ -15,6 +14,7 @@ import javax.swing.ListSelectionModel;
 import javax.swing.table.DefaultTableModel;\r
 \r
 import org.tianocore.PlatformSurfaceAreaDocument;\r
+import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.platform.ui.global.GlobalData;\r
 import org.tianocore.frameworkwizard.platform.ui.id.ModuleIdentification;\r
@@ -27,9 +27,14 @@ import java.util.HashMap;
 import java.util.Iterator;\r
 import java.util.Map;\r
 import java.util.Set;\r
+import java.util.Vector;\r
 \r
 public class FpdFrameworkModules extends IInternalFrame {\r
 \r
+    /**\r
+     * \r
+     */\r
+    private static final long serialVersionUID = 1L;\r
     static JFrame frame;\r
     private JSplitPane jSplitPane = null;\r
     private JPanel jPanel = null;\r
@@ -51,8 +56,8 @@ public class FpdFrameworkModules extends IInternalFrame {
     private FpdModuleSA settingDlg = null;\r
     \r
     private FpdFileContents ffc = null;\r
-    \r
-    private Map<String, String> fpdMsa = null;\r
+    private OpeningPlatformType docConsole = null;\r
+    private Map<String, ArrayList<String>> fpdMsa = null;\r
     \r
     private ArrayList<ModuleIdentification> miList = null;\r
 \r
@@ -131,11 +136,12 @@ public class FpdFrameworkModules extends IInternalFrame {
         if (jTable == null) {\r
             model = new NonEditableTableModel();\r
             jTable = new JTable(model);\r
+            jTable.setRowHeight(20);\r
             model.addColumn("ModuleName");\r
-            model.addColumn("ModuleGUID");\r
             model.addColumn("ModuleVersion");\r
-            model.addColumn("PackageGUID");\r
+            model.addColumn("PackageName");\r
             model.addColumn("PackageVersion");\r
+            model.addColumn("Path");\r
             \r
             jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
         }\r
@@ -175,23 +181,69 @@ public class FpdFrameworkModules extends IInternalFrame {
                         return;\r
                     }\r
                     \r
-                    String mg = (String)model.getValueAt(selectedRow, 1);\r
-                    String mv = (String)model.getValueAt(selectedRow, 2);\r
-                    String pg = (String)model.getValueAt(selectedRow, 3);\r
-                    String pv = (String)model.getValueAt(selectedRow, 4);\r
-                    if (fpdMsa.containsKey(mg + mv + pg + pv)) {\r
+                    String path = model.getValueAt(selectedRow, 4)+"";\r
+                    ModuleIdentification mi = miList.get(selectedRow);\r
+                    Vector<String> vArchs = null;\r
+                    try {\r
+                        vArchs = GlobalData.getModuleSupArchs(mi);\r
+                    }\r
+                    catch (Exception exp) {\r
+                        JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+                    }\r
+                    \r
+                    if (vArchs == null) {\r
+                        JOptionPane.showMessageDialog(frame, "No supported Archs specified in MSA file.");\r
+                        return;\r
+                    }\r
+                    \r
+                    String archsAdded = "";\r
+                    String mg = mi.getGuid();\r
+                    String mv = mi.getVersion();\r
+                    String pg = mi.getPackage().getGuid();\r
+                    String pv = mi.getPackage().getVersion();\r
+                    \r
+                    ArrayList<String> al = fpdMsa.get(mg + mv + pg + pv);\r
+                    if (al == null) {\r
+                        al = new ArrayList<String>();\r
+                        fpdMsa.put(mg + mv + pg + pv, al);\r
+                    }\r
+                    for (int i = 0; i < al.size(); ++i) {\r
+                        vArchs.remove(al.get(i));\r
+                    }\r
+                    //\r
+                    // Archs this Module supported have already been added.\r
+                    //\r
+                    if (vArchs.size() == 0) {\r
                         JOptionPane.showMessageDialog(frame, "This Module Already Added.");\r
                         return;\r
                     }\r
                     //ToDo put Arch instead of null\r
-                    fpdMsa.put(mg + mv + pg + pv, null);\r
-                    \r
-                    String[] row = {" ", mg, mv, pg, pv};\r
-                    if (getModuleId(mg + " " + mv + " " + pg + " " + pv) != null) {\r
-                        row[0] = getModuleId(mg + " " + mv + " " + pg + " " + pv).getName();\r
+                    for (int i = 0; i < vArchs.size(); ++i) {\r
+                        String arch = vArchs.get(i);\r
+                        al.add(arch);\r
+                        archsAdded += arch + " ";\r
+                        String[] row = {"", mv, "", pv, arch, path};\r
+                        \r
+                       if (mi != null) {\r
+                           row[0] = mi.getName();\r
+                           row[2] = mi.getPackage().getName();\r
+                           \r
+                       }\r
+                       model1.addRow(row);\r
+                       \r
+                       docConsole.setSaved(false);\r
+                       try{\r
+                           //ToDo : specify archs need to add.\r
+                           ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
+                       }\r
+                       catch (Exception exception) {\r
+                           JOptionPane.showMessageDialog(frame, "PCD Insertion Fail. " + exception.getMessage());\r
+                       }\r
                     }\r
-                    model1.addRow(row);\r
-                    ffc.addFrameworkModulesPcdBuildDefs(miList.get(selectedRow), null);\r
+                    \r
+                    \r
+                    JOptionPane.showMessageDialog(frame, "This Module with Arch "+ archsAdded +" Added Successfully.");\r
+                    jTable1.changeSelection(model1.getRowCount()-1, 0, false, false);\r
                 }\r
             });\r
         }\r
@@ -238,12 +290,13 @@ public class FpdFrameworkModules extends IInternalFrame {
         if (jTable1 == null) {\r
             model1 = new NonEditableTableModel();\r
             jTable1 = new JTable(model1);\r
+            jTable1.setRowHeight(20);\r
             model1.addColumn("ModuleName");\r
-            model1.addColumn("ModuleGUID");\r
             model1.addColumn("ModuleVersion");            \r
-            model1.addColumn("PackageGUID");\r
+            model1.addColumn("PackageName");\r
             model1.addColumn("PackageVersion");\r
-//            model1.addColumn("SupportedArch");\r
+            model1.addColumn("SupportedArch");\r
+            model1.addColumn("Path");\r
             \r
             jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
         }\r
@@ -270,11 +323,14 @@ public class FpdFrameworkModules extends IInternalFrame {
                         settingDlg = new FpdModuleSA(ffc);\r
                     }\r
                     \r
-                    String mg = model1.getValueAt(selectedRow, 1).toString();\r
-                    String mv = model1.getValueAt(selectedRow, 2).toString();\r
-                    String pg = model1.getValueAt(selectedRow, 3).toString();\r
-                    String pv = model1.getValueAt(selectedRow, 4).toString();\r
-                    settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv);\r
+                    String[] sa = new String[5];\r
+                    ffc.getFrameworkModuleInfo(selectedRow, sa);\r
+                    String mg = sa[0];\r
+                    String mv = sa[1];\r
+                    String pg = sa[2];\r
+                    String pv = sa[3];\r
+                    String arch = sa[4];\r
+                    settingDlg.setKey(mg + " " + mv + " " + pg + " " + pv + " " + arch, selectedRow, docConsole);\r
                     settingDlg.setVisible(true);\r
                 }\r
             });\r
@@ -298,12 +354,31 @@ public class FpdFrameworkModules extends IInternalFrame {
                     if (selectedRow < 0){\r
                         return;\r
                     }\r
-                    String mg = model1.getValueAt(selectedRow, 1).toString();\r
-                    String mv = model1.getValueAt(selectedRow, 2).toString();\r
-                    String pg = model1.getValueAt(selectedRow, 3).toString();\r
-                    String pv = model1.getValueAt(selectedRow, 4).toString();\r
+                    String[] sa = new String[5];\r
+                    ffc.getFrameworkModuleInfo(selectedRow, sa);\r
+                    String mg = sa[0];\r
+                    String mv = sa[1];\r
+                    String pg = sa[2];\r
+                    String pv = sa[3];\r
+                    String arch = sa[4];\r
+                    ModuleIdentification mi = getModuleId(sa[0] + " " + sa[1] + " " + sa[2] + " " + sa[3] + " " + sa[4]);\r
+                    mv = mi.getVersion();\r
+                    pv = mi.getPackage().getVersion();\r
                     model1.removeRow(selectedRow);\r
-                    fpdMsa.remove(mg+mv+pg+pv);\r
+                    if (arch == null) {\r
+                        // if no arch specified in ModuleSA\r
+                        fpdMsa.remove(mg+mv+pg+pv);\r
+                    }\r
+                    else {\r
+                        ArrayList<String> al = fpdMsa.get(mg+mv+pg+pv);\r
+                        al.remove(arch);\r
+                        if (al.size() == 0) {\r
+                            fpdMsa.remove(mg+mv+pg+pv);\r
+                        }\r
+                    }\r
+                    \r
+                    \r
+                    docConsole.setSaved(false);\r
                     ffc.removeModuleSA(selectedRow);\r
                 }\r
             });\r
@@ -333,12 +408,17 @@ public class FpdFrameworkModules extends IInternalFrame {
         \r
     }\r
     \r
+    public FpdFrameworkModules(OpeningPlatformType opt) {\r
+        this(opt.getXmlFpd());\r
+        docConsole = opt;\r
+    }\r
+    \r
     private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
         try {\r
             GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db", System.getenv("WORKSPACE"));\r
         }\r
         catch(Exception e){\r
-            JOptionPane.showMessageDialog(frame, "FrameworkDatabase Corrupted.");\r
+            JOptionPane.showMessageDialog(frame, "Error occurred when getting module data.");\r
         }\r
         \r
         if (ffc == null){\r
@@ -347,18 +427,36 @@ public class FpdFrameworkModules extends IInternalFrame {
         }\r
         \r
         if (fpdMsa == null) {\r
-            fpdMsa = new HashMap<String, String>();\r
+            fpdMsa = new HashMap<String, ArrayList<String>>();\r
         }\r
         \r
         if (ffc.getFrameworkModulesCount() > 0) {\r
             String[][] saa = new String[ffc.getFrameworkModulesCount()][5];\r
             ffc.getFrameworkModulesInfo(saa);\r
             for (int i = 0; i < saa.length; ++i) {\r
-                if (getModuleId(saa[i][1]+ " "+saa[i][2]+" "+saa[i][3]+" "+saa[i][4]) != null) {\r
-                    saa[i][0] = getModuleId(saa[i][1]+ " "+saa[i][2]+" "+saa[i][3]+" "+saa[i][4]).getName();\r
+                ModuleIdentification mi = getModuleId(saa[i][0]+ " "+saa[i][1]+" "+saa[i][2]+" "+saa[i][3]);\r
+                String[] row = {"", "", "", "", "", ""};\r
+                if (mi != null) {\r
+                    row[0] = mi.getName();\r
+                    row[1] = mi.getVersion();\r
+                    row[2] = mi.getPackage().getName();\r
+                    row[3] = mi.getPackage().getVersion();\r
+                    row[4] = saa[i][4];\r
+                    try{\r
+                        row[5] = GlobalData.getMsaFile(mi).getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
+                    }\r
+                    catch (Exception e) {\r
+                        JOptionPane.showMessageDialog(frame, "ShowFPDModules:" + e.getMessage());\r
+                    }\r
                 }\r
-                model1.addRow(saa[i]);\r
-                fpdMsa.put(saa[i][1]+saa[i][2]+saa[i][3]+saa[i][4], saa[i][0]);\r
+                model1.addRow(row);\r
+                ArrayList<String> al = fpdMsa.get(saa[i][0]+row[1]+saa[i][2]+row[3]);\r
+                if (al == null) {\r
+                    al = new ArrayList<String>();\r
+                    fpdMsa.put(saa[i][0]+row[1]+saa[i][2]+row[3], al);\r
+                }\r
+                al.add(saa[i][4]);\r
+                \r
             }\r
         }\r
         \r
@@ -377,15 +475,21 @@ public class FpdFrameworkModules extends IInternalFrame {
         while(ispi.hasNext()) {\r
             PackageIdentification pi = (PackageIdentification)ispi.next();\r
             String[] s = {"", "", "", "", ""};\r
-            s[3] = pi.getGuid();\r
-            s[4] = pi.getVersion();\r
+            \r
             Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
             Iterator ismi = smi.iterator();\r
             while(ismi.hasNext()) {\r
                 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
                 s[0] = mi.getName();\r
-                s[1] = mi.getGuid();\r
-                s[2] = mi.getVersion();\r
+                s[1] = mi.getVersion();\r
+                s[2] = pi.getName();\r
+                s[3] = pi.getVersion();\r
+                try {\r
+                    s[4] = GlobalData.getMsaFile(mi).getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
+                }\r
+                catch (Exception e) {\r
+                    JOptionPane.showMessageDialog(frame, "ShowAllModules:" + e.getMessage());\r
+                }\r
                 model.addRow(s);\r
                 miList.add(mi);\r
             }\r
@@ -406,7 +510,7 @@ public class FpdFrameworkModules extends IInternalFrame {
     \r
     private ModuleIdentification getModuleId(String key){\r
         //\r
-        // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion into string array.\r
+        // Get ModuleGuid, ModuleVersion, PackageGuid, PackageVersion, Arch into string array.\r
         //\r
         String[] keyPart = key.split(" ");\r
         Set<PackageIdentification> spi = GlobalData.getPackageList();\r
@@ -414,14 +518,26 @@ public class FpdFrameworkModules extends IInternalFrame {
         \r
         while(ispi.hasNext()) {\r
             PackageIdentification pi = (PackageIdentification)ispi.next();\r
-            if ( !pi.getGuid().equals(keyPart[2]) || !pi.getVersion().equals(keyPart[3])){\r
+            if ( !pi.getGuid().equals(keyPart[2])){ \r
+\r
                 continue;\r
             }\r
+            if (keyPart[3] != null && keyPart[3].length() > 0 && !keyPart[3].equals("null")){\r
+                if(!pi.getVersion().equals(keyPart[3])){\r
+                    continue;\r
+                }\r
+            }\r
             Set<ModuleIdentification> smi = GlobalData.getModules(pi);\r
             Iterator ismi = smi.iterator();\r
             while(ismi.hasNext()) {\r
                 ModuleIdentification mi = (ModuleIdentification)ismi.next();\r
-                if (mi.getGuid().equals(keyPart[0]) && mi.getVersion().equals(keyPart[1])){\r
+                if (mi.getGuid().equals(keyPart[0])){\r
+                    if (keyPart[1] != null && keyPart[1].length() > 0 && !keyPart[1].equals("null")){\r
+                        if(!mi.getVersion().equals(keyPart[1])){\r
+                            continue;\r
+                        }\r
+                    }\r
+\r
                     return mi;\r
                 }\r
             }\r
@@ -432,6 +548,11 @@ public class FpdFrameworkModules extends IInternalFrame {
 }  //  @jve:decl-index=0:visual-constraint="10,10"\r
 \r
 class NonEditableTableModel extends DefaultTableModel {\r
+    /**\r
+     * \r
+     */\r
+    private static final long serialVersionUID = 1L;\r
+\r
     public boolean isCellEditable(int row, int col) {\r
         return false;\r
     }\r