core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java
branchC3_BUILDER_WORK
changeset 1568 508bfdb3a934
parent 1521 807590ebabb2
child 1621 393b985a50f3
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java	Mon Jun 28 10:14:24 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java	Thu Jul 01 16:36:11 2010 -0500
@@ -1,68 +1,49 @@
 package com.nokia.carbide.cpp.internal.api.sdk;
 
 import java.io.File;
-import java.io.StringReader;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.osgi.framework.Version;
-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.epoc.engine.preprocessor.IDefine;
-import com.nokia.carbide.cpp.internal.sdk.core.model.SBSv2BuildInfo;
-import com.nokia.carbide.cpp.internal.sdk.core.model.SymbianSDK;
 import com.nokia.carbide.cpp.sdk.core.IRVCTToolChainInfo;
 import com.nokia.carbide.cpp.sdk.core.ISBSv2BuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISBSv2ConfigQueryData;
 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
-import com.nokia.carbide.cpp.sdk.core.ISymbianBuilderID;
 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
 import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 import com.nokia.cpp.internal.api.utils.core.Check;
-import com.nokia.cpp.internal.api.utils.core.Logging;
 
 public class BuildContextSBSv2 implements ISBSv2BuildContext {
 	
 	private String platform;
 	private String target;
 	private String sbsv2Alias;
-	private String meaning;
 	private ISymbianSDK sdk;
 	private String displayString;
 	private String configID;  // cconfiguration 'id' attribute from .cproject
 	
 	// Raptor config query data
-	private String outputPathString;
-	private List<String> metaDataMacros = new ArrayList<String>();  // macros to parse the INF/MMPs files (these do not contain values)
-	private List<String> metaDataIncludes = new ArrayList<String>();
-	private String metaDataVariantHRH;
-	private String configParseErrorMessage = null;
+	private ISBSv2ConfigQueryData configQueryData;
 	
-	public BuildContextSBSv2(ISymbianSDK theSDK, String thePlatform, String theTarget, String theSBSv2Alias, String displayName, String configID) {
-		this.sdk = theSDK;
-		this.platform = thePlatform.toUpperCase();
-		this.target = theTarget.toUpperCase();
-		this.sbsv2Alias = theSBSv2Alias;
-		this.displayString = displayName;
+	public BuildContextSBSv2(ISymbianSDK sdk, String platform, String target, String alias, String displayString, String configID) {
+		this.sdk = sdk;
+		this.platform = platform.toUpperCase();
+		this.target = target.toUpperCase();
+		this.sbsv2Alias = alias;
+		this.displayString = displayString;
 		this.configID = configID;
 	}
 
-	public BuildContextSBSv2(ISymbianSDK sdk, String alias, String meaning, String contextQueryXML) {
+	public BuildContextSBSv2(ISymbianSDK sdk, String alias, ISBSv2ConfigQueryData configData) {
 		this.sdk = sdk;
 		this.sbsv2Alias = alias;
-		this.meaning = meaning;
+		this.configQueryData = configData;
+		setPlatformAndTargetFromOutputPath();
 		this.configID = ISBSv2BuildContext.BUILDER_ID + "." + sbsv2Alias + "." + sdk.getUniqueId();
-		parseQueryConfigResults(contextQueryXML);
 		this.displayString = sbsv2Alias + " [" + sdk.getUniqueId() + "]"; 
 	}
 
@@ -75,7 +56,7 @@
 	public String getPlatformString() {
 		
 		if (platform == null){
-			return configParseErrorMessage;
+			return configQueryData.getConfigurationErrorMessage();
 		}
 		
 		if (platform.contains(".")){
@@ -92,7 +73,7 @@
 	@Override
 	public String getTargetString() {
 		if (target == null){
-			return configParseErrorMessage;
+			return configQueryData.getConfigurationErrorMessage();
 		}
 		return target;
 	}
@@ -107,15 +88,6 @@
 		return displayString;
 	}
 
-	private ISBSv2BuildInfo getBuildInfo() {
-		ISBSv2BuildInfo buildInfo = (ISBSv2BuildInfo)getSDK().getBuildInfo(ISymbianBuilderID.SBSV2_BUILDER);
-		if (buildInfo == null) {
-			buildInfo = new SBSv2BuildInfo(getSDK());
-			((SymbianSDK)getSDK()).setBuildInfo(buildInfo, ISymbianBuilderID.SBSV2_BUILDER);
-		}
-		return buildInfo;
-	}
-
 	@Override
 	public String toString() {
 		return getConfigID();
@@ -235,24 +207,6 @@
 		return false;
 	}
 	
-	/**
-	 * See if the build configuration is an SBSv2 alias, and if so get the build-able alias name 
-	 * @param displayName
-	 * @return The full SBSv2 alias that can be used with -c, otherwise null if not SBSv2
-	 */
-	private static String getSBSv2AliasFromConfigName(String displayName) {
-		int indexBegin = displayName.indexOf("(");  //$NON-NLS-1$
-		int indexEnd = displayName.indexOf(")");  //$NON-NLS-1$
-		if (indexBegin > 0 && indexEnd > 0){
-			String configPart =  displayName.substring(indexBegin+1, indexEnd);
-			if (configPart.split("_").length > 1){
-				return configPart;
-			}
-		} 
-		
-		return null;
-	}
-
 	@Override
 	public String getSBSv2Alias() {
 		return sbsv2Alias;
@@ -359,87 +313,10 @@
 		}
 	}
 	
-	
-	private void parseQueryConfigResults(String queryResult) {
+	private void setPlatformAndTargetFromOutputPath() {
+		if (configQueryData.getOutputPathString() == null) return;
 		
-		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 configNode = children.item(i);
-    			if (configNode.getNodeName().equals("config")){
-    				NamedNodeMap aliasAttribs = configNode.getAttributes();
-    				String dottedName = aliasAttribs.getNamedItem("meaning").getNodeValue();
-    				if (!dottedName.equalsIgnoreCase(meaning)){
-    					continue;
-    				}
-    				if (configNode.getTextContent() != null&& configNode.getTextContent().length() > 0){
-    					// The config failed, likely due to envrionment set up issue.
-    					// Save the error message
-    					configParseErrorMessage = configNode.getTextContent();
-    					break;
-    				}
-    				
-    				String outputpath = aliasAttribs.getNamedItem("outputpath").getNodeValue();
-    				if (outputpath != null){
-    					outputPathString = outputpath;
-    				}
-    				
-    				// get <metadata>
-    				NodeList configChillens = configNode.getChildNodes();
-    				for (int ii = 0; ii < configChillens.getLength(); ii++){
-    					Node metaDataNode = configChillens.item(ii);
-    					if (metaDataNode.getNodeName().equals("metadata")){
-    						NodeList metaDataChillens = metaDataNode.getChildNodes();
-    						for (int iii = 0; iii < metaDataChillens.getLength(); iii++){
-    							Node metaChild = metaDataChillens.item(iii);
-    							NamedNodeMap attribs = metaChild.getAttributes();
-    							try {
-									if (metaChild.getNodeName().equals("macro")){
-										String name = attribs.getNamedItem("name").getNodeValue();
-										metaDataMacros.add(name);
-									} else if (metaChild.getNodeName().equals("include")){
-										String path = attribs.getNamedItem("path").getNodeValue();
-										metaDataIncludes.add(path);
-									} else if (metaChild.getNodeName().equals("preinclude")){
-										metaDataVariantHRH = attribs.getNamedItem("file").getNodeValue();
-									}
-								} catch (Exception e) {
-									// skip it
-									e.printStackTrace();
-								}
-    						}
-    						
-    					} else if (metaDataNode.getNodeName().equals("compilerinfo")){
-    						// TODO: Placeholder for future cpp preprocessor macros and compiler prefix
-    						// Not sure what it will be called yet.
-    					}
-    				}
-    				
-    				break;
-    			}
-    		}
-    		
-    	} catch (Exception e) {
-    		e.printStackTrace();
-    		Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e));
-    	}
-    	
-    	setPlatformAndTargetFromOutputPath();
-		
-	}
-
-	private void setPlatformAndTargetFromOutputPath() {
-		if (outputPathString == null) return;
-		
-		IPath releasePath = new Path(outputPathString);
+		IPath releasePath = new Path(configQueryData.getOutputPathString());
 		int epoc32SegmentIndex = 0;
 		for (String segment : releasePath.segments()){
 			if (segment.toLowerCase().equals("epoc32"))
@@ -451,23 +328,8 @@
 		target = releasePath.segment(epoc32SegmentIndex+3);
 	}
 
-	/**
-	 * Error message, if any.
-	 * @return An error message if a problem occurred while trying to get config info from Raptor. Null if no error.
-	 */
-	@Override
-	public String getConfigurationErrorMessage(){
-		return configParseErrorMessage;
-	}
-
-	@Override
-	public List<String> getMetaDataMacros() {
-		return metaDataMacros;
-	}
-
-	@Override
-	public String getmetaDataVariantHRH() {
-		return metaDataVariantHRH;
+	public ISBSv2ConfigQueryData getConfigQueryData() {
+		return configQueryData;
 	}
 
 }