# HG changeset patch # User stechong # Date 1278020171 18000 # Node ID 508bfdb3a934647e611463011e0a4b25bc38c385 # Parent a0d518fc91eaccdba32fa021b00fa7410012ccc7 Added caching of Raptor query data for aliases, products and configs. diff -r a0d518fc91ea -r 508bfdb3a934 builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/SBSv2QueryTests.java --- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/SBSv2QueryTests.java Mon Jun 28 10:14:24 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/SBSv2QueryTests.java Thu Jul 01 16:36:11 2010 -0500 @@ -18,8 +18,6 @@ package com.nokia.carbide.cdt.builder.test; import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import org.osgi.framework.Version; @@ -77,10 +75,10 @@ ISBSv2BuildContext sbsv2Context = (ISBSv2BuildContext)context; assertTrue(sbsv2Context.getVariantHRHDefines().size() > 0); - if (sbsv2Context.getConfigurationErrorMessage() == null || sbsv2Context.getConfigurationErrorMessage().length() == 0){ - assertTrue((new File(sbsv2Context.getmetaDataVariantHRH())).exists()); + if (sbsv2Context.getConfigQueryData().getConfigurationErrorMessage() == null || sbsv2Context.getConfigQueryData().getConfigurationErrorMessage().length() == 0){ + assertTrue((new File(sbsv2Context.getConfigQueryData().getMetaDataVariantHRH())).exists()); } else { - System.out.println("Config " + sbsv2Context.getSBSv2Alias() + " had error, cannot fully test: " + sbsv2Context.getConfigurationErrorMessage()); + System.out.println("Config " + sbsv2Context.getSBSv2Alias() + " had error, cannot fully test: " + sbsv2Context.getConfigQueryData().getConfigurationErrorMessage()); } } } diff -r a0d518fc91ea -r 508bfdb3a934 builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/DefaultViewConfiguration.java --- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/DefaultViewConfiguration.java Mon Jun 28 10:14:24 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/DefaultViewConfiguration.java Thu Jul 01 16:36:11 2010 -0500 @@ -209,9 +209,12 @@ macros.add(DefineFactory.createDefine("SBSV2", null)); ISBSv2BuildInfo sbsv2BuildInfo = (ISBSv2BuildInfo)sdk.getBuildInfo(ISymbianBuilderID.SBSV2_BUILDER); if (sbsv2BuildInfo != null) { - for (String platMacro : sbsv2BuildInfo.getPlatformMacros(context.getPlatformString())) { - macros.add(DefineFactory.createDefine(platMacro.trim(), platMacro.trim())); - } + Map platMacros = sbsv2BuildInfo.getPlatformMacros(context.getPlatformString()); + for (Iterator it = platMacros.keySet().iterator(); it.hasNext(); ) { + String name = it.next(); + String value = platMacros.get(name); + macros.add(DefineFactory.createDefine(name, value)); + } } } else { ISBSv1BuildInfo sbsv1BuildInfo = (ISBSv1BuildInfo)sdk.getBuildInfo(ISymbianBuilderID.SBSV1_BUILDER); diff -r a0d518fc91ea -r 508bfdb3a934 builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/api/builder/CarbideConfigurationDataProvider.java --- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/api/builder/CarbideConfigurationDataProvider.java Mon Jun 28 10:14:24 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/api/builder/CarbideConfigurationDataProvider.java Thu Jul 01 16:36:11 2010 -0500 @@ -251,6 +251,7 @@ } } + return null; } diff -r a0d518fc91ea -r 508bfdb3a934 builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideLanguageData.java --- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideLanguageData.java Mon Jun 28 10:14:24 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideLanguageData.java Thu Jul 01 16:36:11 2010 -0500 @@ -282,10 +282,7 @@ } else { ISBSv2BuildInfo sbsv2BuildInfo = (ISBSv2BuildInfo)sdk.getBuildInfo(ISymbianBuilderID.SBSV2_BUILDER); // platform macros - for (String platMacro : sbsv2BuildInfo.getPlatformMacros(carbideBuildConfig.getPlatformString())) { - macros.put("__" + platMacro + "__", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - + macros.putAll(sbsv2BuildInfo.getPlatformMacros(carbideBuildConfig.getPlatformString())); } // built in macros diff -r a0d518fc91ea -r 508bfdb3a934 builder/com.nokia.carbide.cpp.builder.utils/src/com/nokia/carbide/cpp/internal/builder/utils/handlers/PreprocessHandler.java --- a/builder/com.nokia.carbide.cpp.builder.utils/src/com/nokia/carbide/cpp/internal/builder/utils/handlers/PreprocessHandler.java Mon Jun 28 10:14:24 2010 -0500 +++ b/builder/com.nokia.carbide.cpp.builder.utils/src/com/nokia/carbide/cpp/internal/builder/utils/handlers/PreprocessHandler.java Thu Jul 01 16:36:11 2010 -0500 @@ -20,7 +20,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.List; +import java.util.Map; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; @@ -80,6 +82,7 @@ import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPData; import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPResource; import com.nokia.carbide.cpp.epoc.engine.preprocessor.AcceptedNodesViewFilter; +import com.nokia.carbide.cpp.epoc.engine.preprocessor.DefineFactory; import com.nokia.carbide.cpp.internal.api.sdk.ISBSv1BuildInfo; import com.nokia.carbide.cpp.internal.api.sdk.ISBSv2BuildInfo; import com.nokia.carbide.cpp.internal.builder.utils.Activator; @@ -427,9 +430,10 @@ } else { ISBSv2BuildInfo sbsv2BuildInfo = (ISBSv2BuildInfo)sdk.getBuildInfo(ISymbianBuilderID.SBSV2_BUILDER); // platform macros - for (String platMacro : sbsv2BuildInfo.getPlatformMacros(buildConfig.getPlatformString())) { - macros.add("__" + platMacro + "__"); //$NON-NLS-1$ //$NON-NLS-2$ - } + for (Iterator it = sbsv2BuildInfo.getPlatformMacros(buildConfig.getPlatformString()).keySet().iterator(); it.hasNext(); ) { + String platMacro = it.next(); + macros.add(platMacro); + } } // built in macros diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core.test/src/com/nokia/carbide/cpp/sdk/core/test/TestCarbideSDKCache.java --- a/core/com.nokia.carbide.cpp.sdk.core.test/src/com/nokia/carbide/cpp/sdk/core/test/TestCarbideSDKCache.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core.test/src/com/nokia/carbide/cpp/sdk/core/test/TestCarbideSDKCache.java Thu Jul 01 16:36:11 2010 -0500 @@ -1,18 +1,21 @@ package com.nokia.carbide.cpp.sdk.core.test; import java.io.File; +import java.util.Map; + +import junit.framework.TestCase; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.jobs.Job; import org.osgi.framework.Version; +import com.nokia.carbide.cpp.internal.api.sdk.sbsv2.SBSv2QueryUtils; import com.nokia.carbide.cpp.internal.sdk.core.model.SDKManager; import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; +import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; import com.nokia.carbide.cpp.sdk.core.SymbianSDKFactory; -import junit.framework.TestCase; - public class TestCarbideSDKCache extends TestCase { private class TestSDKManager extends SDKManager { @@ -92,6 +95,24 @@ assertTrue(manager.getCacheFile().lastModified() > orgTime); } + public void testSBSv2QueryCache() throws Exception { + SBSv2QueryUtils.removeAllCachedQueries(); + assertNull(SDKCorePlugin.getCache().getCache(SBSv2QueryUtils.ALIAS_CACHE_KEY)); + assertNull(SDKCorePlugin.getCache().getCache(SBSv2QueryUtils.PRODUCT_CACHE_KEY)); + assertNull(SDKCorePlugin.getCache().getCache(SBSv2QueryUtils.CONFIG_CACHE_KEY)); + final TestSDKManager manager = new TestSDKManager(); + manager.scanSDKs(); + manager.getScanJob().join(); + assertNotNull(SDKCorePlugin.getCache().getCachedData(SBSv2QueryUtils.ALIAS_CACHE_KEY, Map.class, 0)); + assertNotNull(SDKCorePlugin.getCache().getCachedData(SBSv2QueryUtils.PRODUCT_CACHE_KEY, Map.class, 0)); + assertNotNull(SDKCorePlugin.getCache().getCachedData(SBSv2QueryUtils.CONFIG_CACHE_KEY, Map.class, 0)); + SDKCorePlugin.getCache().flushAll(); + SBSv2QueryUtils.removeAllCachedQueries(); + assertNotNull(SDKCorePlugin.getCache().getCachedData(SBSv2QueryUtils.ALIAS_CACHE_KEY, Map.class, 0)); + assertNotNull(SDKCorePlugin.getCache().getCachedData(SBSv2QueryUtils.PRODUCT_CACHE_KEY, Map.class, 0)); + assertNotNull(SDKCorePlugin.getCache().getCachedData(SBSv2QueryUtils.CONFIG_CACHE_KEY, Map.class, 0)); + } + private void waitASecond() { try { Thread.sleep(1000); diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/META-INF/MANIFEST.MF --- a/core/com.nokia.carbide.cpp.sdk.core/META-INF/MANIFEST.MF Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/META-INF/MANIFEST.MF Thu Jul 01 16:36:11 2010 -0500 @@ -17,7 +17,7 @@ com.nokia.cpp.utils.ui Bundle-ActivationPolicy: lazy Export-Package: com.nokia.carbide.cpp.internal.api.sdk;x-friends:="com.nokia.carbide.cpp.sdk.core.test", - com.nokia.carbide.cpp.internal.api.sdk.sbsv2;x-friends:="com.nokia.carbide.cdt.builder.test", + com.nokia.carbide.cpp.internal.api.sdk.sbsv2;x-friends:="com.nokia.carbide.cdt.builder.test,com.nokia.carbide.cpp.sdk.core.test", com.nokia.carbide.cpp.internal.sdk.core.gen.Devices;x-friends:="com.nokia.carbide.cpp.sdk.core.test,com.nokia.carbide.cpp.sdk.ui", com.nokia.carbide.cpp.internal.sdk.core.gen.Devices.impl;x-friends:="com.nokia.carbide.cpp.sdk.core.test", com.nokia.carbide.cpp.internal.sdk.core.gen.Devices.util;x-friends:="com.nokia.carbide.cpp.sdk.core.test", diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java --- 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 metaDataMacros = new ArrayList(); // macros to parse the INF/MMPs files (these do not contain values) - private List metaDataIncludes = new ArrayList(); - 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 - 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 getMetaDataMacros() { - return metaDataMacros; - } - - @Override - public String getmetaDataVariantHRH() { - return metaDataVariantHRH; + public ISBSv2ConfigQueryData getConfigQueryData() { + return configQueryData; } } diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/ISBSv2BuildInfo.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/ISBSv2BuildInfo.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/ISBSv2BuildInfo.java Thu Jul 01 16:36:11 2010 -0500 @@ -14,6 +14,7 @@ package com.nokia.carbide.cpp.internal.api.sdk; import java.util.List; +import java.util.Map; import org.eclipse.core.runtime.IPath; @@ -34,9 +35,9 @@ * These are the macros that can be used in MMP and INF files. They are only given by name (no value) *

