import java.util.regex.Matcher;\r
import java.util.regex.Pattern;\r
\r
+import org.w3c.dom.Node;\r
+\r
import org.apache.xmlbeans.XmlObject;\r
import org.apache.xmlbeans.XmlString;\r
+\r
import org.tianocore.BuildOptionsDocument;\r
import org.tianocore.CNameType;\r
import org.tianocore.ExternsDocument;\r
import org.tianocore.MsaHeaderDocument.MsaHeader;\r
import org.tianocore.ProtocolsDocument.Protocols.Protocol;\r
import org.tianocore.ProtocolsDocument.Protocols.ProtocolNotify;\r
+import org.tianocore.PcdDriverTypes;\r
+\r
+import org.tianocore.common.exception.EdkException;\r
+import org.tianocore.common.logger.EdkLog;\r
import org.tianocore.build.id.FpdModuleIdentification;\r
import org.tianocore.build.id.ModuleIdentification;\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.logger.EdkLog;\r
-import org.w3c.dom.Node;\r
+import org.tianocore.build.autogen.CommonDefinition;\r
\r
/**\r
* SurfaceAreaQuery class is used to query Surface Area information from msa,\r
* mbd, spd and fpd files.\r
- * \r
+ *\r
* This class should not instantiated. All the public interfaces is static.\r
- * \r
+ *\r
* @since GenBuild 1.0\r
*/\r
public class SurfaceAreaQuery {\r
\r
- public static String prefix = "http://www.TianoCore.org/2006/Edk2.0";\r
+ public String prefix = "http://www.TianoCore.org/2006/Edk2.0";\r
\r
- // /\r
- // / Contains name/value pairs of Surface Area document object. The name is\r
- // / always the top level element name.\r
- // /\r
- private static Map<String, XmlObject> map = null;\r
+ //\r
+ // Contains name/value pairs of Surface Area document object. The name is\r
+ // always the top level element name.\r
+ //\r
+ private Map<String, XmlObject> map = null;\r
\r
- // /\r
- // / mapStack is used to do nested query\r
- // /\r
- private static Stack<Map<String, XmlObject>> mapStack = new Stack<Map<String, XmlObject>>();\r
+ //\r
+ // mapStack is used to do nested query\r
+ //\r
+ private Stack<Map<String, XmlObject>> mapStack = new Stack<Map<String, XmlObject>>();\r
\r
- // /\r
- // / prefix of name space\r
- // /\r
- private static String nsPrefix = "sans";\r
+ //\r
+ // prefix of name space\r
+ //\r
+ private String nsPrefix = "sans";\r
\r
- // /\r
- // / xmlbeans needs a name space for each Xpath element\r
- // /\r
- private static String ns = null;\r
+ //\r
+ // xmlbeans needs a name space for each Xpath element\r
+ //\r
+ private String ns = null;\r
\r
- // /\r
- // / keep the namep declaration for xmlbeans Xpath query\r
- // /\r
- private static String queryDeclaration = null;\r
+ //\r
+ // keep the namep declaration for xmlbeans Xpath query\r
+ //\r
+ private String queryDeclaration = null;\r
+\r
+ private StringBuffer normQueryString = new StringBuffer(4096);\r
+ private Pattern xPathPattern = Pattern.compile("([^/]*)(/|//)([^/]+)");\r
\r
/**\r
* Set a Surface Area document for query later\r
- * \r
+ *\r
* @param map\r
* A Surface Area document in TopLevelElementName/XmlObject\r
* format.\r
*/\r
- public static void setDoc(Map<String, XmlObject> map) {\r
+ public SurfaceAreaQuery(Map<String, XmlObject> map) {\r
ns = prefix;\r
queryDeclaration = "declare namespace " + nsPrefix + "='" + ns + "'; ";\r
- SurfaceAreaQuery.map = map;\r
+ this.map = map;\r
}\r
\r
/**\r
* Push current used Surface Area document into query stack. The given new\r
* document will be used for any immediately followed getXXX() callings,\r
* untill pop() is called.\r
- * \r
+ *\r
* @param newMap\r
* The TopLevelElementName/XmlObject format of a Surface Area\r
* document.\r
*/\r
- public static void push(Map<String, XmlObject> newMap) {\r
- mapStack.push(SurfaceAreaQuery.map);\r
- SurfaceAreaQuery.map = newMap;\r
+ public void push(Map<String, XmlObject> newMap) {\r
+ mapStack.push(this.map);\r
+ this.map = newMap;\r
}\r
\r
/**\r
* Discard current used Surface Area document and use the top document in\r
* stack instead.\r
*/\r
- public static void pop() {\r
- SurfaceAreaQuery.map = mapStack.pop();\r
+ public void pop() {\r
+ this.map = mapStack.pop();\r
}\r
\r
// /\r
// / selectPath(). For example, converting /MsaHeader/ModuleType to\r
// / /ns:MsaHeader/ns:ModuleType\r
// /\r
- private static String normalizeQueryString(String[] exp, String from) {\r
- StringBuffer normQueryString = new StringBuffer(4096);\r
+ private String normalizeQueryString(String[] exp, String from) {\r
+ normQueryString.setLength(0);\r
\r
int i = 0;\r
while (i < exp.length) {\r
String newExp = from + exp[i];\r
- Pattern pattern = Pattern.compile("([^/]*)(/|//)([^/]+)");\r
- Matcher matcher = pattern.matcher(newExp);\r
+ Matcher matcher = xPathPattern.matcher(newExp);\r
\r
while (matcher.find()) {\r
String starter = newExp.substring(matcher.start(1), matcher\r
/**\r
* Search all XML documents stored in "map" for the specified xPath, using\r
* relative path (starting with '$this')\r
- * \r
+ *\r
* @param xPath\r
* xpath query string array\r
* @returns An array of XmlObject if elements are found at the specified\r
* xpath\r
* @returns NULL if nothing is at the specified xpath\r
*/\r
- public static Object[] get(String[] xPath) {\r
+ public Object[] get(String[] xPath) {\r
if (map == null) {\r
return null;\r
}\r
/**\r
* Search XML documents named by "rootName" for the given xPath, using\r
* relative path (starting with '$this')\r
- * \r
+ *\r
* @param rootName\r
* The top level element name\r
* @param xPath\r
* @returns An array of XmlObject if elements are found at the given xpath\r
* @returns NULL if nothing is found at the given xpath\r
*/\r
- public static Object[] get(String rootName, String[] xPath) {\r
+ public Object[] get(String rootName, String[] xPath) {\r
if (map == null) {\r
return null;\r
}\r
\r
/**\r
* Retrieve SourceFiles/Filename for specified ARCH type\r
- * \r
+ *\r
* @param arch\r
* architecture name\r
* @returns An 2 dimension string array if elements are found at the known\r
* xpath\r
* @returns NULL if nothing is found at the known xpath\r
*/\r
- public static String[][] getSourceFiles(String arch) {\r
+ public String[][] getSourceFiles(String arch) {\r
String[] xPath;\r
Object[] returns;\r
\r
outputList.add(new String[] {sourceFileNames[i].getToolCode(),sourceFileNames[i].getStringValue()});\r
}\r
}\r
- \r
+\r
String[][] outputString = new String[outputList.size()][2];\r
for (int index = 0; index < outputList.size(); index++) {\r
outputString[index][0] = outputList.get(index)[0];\r
\r
/**\r
* Retrieve /PlatformDefinitions/OutputDirectory from FPD\r
- * \r
+ *\r
* @returns Directory names array if elements are found at the known xpath\r
* @returns Empty if nothing is found at the known xpath\r
*/\r
- public static String getFpdOutputDirectory() {\r
+ public String getFpdOutputDirectory() {\r
String[] xPath = new String[] { "/PlatformDefinitions" };\r
\r
Object[] returns = get("PlatformSurfaceArea", xPath);\r
return item.getOutputDirectory();\r
}\r
\r
- public static String getFpdIntermediateDirectories() {\r
+ public String getFpdIntermediateDirectories() {\r
String[] xPath = new String[] { "/PlatformDefinitions" };\r
\r
Object[] returns = get("PlatformSurfaceArea", xPath);\r
}\r
PlatformDefinitionsDocument.PlatformDefinitions item = (PlatformDefinitionsDocument.PlatformDefinitions)returns[0];\r
if(item.getIntermediateDirectories() == null) {\r
- return null; \r
+ return null;\r
}\r
else {\r
return item.getIntermediateDirectories().toString();\r
}\r
}\r
\r
- public static String getModuleFfsKeyword() {\r
+ public String getModuleFfsKeyword() {\r
String[] xPath = new String[] { "/" };\r
\r
Object[] returns = get("ModuleSaBuildOptions", xPath);\r
ModuleSaBuildOptionsDocument.ModuleSaBuildOptions item = (ModuleSaBuildOptionsDocument.ModuleSaBuildOptions)returns[0];\r
return item.getFfsFormatKey();\r
}\r
- \r
- public static String getModuleFvBindingKeyword() {\r
+\r
+ public String getModuleFvBindingKeyword() {\r
String[] xPath = new String[] { "/" };\r
\r
Object[] returns = get("ModuleSaBuildOptions", xPath);\r
ModuleSaBuildOptionsDocument.ModuleSaBuildOptions item = (ModuleSaBuildOptionsDocument.ModuleSaBuildOptions)returns[0];\r
return item.getFvBinding();\r
}\r
- \r
- public static List getModuleSupportedArchs() {\r
+\r
+ public List getModuleSupportedArchs() {\r
String[] xPath = new String[] { "/" };\r
\r
Object[] returns = get("ModuleDefinitions", xPath);\r
ModuleDefinitionsDocument.ModuleDefinitions item = (ModuleDefinitionsDocument.ModuleDefinitions)returns[0];\r
return item.getSupportedArchitectures();\r
}\r
- \r
- public static BuildOptionsDocument.BuildOptions.Ffs[] getFpdFfs() {\r
+\r
+ public BuildOptionsDocument.BuildOptions.Ffs[] getFpdFfs() {\r
String[] xPath = new String[] {"/Ffs"};\r
- \r
+\r
Object[] returns = get("BuildOptions", xPath);\r
if (returns == null || returns.length == 0) {\r
return new BuildOptionsDocument.BuildOptions.Ffs[0];\r
}\r
return (BuildOptionsDocument.BuildOptions.Ffs[])returns;\r
}\r
- \r
- public static String getModuleOutputFileBasename() {\r
+\r
+ public String getModuleOutputFileBasename() {\r
String[] xPath = new String[] { "/" };\r
\r
Object[] returns = get("ModuleDefinitions", xPath);\r
ModuleDefinitionsDocument.ModuleDefinitions item = (ModuleDefinitionsDocument.ModuleDefinitions)returns[0];\r
return item.getOutputFileBasename();\r
}\r
- \r
+\r
/**\r
* Retrieve BuildOptions/Option or Arch/Option\r
- * \r
+ *\r
* @param toolChainFamilyFlag\r
* if true, retrieve options for toolchain family; otherwise for\r
* toolchain\r
- * \r
+ *\r
* @returns String[][5] name, target, toolchain, arch, coommand of options\r
* if elements are found at the known xpath. String[0][] if dont\r
* find element.\r
- * \r
+ *\r
* @returns Empty array if nothing is there\r
*/\r
- public static String[][] getOptions(String from, String[] xPath, boolean toolChainFamilyFlag) {\r
+ public String[][] getOptions(String from, String[] xPath, boolean toolChainFamilyFlag) {\r
String target = null;\r
String toolchain = null;\r
String toolchainFamily = null;\r
}\r
\r
archList = new ArrayList<String>();\r
- List archEnumList = option.getSupArchList(); \r
+ List archEnumList = option.getSupArchList();\r
if (archEnumList == null) {\r
archList.add(null);\r
} else {\r
return result;\r
}\r
\r
- public static String[][] getModuleBuildOptions(boolean toolChainFamilyFlag) {\r
+ public String[][] getModuleBuildOptions(boolean toolChainFamilyFlag) {\r
String[] xPath;\r
- \r
+\r
if (toolChainFamilyFlag == true) {\r
xPath = new String[] {\r
"/Options/Option[not(@ToolChainFamily) and not(@TagName)]",\r
"/Options/Option[@TagName]", };\r
}\r
return getOptions("ModuleSaBuildOptions", xPath, toolChainFamilyFlag);\r
- } \r
- \r
- public static String[][] getPlatformBuildOptions(boolean toolChainFamilyFlag) {\r
+ }\r
+\r
+ public String[][] getPlatformBuildOptions(boolean toolChainFamilyFlag) {\r
String[] xPath;\r
\r
if (toolChainFamilyFlag == true) {\r
return getOptions("PlatformSurfaceArea", xPath, toolChainFamilyFlag);\r
}\r
\r
- public static ToolChainInfo getFpdToolChainInfo() {\r
+ public ToolChainInfo getFpdToolChainInfo() {\r
String[] xPath = new String[] { "/PlatformDefinitions" };\r
\r
Object[] returns = get("PlatformSurfaceArea", xPath);\r
if (returns == null || returns.length == 0) {\r
return null;\r
}\r
- \r
+\r
PlatformDefinitionsDocument.PlatformDefinitions item = (PlatformDefinitionsDocument.PlatformDefinitions)returns[0];\r
ToolChainInfo toolChainInfo = new ToolChainInfo();\r
toolChainInfo.addTargets(item.getBuildTargets().toString());\r
\r
/**\r
* Retrieve <xxxHeader>/ModuleType\r
- * \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 static String getModuleType() {\r
+ public String getModuleType() {\r
String[] xPath = new String[] { "/ModuleType" };\r
\r
Object[] returns = get(xPath);\r
\r
/**\r
* Retrieve PackageDependencies/Package\r
- * \r
+ *\r
* @param arch\r
* Architecture name\r
- * \r
+ *\r
* @returns package name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static PackageIdentification[] getDependencePkg(String arch) {\r
+ public PackageIdentification[] getDependencePkg(String arch) throws EdkException {\r
String[] xPath;\r
String packageGuid = null;\r
String packageVersion = null;\r
\r
- \r
+\r
xPath = new String[] { "/Package" };\r
- \r
+\r
Object[] returns = get("PackageDependencies", xPath);\r
if (returns == null) {\r
return new PackageIdentification[0];\r
}\r
\r
//\r
- // Get packageIdentification \r
- // \r
+ // Get packageIdentification\r
+ //\r
List<PackageIdentification> packageIdList = new ArrayList<PackageIdentification>();\r
for (int i = 0; i < returns.length; i++) {\r
PackageDependenciesDocument.PackageDependencies.Package item = (PackageDependenciesDocument.PackageDependencies.Package) returns[i];\r
if (arch == null || archList == null || contains(archList, arch)) {\r
packageGuid = item.getPackageGuid();\r
packageVersion = item.getPackageVersion();\r
- packageIdList.add(new PackageIdentification(null, packageGuid,\r
- packageVersion));\r
+ PackageIdentification pkgId = new PackageIdentification(null, packageGuid, packageVersion);\r
+ GlobalData.refreshPackageIdentification(pkgId);\r
+ packageIdList.add(pkgId);\r
}\r
}\r
\r
- //\r
- // transfer packageIdentification list to array.\r
- // \r
- PackageIdentification[] packageIdArray = new PackageIdentification[packageIdList.size()];\r
- for (int i = 0; i < packageIdList.size(); i++) {\r
- packageIdArray[i] = new PackageIdentification(null, packageIdList.get(i).getGuid(),packageIdList.get(i).getVersion());\r
- }\r
- return packageIdArray;\r
+ return packageIdList.toArray(new PackageIdentification[packageIdList.size()]);\r
}\r
\r
/**\r
* Retrieve LibraryClassDefinitions/LibraryClass for specified usage\r
- * \r
+ *\r
* @param usage\r
* Library class usage\r
- * \r
+ *\r
* @returns LibraryClass objects list if elements are found at the known\r
* xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getLibraryClasses(String usage, String arch) {\r
+ public String[] getLibraryClasses(String usage, String arch) {\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
+\r
if (arch == null || contains(archList, arch)) {\r
libraryClassName.add(libraryClassList[i].getKeyword());\r
}\r
}\r
- String[] libraryArray = new String[libraryClassName.size()];\r
- for (int i = 0; i < libraryClassName.size(); i++) {\r
- libraryArray[i] = libraryClassName.get(i);\r
- }\r
+\r
+ String[] libraryArray = new String[libraryClassName.size()];\r
+ libraryClassName.toArray(libraryArray);\r
return libraryArray;\r
}\r
\r
/**\r
* Retrieve ModuleEntryPoint names\r
- * \r
+ *\r
* @returns ModuleEntryPoint name list if elements are found at the known\r
* xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getModuleEntryPointArray() {\r
+ public String[] getModuleEntryPointArray() {\r
String[] xPath = new String[] { "/Extern/ModuleEntryPoint" };\r
\r
Object[] returns = get("Externs", xPath);\r
\r
/**\r
* retrieve Protocol for specified usage\r
- * \r
+ *\r
* @param usage\r
* Protocol usage arch Architecture\r
- * \r
+ *\r
* @returns Protocol String list if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getProtocolArray(String arch, String usage) {\r
+ public String[] getProtocolArray(String arch, String usage) {\r
String[] xPath;\r
String usageXpath = "";\r
String archXpath = "";\r
\r
/**\r
* retrieve Protocol for specified usage\r
- * \r
+ *\r
* @param arch\r
* Architecture\r
- * \r
+ *\r
* @returns Protocol String list if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getProtocolArray(String arch) {\r
+ public String[] getProtocolArray(String arch) {\r
String[] xPath;\r
\r
if (arch == null || arch.equals("")) {\r
Protocol[] returnlList = (Protocol[]) returns;\r
\r
List<String> protocolList = new ArrayList<String>();\r
- \r
+\r
for (int i = 0; i < returns.length; i++) {\r
List archList = returnlList[i].getSupArchList();\r
if (archList == null || contains(archList, arch)){\r
\r
/**\r
* Retrieve ProtocolNotify for specified usage\r
- * \r
+ *\r
* @param usage\r
* ProtocolNotify usage\r
- * \r
+ *\r
* @returns String[] if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getProtocolNotifyArray(String arch) {\r
+ public String[] getProtocolNotifyArray(String arch) {\r
String[] xPath;\r
\r
if (arch == null || arch.equals("")) {\r
}\r
\r
List<String> protocolNotifyList = new ArrayList<String>();\r
- \r
+\r
for (int i = 0; i < returns.length; i++) {\r
List archList = ((ProtocolNotify) returns[i]).getSupArchList();\r
if (archList == null || contains(archList, arch)){\r
protocolNotifyList.add(((ProtocolNotify) returns[i]).getProtocolNotifyCName());\r
}\r
- \r
+\r
}\r
String[] protocolNotifyArray = new String[protocolNotifyList.size()];\r
for (int i = 0; i < protocolNotifyList.size(); i++) {\r
\r
/**\r
* Retrieve ProtocolNotify for specified usage\r
- * \r
+ *\r
* @param usage\r
* ProtocolNotify usage\r
- * \r
+ *\r
* @returns String[] if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getProtocolNotifyArray(String arch, String usage) {\r
+ public String[] getProtocolNotifyArray(String arch, String usage) {\r
\r
String[] xPath;\r
String usageXpath;\r
\r
/**\r
* Retrieve ModuleUnloadImage names\r
- * \r
+ *\r
* @returns ModuleUnloadImage name list if elements are found at the known\r
* xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getModuleUnloadImageArray() {\r
+ public String[] getModuleUnloadImageArray() {\r
String[] xPath = new String[] { "/Extern/ModuleUnloadImage" };\r
\r
Object[] returns = get("Externs", xPath);\r
\r
/**\r
* Retrieve Extern\r
- * \r
+ *\r
* @returns Extern objects list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static ExternsDocument.Externs.Extern[] getExternArray() {\r
+ public ExternsDocument.Externs.Extern[] getExternArray() {\r
String[] xPath = new String[] { "/Extern" };\r
\r
Object[] returns = get("Externs", xPath);\r
\r
/**\r
* Retrieve PpiNotify for specified arch\r
- * \r
+ *\r
* @param arch\r
* PpiNotify arch\r
- * \r
+ *\r
* @returns String[] if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getPpiNotifyArray(String arch) {\r
+ public String[] getPpiNotifyArray(String arch) {\r
String[] xPath;\r
\r
if (arch == null || arch.equals("")) {\r
return new String[0];\r
}\r
\r
- \r
+\r
List<String> ppiNotifyList = new ArrayList<String>();\r
for (int i = 0; i < returns.length; i++) {\r
List archList = ((PPIsDocument.PPIs.PpiNotify) returns[i]).getSupArchList();\r
if (archList == null || contains(archList, arch)){\r
- ppiNotifyList.add(((PPIsDocument.PPIs.PpiNotify) returns[i]).getPpiNotifyCName()); \r
+ ppiNotifyList.add(((PPIsDocument.PPIs.PpiNotify) returns[i]).getPpiNotifyCName());\r
}\r
- \r
+\r
}\r
String[] ppiNotifyArray = new String[ppiNotifyList.size()];\r
for (int i = 0; i < ppiNotifyList.size(); i++) {\r
\r
/**\r
* Retrieve PpiNotify for specified usage and arch\r
- * \r
+ *\r
* @param arch\r
* PpiNotify arch usage PpiNotify usage\r
- * \r
- * \r
+ *\r
+ *\r
* @returns String[] if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getPpiNotifyArray(String arch, String usage) {\r
+ public String[] getPpiNotifyArray(String arch, String usage) {\r
\r
String[] xPath;\r
String usageXpath;\r
\r
/**\r
* Retrieve Ppi for specified arch\r
- * \r
+ *\r
* @param arch\r
* Ppi arch\r
- * \r
+ *\r
* @returns String[] if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getPpiArray(String arch) {\r
+ public String[] getPpiArray(String arch) {\r
String[] xPath;\r
\r
if (arch == null || arch.equals("")) {\r
for (int i = 0; i < returns.length; i++) {\r
List archList = ((PPIsDocument.PPIs.Ppi) returns[i]).getSupArchList();\r
if (archList == null || contains(archList, arch)){\r
- ppiList.add(((PPIsDocument.PPIs.Ppi) returns[i]).getPpiCName()); \r
+ ppiList.add(((PPIsDocument.PPIs.Ppi) returns[i]).getPpiCName());\r
}\r
- \r
+\r
}\r
String[] ppiArray = new String[ppiList.size()];\r
for (int i = 0; i < ppiList.size(); i++) {\r
\r
/**\r
* Retrieve PpiNotify for specified usage and arch\r
- * \r
+ *\r
* @param arch\r
* PpiNotify arch usage PpiNotify usage\r
- * \r
- * \r
+ *\r
+ *\r
* @returns String[] if elements are found at the known xpath\r
* @returns String[0] if nothing is there\r
*/\r
- public static String[] getPpiArray(String arch, String usage) {\r
+ public String[] getPpiArray(String arch, String usage) {\r
\r
String[] xPath;\r
String usageXpath;\r
\r
/**\r
* Retrieve GuidEntry information for specified usage\r
- * \r
+ *\r
* @param arch\r
* GuidEntry arch\r
- * \r
+ *\r
* @returns GuidEntry objects list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getGuidEntryArray(String arch) {\r
+ public String[] getGuidEntryArray(String arch) {\r
String[] xPath;\r
\r
if (arch == null || arch.equals("")) {\r
for (int i = 0; i < returns.length; i++) {\r
List archList = ((GuidsDocument.Guids.GuidCNames) returns[i]).getSupArchList();\r
if (archList == null || contains(archList, arch)){\r
- guidList.add(((GuidsDocument.Guids.GuidCNames) returns[i]).getGuidCName()); \r
+ guidList.add(((GuidsDocument.Guids.GuidCNames) returns[i]).getGuidCName());\r
}\r
- \r
+\r
}\r
String[] guidArray = new String[guidList.size()];\r
for (int i = 0; i < guidList.size(); i++) {\r
\r
/**\r
* Retrieve GuidEntry information for specified usage\r
- * \r
+ *\r
* @param arch\r
* GuidEntry arch usage GuidEntry usage\r
- * \r
+ *\r
* @returns GuidEntry objects list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getGuidEntryArray(String arch, String usage) {\r
+ public String[] getGuidEntryArray(String arch, String usage) {\r
String[] xPath;\r
String archXpath;\r
String usageXpath;\r
\r
/**\r
* Retrieve Library instance information\r
- * \r
+ *\r
* @param arch\r
* Architecture name\r
* @param usage\r
* Library instance usage\r
- * \r
+ *\r
* @returns library instance name list if elements are found at the known\r
* xpath\r
* @returns null if nothing is there\r
*/\r
- public static ModuleIdentification[] getLibraryInstance(String arch) {\r
+ public ModuleIdentification[] getLibraryInstance(String arch) throws EdkException {\r
String[] xPath;\r
String saGuid = null;\r
String saVersion = null;\r
xPath = new String[] { "/Instance" };\r
} else {\r
//\r
- // Since Schema don't have SupArchList now, so the follow Xpath is \r
+ // Since Schema don't have SupArchList now, so the follow Xpath is\r
// equal to "/Instance" and [not(@SupArchList) or @SupArchList= arch]\r
// don't have effect.\r
//\r
saVersion);\r
PackageIdentification pkgId = new PackageIdentification(null,\r
pkgGuid, pkgVersion);\r
+ GlobalData.refreshPackageIdentification(pkgId);\r
saId.setPackage(pkgId);\r
+ GlobalData.refreshModuleIdentification(saId);\r
\r
saIdList[i] = saId;\r
\r
// / This method is used for retrieving the elements information which has\r
// / CName sub-element\r
// /\r
- private static String[] getCNames(String from, String xPath[]) {\r
+ private String[] getCNames(String from, String xPath[]) {\r
Object[] returns = get(from, xPath);\r
if (returns == null || returns.length == 0) {\r
return null;\r
\r
/**\r
* Retrive library's constructor name\r
- * \r
+ *\r
* @returns constructor name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String getLibConstructorName() {\r
+ public String getLibConstructorName() {\r
String[] xPath = new String[] { "/Extern/Constructor" };\r
\r
Object[] returns = get("Externs", xPath);\r
\r
/**\r
* Retrive library's destructor name\r
- * \r
+ *\r
* @returns destructor name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String getLibDestructorName() {\r
+ public String getLibDestructorName() {\r
String[] xPath = new String[] { "/Extern/Destructor" };\r
\r
Object[] returns = get("Externs", xPath);\r
\r
/**\r
* Retrive DriverBinding names\r
- * \r
+ *\r
* @returns DriverBinding name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getDriverBindingArray() {\r
+ public String[] getDriverBindingArray() {\r
String[] xPath = new String[] { "/Extern/DriverBinding" };\r
return getCNames("Externs", xPath);\r
}\r
\r
/**\r
* Retrive ComponentName names\r
- * \r
+ *\r
* @returns ComponentName name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getComponentNameArray() {\r
+ public String[] getComponentNameArray() {\r
String[] xPath = new String[] { "/Extern/ComponentName" };\r
return getCNames("Externs", xPath);\r
}\r
\r
/**\r
* Retrive DriverConfig names\r
- * \r
+ *\r
* @returns DriverConfig name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getDriverConfigArray() {\r
+ public String[] getDriverConfigArray() {\r
String[] xPath = new String[] { "/Extern/DriverConfig" };\r
return getCNames("Externs", xPath);\r
}\r
\r
/**\r
* Retrive DriverDiag names\r
- * \r
+ *\r
* @returns DriverDiag name list if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getDriverDiagArray() {\r
+ public String[] getDriverDiagArray() {\r
String[] xPath = new String[] { "/Extern/DriverDiag" };\r
return getCNames("Externs", xPath);\r
}\r
\r
/**\r
* Retrive SetVirtualAddressMapCallBack names\r
- * \r
+ *\r
* @returns SetVirtualAddressMapCallBack name list if elements are found at\r
* the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getSetVirtualAddressMapCallBackArray() {\r
+ public String[] getSetVirtualAddressMapCallBackArray() {\r
String[] xPath = new String[] { "/Extern/SetVirtualAddressMapCallBack" };\r
return getCNames("Externs", xPath);\r
}\r
\r
/**\r
* Retrive ExitBootServicesCallBack names\r
- * \r
+ *\r
* @returns ExitBootServicesCallBack name list if elements are found at the\r
* known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[] getExitBootServicesCallBackArray() {\r
+ public String[] getExitBootServicesCallBackArray() {\r
String[] xPath = new String[] { "/Extern/ExitBootServicesCallBack" };\r
return getCNames("Externs", xPath);\r
}\r
\r
+ /**\r
+ Judge whether current driver is PEI_PCD_DRIVER or DXE_PCD_DRIVER or\r
+ NOT_PCD_DRIVER.\r
+ \r
+ @return CommonDefinition.PCD_DRIVER_TYPE the type of current driver\r
+ **/\r
+ public CommonDefinition.PCD_DRIVER_TYPE getPcdDriverType() {\r
+ String[] xPath = new String[] {"/PcdIsDriver"};\r
+ Object[] results = get ("Externs", xPath);\r
+\r
+ if (results != null && results.length != 0) {\r
+ PcdDriverTypes type = (PcdDriverTypes) results[0];\r
+ String typeStr = type.enumValue().toString();\r
+ if (typeStr.equals(CommonDefinition.PCD_DRIVER_TYPE.PEI_PCD_DRIVER.toString())) {\r
+ return CommonDefinition.PCD_DRIVER_TYPE.PEI_PCD_DRIVER;\r
+ } else if (typeStr.equals(CommonDefinition.PCD_DRIVER_TYPE.DXE_PCD_DRIVER.toString())) {\r
+ return CommonDefinition.PCD_DRIVER_TYPE.DXE_PCD_DRIVER;\r
+ }\r
+ return CommonDefinition.PCD_DRIVER_TYPE.UNKNOWN_PCD_DRIVER;\r
+ }\r
+\r
+ return CommonDefinition.PCD_DRIVER_TYPE.NOT_PCD_DRIVER;\r
+ }\r
+\r
/**\r
* Retrieve module surface area file information\r
- * \r
+ *\r
* @returns ModuleSA objects list if elements are found at the known xpath\r
* @returns Empty ModuleSA list if nothing is there\r
*/\r
- public static Map<FpdModuleIdentification, Map<String, XmlObject>> getFpdModules() {\r
+ public Map<FpdModuleIdentification, Map<String, XmlObject>> getFpdModules() throws EdkException {\r
String[] xPath = new String[] { "/FrameworkModules/ModuleSA" };\r
Object[] result = get("PlatformSurfaceArea", xPath);\r
String arch = null;\r
ObjectMap.put("Libraries", moduleSA.getLibraries());\r
}\r
if (((ModuleSADocument.ModuleSA) result[i]).getPcdBuildDefinition() != null) {\r
- ObjectMap.put("PcdBuildDefinition", moduleSA\r
- .getPcdBuildDefinition());\r
+ ObjectMap.put("PcdBuildDefinition", moduleSA.getPcdBuildDefinition());\r
}\r
- if (((ModuleSADocument.ModuleSA) result[i])\r
- .getModuleSaBuildOptions() != null) {\r
- ObjectMap.put("ModuleSaBuildOptions", moduleSA\r
- .getModuleSaBuildOptions());\r
+ if (((ModuleSADocument.ModuleSA) result[i]).getModuleSaBuildOptions() != null) {\r
+ ObjectMap.put("ModuleSaBuildOptions", moduleSA.getModuleSaBuildOptions());\r
}\r
\r
//\r
// Get Fpd SA Module attribute and create FpdMoudleIdentification.\r
//\r
- arch = moduleSA.getSupArchList().toString();\r
+ if (moduleSA.isSetSupArchList()) {\r
+ arch = moduleSA.getSupArchList().toString();\r
+ } else {\r
+ arch = null;\r
+ }\r
\r
// TBD\r
fvBinding = null;\r
- saVersion = ((ModuleSADocument.ModuleSA) result[i])\r
- .getModuleVersion();\r
+ saVersion = ((ModuleSADocument.ModuleSA) result[i]).getModuleVersion();\r
\r
saGuid = moduleSA.getModuleGuid();\r
pkgGuid = moduleSA.getPackageGuid();\r
// Create Module Identification which have class member of package\r
// identification.\r
//\r
- PackageIdentification pkgId = new PackageIdentification(null,\r
- pkgGuid, pkgVersion);\r
- ModuleIdentification saId = new ModuleIdentification(null, saGuid,\r
- saVersion);\r
-\r
+ PackageIdentification pkgId = new PackageIdentification(null, pkgGuid, pkgVersion);\r
+ GlobalData.refreshPackageIdentification(pkgId);\r
+ ModuleIdentification saId = new ModuleIdentification(null, saGuid, saVersion);\r
+ GlobalData.refreshModuleIdentification(saId);\r
+ \r
saId.setPackage(pkgId);\r
\r
//\r
// Create FpdModule Identification which have class member of module\r
// identification\r
//\r
- if (arch != null) {\r
- String[] archList = arch.split(" ");\r
- for (int j = 0; j < archList.length; j++) {\r
- FpdModuleIdentification fpdSaId = new FpdModuleIdentification(saId, archList[j]);\r
- \r
- if (fvBinding != null) {\r
- fpdSaId.setFvBinding(fvBinding);\r
- }\r
- \r
- //\r
- // Put element to Map<FpdModuleIdentification, Map<String,\r
- // Object>>.\r
- //\r
- fpdModuleMap.put(fpdSaId, ObjectMap);\r
+ String[] archList = new String[0];\r
+ if (arch == null || arch.trim().length() == 0) {\r
+ archList = GlobalData.getToolChainInfo().getArchs();\r
+ } else {\r
+ archList = arch.split(" ");\r
+ }\r
+ for (int j = 0; j < archList.length; j++) {\r
+ FpdModuleIdentification fpdSaId = new FpdModuleIdentification(saId, archList[j]);\r
+\r
+ if (fvBinding != null) {\r
+ fpdSaId.setFvBinding(fvBinding);\r
}\r
+\r
+ //\r
+ // Put element to Map<FpdModuleIdentification, Map<String,\r
+ // Object>>.\r
+ //\r
+ fpdModuleMap.put(fpdSaId, ObjectMap);\r
}\r
}\r
return fpdModuleMap;\r
\r
/**\r
* Retrieve valid image names\r
- * \r
+ *\r
* @returns valid iamges name list if elements are found at the known xpath\r
* @returns empty list if nothing is there\r
*/\r
- public static String[] getFpdValidImageNames() {\r
+ public String[] getFpdValidImageNames() {\r
String[] xPath = new String[] { "/Flash/FvImages/FvImage[@Type='ImageName']/FvImageNames" };\r
\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
\r
return result;\r
}\r
- \r
- public static Node getFpdUserExtensionPreBuild() {\r
- String[] xPath = new String[] { "/UserExtensions[@UserID='TianoCore' and @Identifier='0']" }; \r
+\r
+ public Node getFpdUserExtensionPreBuild() {\r
+ String[] xPath = new String[] { "/UserExtensions[@UserID='TianoCore' and @Identifier='0']" };\r
\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
if (queryResult == null || queryResult.length == 0) {\r
return null;\r
}\r
UserExtensionsDocument.UserExtensions a = (UserExtensionsDocument.UserExtensions)queryResult[0];\r
- \r
+\r
return a.getDomNode();\r
}\r
- \r
- public static Node getFpdUserExtensionPostBuild() {\r
- String[] xPath = new String[] { "/UserExtensions[@UserID='TianoCore' and @Identifier='1']" }; \r
+\r
+ public Node getFpdUserExtensionPostBuild() {\r
+ String[] xPath = new String[] { "/UserExtensions[@UserID='TianoCore' and @Identifier='1']" };\r
\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
if (queryResult == null || queryResult.length == 0) {\r
return null;\r
}\r
UserExtensionsDocument.UserExtensions a = (UserExtensionsDocument.UserExtensions)queryResult[0];\r
- \r
+\r
return a.getDomNode();\r
}\r
\r
/**\r
* Retrieve FV image option information\r
- * \r
+ *\r
* @param fvName\r
* FV image name\r
- * \r
+ *\r
* @returns option name/value list if elements are found at the known xpath\r
* @returns empty list if nothing is there\r
*/\r
- public static String[][] getFpdOptions(String fvName) {\r
+ public String[][] getFpdOptions(String fvName) {\r
String[] xPath = new String[] { "/Flash/FvImages/FvImage[@Type='Options' and ./FvImageNames='"\r
- + fvName.toUpperCase() + "']/FvImageOptions" };\r
+ + fvName + "']/FvImageOptions" };\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
if (queryResult == null) {\r
return new String[0][];\r
\r
}\r
\r
- public static XmlObject getFpdBuildOptions() {\r
+ public XmlObject getFpdBuildOptions() {\r
String[] xPath = new String[] { "/BuildOptions" };\r
\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
return (XmlObject)queryResult[0];\r
}\r
\r
- public static PlatformIdentification getFpdHeader() {\r
+ public PlatformIdentification getFpdHeader() {\r
String[] xPath = new String[] { "/PlatformHeader" };\r
\r
Object[] returns = get("PlatformSurfaceArea", xPath);\r
\r
/**\r
* Retrieve FV image attributes information\r
- * \r
+ *\r
* @param fvName\r
* FV image name\r
- * \r
+ *\r
* @returns attribute name/value list if elements are found at the known\r
* xpath\r
* @returns empty list if nothing is there\r
*/\r
- public static String[][] getFpdAttributes(String fvName) {\r
+ public String[][] getFpdAttributes(String fvName) {\r
String[] xPath = new String[] { "/Flash/FvImages/FvImage[@Type='Attributes' and ./FvImageNames='"\r
- + fvName.toUpperCase() + "']/FvImageOptions" };\r
+ + fvName + "']/FvImageOptions" };\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
if (queryResult == null) {\r
return new String[0][];\r
}\r
ArrayList<String[]> list = new ArrayList<String[]>();\r
for (int i = 0; i < queryResult.length; i++) {\r
- \r
+\r
FvImagesDocument.FvImages.FvImage.FvImageOptions item = (FvImagesDocument.FvImages.FvImage.FvImageOptions) queryResult[i];\r
List<FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue> namevalues = item.getNameValueList();\r
Iterator iter = namevalues.iterator();\r
\r
/**\r
* Retrieve flash definition file name\r
- * \r
+ *\r
* @returns file name if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String getFlashDefinitionFile() {\r
+ public String getFlashDefinitionFile() {\r
String[] xPath = new String[] { "/PlatformDefinitions/FlashDeviceDefinitions/FlashDefinitionFile" };\r
\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
return filename.getStringValue();\r
}\r
\r
- public static String[][] getFpdGlobalVariable() {\r
+ public String[][] getFpdGlobalVariable() {\r
String[] xPath = new String[] { "/Flash/FvImages/NameValue" };\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
if (queryResult == null) {\r
}\r
\r
String[][] result = new String[queryResult.length][2];\r
- \r
+\r
for (int i = 0; i < queryResult.length; i++) {\r
FvImagesDocument.FvImages.NameValue item = (FvImagesDocument.FvImages.NameValue)queryResult[i];\r
result[i][0] = item.getName();\r
result[i][1] = item.getValue();\r
}\r
- return result; \r
+ return result;\r
}\r
- \r
+\r
/**\r
* Retrieve FV image component options\r
- * \r
+ *\r
* @param fvName\r
* FV image name\r
- * \r
+ *\r
* @returns name/value pairs list if elements are found at the known xpath\r
* @returns empty list if nothing is there\r
*/\r
- public static String[][] getFpdComponents(String fvName) {\r
- String[] xPath = new String[] { "/Flash/FvImages/FvImage[@Type='Components' and ./FvImageNames='"+ fvName.toUpperCase() + "']/FvImageOptions" };\r
+ public String[][] getFpdComponents(String fvName) {\r
+ String[] xPath = new String[] { "/Flash/FvImages/FvImage[@Type='Components' and ./FvImageNames='"+ fvName + "']/FvImageOptions" };\r
Object[] queryResult = get("PlatformSurfaceArea", xPath);\r
if (queryResult == null) {\r
return new String[0][];\r
result[i][0] = list.get(i)[0];\r
result[i][1] = list.get(i)[1];\r
}\r
- return result; \r
+ return result;\r
}\r
\r
/**\r
* Retrieve PCD tokens\r
- * \r
+ *\r
* @returns CName/ItemType pairs list if elements are found at the known\r
* xpath\r
* @returns null if nothing is there\r
*/\r
- public static String[][] getPcdTokenArray() {\r
+ public String[][] getPcdTokenArray() {\r
String[] xPath = new String[] { "/PcdData" };\r
\r
Object[] returns = get("PCDs", xPath);\r
\r
/**\r
* Retrieve MAS header\r
- * \r
+ *\r
* @return\r
* @return\r
*/\r
- public static ModuleIdentification getMsaHeader() {\r
+ public ModuleIdentification getMsaHeader() {\r
String[] xPath = new String[] { "/" };\r
Object[] returns = get("MsaHeader", xPath);\r
\r
\r
/**\r
* Retrieve Extern Specification\r
- * \r
+ *\r
* @param\r
- * \r
+ *\r
* @return String[] If have specification element in the <extern> String[0]\r
* If no specification element in the <extern>\r
- * \r
+ *\r
*/\r
\r
- public static String[] getExternSpecificaiton() {\r
+ public String[] getExternSpecificaiton() {\r
String[] xPath = new String[] { "/Specification" };\r
\r
Object[] queryResult = get("Externs", xPath);\r
\r
/**\r
* Retreive MsaFile which in SPD\r
- * \r
+ *\r
* @param\r
* @return String[][3] The string sequence is ModuleName, ModuleGuid,\r
* ModuleVersion, MsaFile String[0][] If no msafile in SPD\r
*/\r
- public static String[] getSpdMsaFile() {\r
+ public String[] getSpdMsaFile() {\r
String[] xPath = new String[] { "/MsaFiles" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
/**\r
* Reteive\r
*/\r
- public static Map<String, String[]> getSpdLibraryClasses() {\r
+ public Map<String, String[]> getSpdLibraryClasses() {\r
String[] xPath = new String[] { "/LibraryClassDeclarations/LibraryClass" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
/**\r
* Reteive\r
*/\r
- public static Map<String, String> getSpdPackageHeaderFiles() {\r
+ public Map<String, String> getSpdPackageHeaderFiles() {\r
String[] xPath = new String[] { "/PackageHeaders/IncludePkgHeader" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
return packageIncludeMap;\r
}\r
\r
- public static PackageIdentification getSpdHeader() {\r
+ public PackageIdentification getSpdHeader() {\r
String[] xPath = new String[] { "/SpdHeader" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
/**\r
* Reteive\r
*/\r
- public static Map<String, String[]> getSpdGuid() {\r
+ public Map<String, String[]> getSpdGuid() {\r
String[] xPath = new String[] { "/GuidDeclarations/Entry" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
/**\r
* Reteive\r
*/\r
- public static Map<String, String[]> getSpdProtocol() {\r
+ public Map<String, String[]> getSpdProtocol() {\r
String[] xPath = new String[] { "/ProtocolDeclarations/Entry" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
\r
/**\r
* getSpdPpi() Retrieve the SPD PPI Entry\r
- * \r
+ *\r
* @param\r
* @return Map<String, String[2]> if get the PPI entry from SPD. Key - PPI\r
* Name String[0] - PPI CNAME String[1] - PPI Guid Null if no PPI\r
* entry in SPD.\r
*/\r
- public static Map<String, String[]> getSpdPpi() {\r
+ public Map<String, String[]> getSpdPpi() {\r
String[] xPath = new String[] { "/PpiDeclarations/Entry" };\r
\r
Object[] returns = get("PackageSurfaceArea", xPath);\r
\r
/**\r
* Retrieve module Guid string\r
- * \r
+ *\r
* @returns GUILD string if elements are found at the known xpath\r
* @returns null if nothing is there\r
*/\r
- public static String getModuleGuid() {\r
+ public String getModuleGuid() {\r
String[] xPath = new String[] { "" };\r
\r
Object[] returns = get("MsaHeader", xPath);\r
//\r
// For new Pcd\r
//\r
- public static ModuleSADocument.ModuleSA[] getFpdModuleSAs() {\r
+ public ModuleSADocument.ModuleSA[] getFpdModuleSAs() {\r
String[] xPath = new String[] { "/FrameworkModules/ModuleSA" };\r
Object[] result = get("PlatformSurfaceArea", xPath);\r
if (result != null) {\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
+\r
@return String[]\r
**/\r
- public static String[] getModulePcdEntryNameArray() {\r
+ public String[] getModulePcdEntryNameArray() {\r
PcdCodedDocument.PcdCoded.PcdEntry[] pcdEntries = null;\r
String[] results;\r
int index;\r
\r
@return boolean\r
**/\r
- public static boolean contains(List list, String str) {\r
+ public boolean contains(List list, String str) {\r
if (list == null || list.size()== 0) {\r
return true;\r
}\r
\r
return false;\r
}\r
+\r
+ public boolean isHaveTianoR8FlashMap(){\r
+ String[] xPath = new String[] {"/"};\r
+ Object[] returns = get ("Externs", xPath);\r
+\r
+ if (returns == null) {\r
+ return false;\r
+ }\r
+\r
+ ExternsDocument.Externs ext = (ExternsDocument.Externs)returns[0];\r
+\r
+ if (ext.getTianoR8FlashMapH()){\r
+ return true;\r
+ }else {\r
+ return false;\r
+ }\r
+ }\r
}\r