+ \r
+ private Set<FpdModuleIdentification> getModuleSequenceForFv(String fvName) throws EdkException {\r
+ Node node = saq.getFpdModuleSequence(fvName);\r
+ Set<FpdModuleIdentification> result = new LinkedHashSet<FpdModuleIdentification>();\r
+ \r
+ if ( node == null) {\r
+ EdkLog.log(this, EdkLog.EDK_WARNING, "FV[" + fvName + "] does not specify module sequence in FPD. Assuming present sequence as default sequence in FV. ");\r
+ return null;\r
+ } else {\r
+ NodeList childNodes = node.getChildNodes();\r
+ for (int i = 0; i < childNodes.getLength(); i++) {\r
+ Node childItem = childNodes.item(i);\r
+ if (childItem.getNodeType() == Node.ELEMENT_NODE) {\r
+ //\r
+ // Find child elements "IncludeModules"\r
+ //\r
+ if (childItem.getNodeName().compareTo("IncludeModules") == 0) {\r
+ //\r
+ // result will be updated\r
+ //\r
+ processNodes(childItem, result);\r
+ } else if (childItem.getNodeName().compareTo("FvName") == 0) {\r
+ \r
+ } else if (childItem.getNodeName().compareTo("InfFileName") == 0) {\r
+ \r
+ } else {\r
+ //\r
+ // Report Warning\r
+ //\r
+ EdkLog.log(this, EdkLog.EDK_WARNING, "Unrecognised element " + childItem.getNodeName() + " under FPD.BuildOptions.UserExtensions[UserID='IMAGES' Identifier='1']");\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ return result;\r
+ }\r
+ \r
+ private void processNodes(Node node, Set<FpdModuleIdentification> result) throws EdkException {\r
+ //\r
+ // Found out all elements "Module"\r
+ //\r
+ NodeList childNodes = node.getChildNodes();\r
+ for (int j = 0; j < childNodes.getLength(); j++) {\r
+ Node childItem = childNodes.item(j);\r
+ if (childItem.getNodeType() == Node.ELEMENT_NODE) {\r
+ if (childItem.getNodeName().compareTo("Module") == 0) {\r
+ String moduleGuid = null;\r
+ String moduleVersion = null;\r
+ String packageGuid = null;\r
+ String packageVersion = null;\r
+ String arch = null;\r
+ \r
+ NamedNodeMap attr = childItem.getAttributes();\r
+ for (int i = 0; i < attr.getLength(); i++) {\r
+ Node attrItem = attr.item(i);\r
+ if (attrItem.getNodeName().compareTo("ModuleGuid") == 0) {\r
+ moduleGuid = attrItem.getNodeValue();\r
+ } else if (attrItem.getNodeName().compareTo("ModuleVersion") == 0) {\r
+ moduleVersion = attrItem.getNodeValue();\r
+ } else if (attrItem.getNodeName().compareTo("PackageGuid") == 0) {\r
+ packageGuid = attrItem.getNodeValue();\r
+ } else if (attrItem.getNodeName().compareTo("PackageVersion") == 0) {\r
+ packageVersion = attrItem.getNodeValue();\r
+ } else if (attrItem.getNodeName().compareTo("Arch") == 0) {\r
+ arch = attrItem.getNodeValue();\r
+ } else {\r
+ //\r
+ // Report warning\r
+ //\r
+ EdkLog.log(this, EdkLog.EDK_WARNING, "Unrecognised attribute " + attrItem.getNodeName() + " under FPD.BuildOptions.UserExtensions[UserID='IMAGES' Identifier='1'].IncludeModules.Module");\r
+ }\r
+ }\r
+ \r
+ PackageIdentification packageId = new PackageIdentification(packageGuid, packageVersion);\r
+ GlobalData.refreshPackageIdentification(packageId);\r
+ \r
+ ModuleIdentification moduleId = new ModuleIdentification(moduleGuid, moduleVersion);\r
+ moduleId.setPackage(packageId);\r
+ GlobalData.refreshModuleIdentification(moduleId);\r
+ \r
+ if (arch == null) {\r
+ throw new EdkException("Attribute [Arch] is required for element FPD.BuildOptions.UserExtensions[UserID='IMAGES' Identifier='1'].IncludeModules.Module. ");\r
+ }\r
+ \r
+ result.add(new FpdModuleIdentification(moduleId, arch));\r
+ } else {\r
+ //\r
+ // Report Warning\r
+ //\r
+ EdkLog.log(this, EdkLog.EDK_WARNING, "Unrecognised element " + childItem.getNodeName() + " under FPD.BuildOptions.UserExtensions[UserID='IMAGES' Identifier='1'].IncludeModules");\r
+ }\r
+ }\r
+ }\r
+ }\r