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
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
+import java.awt.event.ActionEvent;\r
import java.awt.event.KeyEvent;\r
import java.awt.event.MouseEvent;\r
import java.util.ArrayList;\r
\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
private final int typeMinWidth = 100;\r
\r
private final int typeMaxWidth = 155;\r
+\r
+ private JButton jButtonApriori = null;\r
\r
/**\r
* This method initializes jSplitPane\r
String path = modelAllModules.getValueAt(selectedRow, pathColForAllModTable) + "";\r
ModuleIdentification mi = miList.get(selectedRow);\r
Vector<String> vArchs = null;\r
- try {\r
- vArchs = WorkspaceProfile.getModuleSupArchs(mi);\r
- }\r
- catch (Exception exp) {\r
- JOptionPane.showMessageDialog(frame, exp.getMessage());\r
- }\r
+\r
+ 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
+ Vector<Object> platformSupArch = new Vector<Object>();\r
+ ffc.getPlatformDefsSupportedArchs(platformSupArch);\r
+ platformSupArch.retainAll(vArchs);\r
+ if (platformSupArch.size() == 0) {\r
+ JOptionPane.showMessageDialog(this, "This Module does not support this platform architectures.");\r
+ return;\r
+ }\r
+ \r
String archsAdded = "";\r
String mg = mi.getGuid();\r
String mv = mi.getVersion();\r
//\r
// check whether archs conform to SupArch of platform.\r
//\r
- Vector<Object> platformSupArch = new Vector<Object>();\r
+ platformSupArch.removeAllElements();\r
ffc.getPlatformDefsSupportedArchs(platformSupArch);\r
vArchs.retainAll(platformSupArch);\r
//\r
// 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
//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
} 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
jPanelBottomSouth.setLayout(flowLayout1);\r
jPanelBottomSouth.add(getJButtonSettings(), null);\r
jPanelBottomSouth.add(getJButtonRemoveModule(), null);\r
+ jPanelBottomSouth.add(getJButtonApriori(), null);\r
}\r
return jPanelBottomSouth;\r
}\r
}\r
\r
private void showSettingsDlg (int row) {\r
- try {\r
- if (ffc.adjustPcd(row)) {\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
if (fvBindings != null) {\r
String[] fvArray = fvBindings.split(" ");\r
for (int i = 0; i < fvArray.length; ++i) {\r
- ffc.removeModuleInBuildOptionsUserExtensions(fvArray[i].trim(), mg, mv, pg, pv, arch);\r
+ ffc.removeModuleInBuildOptionsUserExtensions(fvArray[i].trim(), "IMAGES", "1", mg, mv, pg, pv, arch);\r
}\r
}\r
\r
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
return jButtonRemoveModule;\r
}\r
\r
+ /**\r
+ * This method initializes jButtonApriori \r
+ * \r
+ * @return javax.swing.JButton \r
+ */\r
+ private JButton getJButtonApriori() {\r
+ if (jButtonApriori == null) {\r
+ jButtonApriori = new JButton();\r
+ jButtonApriori.setText("Apriori Files");\r
+ FontMetrics fm = jButtonApriori.getFontMetrics(jButtonApriori.getFont());\r
+ int buttonWidth = fm.stringWidth(jButtonApriori.getText()) + 40;\r
+ if (jButtonRemoveModule.getWidth() > buttonWidth) {\r
+ buttonWidth = jButtonRemoveModule.getWidth();\r
+ }\r
+ jButtonApriori.setPreferredSize(new Dimension (buttonWidth, 20));\r
+ jButtonApriori.addActionListener(new java.awt.event.ActionListener() {\r
+ public void actionPerformed(ActionEvent arg0) {\r
+ new GenAprioriFileDialog(ffc, docConsole).setVisible(true);\r
+ }});\r
+ }\r
+ return jButtonApriori;\r
+ }\r
+\r
/**\r
* \r
* @param args\r
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
\r
}\r
\r
+ private PcdSyncTask pst = null;\r
public FpdFrameworkModules(OpeningPlatformType opt) {\r
this(opt.getXmlFpd());\r
docConsole = opt;\r
+ if (pst == null) {\r
+ pst = new PcdSyncTask();\r
+ }\r
+ pst.start();\r
}\r
\r
private void init(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd) {\r
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
}\r
\r
showAllModules();\r
-\r
+ \r
}\r
\r
private void showAllModules() {\r
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