]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFrameworkModules.java
Thread work load assignment change.
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFrameworkModules.java
index 74b84626e5f98e457366a3528e7cdd0b1bcda2a8..ae5fce8340d88026b646b6b63d655b867f22e503 100644 (file)
@@ -18,7 +18,6 @@ import java.awt.BorderLayout;
 import java.awt.Dimension;\r
 import java.awt.FontMetrics;\r
 \r
-import javax.swing.JFrame;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JPanel;\r
 import javax.swing.JSplitPane;\r
@@ -32,11 +31,13 @@ import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableModel;\r
 \r
 import org.tianocore.PlatformSurfaceAreaDocument;\r
+import org.tianocore.frameworkwizard.FrameworkWizardUI;\r
 import org.tianocore.frameworkwizard.common.GlobalData;\r
 import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
 import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
+import org.tianocore.frameworkwizard.workspace.Workspace;\r
 import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
 \r
 import java.awt.FlowLayout;\r
@@ -58,14 +59,14 @@ public class FpdFrameworkModules extends IInternalFrame {
     \r
     private static final int timeToWait = 2000;\r
     \r
+    private static final int pcdSyncThreadNumber = 10;\r
+    \r
     private long savedMs = 0;\r
     \r
     String searchField = "";\r
     \r
     public static final int forceDbgColForFpdModTable = 7;\r
 \r
-    static JFrame frame;\r
-\r
     private JSplitPane jSplitPane = null;\r
 \r
     private JPanel jPanelTop = null;\r
@@ -393,7 +394,7 @@ public class FpdFrameworkModules extends IInternalFrame {
         vArchs = WorkspaceProfile.getModuleSupArchs(mi);\r
 \r
         if (vArchs == null) {\r
-            JOptionPane.showMessageDialog(frame, "No Supported Architectures specified in MSA file.");\r
+            JOptionPane.showMessageDialog(this, "No Supported Architectures specified in MSA file.");\r
             return;\r
         }\r
 \r
@@ -401,7 +402,7 @@ public class FpdFrameworkModules extends IInternalFrame {
         ffc.getPlatformDefsSupportedArchs(platformSupArch);\r
         platformSupArch.retainAll(vArchs);\r
         if (platformSupArch.size() == 0) {\r
-            JOptionPane.showMessageDialog(frame, "This Module does not support this platform architectures.");\r
+            JOptionPane.showMessageDialog(this, "This Module does not support this platform architectures.");\r
             return;\r
         }\r
         \r
@@ -445,7 +446,7 @@ public class FpdFrameworkModules extends IInternalFrame {
         // Archs this Module supported have already been added.\r
         //\r
         if (vArchs.size() == 0) {\r
-            JOptionPane.showMessageDialog(frame, "This Module has already been added.");\r
+            JOptionPane.showMessageDialog(this, "This Module has already been added.");\r
             return;\r
         }\r
         //ToDo put Arch instead of null\r
@@ -473,7 +474,7 @@ public class FpdFrameworkModules extends IInternalFrame {
                 //ToDo : specify archs need to add.\r
                 ffc.addFrameworkModulesPcdBuildDefs(mi, arch, null);\r
             } catch (Exception exception) {\r
-                JOptionPane.showMessageDialog(frame, "Adding " + row[modNameColForFpdModTable] + " with Supporting Architectures: " + arch\r
+                JOptionPane.showMessageDialog(this, "Adding " + row[modNameColForFpdModTable] + " with Supporting Architectures: " + arch\r
                                                      + ": " + exception.getMessage());\r
                 errorOccurred = true;\r
             }\r
@@ -485,7 +486,7 @@ public class FpdFrameworkModules extends IInternalFrame {
         } else {\r
             s += " was added Successfully.";\r
         }\r
-        JOptionPane.showMessageDialog(frame, s);\r
+        JOptionPane.showMessageDialog(this, s);\r
         TableSorter sorterFpdModules = (TableSorter)jTableFpdModules.getModel();\r
         int viewIndex = sorterFpdModules.getViewIndexArray()[modelFpdModules.getRowCount() - 1];\r
         jTableFpdModules.changeSelection(viewIndex, 0, false, false);\r
@@ -671,17 +672,18 @@ public class FpdFrameworkModules extends IInternalFrame {
     }\r
     \r
     private void showSettingsDlg (int row) {\r
-        try {\r
-            Vector<String> vExceptions = new Vector<String>();\r
-            if (ffc.adjustPcd(row, vExceptions)) {\r
-                JOptionPane.showMessageDialog(frame, "Pcd entries sync. with those in MSA files.");\r
-                docConsole.setSaved(false);\r
-            }\r
-        }\r
-        catch (Exception exp) {\r
-            JOptionPane.showMessageDialog(frame, exp.getMessage());\r
-//            return;\r
-        }\r
+//             As PCD sync. check is full platform range now during opening FrameworkModules editor,\r
+//     the following check is no longer needed.\r
+//        try {\r
+//            Vector<String> vExceptions = new Vector<String>();\r
+//            if (ffc.adjustPcd(row, vExceptions)) {\r
+//                JOptionPane.showMessageDialog(frame, "Pcd entries sync. with those in MSA files.");\r
+//                docConsole.setSaved(false);\r
+//            }\r
+//        }\r
+//        catch (Exception exp) {\r
+//            JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+//        }\r
         \r
         if (settingDlg == null) {\r
             settingDlg = new FpdModuleSA(ffc);\r
@@ -760,7 +762,7 @@ public class FpdFrameworkModules extends IInternalFrame {
                     if (fvBindings != null) {\r
                         String[] fvArray = fvBindings.split(" ");\r
                         for (int i = 0; i < fvArray.length; ++i) {\r
-                            ffc.removeModuleInBuildOptionsUserExtensions(fvArray[i].trim(), "IMAGES", 1, mg, mv, pg, pv, arch);\r
+                            ffc.removeModuleInBuildOptionsUserExtensions(fvArray[i].trim(), "IMAGES", "1", mg, mv, pg, pv, arch);\r
                         }\r
                     }\r
                     \r
@@ -774,7 +776,7 @@ public class FpdFrameworkModules extends IInternalFrame {
                         ffc.removeModuleSA(selectedRow);    \r
                     }\r
                     catch (Exception exp) {\r
-                        JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+                        JOptionPane.showMessageDialog(FpdFrameworkModules.this, exp.getMessage());\r
                         return;\r
                     }\r
                     \r
@@ -836,6 +838,90 @@ public class FpdFrameworkModules extends IInternalFrame {
         new FpdFrameworkModules().setVisible(true);\r
     }\r
 \r
+    private class PcdSyncTask extends Thread {\r
+        \r
+        boolean pcdSynced = false;\r
+        public void run () {\r
+            Vector<String> vExceptions = new Vector<String>();\r
+            pcdSync(vExceptions);\r
+            if (pcdSynced) {\r
+                JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), "PCD in this platform are synchronized with those in MSA files.");    \r
+                docConsole.setSaved(false);\r
+            }\r
+            if (vExceptions.size() > 0) {\r
+                String errorMsg = "";\r
+                for (int i = 0; i < vExceptions.size(); ++i) {\r
+                    errorMsg += " " + vExceptions.get(i) + "\n";\r
+                }\r
+                JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), "Error occurred during synchronization:\n" + errorMsg);\r
+            }\r
+        }\r
+        \r
+        private void pcdSync(Vector<String> v) {\r
+            \r
+            Vector<PcdSyncSubTask> vThreads = new Vector<PcdSyncSubTask> ();\r
+            int moduleCount = jTableFpdModules.getRowCount();\r
+            int start = 0;\r
+            for (int i = 0; i < FpdFrameworkModules.pcdSyncThreadNumber; ++i) {\r
+                int end = start + moduleCount/FpdFrameworkModules.pcdSyncThreadNumber + 1;\r
+                if (end > moduleCount) {\r
+                    end = moduleCount;\r
+                }\r
+                vThreads.add(new PcdSyncSubTask (start, end, v));\r
+                start = end;\r
+            }\r
+            \r
+            for (int i = 0; i < vThreads.size(); ++i) {\r
+                vThreads.get(i).start();\r
+            }\r
+            \r
+            try {\r
+                for (int i = 0; i < vThreads.size(); ++i) {\r
+                    vThreads.get(i).join();\r
+                }\r
+            }\r
+            catch (InterruptedException e) {\r
+                \r
+            }\r
+            \r
+        }\r
+        \r
+        private class PcdSyncSubTask extends Thread {\r
+            \r
+            private int startModule = 0;\r
+            private int endModulePlusOne = 1;\r
+            private Vector<String> v = null;\r
+\r
+            PcdSyncSubTask (int start, int endPlusOne, Vector<String> vErr) {\r
+                startModule = start;\r
+                endModulePlusOne = endPlusOne;\r
+                v = vErr;\r
+            }\r
+            \r
+            public void run () {\r
+                String[] sa = new String[5];\r
+                for (int i = startModule; i < endModulePlusOne; ++i) {\r
+                    try {\r
+                        ffc.getFrameworkModuleInfo(i, sa);\r
+                        String mg = sa[ffcModGuid];\r
+                        String mv = sa[ffcModVer];\r
+                        String pg = sa[ffcPkgGuid];\r
+                        String pv = sa[ffcPkgVer];\r
+                        String arch = sa[ffcModArch];\r
+                        String key = mg + " " + mv + " " + pg + " " + pv + " " + arch;\r
+                        if (ffc.adjustPcd(key, v)) {\r
+                            pcdSynced = true;\r
+                        }\r
+                    }\r
+                    catch (Exception exp) {\r
+//                        JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+                        continue;\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
     /**\r
      * This is the default constructor\r
      */\r
@@ -850,20 +936,14 @@ public class FpdFrameworkModules extends IInternalFrame {
 \r
     }\r
 \r
+    private PcdSyncTask pst = null;\r
     public FpdFrameworkModules(OpeningPlatformType opt) {\r
         this(opt.getXmlFpd());\r
         docConsole = opt;\r
-        Vector<String> vExceptions = new Vector<String>();\r
-        if (pcdSync(vExceptions)) {\r
-            JOptionPane.showMessageDialog(frame, "PCD in this platform are synchronized with those in MSA files.");    \r
-        }\r
-        if (vExceptions.size() > 0) {\r
-            String errorMsg = "";\r
-            for (int i = 0; i < vExceptions.size(); ++i) {\r
-                errorMsg += " " + vExceptions.get(i);\r
-            }\r
-            JOptionPane.showMessageDialog(frame, "Error occurred during synchronization:" + errorMsg);\r
+        if (pst == null) {\r
+            pst = new PcdSyncTask();\r
         }\r
+        pst.start();\r
     }\r
 \r
     private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
@@ -892,9 +972,9 @@ public class FpdFrameworkModules extends IInternalFrame {
                     row[pkgVerColForFpdModTable] = mi.getPackageId().getVersion();\r
                     row[archColForFpdModTable] = saa[i][ffcModArch];\r
                     try {\r
-                        row[pathColForFpdModTable] = mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
+                        row[pathColForFpdModTable] = mi.getPath().substring(Workspace.getCurrentWorkspace().length() + 1);\r
                     } catch (Exception e) {\r
-                        JOptionPane.showMessageDialog(frame, "Show FPD Modules:" + e.getMessage());\r
+                        JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), "Show FPD Modules:" + e.getMessage());\r
                     }\r
                     \r
                     String fpdMsaKey = saa[i][ffcModGuid] + row[modVerColForFpdModTable]\r
@@ -925,23 +1005,6 @@ public class FpdFrameworkModules extends IInternalFrame {
         \r
     }\r
 \r
-    private boolean pcdSync(Vector<String> v) {\r
-        boolean synced = false;\r
-        for (int i = 0; i < jTableFpdModules.getRowCount(); ++i) {\r
-            try {\r
-                if (ffc.adjustPcd(i, v)) {\r
-                    synced = true;\r
-                }\r
-            }\r
-            catch (Exception exp) {\r
-//                JOptionPane.showMessageDialog(frame, exp.getMessage());\r
-                continue;\r
-            }\r
-        }\r
-        return synced;\r
-        \r
-    }\r
-    \r
     private void showAllModules() {\r
 \r
         if (miList == null) {\r
@@ -959,9 +1022,9 @@ public class FpdFrameworkModules extends IInternalFrame {
                 s[pkgNameColForAllModTable] = mi.getPackageId().getName();\r
                 s[pkgVerColForAllModTable] = mi.getPackageId().getVersion();\r
                 try {\r
-                    s[pathColForAllModTable] = mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
+                    s[pathColForAllModTable] = mi.getPath().substring(Workspace.getCurrentWorkspace().length() + 1);\r
                 } catch (Exception e) {\r
-                    JOptionPane.showMessageDialog(frame, "Show All Modules:" + e.getMessage());\r
+                    JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), "Show All Modules:" + e.getMessage());\r
                 }\r
                 modelAllModules.addRow(s);\r
                 miList.add(mi);\r