import java.awt.Dimension;\r
import java.awt.Toolkit;\r
\r
-import javax.swing.JFrame;\r
import javax.swing.JOptionPane;\r
import javax.swing.JPanel;\r
import javax.swing.JDialog;\r
import javax.swing.table.TableColumn;\r
import javax.swing.table.TableModel;\r
\r
+import org.tianocore.frameworkwizard.FrameworkWizardUI;\r
import org.tianocore.frameworkwizard.common.DataValidation;\r
import org.tianocore.frameworkwizard.common.GlobalData;\r
import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
import java.util.HashMap;\r
import java.util.Iterator;\r
import java.util.ListIterator;\r
+import java.util.Set;\r
+import java.util.Stack;\r
import java.util.Vector;\r
\r
import javax.swing.JTextField;\r
* \r
*/\r
private static final long serialVersionUID = 1L;\r
- static JFrame frame;\r
private JPanel jContentPane = null;\r
private JTabbedPane jTabbedPane = null;\r
private JPanel jPanelPcd = null;\r
private DefaultTableModel optionsTableModel = null;\r
private FpdFileContents ffc = null;\r
private String moduleKey = null;\r
+ private ModuleIdentification moduleId = null;\r
private int moduleSaNum = -1;\r
private HashMap<LibraryClassDescriptor, ArrayList<String>> classInstanceMap = null;\r
//\r
* This is the default constructor\r
*/\r
public FpdModuleSA() {\r
- super();\r
+ super(FrameworkWizardUI.getInstance());\r
initialize();\r
}\r
public FpdModuleSA(FpdFileContents ffc) {\r
classConsumed = null;\r
jTabbedPane.setSelectedIndex(0);\r
initPcdBuildDefinition(i);\r
- ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
+ moduleId = WorkspaceProfile.getModuleId(moduleKey);\r
+ if (moduleId == null) {\r
+ return;\r
+ }\r
int tabIndex = jTabbedPane.indexOfTab("Libraries");\r
- if (mi.isLibrary()) {\r
+ if (moduleId.isLibrary()) {\r
jTabbedPane.setEnabledAt(tabIndex, false);\r
}\r
else {\r
}\r
\r
public void initLibraries(String key) {\r
- try {\r
- //\r
- // display library classes that need to be resolved. also potential instances for them.\r
- //\r
- resolveLibraryInstances(moduleKey);\r
- } catch (Exception e) {\r
- JOptionPane.showMessageDialog(frame, e.getMessage());\r
- }\r
- //\r
- // display lib instances already selected for key\r
- //\r
+ libClassTableModel.setRowCount(0);\r
+ libInstanceTableModel.setRowCount(0);\r
selectedInstancesTableModel.setRowCount(0);\r
+ Vector<String> errorMsg = new Vector<String>();\r
+ Vector<ModuleIdentification> newInstances = new Vector<ModuleIdentification>();\r
+ \r
+ addConsumedClassFromModule (key);\r
+ addProducedClassFromModule (key);\r
+ \r
int instanceCount = ffc.getLibraryInstancesCount(key);\r
if (instanceCount != 0) {\r
String[][] saa = new String[instanceCount][5];\r
ffc.getLibraryInstances(key, saa);\r
for (int i = 0; i < saa.length; ++i) {\r
- ModuleIdentification mi = WorkspaceProfile.getModuleId(saa[i][1] + " " + saa[i][2] + " " + saa[i][3]\r
- + " " + saa[i][4]);\r
+ String libInstanceKey = saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4];\r
+ ModuleIdentification mi = WorkspaceProfile.getModuleId(libInstanceKey);\r
if (mi != null) {\r
//\r
// ToDo: verify this instance first.\r
//\r
// 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
- } catch (Exception e) {\r
- JOptionPane.showMessageDialog(frame, e.getMessage());\r
- }\r
+ addConsumedClassFromModule (libInstanceKey);\r
+ addProducedClassFromModule (libInstanceKey);\r
selectedInstancesTableModel.addRow(saa[i]);\r
}\r
}\r
}\r
-\r
+ \r
+ Set<LibraryClassDescriptor> sLcd = this.classConsumed.keySet();\r
+ Iterator<LibraryClassDescriptor> iter = sLcd.iterator(); \r
+ Stack<LibraryClassDescriptor> lcdStack = new Stack<LibraryClassDescriptor>();\r
+ while (iter.hasNext()) {\r
+ LibraryClassDescriptor lcd = iter.next();\r
+ if (isBoundedClass(lcd, errorMsg)) {\r
+ continue;\r
+ }\r
+ \r
+ if (!lcdStack.contains(lcd)) {\r
+ lcdStack.push(lcd);\r
+ }\r
+ }\r
+ \r
+ try {\r
+ resolveLibraryInstances(lcdStack, true, errorMsg, newInstances);\r
+ } catch (Exception e) {\r
+ String exceptionMsg = e.getCause() + " " + e.getMessage();\r
+ if (!errorMsg.contains(exceptionMsg)) {\r
+ JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), e.getCause() + " " + e.getMessage());\r
+ }\r
+ }\r
+ \r
+ String newInstancesAddedMsg = "Library instance automatically added to this module :\n";\r
+ for (int i = 0; i < newInstances.size(); ++i) {\r
+ ModuleIdentification libMi = newInstances.get(i);\r
+ newInstancesAddedMsg += libMi.getName();\r
+ newInstancesAddedMsg += " ";\r
+ }\r
+ if (newInstances.size() > 0) {\r
+ JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), newInstancesAddedMsg);\r
+ }\r
+ \r
showClassToResolved();\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(FrameworkWizardUI.getInstance(), errors);\r
+ }\r
}\r
\r
public void initFvInfo (String key) {\r
return;\r
}\r
\r
- for (int j = 0; j < v.size(); ++j) {\r
- LibraryClassDescriptor libInfo = v.get(j);\r
+ Iterator<LibraryClassDescriptor> iter = v.iterator();\r
+ while (iter.hasNext()) {\r
+ LibraryClassDescriptor libInfo = iter.next();\r
\r
Vector<String> vSupArchs = libInfo.getVectorFromString(libInfo.supArchs);\r
\r
//\r
// remove this lib definition if it supports no archs module will be built under.\r
//\r
- v.iterator().remove();\r
+ iter.remove();\r
}\r
}\r
\r
- private void resolveLibraryInstances(String key) throws MultipleInstanceException, NoInstanceException{\r
+ private void addProducedClassFromModule (String key) {\r
ModuleIdentification mi = WorkspaceProfile.getModuleId(key);\r
- PackageIdentification[] depPkgList = null;\r
- \r
- //\r
- // Get dependency pkg list into which we will search lib instances.\r
- //\r
- depPkgList = SurfaceAreaQuery.getDependencePkg(null, mi);\r
- //\r
- // Get the lib class consumed, produced by this module itself.\r
- //\r
- Vector<LibraryClassDescriptor> vClassConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);\r
- filterClassConsumedByArch(vClassConsumed);\r
- if (this.classConsumed == null) {\r
- this.classConsumed = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
- }\r
-\r
- for (int i = 0; i < vClassConsumed.size(); ++i) {\r
- ArrayList<String> consumedBy = this.classConsumed.get(vClassConsumed.get(i));\r
- if (consumedBy == null) {\r
- consumedBy = new ArrayList<String>();\r
- }\r
- consumedBy.add(key);\r
- this.classConsumed.put(vClassConsumed.get(i), consumedBy);\r
- }\r
-\r
Vector<LibraryClassDescriptor> vClassProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED", mi);\r
if (this.classProduced == null) {\r
this.classProduced = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
this.classProduced.put(vClassProduced.get(i), producedBy);\r
\r
}\r
-\r
+ }\r
+ \r
+ private Vector<LibraryClassDescriptor> addConsumedClassFromModule (String key) {\r
+ ModuleIdentification mi = WorkspaceProfile.getModuleId(key);\r
+// PackageIdentification[] depPkgList = null;\r
+ \r
+ //\r
+ // Get dependency pkg list into which we will search lib instances.\r
//\r
- // find potential instances in all pkgs for classes still in classConsumed.\r
+ //depPkgList = SurfaceAreaQuery.getDependencePkg(null, mi);\r
//\r
+ // Get the lib class consumed, produced by this module itself.\r
+ //\r
+ Vector<LibraryClassDescriptor> vClassConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);\r
+ for (int i = 0; i < vClassConsumed.size(); ++i) {\r
+ vClassConsumed.get(i).supModTypes = WorkspaceProfile.getModuleType(moduleId);\r
+ }\r
+ filterClassConsumedByArch(vClassConsumed);\r
+ if (this.classConsumed == null) {\r
+ this.classConsumed = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
+ }\r
+\r
+ for (int i = 0; i < vClassConsumed.size(); ++i) {\r
+ ArrayList<String> consumedBy = this.classConsumed.get(vClassConsumed.get(i));\r
+ if (consumedBy == null) {\r
+ consumedBy = new ArrayList<String>();\r
+ }\r
+ consumedBy.add(key);\r
+ this.classConsumed.put(vClassConsumed.get(i), consumedBy);\r
+ }\r
+\r
+ return vClassConsumed;\r
+ }\r
+ \r
+ private void resolveLibraryInstances(Stack<LibraryClassDescriptor> lcdStack, boolean autoSelectSingleInstance, Vector<String> errorMsg, Vector<ModuleIdentification> newInstances) throws MultipleInstanceException, NoInstanceException{\r
+ \r
if (classInstanceMap == null) {\r
classInstanceMap = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
- }\r
- Iterator<LibraryClassDescriptor> lic = this.classConsumed.keySet().iterator();\r
- while (lic.hasNext()) {\r
- LibraryClassDescriptor cls = lic.next();\r
- if (isBoundedClass(cls)) {\r
+ } \r
+ while (!lcdStack.empty()) {\r
+ LibraryClassDescriptor cls = lcdStack.pop();\r
+ if (isBoundedClass(cls, errorMsg)) {\r
continue;\r
}\r
- ArrayList<String> instances = getInstancesForClass(cls, depPkgList);\r
+ ArrayList<String> instances = getInstancesForClass(cls, null);\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
+ if (instances.size() == 1 && autoSelectSingleInstance) {\r
+ String instanceInfo = instances.get(0);\r
+ ModuleIdentification libMi = WorkspaceProfile.getModuleId(instanceInfo);\r
+ try {\r
+ Object[] row = {libMi.getName(), libMi.getGuid(), libMi.getVersion(), \r
+ libMi.getPackageId().getGuid(), libMi.getPackageId().getVersion()};\r
+ if (!ffc.instanceExistsInModuleSA(moduleKey, row[1]+"", row[2]+"", row[3]+"", row[4]+"")) {\r
+ addLibInstance(libMi);\r
+ newInstances.add(libMi);\r
+ docConsole.setSaved(false);\r
+ selectedInstancesTableModel.addRow(row);\r
+ addProducedClassFromModule (instanceInfo);\r
+ Vector<LibraryClassDescriptor> vLcd = addConsumedClassFromModule(instanceInfo);\r
+ for (int i = 0; i < vLcd.size(); ++i) {\r
+ LibraryClassDescriptor lcd = vLcd.get(i);\r
+ if (!lcdStack.contains(lcd)) {\r
+ lcdStack.push(lcd);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ if (!errorMsg.contains(e.getMessage())) {\r
+ errorMsg.add(e.getMessage());\r
+ }\r
+ }\r
+ }\r
}\r
-// showClassToResolved();\r
}\r
+// \r
\r
/**Search classProduced map to see if this class has been produced by some instance (module).\r
* @param cls\r
* @return\r
*/\r
- private boolean isBoundedClass (LibraryClassDescriptor cls) {\r
- if (this.classProduced.containsKey(cls)) {\r
- return true;\r
- }\r
+ private boolean isBoundedClass (LibraryClassDescriptor cls, Vector<String> errorMsg) {\r
+// if (this.classProduced.containsKey(cls)) {\r
+// return true;\r
+// }\r
Iterator<LibraryClassDescriptor> lcdi = this.classProduced.keySet().iterator();\r
while (lcdi.hasNext()) {\r
LibraryClassDescriptor lcd = lcdi.next();\r
- if (cls.isSubSetByArchs(lcd) && cls.isSubSetByModTypes(lcd)) {\r
- return true;\r
+ if (cls.className.equals(lcd.className)) {\r
+ if (cls.isSubSetByArchs(lcd) && cls.isSubSetByModTypes(lcd)) {\r
+ return true;\r
+ }\r
+ else {\r
+ ArrayList<String> producedBy = this.classProduced.get(lcd);\r
+ String instancesName = "";\r
+ for (int i = 0; i < producedBy.size(); ++i) {\r
+ ModuleIdentification mi = WorkspaceProfile.getModuleId(producedBy.get(i));\r
+ instancesName += mi.getName();\r
+ instancesName += " ";\r
+ }\r
+ String msg = new ImproperInstanceException(lcd.className, instancesName, lcd.supArchs, lcd.supModTypes).getMessage();\r
+ if (!errorMsg.contains(msg)) {\r
+ errorMsg.add(msg);\r
+ }\r
+ }\r
}\r
}\r
\r
isPotential = true;\r
}\r
\r
- if (hasBeenProduced(lcd)) {\r
+ if (isPotential && hasBeenProduced(lcd)) {\r
isPotential = false;\r
break;\r
}\r
Iterator<LibraryClassDescriptor> lcdi = this.classProduced.keySet().iterator();\r
while (lcdi.hasNext()) {\r
LibraryClassDescriptor lcd = lcdi.next();\r
- if (cls.hasInterSectionWith(lcd)) {\r
+ if (cls.isSubSetByArchs(lcd) && cls.isSubSetByModTypes(lcd)) {\r
return true;\r
}\r
}\r
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
\r
}\r
\r
- showClassToResolved();\r
- \r
}\r
\r
\r
}\r
\r
private void showClassToResolved(){\r
+ Vector<String> errorMsg = new Vector<String>();\r
libClassTableModel.setRowCount(0);\r
+ libInstanceTableModel.setRowCount(0);\r
if (classConsumed == null || classConsumed.size() == 0) {\r
return;\r
}\r
+\r
Iterator<LibraryClassDescriptor> li = classConsumed.keySet().iterator();\r
while(li.hasNext()){\r
LibraryClassDescriptor lcd = li.next();\r
- String[] s = {lcd.className, lcd.supArchs, lcd.supModTypes};\r
if (classConsumed.get(lcd) == null || classConsumed.get(lcd).size() == 0) {\r
continue;\r
}\r
\r
- if (!isBoundedClass(lcd)){\r
+ if (!isBoundedClass(lcd, errorMsg)){\r
+ \r
+ String[] s = { lcd.className, lcd.supArchs, lcd.supModTypes };\r
libClassTableModel.addRow(s);\r
}\r
}\r
- libInstanceTableModel.setRowCount(0);\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(FrameworkWizardUI.getInstance(), errors);\r
+ }\r
}\r
\r
+ private String getModuleArch () {\r
+ String arch = "";\r
+ String[] moduleInfo = moduleKey.split(" ");\r
+ for (int i = 4; i < moduleInfo.length; ++i) {\r
+ arch += moduleInfo[i];\r
+ arch += " ";\r
+ }\r
+ return arch.trim();\r
+ }\r
private void addLibInstance (ModuleIdentification libMi) throws Exception{\r
\r
//\r
// Add pcd information of selected instance to current moduleSA\r
//\r
- ffc.addFrameworkModulesPcdBuildDefs(libMi, null, ffc.getModuleSA(moduleKey));\r
+ ffc.addFrameworkModulesPcdBuildDefs(libMi, getModuleArch(), ffc.getModuleSA(moduleKey));\r
\r
ffc.genLibraryInstance(libMi, moduleKey);\r
}\r
// array for pcd related information: helpText, itemType, moduleType.\r
//\r
String[] pcdInfo = {"", "", ""};\r
- getPcdInfo(cName, tsGuid, pcdInfo);\r
+ Vector<String> validPcdTypes = new Vector<String>();\r
+ getPcdInfo(moduleKey, cName, tsGuid, pcdInfo, validPcdTypes);\r
jTextAreaPcdHelp.setText(pcdInfo[0]);\r
- initComboBox(pcdInfo[1], pcdInfo[2]);\r
+ initComboBox(pcdInfo[1], pcdInfo[2], validPcdTypes);\r
jComboBoxItemType.setSelectedItem(itemType);\r
jTextFieldMaxDatumSize.setEnabled(true);\r
jTextFieldMaxDatumSize.setVisible(true);\r
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
jTextFieldMaxDatumSize.setText(ffc.setMaxSizeForPointer(model.getValueAt(selectedRow, 6)+"")+"");\r
}\r
catch(Exception except){\r
- JOptionPane.showMessageDialog(frame, "Unacceptable PCD Value: " + except.getMessage());\r
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "Unacceptable PCD Value: " + except.getMessage());\r
}\r
}\r
else{\r
return jTablePcd;\r
}\r
\r
- private void initComboBox(String originalType, String mType) {\r
+ private void initComboBox(String originalType, String mType, Vector<String> validPcdTypes) {\r
jComboBoxItemType.removeAllItems();\r
- jComboBoxItemType.addItem(originalType);\r
- if (originalType.equals("PATCHABLE_IN_MODULE") && mType.equalsIgnoreCase("false")) {\r
- jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
- }\r
+\r
if (originalType.equals("DYNAMIC")) {\r
- jComboBoxItemType.addItem("FIXED_AT_BUILD");\r
- jComboBoxItemType.addItem("PATCHABLE_IN_MODULE");\r
+ for (int i = 0; i < validPcdTypes.size(); ++i) {\r
+ jComboBoxItemType.addItem(validPcdTypes.get(i));\r
+ }\r
+ }\r
+ else {\r
+ jComboBoxItemType.addItem(originalType);\r
}\r
}\r
\r
* @param tsGuid\r
* @param sa sa[0]: HelpText; sa[1]: itemType in Msa; sa[2]: isBinary;\r
*/\r
- private void getPcdInfo(String cName, String tsGuid, String[] sa) {\r
+ private void getPcdInfo(String moduleKey, String cName, String tsGuid, String[] sa, Vector<String> validPcdTypes) {\r
String[][] saa = new String[ffc.getLibraryInstancesCount(moduleKey)][5];\r
ffc.getLibraryInstances(moduleKey, saa);\r
\r
try{\r
- if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(moduleKey), cName, tsGuid, sa)) {\r
+ if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(moduleKey), cName, tsGuid, sa, validPcdTypes)) {\r
return;\r
}\r
for (int j = 0; j < saa.length; ++j) {\r
if (ffc.getPcdBuildDataInfo(WorkspaceProfile.getModuleId(saa[j][1] + " " + saa[j][2] + " " + saa[j][3] + " " + saa[j][4]),\r
- cName, tsGuid, sa)) {\r
+ cName, tsGuid, sa, validPcdTypes)) {\r
return;\r
}\r
}\r
return;\r
}\r
\r
- String instanceValue = libInstanceTableModel.getValueAt(row, 1) + " " +\r
+ String libInstanceKey = libInstanceTableModel.getValueAt(row, 1) + " " +\r
libInstanceTableModel.getValueAt(row, 2) + " " +\r
libInstanceTableModel.getValueAt(row, 3) + " " +\r
libInstanceTableModel.getValueAt(row, 4);\r
- ModuleIdentification libMi = WorkspaceProfile.getModuleId(instanceValue);\r
+ ModuleIdentification libMi = WorkspaceProfile.getModuleId(libInstanceKey);\r
try {\r
addLibInstance (libMi);\r
}\r
catch (Exception exception) {\r
- JOptionPane.showMessageDialog(frame, "Adding Instance" + libMi.getName() + ": "+ exception.getMessage());\r
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "Adding Instance " + libMi.getName() + " : \n"+ exception.getMessage());\r
return;\r
}\r
docConsole.setSaved(false);\r
libInstanceTableModel.getValueAt(row, 2), libInstanceTableModel.getValueAt(row, 3),\r
libInstanceTableModel.getValueAt(row, 4)};\r
selectedInstancesTableModel.addRow(s);\r
+ \r
+ Vector<LibraryClassDescriptor> vLcd = addConsumedClassFromModule (libInstanceKey);\r
+ addProducedClassFromModule (libInstanceKey);\r
+ \r
+ Vector<String> errorMsg = new Vector<String>();\r
+ Vector<ModuleIdentification> newInstances = new Vector<ModuleIdentification>();\r
+ Stack<LibraryClassDescriptor> lcdStack = new Stack<LibraryClassDescriptor>();\r
+ for (int i = 0; i < vLcd.size(); ++i) {\r
+ LibraryClassDescriptor lcd = vLcd.get(i);\r
+ if (!lcdStack.contains(lcd)) {\r
+ lcdStack.push(lcd);\r
+ }\r
+ }\r
try {\r
- resolveLibraryInstances(instanceValue);\r
+ resolveLibraryInstances(lcdStack, true, errorMsg, newInstances);\r
}\r
catch (Exception exp) {\r
- JOptionPane.showMessageDialog(frame, exp.getMessage());\r
+ JOptionPane.showMessageDialog(FpdModuleSA.this, exp.getMessage());\r
}\r
+ \r
showClassToResolved();\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(FpdModuleSA.this, errors);\r
+ }\r
}\r
});\r
}\r
selectedInstancesTableModel.getValueAt(row, 4));\r
ffc.removeLibraryInstance(moduleKey, row);\r
selectedInstancesTableModel.removeRow(row);\r
- \r
+ showClassToResolved();\r
}\r
});\r
}\r
//\r
oldFvList.removeAll(newFvList);\r
for (int j = 0; j < oldFvList.size(); ++j) {\r
- ffc.removeModuleInBuildOptionsUserExtensions(oldFvList.get(j), moduleInfo[0], moduleInfo[1], moduleInfo[2], moduleInfo[3], moduleInfo[4]); \r
+ ffc.removeModuleInBuildOptionsUserExtensions(oldFvList.get(j), "IMAGES", "1", moduleInfo[0], moduleInfo[1], moduleInfo[2], moduleInfo[3], moduleInfo[4]); \r
}\r
//\r
// add module to Fvs that were not in oldFvList.\r
oldFvList = getVectorFromString (originalFvBinding);\r
newFvList.removeAll(oldFvList);\r
for (int i = 0; i < newFvList.size(); ++i) {\r
- ffc.addModuleIntoBuildOptionsUserExtensions(newFvList.get(i), moduleInfo[0], moduleInfo[1], moduleInfo[2], moduleInfo[3], moduleInfo[4]);\r
+ ffc.addModuleIntoBuildOptionsUserExtensions(newFvList.get(i), "IMAGES", "1", moduleInfo[0], moduleInfo[1], moduleInfo[2], moduleInfo[3], moduleInfo[4]);\r
}\r
docConsole.setSaved(false);\r
}\r
}\r
if (newFileGuid.length() > 0) {\r
if (!DataValidation.isGuid(newFileGuid)) {\r
- JOptionPane.showMessageDialog(frame, "FFS File Guid is NOT GUID Type.");\r
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "FFS File Guid is NOT GUID Type.");\r
return;\r
}\r
}\r
vArch.add("EBC");\r
vArch.add("ARM");\r
vArch.add("PPC");\r
- jTableModuleSaOptions.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch));\r
+ jTableModuleSaOptions.getColumnModel().getColumn(4).setCellEditor(new ListEditor(vArch, FrameworkWizardUI.getInstance()));\r
\r
- jTableModuleSaOptions.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());\r
+ jTableModuleSaOptions.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor(FrameworkWizardUI.getInstance()));\r
\r
jTableModuleSaOptions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
jTableModuleSaOptions.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\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
+ if (row < 0) {\r
return;\r
}\r
- if (jComboBoxItemType.getItemCount() == 3) {\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
+ if (jComboBoxItemType.getSelectedItem() != null && jComboBoxItemType.getSelectedItem().equals("FIXED_AT_BUILD")) {\r
+ jTextFieldPcdDefault.setEnabled(true);\r
}\r
- }\r
+ else {\r
+ jTextFieldPcdDefault.setEnabled(false);\r
+ }\r
+ } \r
});\r
}\r
return jComboBoxItemType;\r
for (int i = 0; i < al.size(); ++i) {\r
String mKey = moduleInfo (al.get(i));\r
value = null;\r
- ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", maxSize, value);\r
String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+ ffc.updatePcdData(mKey, cName, tsGuid, itemType, maxSize, value);\r
al.set(i, mKey + " " + itemType);\r
}\r
\r
ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
for (int i = 0; i < al.size(); ++i) {\r
String mKey = moduleInfo (al.get(i));\r
- ffc.updatePcdData(mKey, cName, tsGuid, jComboBoxItemType.getSelectedItem()+"", jTextFieldMaxDatumSize.getText(), jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+ ffc.updatePcdData(mKey, cName, tsGuid, itemType, jTextFieldMaxDatumSize.getText(), jTextFieldPcdDefault.isVisible() ? jTextFieldPcdDefault.getText() : jComboBoxFeatureFlagValue.getSelectedItem()+"");\r
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
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "PCD value format: " + e.getMessage());\r
+ }\r
+}\r
+\r
+private void changePcdTypeWithinSameCategory (String cName, String tsGuid) {\r
+ ArrayList<String> al = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
+ for (int i = 0; i < al.size(); ++i) {\r
+ String mKey = moduleInfo (al.get(i));\r
+ String itemType = jComboBoxItemType.getSelectedItem()+"";\r
+ ffc.updatePcdData(mKey, cName, tsGuid, itemType, null, null);\r
+ al.set(i, mKey + " " + itemType);\r
}\r
}\r
\r
if (row < 0) {\r
return;\r
}\r
- docConsole.setSaved(false);\r
+ \r
+ 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
- model.setValueAt(newItemType, row, 2);\r
- model.setValueAt(jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem(), row, 6);\r
+ String newValue = jTextFieldPcdDefault.isVisible()? jTextFieldPcdDefault.getText():jComboBoxFeatureFlagValue.getSelectedItem()+""; \r
+ if (newValue.length() == 0){\r
+ \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
- getPcdInfo (model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", 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
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "PCD Value MalFormed: " + exp.getMessage());\r
return;\r
}\r
}\r
- model.setValueAt(jTextFieldMaxDatumSize.getText(), row, 4);\r
+ String newMaxDatumSize = jTextFieldMaxDatumSize.getText();\r
\r
- if (oldItemType.equals("DYNAMIC") && !newItemType.equals("DYNAMIC")) {\r
- pcdDynamicToNonDynamic(model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"");\r
- }\r
- if (!oldItemType.equals("DYNAMIC") && newItemType.equals("DYNAMIC")) {\r
- pcdNonDynamicToDynamic(model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"");\r
+ if (!newItemType.equals(oldItemType)) {\r
+ Vector<ModuleIdentification> moduleInfo = new Vector<ModuleIdentification>();\r
+ try {\r
+ boolean changable = itemTypeCouldBeChanged (cName, tsGuid, newItemType, moduleInfo);\r
+ if (!changable) {\r
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "Can NOT Change Pcd Type in: " + moduleInfo.get(0).getName() + " contained in package " + moduleInfo.get(0).getPackageId().getName());\r
+ return;\r
+ }\r
+ }\r
+ catch (Exception exp) {\r
+ JOptionPane.showMessageDialog(FpdModuleSA.this, "Can NOT Change Pcd Type in: " + moduleInfo.get(0).getName() + " contained in package " + moduleInfo.get(0).getPackageId().getName() + " " + exp.getMessage());\r
+ return;\r
+ }\r
+ \r
+ if ((oldItemType.equals("DYNAMIC") || oldItemType.equals("DYNAMIC_EX")) && !newItemType.equals("DYNAMIC") && !newItemType.equals("DYNAMIC_EX")) {\r
+ pcdDynamicToNonDynamic(cName, tsGuid);\r
+ }\r
+ if (!oldItemType.equals("DYNAMIC") && !oldItemType.equals("DYNAMIC_EX") && (newItemType.equals("DYNAMIC") || newItemType.equals("DYNAMIC_EX"))) {\r
+ pcdNonDynamicToDynamic(cName, tsGuid);\r
+ }\r
+ else {\r
+ changePcdTypeWithinSameCategory (cName, tsGuid);\r
+ }\r
+ model.setValueAt(newItemType, row, 2);\r
}\r
- ffc.updatePcdData(moduleKey, model.getValueAt(row, 0)+"", model.getValueAt(row, 1)+"", model.getValueAt(row, 2)+"", model.getValueAt(row, 4)+"", model.getValueAt(row, 6)+"");\r
+ \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
return jButtonUpdatePcd;\r
}\r
+\r
+private boolean itemTypeCouldBeChanged (String cName, String tsGuid, String newItemType, Vector<ModuleIdentification> mi) throws Exception{\r
+ ArrayList<String> pcdConsumers = ffc.getDynPcdMapValue(cName + " " + tsGuid);\r
+ for (int i = 0; i < pcdConsumers.size(); ++i) {\r
+ String consumerInfo = moduleInfo (pcdConsumers.get(i));\r
+ mi.removeAllElements();\r
+ mi.add(WorkspaceProfile.getModuleId(consumerInfo));\r
+ String[] sa = {"", "", ""};\r
+ Vector<String> validPcdTypes = new Vector<String>();\r
+ getPcdInfo (consumerInfo, cName, tsGuid, sa, validPcdTypes);\r
+ if (validPcdTypes.size() == 0) {\r
+ return false;\r
+ }\r
+ if (!sa[1].equals("DYNAMIC")) {\r
+ return false;\r
+ }\r
+ if (!validPcdTypes.contains(newItemType)) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+}\r
+\r
/**\r
* This method initializes jComboBoxFeatureFlagValue\r
* \r
@Override\r
public String getMessage() {\r
// TODO Auto-generated method stub\r
- return "Library Class " + className + "is Produced by Two Instances: " \r
+ return " Library Class " + className + "is Produced by Two Instances: " \r
+ libInstance1 + " and " + libInstance2 + ". Platform Build will Fail.";\r
}\r
\r
}\r
\r
+class ImproperInstanceException extends Exception {\r
+\r
+ /**\r
+ * \r
+ */\r
+ private static final long serialVersionUID = -5279700566993277033L;\r
+ private String className = null;\r
+ private String libInstance = null;\r
+ private String instanceSupArch = null;\r
+ private String instanceSupModType = null;\r
+ \r
+ ImproperInstanceException (String libClass, String instance1, String arch, String type) {\r
+ super();\r
+ className = libClass;\r
+ libInstance = instance1;\r
+ instanceSupArch = arch;\r
+ instanceSupModType = type;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see java.lang.Throwable#getMessage()\r
+ */\r
+ @Override\r
+ public String getMessage() {\r
+ // TODO Auto-generated method stub\r
+ return " Library Class " + className + " Produced by Library Instance: " \r
+ + libInstance + "\nOnly Supports " + instanceSupArch + " and Module Type " + instanceSupModType + ".\n This instance should be removed.\n";\r
+ }\r
+ \r
+}\r
+\r
class NoInstanceException extends Exception {\r
\r
/**\r