--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/SBSv2QueryTests.java Thu May 20 13:54:19 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/SBSv2QueryTests.java Thu May 20 13:57:30 2010 -0500
@@ -31,7 +31,6 @@
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
-import org.eclipse.cdt.utils.spawner.EnvironmentReader;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.osgi.framework.Version;
@@ -42,18 +41,21 @@
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;
+import com.nokia.carbide.cdt.builder.test.sandbox.ISBSv2ConfigData;
+import com.nokia.carbide.cdt.builder.test.sandbox.ISBSv2QueryData;
+import com.nokia.carbide.cdt.builder.test.sandbox.SBSv2QueryUtils;
import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
import com.nokia.cpp.internal.api.utils.core.Logging;
public class SBSv2QueryTests extends BaseTest {
- private static HashMap<String, String> sbsAliasMap;
+ private static ISBSv2QueryData sbsAliasBaseQuery;
+
private long startTime;
- private final String QUERY_PRODUCTS_COMMAND = "--query=products";
- private final String QUERY_CONFIG_COMMAND = "--query=config";
- private final String QUERY_COMMAND = "--query=aliases";
+ private final String SDK_ID1 = "K_92_WK12"; // SDK with additional aliases and products
@Override
protected void setUp() throws Exception {
@@ -74,54 +76,101 @@
public void testQueryAliases() throws Exception {
startTime = System.currentTimeMillis();
-
- List<String> argList = new ArrayList<String>();
- argList.add(QUERY_COMMAND);
-
- String queryResult = getSBSQueryOutput(argList, null);
- System.out.println("Query output from " + QUERY_COMMAND + " : " + queryResult);
- assertTrue("No output found from " + QUERY_COMMAND, queryResult.length() > 0);
-
- sbsAliasMap = parseQueryAliasResult(queryResult);
-
- assertTrue("No configs were successfully parsed from the sbs commmand : " + QUERY_COMMAND, sbsAliasMap.size() > 0);
-
- String aliasLookup = sbsAliasMap.get("armv5_udeb"); // look-up some known build alias
- assertNotNull(aliasLookup);
-
- aliasLookup = sbsAliasMap.get("there_is_no_way_this_would_be_config_name");
- assertNull(aliasLookup);
-
+ if (sbsAliasBaseQuery == null){
+ sbsAliasBaseQuery = SBSv2QueryUtils.queryAliasAndProductVariants();
+ }
System.out.println("Time for testQueryProductsFromSDKs(): " + getTimingStats());
+ List<ISBSv2ConfigData> baseConfigs = sbsAliasBaseQuery.getBaseSBSConfigurations();
+
+ for (ISBSv2ConfigData config : baseConfigs){
+ assertTrue("Configuration should be true : " + config.toString(), config.isBaseConfig());
+ }
+ assertEquals(18, baseConfigs.size());
+
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByAlias("armv5_udeb"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByAlias("armv5_urel"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByAlias("winscw_udeb"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByAlias("winscw_urel"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByAlias("armv5_urel_gcce4_4_1"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByAlias("armv5_udeb_gcce4_4_1"));
+
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByMeaning("arm.v5.udeb.rvct2_2"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByMeaning("arm.v5.urel.rvct2_2"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByMeaning("winscw_base.winscw_debug"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByMeaning("winscw_base.winscw_release"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByMeaning("arm.v5.urel.gcce4_4_1"));
+ assertNotNull(sbsAliasBaseQuery.getSBSConfigByMeaning("arm.v5.udeb.gcce4_4_1"));
+
+ assertNull(sbsAliasBaseQuery.getSBSConfigByAlias("armv5_udeb.foobar"));
+ assertNull(sbsAliasBaseQuery.getSBSConfigByMeaning("arm.v5.udeb.foo.bar"));
+
+ // Get the Raptor configs that are defined in an SDK
+ ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDK(SDK_ID1, false);
+ assertNotNull("Missing SDK on your system: " + SDK_ID1, sdk);
+ List<ISBSv2ConfigData> sdkSpecificConfigs = sbsAliasBaseQuery.getSDKSpecificConfigData(sdk);
+ assertEquals(10, sdkSpecificConfigs.size());
+
+ // Get the union of the base Raptor configs and the SDK
+ List<ISBSv2ConfigData> allSDKConfigUnion = sbsAliasBaseQuery.getAllConfigurationsForSDK(sdk);
+ assertEquals(28, allSDKConfigUnion.size());
}
/**
+ * Query data for a single configuration
+ * @throws Exception
+ */
+ public void testQuerySingleConfig() throws Exception {
+
+ assertNotNull(sbsAliasBaseQuery);
+
+ startTime = System.currentTimeMillis();
+
+ ISBSv2ConfigData config = sbsAliasBaseQuery.getSBSConfigByAlias("armv5_udeb");
+ assertNotNull(config);
+ assertEquals("/epoc32/release/armv5/udeb", config.getReleaseDirectory(null));
+ assertEquals("armv5", config.getTraditionalPlatform(null));
+ assertEquals("udeb", config.getTraditionalTarget(null));
+
+ config = sbsAliasBaseQuery.getSBSConfigByAlias("armv5_udeb_gcce");
+ assertNotNull(config);
+ // TODO: This should fail if 'SBS_GCCE432BIN is not set
+ // So we should have one test that will fail with known error message
+ // and another that will pass when an env var is set correctly.
+ // e.g. test two different versions of GCCE aliases.
+// assertEquals("/epoc32/release/armv5/udeb", config.getReleaseDirectory(null));
+// assertEquals("armv5", config.getTraditionalPlatform(null));
+// assertEquals("udeb", config.getTraditionalTarget(null));
+ }
+
+
+ /**
* TODO: The SBS API FOR THIS QUERY IS UNDER CONSTRUCTION.....
* TODO; This test should be run on individual %EPOCROOT% values
* @throws Exception
*/
- public void testQueryConfigs() throws Exception {
+ public void testQueryMultipleConfigs() throws Exception {
- assertNotNull(sbsAliasMap);
-
+ assertNotNull(sbsAliasBaseQuery);
+
startTime = System.currentTimeMillis();
- List<String> argList = new ArrayList<String>();
- for (String key : sbsAliasMap.keySet()){
- argList.add(QUERY_CONFIG_COMMAND + "[" + key + "]");
- }
+ List<String> aliasOrMeaningArray = new ArrayList<String>();
+ aliasOrMeaningArray.add("armv5_udeb");
+ aliasOrMeaningArray.add("arm.9e.udeb.rvct2_2");
+ HashMap<String, String> releaseMap = SBSv2QueryUtils.queryConfigTargetInfo(aliasOrMeaningArray , null);
+
+ assertEquals(2, releaseMap.size());
- String queryResult = getSBSQueryOutput(argList, null);
- System.out.println("Query output from " + QUERY_CONFIG_COMMAND + " : " + queryResult);
- assertTrue("No output found from " + QUERY_CONFIG_COMMAND, queryResult.length() > 0);
-
- HashMap<String, String> outputMap = parseQueryConfigResults(queryResult);
- assertTrue("No configs were found in query for : " + QUERY_CONFIG_COMMAND, outputMap.size() > 0);
-
- System.out.println("Time for testQueryProductsFromSDKs(): " + getTimingStats());
-
+// String queryResult = getSBSQueryOutput(argList, null);
+// assertTrue("No output found from " + SBSv2QueryUtils.QUERY_CONFIG_COMMAND, queryResult.length() > 0);
+//
+// HashMap<String, String> outputMap = parseQueryConfigResults(queryResult);
+// assertTrue("No configs were found in query for : " + SBSv2QueryUtils.QUERY_CONFIG_COMMAND, outputMap.size() > 0);
+//
+// System.out.println("Time for testQueryProductsFromSDKs(): " + getTimingStats());
+//
}
/**
@@ -130,45 +179,28 @@
* @throws Exception
*/
public void testQueryProductsFromSDKs() throws Exception {
-
-
- startTime = System.currentTimeMillis();
-
- List<String> argList = new ArrayList<String>();
-
- argList.add(QUERY_PRODUCTS_COMMAND);
-
- // TODO: Just hard-coding a known SDK that has variants set up.
- Properties envVars = EnvironmentReader.getEnvVars();
- envVars.setProperty("EPOCROOT", "K:");
-
- String queryResult = getSBSQueryOutput(argList, createEnvStringList(envVars));
- System.out.println("Query output from " + QUERY_PRODUCTS_COMMAND + " : " + queryResult);
- assertTrue("No output found from " + QUERY_PRODUCTS_COMMAND, queryResult.length() > 0);
-
- List<String> productList = parseQueryProductsResults(queryResult);
- assertTrue("No products were found in query for : " + QUERY_PRODUCTS_COMMAND, productList.size() > 0);
-
- System.out.println("Time for testQueryProductsFromSDKs(): " + getTimingStats());
+ ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDK(SDK_ID1, false);
+ assertNotNull("Missing SDK on your system: " + SDK_ID1, sdk);
+ List<String> products = sbsAliasBaseQuery.getProductsForSDK(sdk);
+ assertEquals(38, products.size());
}
public void testStressQueryTest() throws Exception {
long stressTestStartTime = System.currentTimeMillis();
-
testQueryAliases();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
- testQueryConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
+ testQueryMultipleConfigs();
testQueryProductsFromSDKs();
testQueryProductsFromSDKs();
@@ -186,175 +218,6 @@
System.out.println("Time for testStressQueryTest(): " + getTimingStats());
}
- private List<String> parseQueryProductsResults(String queryResult) {
- List<String> productList = new ArrayList<String>();
-
- try {
- Element root = null;
- DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- parser.setErrorHandler(new DefaultHandler());
-
- StringReader reader = new StringReader( queryResult );
- InputSource inputSource = new InputSource( reader );
- root = parser.parse(inputSource).getDocumentElement();
-
- NodeList children = root.getChildNodes();
- for (int i=0; i< children.getLength(); i++) {
- Node aliasNode = children.item(i);
- if (aliasNode.getNodeName().equals("product")){
- NamedNodeMap productAttribs = aliasNode.getAttributes();
- String name = productAttribs.getNamedItem("name").getNodeValue();
- //System.out.println("ALIAS QUERY ==> " + dottedName + " <==> " + alias);
- productList.add(name);
- }
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
- }
-
- return productList;
- }
-
- private HashMap<String, String> parseQueryAliasResult(String queryResult) {
- /* Alias to dotted name config */
- HashMap<String, String> sbsAliasMap = new HashMap<String, String>();
-
- try {
- Element root = null;
- DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- parser.setErrorHandler(new DefaultHandler());
-
- StringReader reader = new StringReader( queryResult );
- InputSource inputSource = new InputSource( reader );
- root = parser.parse(inputSource).getDocumentElement();
-
- NodeList children = root.getChildNodes();
- for (int i=0; i< children.getLength(); i++) {
- Node aliasNode = children.item(i);
- if (aliasNode.getNodeName().equals("alias")){
- NamedNodeMap meaning = aliasNode.getAttributes();
- String dottedName = meaning.getNamedItem("meaning").getNodeValue();
- String alias = meaning.getNamedItem("name").getNodeValue();
- //System.out.println("ALIAS QUERY ==> " + dottedName + " <==> " + alias);
- sbsAliasMap.put(alias, dottedName);
- }
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
- }
-
-
- return sbsAliasMap;
- }
-
- private HashMap<String, String> parseQueryConfigResults(String queryResult) {
- /* Alias to output directory */
- HashMap<String, String> sbsAliasMap = new HashMap<String, String>();
-
- try {
- Element root = null;
- DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- parser.setErrorHandler(new DefaultHandler());
-
- StringReader reader = new StringReader( queryResult );
- InputSource inputSource = new InputSource( reader );
- root = parser.parse(inputSource).getDocumentElement();
-
- NodeList children = root.getChildNodes();
- for (int i=0; i< children.getLength(); i++) {
- Node aliasNode = children.item(i);
- if (aliasNode.getNodeName().equals("config")){
- NamedNodeMap meaning = aliasNode.getAttributes();
- String outputpath = meaning.getNamedItem("outputpath").getNodeValue();
- String fullName = meaning.getNamedItem("fullname").getNodeValue();
- //System.out.println("ALIAS QUERY ==> " + dottedName + " <==> " + alias);
- sbsAliasMap.put(fullName, outputpath);
- }
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
- }
-
-
- return sbsAliasMap;
- }
-
-
- private String getSBSQueryOutput(List<String> queryCommandList, String[] env) {
- String overallOutput = "";
-
- Runtime rt = Runtime.getRuntime();
- IPath sbsPath = SBSv2Utils.getSBSPath();
- Process p = null;
- List<String> args = new ArrayList<String>();
- args.add(sbsPath.toOSString());
- args.addAll(queryCommandList);
- try {
- p = rt.exec(args.toArray(new String[args.size()]), env);
- } catch (IOException e) {
- // no such process, SBSv2 not available
- Logging.log(
- SDKCorePlugin.getDefault(),
- Logging.newSimpleStatus(
- 0,
- IStatus.WARNING,
- MessageFormat
- .format(
- "Could not find or launch Raptor script ''{0}''; SBSv2 support will not be available",
- sbsPath), e));
- }
- if (p != null) {
- BufferedReader br = new BufferedReader(new InputStreamReader(p
- .getInputStream()));
-
- String stdErrLine = null;
- try {
-
- // Only try for 30 seconds then bail in case Raptor hangs
- int maxTries = 60;
- int numTries = 0;
- while (numTries < maxTries) {
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // ignore
- }
- if (br.ready()) {
- while ((stdErrLine = br.readLine()) != null) {
- overallOutput += stdErrLine;
- numTries = maxTries;
- }
-
- }
- numTries++;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- return overallOutput;
- }
-
- private static String[] createEnvStringList(Properties envProps) {
- String[] env = null;
- List<String> envList = new ArrayList<String>();
- Enumeration<?> names = envProps.propertyNames();
- if (names != null) {
- while (names.hasMoreElements()) {
- String key = (String) names.nextElement();
- envList.add(key + "=" + envProps.getProperty(key));
- }
- env = (String[]) envList.toArray(new String[envList.size()]);
- }
- return env;
- }
public String getTimingStats(){
if (startTime != 0){
@@ -364,7 +227,11 @@
if (minutes > 0){
return "\nTotal Time: " + minutes + " min, " + seconds + " sec\n";
} else {
- return "\nTotal Time: " + seconds + " sec\n";
+ if (seconds == 1){
+ return "\nTotal Time: " + millisec + " msec\n";
+ } else {
+ return "\nTotal Time: " + seconds + " sec\n";
+ }
}
} else {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/sandbox/ISBSv2ConfigData.java Thu May 20 13:57:30 2010 -0500
@@ -0,0 +1,31 @@
+package com.nokia.carbide.cdt.builder.test.sandbox;
+
+import java.util.List;
+
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+
+/** Data that describes the meaning of a single build configuration */
+public interface ISBSv2ConfigData {
+
+ String getBuildAlias();
+
+ String getMeaning();
+
+ String getReleaseDirectory(ISymbianSDK sdk);
+
+ ISBSv2ConfigPreprocessorInfo getBuildData(ISymbianSDK sdk);
+
+ String getTraditionalTarget(ISymbianSDK sdk);
+
+ String getTraditionalPlatform(ISymbianSDK sdk);
+
+ List<ISymbianSDK> getSupportedSDKs();
+
+ void addSupportedSDK(ISymbianSDK sdk);
+
+ /**
+ * Is this configuration supported by the base Raptor install?
+ * @return
+ */
+ boolean isBaseConfig();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/sandbox/ISBSv2ConfigPreprocessorInfo.java Thu May 20 13:57:30 2010 -0500
@@ -0,0 +1,21 @@
+package com.nokia.carbide.cdt.builder.test.sandbox;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+
+public interface ISBSv2ConfigPreprocessorInfo {
+
+ List<String> getMacroList();
+
+ List<IPath> getSystemIncludes();
+
+ IPath getVariantConfig();
+
+ String getCompiler();
+
+ IPath getCompilerPrefix();
+
+ ISBSv2ConfigData getSBSv2QueryConfigData();
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/sandbox/ISBSv2QueryData.java Thu May 20 13:57:30 2010 -0500
@@ -0,0 +1,24 @@
+package com.nokia.carbide.cdt.builder.test.sandbox;
+
+import java.util.List;
+
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+
+public interface ISBSv2QueryData {
+
+ void addConfigurationData(ISBSv2ConfigData configData);
+
+ List<ISBSv2ConfigData> getAllConfigurationsForSDK(ISymbianSDK sdk);
+
+ List<ISBSv2ConfigData> getSDKSpecificConfigData(ISymbianSDK sdk);
+
+ List<ISBSv2ConfigData> getBaseSBSConfigurations();
+
+ List<String> getProductsForSDK(ISymbianSDK sdk);
+
+ void addProductListForSDK(ISymbianSDK sdk, List<String> products);
+
+ ISBSv2ConfigData getSBSConfigByAlias(String aliase);
+
+ ISBSv2ConfigData getSBSConfigByMeaning(String string);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/sandbox/SBSv2ConfigData.java Thu May 20 13:57:30 2010 -0500
@@ -0,0 +1,131 @@
+package com.nokia.carbide.cdt.builder.test.sandbox;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+
+public class SBSv2ConfigData implements ISBSv2ConfigData {
+
+ /**
+ * A unique build alias. There can only be one alias definition, but an SDK can change the meaning of the alias
+ */
+ String buildAlias;
+ /*
+ * The dotted name for the alias. One build alias can have multiple meanings, each defined in an SDK
+ */
+ String meaning;
+
+ String target = null;
+ String platform = null;
+ String releaseDirectory = null;
+
+ /** A configuration that was discovered without using a valid EPOCROOT during an sbs query */
+ private boolean isBaseConfig;
+ List<ISymbianSDK> supportedSDKs = new ArrayList<ISymbianSDK>();
+
+ public SBSv2ConfigData(String buildAlias, String meaning, ISymbianSDK sdk){
+ this.buildAlias = buildAlias;
+ this.meaning = meaning;
+ if (sdk != null){
+ supportedSDKs.add(sdk);
+ } else {
+ this.isBaseConfig = true;
+ }
+ }
+
+ @Override
+ public String getBuildAlias() {
+ return buildAlias;
+ }
+
+ @Override
+ public String getMeaning() {
+ // TODO: What do you do if the meaning is different for another SDK?
+ // We need to figure out when there is a meaning conflict, and when to resolve it
+ // A different meaning can mean different output directory and dotted names,
+ // potentially different indexer data
+ return meaning;
+ }
+
+
+ @Override
+ public String getReleaseDirectory(ISymbianSDK sdk) {
+ if (releaseDirectory == null){
+ initDefaultConfigTargetInfo(sdk);
+ }
+ return releaseDirectory;
+ }
+
+ private void initDefaultConfigTargetInfo(ISymbianSDK sdk) {
+ List<String> aliasOrMeaningArray = new ArrayList<String>();
+ aliasOrMeaningArray.add(buildAlias);
+ HashMap <String, String> configResponse = SBSv2QueryUtils.queryConfigTargetInfo(aliasOrMeaningArray, sdk);
+ String releaseTree = configResponse.get(meaning);
+ if (releaseTree == null){
+ // TODO: Throw Exception
+ return;
+ }
+ IPath releasePath = new Path(releaseTree);
+ int epoc32SegmentIndex = 0;
+ for (String segment : releasePath.segments()){
+ if (segment.toLowerCase().equals("epoc32"))
+ break;
+ epoc32SegmentIndex++;
+ }
+ platform = releasePath.segment(epoc32SegmentIndex+2);
+ target = releasePath.segment(epoc32SegmentIndex+3);
+ String device = releasePath.getDevice();
+ releaseDirectory = releasePath.removeFirstSegments(epoc32SegmentIndex).toPortableString();
+ releaseDirectory = releaseDirectory.replace(device, "");
+
+ }
+
+ @Override
+ public ISBSv2ConfigPreprocessorInfo getBuildData(ISymbianSDK sdk) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getTraditionalTarget(ISymbianSDK sdk) {
+ if (target == null){
+ initDefaultConfigTargetInfo(sdk);
+ }
+
+ return target;
+ }
+
+ @Override
+ public String getTraditionalPlatform(ISymbianSDK sdk) {
+ if (platform == null){
+ initDefaultConfigTargetInfo(sdk);
+ }
+
+ return platform;
+ }
+
+ @Override
+ public List<ISymbianSDK> getSupportedSDKs() {
+ return supportedSDKs;
+ }
+
+ @Override
+ public void addSupportedSDK(ISymbianSDK sdk) {
+ supportedSDKs.add(sdk);
+ }
+
+ @Override
+ public boolean isBaseConfig() {
+ return isBaseConfig;
+ }
+
+ public String toString(){
+ return "Alias = " + buildAlias + " : Meaning = " + meaning;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/sandbox/SBSv2QueryData.java Thu May 20 13:57:30 2010 -0500
@@ -0,0 +1,109 @@
+package com.nokia.carbide.cdt.builder.test.sandbox;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+
+public class SBSv2QueryData implements ISBSv2QueryData {
+
+
+ /** alias ==> build config data Map*/
+ HashMap<String, ISBSv2ConfigData> sbsBuildConfigMap = new HashMap<String, ISBSv2ConfigData>();
+ HashMap<ISymbianSDK, List<String>> sdkProductVariantList = new HashMap<ISymbianSDK, List<String>>();
+
+ @Override
+ public void addConfigurationData(ISBSv2ConfigData configData) {
+
+ String buildAlias = configData.getBuildAlias();
+ if (null == sbsBuildConfigMap.get(buildAlias)){
+ sbsBuildConfigMap.put(buildAlias, configData);
+ } else {
+ // build alias already exists, just add it as a supported SDK
+ ISBSv2ConfigData updateConfig = sbsBuildConfigMap.get(buildAlias);
+ for (ISymbianSDK sdk : configData.getSupportedSDKs()){
+ // Add to the list of already supported SDKs, if any
+ updateConfig.addSupportedSDK(sdk);
+ }
+ sbsBuildConfigMap.put(buildAlias, updateConfig);
+ }
+ }
+
+ @Override
+ public List<ISBSv2ConfigData> getBaseSBSConfigurations() {
+ List<ISBSv2ConfigData> baseSBSConfigs = new ArrayList<ISBSv2ConfigData>();
+
+ // get all the base configurations...
+ for (String key : sbsBuildConfigMap.keySet()) {
+ ISBSv2ConfigData configData = sbsBuildConfigMap.get(key);
+ if (configData.isBaseConfig()) {
+ baseSBSConfigs.add(configData);
+ }
+ }
+
+ return baseSBSConfigs;
+ }
+
+ @Override
+ public List<ISBSv2ConfigData> getSDKSpecificConfigData(ISymbianSDK sdk) {
+ List<ISBSv2ConfigData> configsForSDK = new ArrayList<ISBSv2ConfigData>();
+
+ // get all the base configurations...
+ for (String key : sbsBuildConfigMap.keySet()) {
+ ISBSv2ConfigData configData = sbsBuildConfigMap.get(key);
+ if (configData.isBaseConfig()) {
+ continue;
+ }
+ // Not a Raptor-defined config, see if the SDK defined it
+ if (sdk != null){
+ if (configData.getSupportedSDKs().contains(sdk)){
+ configsForSDK.add(configData);
+ }
+ }
+ }
+
+ return configsForSDK;
+ }
+
+ @Override
+ public List<ISBSv2ConfigData> getAllConfigurationsForSDK(ISymbianSDK sdk) {
+ List<ISBSv2ConfigData> allConfigs = new ArrayList<ISBSv2ConfigData>();
+ allConfigs.addAll(getBaseSBSConfigurations());
+ allConfigs.addAll(getSDKSpecificConfigData(sdk));
+ return allConfigs;
+ }
+
+ @Override
+ public List<String> getProductsForSDK(ISymbianSDK sdk) {
+ return sdkProductVariantList.get(sdk);
+ }
+
+ @Override
+ public void addProductListForSDK(ISymbianSDK sdk, List<String> products) {
+ if (null == sdkProductVariantList.get(sdk) ||
+ sdkProductVariantList.size() == 0){
+
+ sdkProductVariantList.put(sdk, products);
+ }
+
+ }
+
+ @Override
+ public ISBSv2ConfigData getSBSConfigByAlias(String alias) {
+ return sbsBuildConfigMap.get(alias);
+ }
+
+ @Override
+ public ISBSv2ConfigData getSBSConfigByMeaning(String string) {
+ ISBSv2ConfigData configData = null;
+ for (String key : sbsBuildConfigMap.keySet()){
+ if (sbsBuildConfigMap.get(key).getMeaning().equals(string)){
+ return sbsBuildConfigMap.get(key);
+ }
+ }
+
+ return configData;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/sandbox/SBSv2QueryUtils.java Thu May 20 13:57:30 2010 -0500
@@ -0,0 +1,288 @@
+package com.nokia.carbide.cdt.builder.test.sandbox;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.eclipse.cdt.utils.spawner.EnvironmentReader;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
+import com.nokia.cpp.internal.api.utils.core.Logging;
+
+public class SBSv2QueryUtils {
+
+ public static final String QUERY_PRODUCTS_COMMAND = "--query=products";
+ public static final String QUERY_CONFIG_COMMAND = "--query=config";
+ public static final String QUERY_COMMAND = "--query=aliases";
+
+ public static ISBSv2QueryData queryAliasAndProductVariants() {
+ List<String> argListConfigQuery = new ArrayList<String>();
+ List<String> argListProductQuery = new ArrayList<String>();
+ argListConfigQuery.add(QUERY_COMMAND);
+ SBSv2QueryData sbsQueryData = new SBSv2QueryData();
+
+ /////// Invoke Raptor once with no EPOCROOT
+ Properties envVars = EnvironmentReader.getEnvVars();
+ envVars.setProperty("EPOCROOT", "FOOBAR");
+ String queryResult = getSBSQueryOutput(argListConfigQuery, createEnvStringList(envVars));
+
+ HashMap<String, String> sbsAliasMap = parseQueryAliasResult(queryResult);
+
+ for (String aliasKey : sbsAliasMap.keySet()){
+ String meaning = sbsAliasMap.get(aliasKey);
+ SBSv2ConfigData oneSBSConfig = new SBSv2ConfigData(aliasKey, meaning, null);
+ sbsQueryData.addConfigurationData(oneSBSConfig);
+ }
+
+ /////// Do for each SDK to build up the alias list...
+ for (ISymbianSDK sdk : SDKCorePlugin.getSDKManager().getSDKList()){
+ IPath epocRoot = new Path(sdk.getEPOCROOT());
+ if ((sdk.getOSVersion().getMajor() <= 9 && sdk.getOSVersion().getMinor() <5)
+ || !epocRoot.toFile().exists()){
+
+ continue; // skip it, the sdk is not supported or broken
+ }
+
+ envVars = EnvironmentReader.getEnvVars();
+ envVars.setProperty("EPOCROOT", sdk.getEPOCROOT());
+
+ queryResult = getSBSQueryOutput(argListConfigQuery, createEnvStringList(envVars));
+
+ sbsAliasMap = parseQueryAliasResult(queryResult);
+
+ for (String aliasKey : sbsAliasMap.keySet()){
+ String meaning = sbsAliasMap.get(aliasKey);
+ SBSv2ConfigData oneSBSConfig = new SBSv2ConfigData(aliasKey, meaning, sdk);
+ sbsQueryData.addConfigurationData(oneSBSConfig);
+ }
+
+ // Now get the products for each SDK
+ argListProductQuery.add(QUERY_PRODUCTS_COMMAND);
+ queryResult = getSBSQueryOutput(argListProductQuery, createEnvStringList(envVars));
+ List<String> productList = parseQueryProductsResults(queryResult);
+ sbsQueryData.addProductListForSDK(sdk, productList);
+ }
+
+ return sbsQueryData;
+ }
+
+ public static HashMap<String, String> queryConfigTargetInfo(List<String> aliasOrMeaningArray, ISymbianSDK sdk){
+
+ List<String> argListConfigQuery = new ArrayList<String>();
+
+ for (String alias : aliasOrMeaningArray){
+ argListConfigQuery.add(QUERY_CONFIG_COMMAND + "[" + alias + "]");
+ }
+
+ Properties envVars = null;
+ if (sdk != null){
+ File epocRoot = new File(sdk.getEPOCROOT());
+ if (epocRoot.exists()){
+ envVars = EnvironmentReader.getEnvVars();
+ envVars.setProperty("EPOCROOT", sdk.getEPOCROOT());
+ }
+ }
+ String queryResult = getSBSQueryOutput(argListConfigQuery, createEnvStringList(envVars));
+
+ return parseQueryConfigResults(queryResult);
+ }
+
+ private static String[] createEnvStringList(Properties envProps) {
+
+ if (envProps == null){
+ return null;
+ }
+ String[] env = null;
+ List<String> envList = new ArrayList<String>();
+ Enumeration<?> names = envProps.propertyNames();
+ if (names != null) {
+ while (names.hasMoreElements()) {
+ String key = (String) names.nextElement();
+ envList.add(key + "=" + envProps.getProperty(key));
+ }
+ env = (String[]) envList.toArray(new String[envList.size()]);
+ }
+ return env;
+ }
+
+ private static String getSBSQueryOutput(List<String> queryCommandList, String[] env) {
+ String overallOutput = "";
+
+ Runtime rt = Runtime.getRuntime();
+ IPath sbsPath = SBSv2Utils.getSBSPath();
+ Process p = null;
+ List<String> args = new ArrayList<String>();
+ args.add(sbsPath.toOSString());
+ args.addAll(queryCommandList);
+ try {
+ p = rt.exec(args.toArray(new String[args.size()]), env);
+ } catch (IOException e) {
+ // no such process, SBSv2 not available
+ Logging.log(
+ SDKCorePlugin.getDefault(),
+ Logging.newSimpleStatus(
+ 0,
+ IStatus.WARNING,
+ MessageFormat
+ .format(
+ "Could not find or launch Raptor script ''{0}''; SBSv2 support will not be available",
+ sbsPath), e));
+ }
+ if (p != null) {
+ BufferedReader br = new BufferedReader(new InputStreamReader(p
+ .getInputStream()));
+
+ String stdErrLine = null;
+ try {
+
+ // Only try for 30 seconds then bail in case Raptor hangs
+ int maxTries = 60;
+ int numTries = 0;
+ while (numTries < maxTries) {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ if (br.ready()) {
+ while ((stdErrLine = br.readLine()) != null) {
+ overallOutput += stdErrLine;
+ numTries = maxTries;
+ }
+
+ }
+ numTries++;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return overallOutput;
+ }
+
+ private static HashMap<String, String> parseQueryAliasResult(String queryResult) {
+ /* Alias to dotted name config */
+ HashMap<String, String> sbsAliasMap = new HashMap<String, String>();
+
+ try {
+ Element root = null;
+ DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ parser.setErrorHandler(new DefaultHandler());
+
+ StringReader reader = new StringReader( queryResult );
+ InputSource inputSource = new InputSource( reader );
+ root = parser.parse(inputSource).getDocumentElement();
+
+ NodeList children = root.getChildNodes();
+ for (int i=0; i< children.getLength(); i++) {
+ Node aliasNode = children.item(i);
+ if (aliasNode.getNodeName().equals("alias")){
+ NamedNodeMap meaning = aliasNode.getAttributes();
+ String dottedName = meaning.getNamedItem("meaning").getNodeValue();
+ String alias = meaning.getNamedItem("name").getNodeValue();
+ //System.out.println("ALIAS QUERY ==> " + dottedName + " <==> " + alias);
+ sbsAliasMap.put(alias, dottedName);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
+ }
+
+
+ return sbsAliasMap;
+ }
+
+ private static HashMap<String, String> parseQueryConfigResults(String queryResult) {
+ /* Alias to output directory */
+ HashMap<String, String> sbsAliasMap = new HashMap<String, String>();
+
+ try {
+ Element root = null;
+ DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ parser.setErrorHandler(new DefaultHandler());
+
+ StringReader reader = new StringReader( queryResult );
+ InputSource inputSource = new InputSource( reader );
+ root = parser.parse(inputSource).getDocumentElement();
+
+ NodeList children = root.getChildNodes();
+ for (int i=0; i< children.getLength(); i++) {
+ Node aliasNode = children.item(i);
+ if (aliasNode.getNodeName().equals("config")){
+ NamedNodeMap meaning = aliasNode.getAttributes();
+ String outputpath = meaning.getNamedItem("outputpath").getNodeValue();
+ String fullName = meaning.getNamedItem("fullname").getNodeValue();
+ //System.out.println("ALIAS QUERY ==> " + dottedName + " <==> " + alias);
+ sbsAliasMap.put(fullName, outputpath);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
+ }
+
+
+ return sbsAliasMap;
+ }
+
+ private static List<String> parseQueryProductsResults(String queryResult) {
+ List<String> productList = new ArrayList<String>();
+
+ try {
+ Element root = null;
+ DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ parser.setErrorHandler(new DefaultHandler());
+
+ StringReader reader = new StringReader( queryResult );
+ InputSource inputSource = new InputSource( reader );
+ root = parser.parse(inputSource).getDocumentElement();
+
+ NodeList children = root.getChildNodes();
+ for (int i=0; i< children.getLength(); i++) {
+ Node aliasNode = children.item(i);
+ if (aliasNode.getNodeName().equals("product")){
+ NamedNodeMap productAttribs = aliasNode.getAttributes();
+ String name = productAttribs.getNamedItem("name").getNodeValue();
+ //System.out.println("ALIAS QUERY ==> " + dottedName + " <==> " + alias);
+ productList.add(name);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
+ }
+
+ return productList;
+ }
+
+
+
+
+}