import org.tianocore.SkuInfoDocument;\r
import org.tianocore.UserDefinedAntTasksDocument;\r
import org.tianocore.UserExtensionsDocument;\r
+import org.tianocore.LibrariesDocument.Libraries.Instance;\r
import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
import org.tianocore.frameworkwizard.platform.ui.global.SurfaceAreaQuery;\r
import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
+import org.tianocore.frameworkwizard.workspace.Workspace;\r
\r
/**\r
This class processes fpd file contents such as add remove xml elements. \r
cursor.dispose();\r
}\r
\r
- public boolean adjustPcd (int seqModuleSa) throws Exception {\r
+ public boolean adjustPcd (String seqModuleSa, Vector<String> vExceptions) throws Exception {\r
boolean dataModified = false;\r
ModuleSADocument.ModuleSA moduleSa = getModuleSA(seqModuleSa);\r
int pcdCount = getPcdDataCount(seqModuleSa);\r
String[][] saaLib = new String[libCount][5];\r
getLibraryInstances(moduleKey, saaLib);\r
ModuleIdentification mi = WorkspaceProfile.getModuleId(moduleKey);\r
+ if (mi == null) {\r
+ vExceptions.add("Module " + mg + " does NOT exist in workspace.");\r
+ throw new Exception ("Module does NOT exist in workspace.");\r
+ }\r
Vector<ModuleIdentification> vMi = new Vector<ModuleIdentification>();\r
//\r
// create vector for module & library instance MIs.\r
for (int j = 0; j < saaLib.length; ++j) {\r
String libKey = saaLib[j][1] + " " + saaLib[j][2] + " " + saaLib[j][3] + " " + saaLib[j][4];\r
ModuleIdentification libMi = WorkspaceProfile.getModuleId(libKey);\r
- vMi.add(libMi);\r
+ if (libMi != null) {\r
+ vMi.add(libMi);\r
+ }\r
}\r
\r
nextPcd:for (int i = 0; i < saaModuleSaPcd.length; ++i) {\r
\r
for (int j = 0; j < vMi.size(); ++j) {\r
ModuleIdentification nextMi = vMi.get(j);\r
- if (WorkspaceProfile.pcdInMsa(saaModuleSaPcd[i][0], saaModuleSaPcd[i][1], nextMi)) {\r
+ if (nextMi == null) {\r
+ continue;\r
+ }\r
+ if (WorkspaceProfile.pcdInMsa(saaModuleSaPcd[i][0], saaModuleSaPcd[i][1], arch, nextMi)) {\r
continue nextPcd;\r
}\r
}\r
}\r
}\r
}\r
+ // Check sup arch conformance for the new PCD\r
+ if (msaPcd.getSupArchList() != null) {\r
+ String newPcdArch = msaPcd.getSupArchList().toString();\r
+ if (!newPcdArch.toLowerCase().contains(arch.toLowerCase())) {\r
+ continue;\r
+ }\r
+ }\r
\r
PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, vMi.get(i));\r
PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
//\r
// ToDo Error \r
//\r
- throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + " in Module "\r
- + mi.getName());\r
+ String errorMessage = "No Declaration for PCD Entry " + msaPcd.getCName() + " in Module "\r
+ + mi.getName();\r
+ if (i != 0) {\r
+ errorMessage += " Library Instance " + vMi.get(i).getName(); \r
+ }\r
+ vExceptions.add(errorMessage);\r
+ throw new PcdDeclNotFound(errorMessage);\r
}\r
//\r
// AddItem to ModuleSA PcdBuildDefinitions\r
//\r
// key for ModuleSA : "ModuleGuid ModuleVer PackageGuid PackageVer Arch"\r
//\r
- public int getPcdDataCount (int i){\r
- ModuleSADocument.ModuleSA msa = getModuleSA(i);\r
+ public int getPcdDataCount (String key){\r
+ ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
\r
if (msa == null || msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null){\r
return 0;\r
\r
}\r
\r
- public void getPcdData (int i, String[][] saa) {\r
- ModuleSADocument.ModuleSA msa = getModuleSA(i);\r
+ public void getPcdData (String key, String[][] saa) {\r
+ ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
\r
if (msa == null || msa.getPcdBuildDefinition() == null || msa.getPcdBuildDefinition().getPcdDataList() == null){\r
return;\r
}\r
}\r
\r
- public void removePcdData (int seqModuleSa, String cName, String tsGuid) {\r
- ModuleSADocument.ModuleSA moduleSa = getModuleSA(seqModuleSa);\r
+ public void removePcdData (String key, String cName, String tsGuid) {\r
+ ModuleSADocument.ModuleSA moduleSa = getModuleSA(key);\r
if (moduleSa == null || moduleSa.getPcdBuildDefinition() == null){\r
return;\r
}\r
PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)cursor.getObject();\r
if (pcdData.getCName().equals(cName) && pcdData.getTokenSpaceGuidCName().equals(tsGuid)) {\r
maintainDynPcdMap(cName + " " + tsGuid, moduleKey);\r
- if (getPcdDataCount(seqModuleSa) == 1) {\r
+ if (getPcdDataCount(key) == 1) {\r
cursor.toParent();\r
}\r
cursor.removeXml();\r
\r
int pcdSourceCount = 0;\r
for (int i = 0; i < vMi.size(); ++i) {\r
- if (WorkspaceProfile.pcdInMsa(cName, tsGuidCName, vMi.get(i))) {\r
+ if (WorkspaceProfile.pcdInMsa(cName, tsGuidCName, null, vMi.get(i))) {\r
pcdSourceCount++;\r
}\r
}\r
}\r
}\r
\r
- public void removeLibraryInstance(String key, int i) {\r
+ public boolean instanceExistsInModuleSA (String key, String mg, String mv, String pg, String pv) {\r
+ int count = 0;\r
+ if ((count = getLibraryInstancesCount(key)) > 0) {\r
+ String[][] saa = new String[count][5];\r
+ getLibraryInstances (key, saa);\r
+ for (int i = 0; i < count; ++i) {\r
+ if (mg.equalsIgnoreCase(saa[i][1]) && pg.equalsIgnoreCase(saa[i][3])) {\r
+ boolean modVerMatch = false;\r
+ boolean pkgVerMatch = false;\r
+ if ((mv.equals("null") || saa[i][2] == null)) {\r
+ modVerMatch = true;\r
+ }\r
+ if (pv.equals("null") || saa[i][4] == null) {\r
+ pkgVerMatch = true;\r
+ }\r
+ if (modVerMatch && pkgVerMatch) {\r
+ return true;\r
+ }\r
+ else {\r
+ if (mv.equals(saa[i][2]) && pv.equals(saa[i][4])) {\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ public void removeLibraryInstance(String key, String instanceKey) {\r
ModuleSADocument.ModuleSA msa = getModuleSA(key);\r
if (msa == null || msa.getLibraries() == null){\r
return ;\r
}\r
\r
+ String[] instanceInfo = instanceKey.split(" ");\r
XmlCursor cursor = msa.getLibraries().newCursor();\r
if (cursor.toFirstChild()) {\r
- for (int j = 0; j < i; ++j) {\r
- cursor.toNextSibling();\r
+ do {\r
+ Instance libIns = (Instance)cursor.getObject();\r
+ if (libIns.getModuleGuid().equalsIgnoreCase(instanceInfo[0]) && libIns.getPackageGuid().equalsIgnoreCase(instanceInfo[2])) {\r
+ break;\r
}\r
+ }while (cursor.toNextSibling());\r
cursor.push();\r
while (cursor.hasPrevToken()) {\r
cursor.toPrevToken();\r
XmlCursor cursor = instance.newCursor();\r
try{\r
String comment = "Pkg: " + pn + " Mod: " + mn \r
- + " Path: " + libMi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
+ + " Path: " + libMi.getPath().substring(Workspace.getCurrentWorkspace().length() + 1);\r
cursor.insertComment(comment);\r
}\r
catch (Exception e){\r
ListIterator li = l.listIterator();\r
while (li.hasNext()) {\r
PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry) li.next();\r
+ if (msaPcd.getSupArchList() != null) {\r
+ if (!msaPcd.getSupArchList().toString().toLowerCase().contains(arch.toLowerCase())) {\r
+ continue;\r
+ }\r
+ }\r
PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
if (spdPcd == null) {\r
//\r
// ToDo Error \r
//\r
- throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + " in Module "\r
- + mi.getName());\r
+ throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + "\n used by Module "\r
+ + mi.getName() + " or its Library Instances.");\r
}\r
//\r
// AddItem to ModuleSA PcdBuildDefinitions\r
XmlCursor cursor = msa.newCursor();\r
try{\r
String comment = "Mod: " + mi.getName() + " Type: " + SurfaceAreaQuery.getModuleType(mi) + " Path: "\r
- + mi.getPath().substring(System.getenv("WORKSPACE").length() + 1);\r
+ + mi.getPath().substring(Workspace.getCurrentWorkspace().length() + 1);\r
cursor.insertComment(comment);\r
}\r
catch(Exception e){\r
fpdPcd.setDatumType(PcdDataTypes.Enum.forString(dataType));\r
fpdPcd.setItemType(PcdItemTypes.Enum.forString(itemType));\r
\r
- if (defaultVal != null){\r
+ if (defaultVal != null && defaultVal.length() > 0){\r
fpdPcd.setValue(defaultVal);\r
}\r
else {\r
fpdPcd.setValue("FALSE");\r
}\r
if (dataType.equals("VOID*")) {\r
- fpdPcd.setValue("");\r
+ fpdPcd.setValue("L\"\"");\r
}\r
}\r
//\r
saa[i][1] = dynPcd.getToken().toString();\r
saa[i][2] = dynPcd.getTokenSpaceGuidCName();\r
saa[i][3] = dynPcd.getMaxDatumSize()+"";\r
- saa[i][4] = dynPcd.getDatumType().toString();\r
+ saa[i][4] = dynPcd.getDatumType()+"";\r
\r
++i;\r
}\r
return;\r
}\r
else {\r
- QName qSkuInfo = new QName(xmlNs, "SkuInfo");\r
- cursor.toChild(qSkuInfo);\r
- cursor.removeXml();\r
+ pcdData.getSkuInfoList().clear();\r
+// QName qSkuInfo = new QName(xmlNs, "SkuInfo");\r
+// cursor.toChild(qSkuInfo);\r
+// cursor.removeXml();\r
}\r
}\r
cursor.dispose();\r
\r
UserExtensionsDocument.UserExtensions userExts = getfpdBuildOpts().addNewUserExtensions();\r
userExts.setUserID(userId);\r
- userExts.setIdentifier(new BigInteger(id));\r
+ userExts.setIdentifier(id);\r
XmlCursor cursor = userExts.newCursor();\r
cursor.toEndToken();\r
\r
cursor.dispose();\r
}\r
\r
- public int getUserExtsIncModCount (String fvName, String userId, int id) {\r
+ public int getUserExtsIncModCount (String fvName, String userId, String id) {\r
if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
return -1;\r
}\r
if (!ues.getUserID().equals(userId)) {\r
continue;\r
}\r
- if (ues.getIdentifier() == null || ues.getIdentifier().intValue() != id) {\r
+ if (ues.getIdentifier() == null || !ues.getIdentifier().equals(id)) {\r
continue;\r
}\r
XmlCursor cursor = ues.newCursor();\r
return -1;\r
}\r
\r
- public void getUserExtsIncMods(String fvName, String userId, int id, String[][] saa) {\r
+ public void getUserExtsIncMods(String fvName, String userId, String id, String[][] saa) {\r
if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
return;\r
}\r
if (cursor.toChild(elementUserExts)) {\r
do {\r
cursor.push();\r
- if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id+"")) {\r
+ if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id)) {\r
cursor.toChild(elementFvName);\r
String elementName = cursor.getTextValue();\r
if (elementName.equals(fvName)) {\r
\r
}\r
\r
- public void removeBuildOptionsUserExtensions (String fvName, String userId, int id) {\r
+ public void removeBuildOptionsUserExtensions (String fvName, String userId, String id) {\r
if (getfpdBuildOpts().getUserExtensionsList() == null) {\r
return;\r
}\r
if (!ues.getUserID().equals(userId)) {\r
continue;\r
}\r
- if (ues.getIdentifier()== null || ues.getIdentifier().intValue() != id) {\r
+ if (ues.getIdentifier()== null || !ues.getIdentifier().equals(id)) {\r
continue;\r
}\r
XmlCursor cursor = ues.newCursor();\r
return false;\r
}\r
\r
- public boolean moduleInBuildOptionsUserExtensions (String fvName, String userId, int id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
+ public boolean moduleInBuildOptionsUserExtensions (String fvName, String userId, String id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
boolean inList = false;\r
if (getUserExtsIncModCount(fvName, userId, id) > 0) {\r
XmlCursor cursor = getfpdBuildOpts().newCursor();\r
if (cursor.toChild(elementUserExts)) {\r
do {\r
cursor.push();\r
- if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id+"")) {\r
+ if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id)) {\r
cursor.toChild(elementFvName);\r
String elementName = cursor.getTextValue();\r
if (elementName.equals(fvName)) {\r
return inList;\r
}\r
\r
- public void removeModuleInBuildOptionsUserExtensions (String fvName, String userId, int id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
+ public void removeModuleInBuildOptionsUserExtensions (String fvName, String userId, String id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
//\r
// if there is only one module before remove operation, the whole user extension should be removed.\r
//\r
if (cursor.toChild(elementUserExts)) {\r
do {\r
cursor.push();\r
- if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id+"")) {\r
+ if (cursor.getAttributeText(attribUserId).equals(userId) && cursor.getAttributeText(attribId).equals(id)) {\r
cursor.toChild(elementFvName);\r
String elementName = cursor.getTextValue();\r
if (elementName.equals(fvName)) {\r
}\r
}\r
\r
- public void addModuleIntoBuildOptionsUserExtensions (String fvName, String userId, int id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
+ public void addModuleIntoBuildOptionsUserExtensions (String fvName, String userId, String id, String moduleGuid, String moduleVersion, String packageGuid, String packageVersion, String arch) {\r
if (moduleInBuildOptionsUserExtensions (fvName, userId, id, moduleGuid, moduleVersion, packageGuid, packageVersion, arch)) {\r
return;\r
}\r
if (!ues.getUserID().equals(userId)) {\r
continue;\r
}\r
- if (ues.getIdentifier() == null || ues.getIdentifier().intValue() != id) {\r
+ if (ues.getIdentifier() == null || !ues.getIdentifier().equals(id)) {\r
continue;\r
}\r
XmlCursor cursor = ues.newCursor();\r
}\r
\r
public void updateBuildOptionsFfsSectionsType(int i, String type) {\r
- BuildOptionsDocument.BuildOptions.Ffs ffs = getfpdBuildOpts().addNewFfs();\r
- if (type != null) {\r
- ffs.addNewSections().setEncapsulationType(type);\r
- }\r
+ BuildOptionsDocument.BuildOptions.Ffs ffs = getFfs(i);\r
+ ffs.getSections().setEncapsulationType(type);\r
}\r
\r
public void genBuildOptionsFfsAttribute(int i, String name, String value) {\r
PcdItemTypeConflictException (String pcdName, String info) {\r
ModuleIdentification mi = WorkspaceProfile.getModuleId(info);\r
if (mi != null) {\r
- details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackageId().getName(); \r
+ details = pcdName + " ItemType Conflicts with " + mi.getName() + "\n in Pkg " + mi.getPackageId().getName(); \r
}\r
else {\r
- details = pcdName + " ItemType Conflicts with " + info;\r
+ details = pcdName + " ItemType Conflicts with \n" + info;\r
}\r
}\r
\r
moduleInfo2 = info2;\r
}\r
\r
- details = pcdName + " ItemType Conflicts in " + moduleInfo1 + " and " + moduleInfo2;\r
+ details = pcdName + " ItemType Conflicts in \n" + moduleInfo1 + "\n and " + moduleInfo2;\r
}\r
\r
public String getMessage() {\r