import java.util.regex.Matcher;\r
import java.util.regex.Pattern;\r
\r
-import org.tianocore.ExternsDocument.Externs.Extern;\r
import org.apache.xmlbeans.XmlObject;\r
import org.apache.xmlbeans.XmlString;\r
import org.tianocore.*;\r
+import org.tianocore.ExternsDocument.Externs.Extern;\r
import org.tianocore.FilenameDocument.Filename;\r
+import org.tianocore.ModuleDefinitionsDocument.ModuleDefinitions;\r
import org.tianocore.MsaHeaderDocument.MsaHeader;\r
import org.tianocore.ProtocolsDocument.Protocols.Protocol;\r
import org.tianocore.ProtocolsDocument.Protocols.ProtocolNotify;\r
import org.tianocore.build.id.PackageIdentification;\r
import org.tianocore.build.id.PlatformIdentification;\r
import org.tianocore.build.toolchain.ToolChainInfo;\r
+import org.tianocore.common.definitions.EdkDefinitions;\r
import org.tianocore.common.exception.EdkException;\r
import org.w3c.dom.Node;\r
\r
//\r
// keep the namep declaration for xmlbeans Xpath query\r
//\r
- private String queryDeclaration = null;\r
-\r
+ private String queryDeclaration = null; \r
private StringBuffer normQueryString = new StringBuffer(4096);\r
private Pattern xPathPattern = Pattern.compile("([^/]*)(/|//)([^/]+)");\r
\r
return null;\r
}\r
\r
+ /**\r
+ * Retrieve <ModuleDefinitions>/<BinaryModule>\r
+ *\r
+ * @returns The module type name if elements are found at the known xpath\r
+ * @returns null if nothing is there\r
+ */\r
+ public boolean getBinaryModule() {\r
+ String[] xPath = new String[] { "/" };\r
+\r
+ Object[] returns = get("ModuleDefinitions", xPath);\r
+ if (returns != null && returns.length > 0) {\r
+ ModuleDefinitionsDocument.ModuleDefinitions def = (ModuleDefinitionsDocument.ModuleDefinitions)returns[0];\r
+ return def.getBinaryModule();\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
/**\r
* Retrieve PackageDependencies/Package\r
*\r
* xpath\r
* @returns null if nothing is there\r
*/\r
- public String[] getLibraryClasses(String usage, String arch) {\r
+ public String[] getLibraryClasses(String usage, String arch, String moduleType) {\r
String[] xPath;\r
if (usage == null || usage.equals("")) {\r
xPath = new String[] { "/LibraryClass" };\r
List<String> libraryClassName = new ArrayList<String>();\r
for (int i = 0; i < libraryClassList.length; i++) {\r
List archList = libraryClassList[i].getSupArchList();\r
-\r
- if (arch == null || contains(archList, arch)) {\r
+ List moduleTypeList = libraryClassList[i].getSupModuleList();\r
+ if ((arch == null || contains(archList, arch))\r
+ && (moduleType == null || contains(moduleTypeList, moduleType))) {\r
libraryClassName.add(libraryClassList[i].getKeyword());\r
}\r
}\r
usageXpath = "/GuidEntry[@Usage='" + arch + "']";\r
xPath = new String[] { archXpath, usageXpath };\r
} else {\r
- return getProtocolNotifyArray(arch);\r
+ return getGuidEntryArray(arch);\r
}\r
}\r
\r
return guidList;\r
}\r
\r
+ public String[] getEventCNameArray(String arch) {\r
+ String[] xPath = null;\r
+\r
+ if (arch == null || arch.equals("")) {\r
+ xPath = new String[]{\r
+ "/CreateEvents/EventTypes[@EventGuidCName]",\r
+ "/SignalEvents/EventTypes[@EventGuidCName]",\r
+ };\r
+ } else {\r
+ xPath = new String[]{\r
+ "/CreateEvents/EventTypes[@EventGuidCName and not(@SupArchList)]",\r
+ "/SignalEvents/EventTypes[@EventGuidCName and not(@SupArchList)]",\r
+ "/CreateEvents/EventTypes[@EventGuidCName and contains(@SupArchList,'" + arch + "')]",\r
+ "/SignalEvents/EventTypes[@EventGuidCName and contains(@SupArchList,'" + arch + "')]",\r
+ };\r
+ }\r
+\r
+ Object[] returns = get("Events", xPath);\r
+ if (returns == null) {\r
+ return new String[0];\r
+ }\r
+\r
+ String[] cnameList = new String[returns.length];\r
+ for (int i = 0; i < returns.length; i++) {\r
+ if (returns[i] instanceof EventsDocument.Events.CreateEvents.EventTypes) {\r
+ cnameList[i] = ((EventsDocument.Events.CreateEvents.EventTypes) returns[i]).getEventGuidCName();\r
+ } else {\r
+ cnameList[i] = ((EventsDocument.Events.SignalEvents.EventTypes) returns[i]).getEventGuidCName();\r
+ }\r
+ }\r
+ return cnameList;\r
+ }\r
+\r
+ public String[] getHobCNameArray(String arch) {\r
+ String[] xPath = null;\r
+\r
+ if (arch == null || arch.equals("")) {\r
+ xPath = new String[]{"/HobTypes[@HobGuidCName]"};\r
+ } else {\r
+ xPath = new String[]{\r
+ "/HobTypes[@HobGuidCName and not(@SupArchList)]",\r
+ "/HobTypes[@HobGuidCName and contains(@SupArchList,'" + arch + "')]",\r
+ };\r
+ }\r
+\r
+ Object[] returns = get("Hobs", xPath);\r
+ if (returns == null) {\r
+ return new String[0];\r
+ }\r
+\r
+ String[] cnameList = new String[returns.length];\r
+ for (int i = 0; i < returns.length; i++) {\r
+ cnameList[i] = ((HobsDocument.Hobs.HobTypes) returns[i]).getHobGuidCName();\r
+ }\r
+ return cnameList;\r
+ }\r
+\r
+ public String[] getVariableCNameArray(String arch) {\r
+ String[] xPath = null;\r
+\r
+ if (arch == null || arch.equals("")) {\r
+ xPath = new String[]{"/Variable"};\r
+ } else {\r
+ xPath = new String[]{"/Variable[not(@SupArchList) or contains(@SupArchList,'" + arch + "')]"};\r
+ }\r
+\r
+ Object[] returns = get("Variables", xPath);\r
+ if (returns == null) {\r
+ return new String[0];\r
+ }\r
+\r
+ String[] cnameList = new String[returns.length];\r
+ for (int i = 0; i < returns.length; i++) {\r
+ cnameList[i] = ((VariablesDocument.Variables.Variable) returns[i]).getGuidCName();\r
+ }\r
+ return cnameList;\r
+ }\r
+\r
+ public String[] getSystemTableCNameArray(String arch) {\r
+ String[] xPath = null;\r
+\r
+ if (arch == null || arch.equals("")) {\r
+ xPath = new String[]{"/SystemTableCNames"};\r
+ } else {\r
+ xPath = new String[]{\r
+ "/SystemTableCNames[not(@SupArchList) or contains(@SupArchList,'" + arch + "')]"\r
+ };\r
+ }\r
+\r
+ Object[] returns = get("SystemTables", xPath);\r
+ if (returns == null) {\r
+ return new String[0];\r
+ }\r
+\r
+ String[] cnameList = new String[returns.length];\r
+ for (int i = 0; i < returns.length; i++) {\r
+ cnameList[i] = ((SystemTablesDocument.SystemTables.SystemTableCNames) returns[i]).getSystemTableCName();\r
+ }\r
+ return cnameList;\r
+ }\r
+\r
+ public String[] getDataHubCNameArray(String arch) {\r
+ String[] xPath = null;\r
+\r
+ if (arch == null || arch.equals("")) {\r
+ xPath = new String[]{"/DataHubRecord"};\r
+ } else {\r
+ xPath = new String[]{"/DataHubRecord[not(@SupArchList) or contains(@SupArchList,'" + arch + "')]"};\r
+ }\r
+\r
+ Object[] returns = get("DataHubs", xPath);\r
+ if (returns == null) {\r
+ return new String[0];\r
+ }\r
+\r
+ String[] cnameList = new String[returns.length];\r
+ for (int i = 0; i < returns.length; i++) {\r
+ cnameList[i] = ((DataHubsDocument.DataHubs.DataHubRecord) returns[i]).getDataHubCName();\r
+ }\r
+ return cnameList;\r
+ }\r
+\r
+ public String[] getHiiPackageCNameArray(String arch) {\r
+ String[] xPath = null;\r
+\r
+ if (arch == null || arch.equals("")) {\r
+ xPath = new String[]{"/HiiPackage"};\r
+ } else {\r
+ xPath = new String[]{"/HiiPackage[not(@SupArchList) or contains(@SupArchList,'" + arch + "')]"};\r
+ }\r
+\r
+ Object[] returns = get("HiiPackages", xPath);\r
+ if (returns == null) {\r
+ return new String[0];\r
+ }\r
+\r
+ String[] cnameList = new String[returns.length];\r
+ for (int i = 0; i < returns.length; i++) {\r
+ cnameList[i] = ((HiiPackagesDocument.HiiPackages.HiiPackage) returns[i]).getHiiCName();\r
+ }\r
+ return cnameList;\r
+ }\r
+\r
+ public String[] getCNameArray(String arch) {\r
+ List<String> cnameList = new ArrayList<String>(100);\r
+ String[] result = null;\r
+ // \r
+ // "/Guids/GuidCNames/GuidCName",\r
+ // \r
+ result = getGuidEntryArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ // \r
+ // "/Protocols/Protocol/ProtocolCName",\r
+ // \r
+ result = getProtocolArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ //\r
+ // "/Protocols/ProtocolNotify/ProtocolNotifyCName",\r
+ // \r
+ result = getProtocolNotifyArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ // \r
+ // "/Events/CreateEvents/EventTypes[@EventGuidCName]",\r
+ // "/Events/SignalEvents/EventTypes[@EventGuidCName]",\r
+ // \r
+ result = getEventCNameArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ //\r
+ // "/Hobs/HobTypes[@HobGuidCName]",\r
+ // \r
+ result = getHobCNameArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ // \r
+ // "/PPIs/Ppi/PpiCName",\r
+ //\r
+ result = getPpiArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ // \r
+ // "/PPIs/PpiNotify/PpiNotifyCName",\r
+ // \r
+ result = getPpiNotifyArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ // \r
+ // "/Variables/Variable/GuidC_Name",\r
+ // \r
+ result = getVariableCNameArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ // \r
+ // "/SystemTables/SystemTableCNames/SystemTableCName",\r
+ // \r
+ result = getSystemTableCNameArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ //\r
+ // "/DataHubs/DataHubRecord/DataHubCName",\r
+ // \r
+ result = getDataHubCNameArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+ //\r
+ // "/HiiPackages/HiiPackage/HiiCName",\r
+ // \r
+ result = getHiiPackageCNameArray(arch);\r
+ for (int i = 0; i < result.length; ++i) {\r
+ cnameList.add(result[i]);\r
+ }\r
+\r
+ return cnameList.toArray(new String[cnameList.size()]);\r
+ }\r
+\r
/**\r
* Retrieve Library instance information\r
*\r
return a.getDomNode();\r
}\r
\r
+ public Node[] getFpdUserExtensions() {\r
+ String[] xPath = new String[] { "/UserExtensions[@UserID='TianoCore' and not(@Identifier='1') and not(@Identifier='0')]" };\r
+\r
+ Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
+ if (queryResult == null || queryResult.length == 0) {\r
+ return new Node[0];\r
+ }\r
+\r
+ Node[] nodeList = new Node[queryResult.length];\r
+ for (int i = 0; i < queryResult.length; ++i) {\r
+ UserExtensionsDocument.UserExtensions a = (UserExtensionsDocument.UserExtensions)queryResult[i];\r
+ nodeList[i] = a.getDomNode();\r
+ }\r
+\r
+ return nodeList;\r
+ }\r
/**\r
* Retrieve FV image option information\r
*\r
return new ModuleSADocument.ModuleSA[0];\r
\r
}\r
+ \r
/**\r
- Get name array of PCD in a module. In one module, token space\r
- is same, and token name should not be conflicted.\r
-\r
- @return String[]\r
+ Get name array who contains all PCDs in a module according to specified arch.\r
+ \r
+ @param arch The specified architecture type.\r
+ \r
+ @return String[] return all PCDs name into array, if no any PCD used by\r
+ this module, a String[0] array is returned.\r
**/\r
- public String[] getModulePcdEntryNameArray() {\r
+ public String[] getModulePcdEntryNameArray(String arch) {\r
PcdCodedDocument.PcdCoded.PcdEntry[] pcdEntries = null;\r
- String[] results;\r
- int index;\r
- String[] xPath = new String[] {"/PcdEntry"};\r
- Object[] returns = get ("PcdCoded", xPath);\r
+ java.util.List archList = null;\r
+ java.util.List<String> results = new java.util.ArrayList<String> ();\r
+ int index;\r
+ String[] xPath = new String[] {"/PcdEntry"};\r
+ Object[] returns = get ("PcdCoded", xPath);\r
\r
if (returns == null) {\r
return new String[0];\r
}\r
\r
- pcdEntries = (PcdCodedDocument.PcdCoded.PcdEntry[])returns;\r
- results = new String[pcdEntries.length];\r
+ pcdEntries = (PcdCodedDocument.PcdCoded.PcdEntry[])returns;\r
\r
for (index = 0; index < pcdEntries.length; index ++) {\r
- results[index] = pcdEntries[index].getCName();\r
+ archList = pcdEntries[index].getSupArchList();\r
+ //\r
+ // If the ArchList is specified in MSA for this PCD, need check\r
+ // current arch whether can support by this PCD.\r
+ // \r
+ if (archList != null) {\r
+ if (archList.contains(arch)) {\r
+ results.add(new String(pcdEntries[index].getCName()));\r
+ }\r
+ } else {\r
+ //\r
+ // If no ArchList is specificied in MSA for this PCD, that means\r
+ // this PCD support all architectures.\r
+ // \r
+ results.add(new String(pcdEntries[index].getCName()));\r
+ }\r
+ }\r
+\r
+ if (results.size() == 0) {\r
+ return new String[0];\r
}\r
- return results;\r
+\r
+ String[] retArray = new String[results.size()];\r
+ results.toArray(retArray);\r
+\r
+ return retArray; \r
}\r
\r
/**\r
if (list == null || list.size()== 0) {\r
return true;\r
}\r
- Iterator it = list.iterator();\r
- while (it.hasNext()) {\r
- String s = (String)it.next();\r
- if (s.equalsIgnoreCase(str)) {\r
- return true;\r
- }\r
- }\r
\r
- return false;\r
+ return list.contains(str);\r
}\r
\r
public boolean isHaveTianoR8FlashMap(){\r
}\r
}\r
\r
+ public Node getPeiApriori(String fvName) {\r
+ String[] xPath = new String[] { "/BuildOptions/UserExtensions[@UserID='APRIORI' and @Identifier='0' and ./FvName='" + fvName + "']" };\r
+ Object[] result = get("PlatformSurfaceArea", xPath);\r
+ \r
+ if (result == null || result.length == 0) {\r
+ return null;\r
+ }\r
+ \r
+ UserExtensionsDocument.UserExtensions a = (UserExtensionsDocument.UserExtensions)result[0];\r
+ \r
+ return a.getDomNode();\r
+ }\r
+ \r
+ public Node getDxeApriori(String fvName) {\r
+ String[] xPath = new String[] { "/BuildOptions/UserExtensions[@UserID='APRIORI' and @Identifier='1' and ./FvName='" + fvName + "']" };\r
+ Object[] result = get("PlatformSurfaceArea", xPath);\r
+ \r
+ if (result == null || result.length == 0) {\r
+ return null;\r
+ }\r
+ \r
+ UserExtensionsDocument.UserExtensions a = (UserExtensionsDocument.UserExtensions)result[0];\r
+ \r
+ return a.getDomNode();\r
+ }\r
+ \r
public Node getFpdModuleSequence(String fvName) {\r
String[] xPath = new String[] { "/BuildOptions/UserExtensions[@UserID='IMAGES' and @Identifier='1' and ./FvName='" + fvName + "']" };\r
Object[] result = get("PlatformSurfaceArea", xPath);\r
\r
return a.getDomNode();\r
}\r
+\r
+ /**\r
+ Get the value of PCD by PCD cName\r
+\r
+ @return PcdValue String of PcdComponentName\r
+ null If don't find ComponentName Pcd\r
+ **/\r
+ public String getPcdValueBycName(String cName){\r
+ String[] xPath = new String[] { "/PcdData" };\r
+ Object[] returns = get("PcdBuildDefinition", xPath);\r
+ if (returns == null || returns.length == 0) {\r
+ return null;\r
+ } \r
+ for (int i = 0; i < returns.length; i++) {\r
+ PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData pcdData = (PcdBuildDefinitionDocument.PcdBuildDefinition.PcdData)returns[i];\r
+ if (pcdData.getCName().equalsIgnoreCase(cName)){\r
+ return pcdData.getValue();\r
+ }\r
+ }\r
+ return null;\r
+ }\r
}\r