int pcdCount = getPcdDataCount(seqModuleSa);\r
String[][] saaModuleSaPcd = new String[pcdCount][7];\r
getPcdData(seqModuleSa, saaModuleSaPcd);\r
- String mg = moduleSa.getModuleGuid();\r
+ String mg = moduleSa.getModuleGuid().toLowerCase();\r
String mv = moduleSa.getModuleVersion();\r
- String pg = moduleSa.getPackageGuid();\r
+ String pg = moduleSa.getPackageGuid().toLowerCase();\r
String pv = moduleSa.getPackageVersion();\r
String arch = listToString(moduleSa.getSupArchList());\r
//\r
ArrayList<String> al = getDynPcdMapValue(msaPcd.getCName() + " " + msaPcd.getTokenSpaceGuidCName());\r
if (al != null) {\r
for (int j = 0; j < al.size(); ++j) {\r
- if (al.get(j).contains(moduleKey)) {\r
+ if (al.get(j).startsWith(moduleKey)) {\r
continue msaPcdIter;\r
}\r
}\r
: msaPcd.getDefaultValue();\r
\r
genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(),\r
- msaPcd.getPcdItemType().toString(), spdPcd.getDatumType() + "", defaultVal, moduleSa);\r
+ msaPcd.getPcdItemType().toString(), spdPcd.getDatumType() + "", defaultVal, moduleSa, spdPcd);\r
dataModified = true;\r
}\r
\r
* @param sa Results: HelpText, Original item type.\r
* @return\r
*/\r
- public boolean getPcdBuildDataInfo(ModuleIdentification mi, String cName, String tsGuid, String[] sa) throws Exception{\r
- try {\r
- \r
- ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)WorkspaceProfile.getModuleXmlObject(mi);\r
- if (msa.getPcdCoded() == null) {\r
- return false;\r
+ public boolean getPcdBuildDataInfo(ModuleIdentification mi, String cName, String tsGuid, String[] sa, Vector<String> validPcdTypes) throws Exception{\r
+ \r
+ ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea) WorkspaceProfile\r
+ .getModuleXmlObject(mi);\r
+ if (msa.getPcdCoded() == null) {\r
+ return false;\r
+ }\r
+\r
+ PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
+ //\r
+ // First look through MSA pcd entries.\r
+ //\r
+ List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
+ ListIterator li = l.listIterator();\r
+ while (li.hasNext()) {\r
+ PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry) li.next();\r
+ if (!msaPcd.getCName().equals(cName)) {\r
+ continue;\r
}\r
- \r
- Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
- m.put("ModuleSurfaceArea", msa);\r
- SurfaceAreaQuery.setDoc(m);\r
- PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
- //\r
- // First look through MSA pcd entries.\r
- //\r
- List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
- ListIterator li = l.listIterator();\r
- while(li.hasNext()) {\r
- PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\r
- if (!msaPcd.getCName().equals(cName)) {\r
- continue;\r
- }\r
- if (!msaPcd.getTokenSpaceGuidCName().equals(tsGuid)) {\r
- continue;\r
- }\r
- PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
- if (spdPcd == null) {\r
- //\r
- // ToDo Error \r
- //\r
- throw new PcdDeclNotFound(mi.getName() + " " + msaPcd.getCName());\r
- }\r
+ if (!msaPcd.getTokenSpaceGuidCName().equals(tsGuid)) {\r
+ continue;\r
+ }\r
+ PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
+ if (spdPcd == null || spdPcd.getValidUsage() == null) {\r
//\r
- // Get Pcd help text and original item type.\r
+ // ToDo Error \r
//\r
- sa[0] = spdPcd.getHelpText() + msaPcd.getHelpText();\r
- sa[1] = msaPcd.getPcdItemType()+"";\r
- sa[2] = msa.getModuleDefinitions().getBinaryModule()+"";\r
- return true;\r
+ throw new PcdDeclNotFound(mi.getName() + " " + msaPcd.getCName());\r
}\r
- \r
- \r
- }\r
- catch (Exception e){\r
- e.printStackTrace();\r
- throw e;\r
+ //\r
+ // Get Pcd help text and original item type.\r
+ //\r
+ sa[0] = spdPcd.getHelpText() + msaPcd.getHelpText();\r
+ sa[1] = msaPcd.getPcdItemType() + "";\r
+ sa[2] = msa.getModuleDefinitions().getBinaryModule() + "";\r
+ ListIterator iter = spdPcd.getValidUsage().listIterator();\r
+ while (iter.hasNext()) {\r
+ String usage = iter.next().toString();\r
+ validPcdTypes.add(usage);\r
+ }\r
+ return true;\r
}\r
- \r
+\r
return false;\r
}\r
\r
public void addFrameworkModulesPcdBuildDefs(ModuleIdentification mi, String arch, ModuleSADocument.ModuleSA moduleSa) throws Exception {\r
//ToDo add Arch filter\r
\r
- try {\r
- if (moduleSa == null) {\r
- moduleSa = genModuleSA(mi, arch);\r
- }\r
- \r
- ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea)WorkspaceProfile.getModuleXmlObject(mi);\r
- if (msa.getPcdCoded() == null) {\r
- return;\r
- }\r
- \r
- Map<String, XmlObject> m = new HashMap<String, XmlObject>();\r
- m.put("ModuleSurfaceArea", msa);\r
- SurfaceAreaQuery.setDoc(m);\r
- PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
- //\r
- // Implementing InitializePlatformPcdBuildDefinitions\r
- //\r
- List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
- ListIterator li = l.listIterator();\r
- while(li.hasNext()) {\r
- PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry)li.next();\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 " + mi.getName());\r
- }\r
+ if (moduleSa == null) {\r
+ moduleSa = genModuleSA(mi, arch);\r
+ }\r
+\r
+ ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = (ModuleSurfaceAreaDocument.ModuleSurfaceArea) WorkspaceProfile\r
+ .getModuleXmlObject(mi);\r
+ if (msa.getPcdCoded() == null) {\r
+ return;\r
+ }\r
+\r
+ PackageIdentification[] depPkgs = SurfaceAreaQuery.getDependencePkg(null, mi);\r
+ //\r
+ // Implementing InitializePlatformPcdBuildDefinitions\r
+ //\r
+ List<PcdCodedDocument.PcdCoded.PcdEntry> l = msa.getPcdCoded().getPcdEntryList();\r
+ ListIterator li = l.listIterator();\r
+ while (li.hasNext()) {\r
+ PcdCodedDocument.PcdCoded.PcdEntry msaPcd = (PcdCodedDocument.PcdCoded.PcdEntry) li.next();\r
+ PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd = LookupPcdDeclaration(msaPcd, depPkgs);\r
+ if (spdPcd == null) {\r
//\r
- // AddItem to ModuleSA PcdBuildDefinitions\r
+ // ToDo Error \r
//\r
- String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue();\r
- \r
- genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(), msaPcd.getPcdItemType().toString(), spdPcd.getDatumType()+"", defaultVal, moduleSa);\r
+ throw new PcdDeclNotFound("No Declaration for PCD Entry " + msaPcd.getCName() + " in Module "\r
+ + mi.getName());\r
}\r
- \r
- }\r
- catch (Exception e){\r
- \r
- throw e; \r
+ //\r
+ // AddItem to ModuleSA PcdBuildDefinitions\r
+ //\r
+ String defaultVal = msaPcd.getDefaultValue() == null ? spdPcd.getDefaultValue() : msaPcd.getDefaultValue();\r
+\r
+ genPcdData(msaPcd.getCName(), spdPcd.getToken(), msaPcd.getTokenSpaceGuidCName(), msaPcd.getPcdItemType()\r
+ .toString(),\r
+ spdPcd.getDatumType() + "", defaultVal, moduleSa, spdPcd);\r
}\r
\r
}\r
return msa;\r
}\r
\r
- private void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, ModuleSADocument.ModuleSA moduleSa) \r
+ private String chooseDefaultPcdType (List validPcdTypes) {\r
+ String choosedType = "";\r
+ if (validPcdTypes.contains("FIXED_AT_BUILD")) {\r
+ choosedType = "FIXED_AT_BUILD";\r
+ }\r
+ else if (validPcdTypes.contains("DYNAMIC")) {\r
+ choosedType = "DYNAMIC";\r
+ }\r
+ else if (validPcdTypes.contains("PATCHABLE_IN_MODULE")) {\r
+ choosedType = "PATCHABLE_IN_MODULE";\r
+ }\r
+ else if (validPcdTypes.contains("DYNAMIC_EX")) {\r
+ choosedType = "DYNAMIC_EX";\r
+ }\r
+ return choosedType;\r
+ }\r
+ \r
+ private void genPcdData (String cName, Object token, String tsGuid, String itemType, String dataType, String defaultVal, \r
+ ModuleSADocument.ModuleSA moduleSa, PcdDeclarationsDocument.PcdDeclarations.PcdEntry spdPcd) \r
throws PcdItemTypeConflictException, PcdValueMalFormed{\r
if (moduleSa.getPcdBuildDefinition() == null){\r
moduleSa.addNewPcdBuildDefinition();\r
return;\r
}\r
}\r
+ // if pcd type from MSA file is Dynamic\r
+ // we must choose one default type from SPD file for it.\r
+ //\r
+ List validPcdTypes = spdPcd.getValidUsage();\r
//\r
// Using existing Pcd type, if this pcd already exists in other ModuleSA\r
//\r
if (pcdConsumer.size() > 0) {\r
+ //\r
+ // platform should only contain one type for each pcd.\r
+ //\r
+ String existingItemType = itemType (pcdConsumer.get(0));\r
+ for (int i = 1; i < pcdConsumer.size(); ++i) {\r
+ if (!existingItemType.equals(itemType(pcdConsumer.get(i)))) {\r
+ throw new PcdItemTypeConflictException (cName, pcdConsumer.get(0), pcdConsumer.get(i));\r
+ }\r
+ }\r
\r
- itemType = itemType (pcdConsumer.get(0));\r
+ if (itemType.equals("DYNAMIC")) {\r
+ if (!validPcdTypes.contains(existingItemType)) {\r
+ throw new PcdItemTypeConflictException(cName, pcdConsumer.get(0));\r
+ }\r
+ itemType = existingItemType;\r
+ }\r
+ else {\r
+ if (!itemType.equals(existingItemType)) {\r
+ throw new PcdItemTypeConflictException(cName, pcdConsumer.get(0));\r
+ }\r
+ }\r
+ }\r
+ //\r
+ // if this is the first occurence of this pcd. \r
+ //\r
+ else {\r
+ if (itemType.equals("DYNAMIC")) {\r
+ itemType = chooseDefaultPcdType (validPcdTypes);\r
+ }\r
}\r
String listValue = moduleInfo + " " + itemType;\r
pcdConsumer.add(listValue);\r
private static final long serialVersionUID = 1L;\r
private String details = null;\r
\r
- PcdItemTypeConflictException(String pcdName, String info){\r
+ PcdItemTypeConflictException (String pcdName, String info) {\r
ModuleIdentification mi = WorkspaceProfile.getModuleId(info);\r
- details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackageId().getName();\r
+ if (mi != null) {\r
+ details = pcdName + " ItemType Conflicts with " + mi.getName() + " in Pkg " + mi.getPackageId().getName(); \r
+ }\r
+ else {\r
+ details = pcdName + " ItemType Conflicts with " + info;\r
+ }\r
+ }\r
+ \r
+ PcdItemTypeConflictException (String pcdName, String info1, String info2) {\r
+ ModuleIdentification mi1 = WorkspaceProfile.getModuleId(info1);\r
+ ModuleIdentification mi2 = WorkspaceProfile.getModuleId(info2);\r
+ String moduleInfo1 = "";\r
+ String moduleInfo2 = "";\r
+ if (mi1 != null) {\r
+ moduleInfo1 = mi1.getName() + " in Pkg " + mi1.getPackageId().getName();\r
+ }\r
+ else {\r
+ moduleInfo1 = info1;\r
+ }\r
+ \r
+ if (mi2 != null) {\r
+ moduleInfo2 = mi2.getName() + " in Pkg " + mi2.getPackageId().getName();\r
+ }\r
+ else {\r
+ moduleInfo2 = info2;\r
+ }\r
+ \r
+ details = pcdName + " ItemType Conflicts in " + moduleInfo1 + " and " + moduleInfo2;\r
}\r
\r
public String getMessage() {\r