* @param platform the platform name - * @return a list of macros, which may be empty. + * @return a map of macros and values, which may be empty. */ - List getPlatformMacros(String platform); + Map getPlatformMacros(String platform); /** * Get the full path to the prefix file defined under \epoc32\tools\variant\variant.cfg diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/sbsv2/SBSv2ConfigQueryData.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/sbsv2/SBSv2ConfigQueryData.java Thu Jul 01 16:36:11 2010 -0500 @@ -0,0 +1,164 @@ +package com.nokia.carbide.cpp.internal.api.sdk.sbsv2; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +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.sdk.core.ISBSv2ConfigQueryData; +import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; +import com.nokia.cpp.internal.api.utils.core.Logging; + +public class SBSv2ConfigQueryData implements ISBSv2ConfigQueryData { + + // Raptor config query data + private Map buildMacros = new HashMap(); // cpp preprocessor macros + private Map metaDataMacros = new HashMap(); // macros to parse the INF/MMPs files (these do not contain values) + private List metaDataIncludes = new ArrayList(); + private String buildPrefix; + private String metaDataVariantHRH; + private String meaning; + private String outputPathString; + private String configurationErrorMessage = null; + + public SBSv2ConfigQueryData(String meaning, String queryResult) { + this.meaning = meaning; + parseQueryConfigResults(queryResult); + } + + public String getBuildPrefix() { + return buildPrefix; + } + + public Map getBuildMacros() { + return buildMacros; + } + + public String getConfigurationErrorMessage() { + return configurationErrorMessage; + } + + public Map getMetaDataMacros() { + return metaDataMacros; + } + + public List getMetaDataIncludes() { + return metaDataIncludes; + } + + public String getMetaDataVariantHRH() { + return metaDataVariantHRH; + } + + public String getOutputPathString() { + return outputPathString; + } + + private void parseQueryConfigResults(String queryResult) { + 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 + configurationErrorMessage = configNode.getTextContent(); + break; + } + + String outputpath = aliasAttribs.getNamedItem("outputpath").getNodeValue(); + if (outputpath != null){ + outputPathString = outputpath; + } + + NodeList configChillens = configNode.getChildNodes(); + for (int ii = 0; ii < configChillens.getLength(); ii++){ + Node dataNode = configChillens.item(ii); + if (dataNode.getNodeName().equals("metadata")){ + // get + NodeList metaDataChillens = dataNode.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(); + String value = ""; + Node valueNode = attribs.getNamedItem("value"); + if (valueNode != null) { + value = valueNode.getNodeValue(); + } + metaDataMacros.put(name, value); + } 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 (dataNode.getNodeName().equals("build")){ + // get + NodeList buildChillens = dataNode.getChildNodes(); + for (int iii = 0; iii < buildChillens.getLength(); iii++){ + Node buildChild = buildChillens.item(iii); + NamedNodeMap attribs = buildChild.getAttributes(); + try { + if (buildChild.getNodeName().equals("macro")){ + String name = attribs.getNamedItem("name").getNodeValue(); + String value = ""; + Node valueNode = attribs.getNamedItem("value"); + if (valueNode != null) { + value = valueNode.getNodeValue(); + } + buildMacros.put(name, value); + } else if (buildChild.getNodeName().equals("preinclude")){ + buildPrefix = attribs.getNamedItem("file").getNodeValue(); + } + } catch (Exception e) { + // skip it + e.printStackTrace(); + } + } + } + } + + break; + } + } + + } catch (Exception e) { + e.printStackTrace(); + Logging.log(SDKCorePlugin.getDefault(), Logging.newStatus(SDKCorePlugin.getDefault(), e)); + } + } + +} diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/sbsv2/SBSv2QueryUtils.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/sbsv2/SBSv2QueryUtils.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/sbsv2/SBSv2QueryUtils.java Thu Jul 01 16:36:11 2010 -0500 @@ -21,12 +21,14 @@ import java.io.File; import java.io.IOException; import java.io.InputStreamReader; +import java.io.Serializable; 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.Map; import java.util.Properties; import javax.xml.parsers.DocumentBuilder; @@ -51,69 +53,82 @@ public class SBSv2QueryUtils { + public static final String QUERY_ALIASES_COMMAND = "--query=aliases"; 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 HashMap getAliasesForSDK(ISymbianSDK sdk) throws SBSv2MinimumVersionException{ - - checkForMinimumRaptorVersion(); - - List argListAliasQuery = new ArrayList(); - argListAliasQuery.add(QUERY_COMMAND); - - Properties envVars = EnvironmentReader.getEnvVars(); - if (sdk != null){ - envVars.setProperty("EPOCROOT", sdk.getEPOCROOT()); - } else { - envVars.setProperty("EPOCROOT", "FOOBAR"); + + public static final String ALIAS_CACHE_KEY = "alias_cache"; + public static final String CONFIG_CACHE_KEY = "config_cache"; + public static final String PRODUCT_CACHE_KEY = "product_cache"; + + public static final String BAD_EPOCROOT = "BADEPOCROOT"; + + @SuppressWarnings("unchecked") + public static HashMap getAliasesForSDK(ISymbianSDK sdk) throws SBSv2MinimumVersionException { + HashMap aliases; + Map> aliasesMap = SDKCorePlugin.getCache().getCachedData(ALIAS_CACHE_KEY, Map.class, 0); + SBSv2SDKKey key = new SBSv2SDKKey(sdk); + + if (aliasesMap == null) { + aliasesMap = new HashMap>(); } - - String queryResult = getSBSQueryOutput(argListAliasQuery, createEnvStringList(envVars)); - - return parseQueryAliasResult(queryResult); - } - - public static List getProductVariantsForSDK(ISymbianSDK sdk) throws SBSv2MinimumVersionException{ - - checkForMinimumRaptorVersion(); - - List argListProductQuery = new ArrayList(); - - Properties envVars = EnvironmentReader.getEnvVars(); - if (sdk != null){ - envVars.setProperty("EPOCROOT", sdk.getEPOCROOT()); - } else { - envVars.setProperty("EPOCROOT", "FOOBAR"); - } - - argListProductQuery.add(QUERY_PRODUCTS_COMMAND); - String queryResult = getSBSQueryOutput(argListProductQuery, createEnvStringList(envVars)); - return parseQueryProductsResults(queryResult); - } - - public static String getConfigQueryXML(ISymbianSDK sdk, List aliasOrMeaningArray) throws SBSv2MinimumVersionException{ - - checkForMinimumRaptorVersion(); - - List argListConfigQuery = new ArrayList(); - - 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()); + else { + aliases = aliasesMap.get(key.toString()); + if (aliases != null && !aliases.containsKey(BAD_EPOCROOT)) { + return aliases; } } - return getSBSQueryOutput(argListConfigQuery, createEnvStringList(envVars)); + + aliases = getAliasesQuery(sdk); + aliasesMap.put(key.toString(), aliases); + SDKCorePlugin.getCache().putCachedData(ALIAS_CACHE_KEY, (Serializable)aliasesMap, 0); + return aliases; } - - + + @SuppressWarnings("unchecked") + public static List getProductVariantsForSDK(ISymbianSDK sdk) throws SBSv2MinimumVersionException { + List products; + Map> productsMap = SDKCorePlugin.getCache().getCachedData(PRODUCT_CACHE_KEY, Map.class, 0); + SBSv2SDKKey key = new SBSv2SDKKey(sdk); + + if (productsMap == null) { + productsMap = new HashMap>(); + } + else { + products = productsMap.get(key.toString()); + if (products != null && !products.contains(BAD_EPOCROOT)) { + return products; + } + } + + products = getProductsQuery(sdk); + productsMap.put(key.toString(), products); + SDKCorePlugin.getCache().putCachedData(PRODUCT_CACHE_KEY, (Serializable)productsMap, 0); + return products; + } + + @SuppressWarnings("unchecked") + public static String getConfigQueryXMLforSDK(ISymbianSDK sdk, List aliasOrMeaningArray) throws SBSv2MinimumVersionException { + String configs; + Map configsMap = SDKCorePlugin.getCache().getCachedData(CONFIG_CACHE_KEY, Map.class, 0); + SBSv2SDKKey key = new SBSv2SDKKey(sdk); + + if (configsMap == null) { + configsMap = new HashMap(); + } + else { + configs = configsMap.get(key.toString()); + if (configs != null) { + return configs; + } + } + + configs = getConfigurations(sdk, aliasOrMeaningArray); + configsMap.put(key.toString(), configs); + SDKCorePlugin.getCache().putCachedData(CONFIG_CACHE_KEY, (Serializable)configsMap, 0); + return configs; + } + public static HashMap queryConfigTargetInfo(ISymbianSDK sdk, List aliasOrMeaningArray) throws SBSv2MinimumVersionException{ checkForMinimumRaptorVersion(); @@ -136,7 +151,7 @@ return parseQueryConfigResults(queryResult); } - + private static String[] createEnvStringList(Properties envProps) { if (envProps == null){ @@ -154,7 +169,75 @@ } return env; } - + + private static HashMap getAliasesQuery(ISymbianSDK sdk) throws SBSv2MinimumVersionException { + + checkForMinimumRaptorVersion(); + if (!isEpocRootValid(sdk)) { + HashMap result = new HashMap(); + result.put(BAD_EPOCROOT, ""); + return result; + } + + List argListAliasQuery = new ArrayList(); + argListAliasQuery.add(QUERY_ALIASES_COMMAND); + + Properties envVars = EnvironmentReader.getEnvVars(); + if (sdk != null){ + envVars.setProperty("EPOCROOT", sdk.getEPOCROOT()); + } else { + envVars.setProperty("EPOCROOT", "FOOBAR"); + } + + String queryResult = getSBSQueryOutput(argListAliasQuery, createEnvStringList(envVars)); + + return parseQueryAliasResult(queryResult); + } + + private static List getProductsQuery(ISymbianSDK sdk) throws SBSv2MinimumVersionException { + + checkForMinimumRaptorVersion(); + if (!isEpocRootValid(sdk)) { + List result = new ArrayList(); + result.add(BAD_EPOCROOT); + return result; + } + + List argListProductQuery = new ArrayList(); + argListProductQuery.add(QUERY_PRODUCTS_COMMAND); + + Properties envVars = EnvironmentReader.getEnvVars(); + if (sdk != null){ + envVars.setProperty("EPOCROOT", sdk.getEPOCROOT()); + } else { + envVars.setProperty("EPOCROOT", "FOOBAR"); + } + + String queryResult = getSBSQueryOutput(argListProductQuery, createEnvStringList(envVars)); + return parseQueryProductsResults(queryResult); + } + + private static String getConfigurations(ISymbianSDK sdk, List aliasOrMeaningArray) throws SBSv2MinimumVersionException { + + checkForMinimumRaptorVersion(); + + List argListConfigQuery = new ArrayList(); + 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()); + } + } + + return getSBSQueryOutput(argListConfigQuery, createEnvStringList(envVars)); + } + private static String getSBSQueryOutput(List queryCommandList, String[] env) { String overallOutput = ""; @@ -210,7 +293,18 @@ return overallOutput; } - + + private static Boolean isEpocRootValid(ISymbianSDK sdk) { + IPath epocRoot = new Path(sdk.getEPOCROOT()); + epocRoot = epocRoot.append("epoc32"); + File epocRootFile = epocRoot.toFile(); + if (epocRootFile.exists()) { + return true; + } else { + return false; + } + } + private static HashMap parseQueryAliasResult(String queryResult) { /* Alias to dotted name config */ HashMap sbsAliasMap = new HashMap(); @@ -278,7 +372,7 @@ return sbsAliasMap; } - + private static List parseQueryProductsResults(String queryResult) { List productList = new ArrayList(); @@ -323,11 +417,14 @@ HashMap resultMap = new HashMap(); // iterate all SDKs and build the map up - for (ISymbianSDK sdk : SDKCorePlugin.getSDKManager().getSDKList()){ - if (sdk.isEnabled() && (new File(sdk.getEPOCROOT()).exists())){ + for (ISymbianSDK sdk : SDKCorePlugin.getSDKManager().getSDKList()) { + if (sdk.isEnabled() && isEpocRootValid(sdk)) { HashMap aliasMap = getAliasesForSDK(sdk); - for (String alias : aliasMap.keySet()){ - if (resultMap.get(alias) == null){ + for (String alias : aliasMap.keySet()) { + if (alias.equals(BAD_EPOCROOT)) { + continue; + } + if (resultMap.get(alias) == null) { resultMap.put(alias, aliasMap.get(alias)); } } @@ -336,16 +433,19 @@ return resultMap; } - + public static List getCompleteProductVariantList() throws SBSv2MinimumVersionException { List resultList = new ArrayList(); // iterate all SDKs and build the map up - for (ISymbianSDK sdk : SDKCorePlugin.getSDKManager().getSDKList()){ - if (sdk.isEnabled() && (new File(sdk.getEPOCROOT()).exists())){ + for (ISymbianSDK sdk : SDKCorePlugin.getSDKManager().getSDKList()) { + if (sdk.isEnabled() && isEpocRootValid(sdk)) { List productList = getProductVariantsForSDK(sdk); - for (String variant : productList){ - if (!resultList.contains(variant)){ + for (String variant : productList) { + if (variant.equals(BAD_EPOCROOT)) { + continue; + } + if (!resultList.contains(variant)) { resultList.add(variant); } } @@ -354,5 +454,23 @@ return resultList; } - + + public static void removeAllCachedQueries() { + removeCachedAliases(); + removeCachedProducts(); + removeCachedConfigurations(); + } + + public static void removeCachedAliases() { + SDKCorePlugin.getCache().removeCache(ALIAS_CACHE_KEY); + } + + public static void removeCachedProducts() { + SDKCorePlugin.getCache().removeCache(PRODUCT_CACHE_KEY); + } + + public static void removeCachedConfigurations() { + SDKCorePlugin.getCache().removeCache(CONFIG_CACHE_KEY); + } + } diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/sbsv2/SBSv2SDKKey.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/sbsv2/SBSv2SDKKey.java Thu Jul 01 16:36:11 2010 -0500 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Test the BldInfViewPathHelper class. +* +*/ + +package com.nokia.carbide.cpp.internal.api.sdk.sbsv2; + +import java.io.Serializable; + +import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; + +public class SBSv2SDKKey implements Serializable { + + private static final long serialVersionUID = -5672527971643437442L; + + private String uniqueId; + private String epocRoot; + + public SBSv2SDKKey() { + uniqueId = ""; + epocRoot = ""; + } + + public SBSv2SDKKey(ISymbianSDK sdk) { + uniqueId = sdk.getUniqueId(); + epocRoot = sdk.getEPOCROOT(); + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SBSv2SDKKey other = (SBSv2SDKKey) obj; + if (epocRoot == null) { + if (other.epocRoot != null) + return false; + } else if (!epocRoot.equals(other.epocRoot)) + return false; + if (uniqueId == null) { + if (other.uniqueId != null) + return false; + } else if (!uniqueId.equals(other.uniqueId)) + return false; + return true; + } + + public String getUniqueId() { + return uniqueId; + } + + public String getEpocRoot() { + return epocRoot; + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((epocRoot == null) ? 0 : epocRoot.hashCode()); + result = prime * result + + ((uniqueId == null) ? 0 : uniqueId.hashCode()); + return result; + } + + public void setUniqueId(String id) { + uniqueId = id; + } + + public void setEpocRoot(String root) { + epocRoot = root; + } + + @Override + public String toString() { + return "SBSv2SDKKey [uniqueId=" + uniqueId + ", epocRoot=" + epocRoot + + "]"; + } + +} diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/AbstractSDKManager.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/AbstractSDKManager.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/AbstractSDKManager.java Thu Jul 01 16:36:11 2010 -0500 @@ -64,6 +64,7 @@ import com.nokia.carbide.cpp.internal.api.sdk.SDKManagerInternalAPI; import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContextDataCache; import com.nokia.carbide.cpp.internal.api.sdk.SymbianMacroStore; +import com.nokia.carbide.cpp.internal.api.sdk.sbsv2.SBSv2QueryUtils; import com.nokia.carbide.cpp.sdk.core.ICarbideInstalledSDKChangeListener; import com.nokia.carbide.cpp.sdk.core.ICarbideInstalledSDKChangeListener.SDKChangeEventType; import com.nokia.carbide.cpp.sdk.core.IRVCTToolChainInfo; @@ -160,6 +161,7 @@ } public void scanSDKs() { + SBSv2QueryUtils.removeAllCachedQueries(); // do the real sdk scanning in a job. if (scanJob.getState() == Job.NONE) { scanJob.schedule(); diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SBSv2BuildInfo.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SBSv2BuildInfo.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SBSv2BuildInfo.java Thu Jul 01 16:36:11 2010 -0500 @@ -28,9 +28,11 @@ import com.nokia.carbide.cpp.internal.api.sdk.BuildContextSBSv2; import com.nokia.carbide.cpp.internal.api.sdk.ISBSv2BuildInfo; import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils; +import com.nokia.carbide.cpp.internal.api.sdk.sbsv2.SBSv2ConfigQueryData; import com.nokia.carbide.cpp.internal.api.sdk.sbsv2.SBSv2MinimumVersionException; import com.nokia.carbide.cpp.internal.api.sdk.sbsv2.SBSv2QueryUtils; 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.ISymbianSDK; import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; @@ -46,7 +48,7 @@ private ISymbianSDK sdk; private List sbsv2FilteredConetxts = new ArrayList(); private boolean wasScanned = false; - private Map> cachedPlatformMacros = new HashMap>(); + private Map> cachedPlatformMacros = new HashMap>(); private Map aliasToMeaningMap = new HashMap(); private List productList = null; @@ -145,7 +147,7 @@ String configQueryXML = ""; try { - configQueryXML = SBSv2QueryUtils.getConfigQueryXML(sdk, newContextsToQuery); + configQueryXML = SBSv2QueryUtils.getConfigQueryXMLforSDK(sdk, newContextsToQuery); } catch (SBSv2MinimumVersionException e) { // ignore, previous exception would have caught the error } @@ -154,7 +156,8 @@ if (aliasToMeaningMap.get(alias) == null){ continue; // This alias is not valid with this SDK, ignore } - ISBSv2BuildContext sbsv2Context = new BuildContextSBSv2(sdk, alias, aliasToMeaningMap.get(alias), configQueryXML); + ISBSv2ConfigQueryData configQueryData = new SBSv2ConfigQueryData(aliasToMeaningMap.get(alias), configQueryXML); + ISBSv2BuildContext sbsv2Context = new BuildContextSBSv2(sdk, alias, configQueryData); sbsv2FilteredConetxts.add(sbsv2Context); } @@ -186,21 +189,20 @@ } } - String configQueryXML = SBSv2QueryUtils.getConfigQueryXML(sdk, - filteredAliasList); + String configQueryXML = SBSv2QueryUtils.getConfigQueryXMLforSDK(sdk, filteredAliasList); for (String alias : filteredAliasList) { String meaning = ""; if (alias.contains(".")){ meaning = getMeaningForVariant(alias); - if (meaning == null){ - continue; // TODO: How to handle this scenaio - } } else { meaning = aliasToMeaningMap.get(alias); } - ISBSv2BuildContext sbsv2Context = new BuildContextSBSv2(sdk, alias, - meaning, configQueryXML); + if (meaning == null){ + continue; // TODO: How to handle this scenario + } + ISBSv2ConfigQueryData configQueryData = new SBSv2ConfigQueryData(meaning, configQueryXML); + ISBSv2BuildContext sbsv2Context = new BuildContextSBSv2(sdk, alias, configQueryData); sbsv2FilteredConetxts.add(sbsv2Context); } } @@ -220,10 +222,10 @@ return meaning; } - public List getPlatformMacros(String platform) { - List platformMacros = cachedPlatformMacros.get(platform.toUpperCase()); + public Map getPlatformMacros(String platform) { + Map platformMacros = cachedPlatformMacros.get(platform.toUpperCase()); if (platformMacros == null) { - platformMacros = new ArrayList(); + platformMacros = new HashMap(); synchronized (cachedPlatformMacros) { if (sbsv2FilteredConetxts == null || sbsv2FilteredConetxts.size() == 0) { getFilteredBuildConfigurations(); @@ -231,12 +233,8 @@ if (sbsv2FilteredConetxts.size() > 0) { for (ISymbianBuildContext context : sbsv2FilteredConetxts) { if (context.getPlatformString().equalsIgnoreCase(platform)) { - List macros = ((ISBSv2BuildContext)context).getMetaDataMacros(); - for (String macro : macros) { - if (!platformMacros.contains(macro)) { - platformMacros.add(macro); - } - } + platformMacros.putAll(((ISBSv2BuildContext)context).getConfigQueryData().getBuildMacros()); + platformMacros.putAll(((ISBSv2BuildContext)context).getConfigQueryData().getMetaDataMacros()); } } cachedPlatformMacros.put(platform.toUpperCase(), platformMacros); @@ -257,7 +255,7 @@ } if (sbsv2FilteredConetxts.size() > 0) { for (ISymbianBuildContext context : sbsv2FilteredConetxts) { - String vStr = ((ISBSv2BuildContext)context).getmetaDataVariantHRH(); + String vStr = ((ISBSv2BuildContext)context).getConfigQueryData().getMetaDataVariantHRH(); if (vStr != null) { cachedVariantHRHFile = new Path(vStr); break; diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SDKManager.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SDKManager.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SDKManager.java Thu Jul 01 16:36:11 2010 -0500 @@ -356,27 +356,23 @@ e.printStackTrace(); } - if (localSDKList.size() != sdkList.size()){ - needsRescan = true; - } else { - for (ISymbianSDK sdk : localSDKList){ - ISymbianSDK currSDK = getSDK(sdk.getUniqueId(), false); - if (currSDK == null){ - // sdk id has been changed - needsRescan = true; - break; - } - // check that the data are the same. - // Other than the 'id' attrib, all we really care is whether or not - // the EPOCROOT or vendor 'name' has changed. - if (!sdk.getEPOCROOT().equalsIgnoreCase(currSDK.getEPOCROOT())){ - needsRescan = true; - break; - } - if (!sdk.getName().equalsIgnoreCase(currSDK.getName())){ - needsRescan = true; - break; - } + for (ISymbianSDK sdk : localSDKList){ + ISymbianSDK currSDK = getSDK(sdk.getUniqueId(), false); + if (currSDK == null){ + // sdk id has been changed + needsRescan = true; + break; + } + // check that the data are the same. + // Other than the 'id' attrib, all we really care is whether or not + // the EPOCROOT or vendor 'name' has changed. + if (!sdk.getEPOCROOT().equalsIgnoreCase(currSDK.getEPOCROOT())){ + needsRescan = true; + break; + } + if (!sdk.getName().equalsIgnoreCase(currSDK.getName())){ + needsRescan = true; + break; } } diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISBSv2BuildContext.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISBSv2BuildContext.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISBSv2BuildContext.java Thu Jul 01 16:36:11 2010 -0500 @@ -1,6 +1,5 @@ package com.nokia.carbide.cpp.sdk.core; -import java.util.List; public interface ISBSv2BuildContext extends ISymbianBuildContext { @@ -29,9 +28,5 @@ */ public String getDefaultDefFileDirectoryName(); - public String getConfigurationErrorMessage(); - - public List getMetaDataMacros(); - - public String getmetaDataVariantHRH(); + public ISBSv2ConfigQueryData getConfigQueryData(); } diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISBSv2ConfigQueryData.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISBSv2ConfigQueryData.java Thu Jul 01 16:36:11 2010 -0500 @@ -0,0 +1,14 @@ +package com.nokia.carbide.cpp.sdk.core; + +import java.util.List; +import java.util.Map; + +public interface ISBSv2ConfigQueryData { + public String getBuildPrefix(); + public Map getBuildMacros(); + public String getConfigurationErrorMessage(); + public Map getMetaDataMacros(); + public List getMetaDataIncludes(); + public String getMetaDataVariantHRH(); + public String getOutputPathString(); +} diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/SDKCorePlugin.java --- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/SDKCorePlugin.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/SDKCorePlugin.java Thu Jul 01 16:36:11 2010 -0500 @@ -12,12 +12,15 @@ */ package com.nokia.carbide.cpp.sdk.core; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Plugin; import org.osgi.framework.BundleContext; import com.nokia.carbide.cpp.internal.sdk.core.model.SDKManager; import com.nokia.carbide.cpp.internal.sdk.core.model.SDKManagerRaptorOnly; import com.nokia.cpp.internal.api.utils.core.HostOS; +import com.nokia.cpp.internal.api.utils.core.CacheUtils; /** @@ -31,11 +34,15 @@ // The plug-in ID public static final String PLUGIN_ID = "com.nokia.carbide.cpp.sdk.core"; //$NON-NLS-1$ + public static final String CACHE_FOLDER_NAME = "CarbideSDKCache"; //$NON-NLS-1$ + // The shared instance private static SDKCorePlugin plugin; private static ISDKManager sdkManager; + private static CacheUtils cache; + /** * The constructor */ @@ -56,6 +63,12 @@ * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { + try { + if (cache != null) + cache.flushAll(); + } catch (Exception e) { + e.printStackTrace(); + } plugin = null; super.stop(context); } @@ -89,4 +102,17 @@ return sdkManager; } + /** + * Get the persistent cache this plugin. + * @return PersistentCache instance + */ + public static CacheUtils getCache() { + if (cache == null) + { + IPath path = new Path(System.getProperty("user.home")); + cache = new CacheUtils(path.append(CACHE_FOLDER_NAME)); + } + return cache; + } + } diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/BuildTargetTreeNode.java --- a/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/BuildTargetTreeNode.java Mon Jun 28 10:14:24 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/BuildTargetTreeNode.java Thu Jul 01 16:36:11 2010 -0500 @@ -75,8 +75,9 @@ String newDisplayString = context.getDisplayString().replace("[" + sdkId + "]", ""); if (context instanceof ISBSv2BuildContext){ ISBSv2BuildContext v2Context = (ISBSv2BuildContext)context; - if (v2Context.getConfigurationErrorMessage() != null && v2Context.getConfigurationErrorMessage().length() > 0){ - newDisplayString += " ERROR: " + v2Context.getConfigurationErrorMessage(); + if (v2Context.getConfigQueryData().getConfigurationErrorMessage() != null && + v2Context.getConfigQueryData().getConfigurationErrorMessage().length() > 0){ + newDisplayString += " ERROR: " + v2Context.getConfigQueryData().getConfigurationErrorMessage(); } } return newDisplayString; diff -r a0d518fc91ea -r 508bfdb3a934 core/com.nokia.cpp.utils.core/src/com/nokia/cpp/internal/api/utils/core/CacheUtils.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.cpp.utils.core/src/com/nokia/cpp/internal/api/utils/core/CacheUtils.java Thu Jul 01 16:36:11 2010 -0500 @@ -0,0 +1,179 @@ +/******************************************************************************* + * Copyright (c) 2010 Nokia and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Nokia - Initial API and implementation + *******************************************************************************/ + +package com.nokia.cpp.internal.api.utils.core; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.io.Serializable; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.runtime.IPath; + +import com.nokia.cpp.utils.core.noexport.UtilsCorePlugin; + +public class CacheUtils { + + private class CacheEntry { + + private String identifier; + private long freshness; + private Serializable data; + private IPath location; + + public CacheEntry(String identifier, Serializable data, long freshness) { + this.identifier = identifier; + this.freshness = freshness; + this.data = data; + this.location = getDefaultLocation().append(Integer.toString(identifier.hashCode())).addFileExtension("txt");; + } + + public CacheEntry(ObjectInputStream ois) throws Exception { + this.identifier = (String) ois.readObject(); + this.freshness = (Long) ois.readObject(); + this.data = (Serializable) ois.readObject(); + this.location = getDefaultLocation().append(Integer.toString(identifier.hashCode())).addFileExtension("txt");; + } + + public IPath getLocation() { + return location; + } + + @SuppressWarnings("unchecked") + private T getData(Class expectedClass) { + if (expectedClass.isInstance(data)) + return (T) data; + else + return null; + } + + private long getFreshness() { + return freshness; + } + + private void flush() throws Exception { + File cacheFile = getLocation().toFile(); + if (!cacheFile.exists()) { + cacheFile.getParentFile().mkdirs(); + cacheFile.createNewFile(); + } + FileOutputStream fos = new FileOutputStream(cacheFile); + ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(identifier); + oos.writeObject(freshness); + oos.writeObject(data); + fos.close(); + } + + public void delete() { + File cacheFile = getLocation().toFile(); + if (cacheFile.exists()) { + cacheFile.delete(); + } + } + + } + + private Map caches = Collections.synchronizedMap(new HashMap()); + private IPath defaultLocation; + + public CacheUtils(IPath defaultLocation) { + this.defaultLocation = defaultLocation; + } + + public CacheEntry getCache(String identifier) { + CacheEntry result = caches.get(identifier); + return result; + } + + public void removeCache(String identifier) { + caches.remove(identifier); + } + + public T getCachedData(String cacheIdentifier, Class expectedClass, long freshness) { + // freshness = 0; + CacheEntry cache = caches.get(cacheIdentifier); + + if (cache == null) + cache = loadCachedData(getDefaultLocation(), cacheIdentifier); + + if (cache != null) { + long cachedFreshness = cache.getFreshness(); + T result = cache.getData(expectedClass); + if (cachedFreshness == freshness && result != null) + { + return result; + } + else + { + caches.remove(cache); + cache.delete(); + } + } + return null; + } + + private CacheEntry loadCachedData(IPath location, String cacheIdentifier) { + IPath flushPath = location.append(Integer.toString(cacheIdentifier.hashCode())).addFileExtension("txt"); + + if (flushPath.toFile().exists()) { + try { + final ClassLoader classLoader = UtilsCorePlugin.getDefault().getClass().getClassLoader(); + FileInputStream fis = new FileInputStream(flushPath.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) { + + @Override + protected Class resolveClass(ObjectStreamClass desc) + throws IOException, ClassNotFoundException { + String name = desc.getName(); + try { + return classLoader.loadClass(name); + } catch (ClassNotFoundException e) { + return super.resolveClass(desc); + } + }}; + return new CacheEntry(ois); + } catch (Exception e) {} + } + + return null; + } + + public void putCachedData(String cacheIdentifier, Serializable data, long freshness) { + CacheEntry cache = new CacheEntry(cacheIdentifier, data, freshness); + caches.put(cacheIdentifier, cache); + } + + public void flushAll() throws Exception { + Collection allCaches = caches.values(); + for (CacheEntry entry : allCaches) { + entry.flush(); + } + caches.clear(); + } + + public IPath getDefaultLocation() { + return defaultLocation; + } + + public void setDefaultLocation(IPath defaultLocation) { + this.defaultLocation = defaultLocation; + } + +}