# HG changeset patch # User timkelly # Date 1277148428 18000 # Node ID 31f428aec716883d658343f13367737b6448e123 # Parent 9dcfd25090a5601fa6a5d3e4956d4c8607d328dd add initial support for viewing variants in the sdk config tree. refactor some code which initializes sbsv2 contexts. some hacks added for re-loading configurations when the default config is a variant. diff -r 9dcfd25090a5 -r 31f428aec716 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 21 12:08:54 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/api/builder/CarbideConfigurationDataProvider.java Mon Jun 21 14:27:08 2010 -0500 @@ -251,7 +251,6 @@ } } - return null; } diff -r 9dcfd25090a5 -r 31f428aec716 builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectInfo.java --- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectInfo.java Mon Jun 21 12:08:54 2010 -0500 +++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectInfo.java Mon Jun 21 14:27:08 2010 -0500 @@ -24,6 +24,7 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; +import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; @@ -302,6 +303,13 @@ ICConfigurationDescription config = projectDescription.getActiveConfiguration(); if (config != null) { CConfigurationData data = config.getConfigurationData(); + if (data == null){ + // TODO: HACK. FOR REASONS I DON'T GET RIGHT NOW, IF I CREATE A VARIANT AND SAVE IT'S + // OK. BUT IF I CLOSE AND RE-OPEN THE PROJECT THE DEFAULT CONFIG DATA IS NOT LOADED. + // SO JUST LOAD THE FIRST IN THE LIST. THIS NEEDS TO BE ADDRESSED. + ICConfigurationDescription[] config2 = projectDescription.getConfigurations(); + data = config2[0].getConfigurationData(); + } if (data instanceof BuildConfigurationData) { return ((BuildConfigurationData)data).getConfiguration(); } diff -r 9dcfd25090a5 -r 31f428aec716 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 21 12:08:54 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SBSv2BuildInfo.java Mon Jun 21 14:27:08 2010 -0500 @@ -19,6 +19,7 @@ import java.io.Reader; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,6 +54,7 @@ private Map> cachedPlatformMacros = new HashMap>(); private Map aliasToMeaningMap = new HashMap(); + private List productList = null; public SBSv2BuildInfo(ISymbianSDK sdk) { this.sdk = sdk; @@ -66,14 +68,14 @@ @Override public List getAllBuildConfigurations() { - // TODO: Will get rid of this. Only filtered configs will apply + // TODO: Will get rid of this method. Only filtered configs will apply return sbsv2FilteredConetxts; } @Override public List getFilteredBuildConfigurations() { - if (aliasToMeaningMap.size() == 0) + if (aliasToMeaningMap.size() == 0){ try { aliasToMeaningMap = SBSv2QueryUtils.getAliasesForSDK(sdk); } catch (SBSv2MinimumVersionException e) { @@ -81,96 +83,139 @@ Logging.newSimpleStatus(0, IStatus.ERROR, MessageFormat.format(e.getMessage(), ""), e)); } + } - List allowedConfigs = SBSv2Utils.getSBSv2FilteredConfigPreferences(); // From global prefs + if (productList == null){ + // Not all SDKs will have products, so size of 0 is acceptable + productList = new ArrayList(); + try { + productList = SBSv2QueryUtils.getProductVariantsForSDK(sdk); + } catch (SBSv2MinimumVersionException e) { + // ignore + } + } + List allowedConfigs = SBSv2Utils.getSBSv2FilteredConfigPreferences(); // From global prefs if ((sbsv2FilteredConetxts == null || sbsv2FilteredConetxts.size() == 0) && SBSv2Utils.enableSBSv2Support()){ - //////// TODO Refactor this block to sub routine - // First time to be scanned so create a new list based on what we allow - // from the global prefs + try { + initSBSv2BuildContextList(allowedConfigs); + } catch (SBSv2MinimumVersionException e) { + // igore, would be caught above + } + } else if (SBSv2Utils.enableSBSv2Support()){ -// if (!(new File(sdk.getEPOCROOT()).exists())){ -// return sbsv2FilteredConetxts; -// } - - List filteredAliasList = new ArrayList(); - - for (String alias : aliasToMeaningMap.keySet()){ - for (String checkedAlias : allowedConfigs){ - if (checkedAlias.equalsIgnoreCase(alias)){ - filteredAliasList.add(alias); - break; - } + try { + updateSBSv2BuildContextList(allowedConfigs); + } catch (SBSv2MinimumVersionException e) { + // igore, would be caught above + } + } + + + return sbsv2FilteredConetxts; + } + + private void updateSBSv2BuildContextList(List allowedConfigs) throws SBSv2MinimumVersionException { + + // Check and see if the filtered list has changed + boolean contextExists = false; + List newContextsToQuery = new ArrayList(); + for (String aliasName : allowedConfigs){ + for (ISymbianBuildContext context : sbsv2FilteredConetxts){ + ISBSv2BuildContext sbsv2Context = (ISBSv2BuildContext)context; + if (sbsv2Context.getSBSv2Alias().equals(aliasName)){ + contextExists = true; + continue; } } - - String configQueryXML; - try { - configQueryXML = SBSv2QueryUtils.getConfigQueryXML(sdk, filteredAliasList); - - for (String alias : filteredAliasList){ - ISBSv2BuildContext sbsv2Context = new BuildContextSBSv2(sdk, alias, aliasToMeaningMap.get(alias), configQueryXML); - sbsv2FilteredConetxts.add(sbsv2Context); - } - } catch (SBSv2MinimumVersionException e) { - // ignore, previous exception would have caught the error + if (!contextExists){ + newContextsToQuery.add(aliasName); } - - } else if (SBSv2Utils.enableSBSv2Support()){ - // TODO: Refactor to subroutine - ////////////////////////////////////////////////////// - // Check and see if the filtered list has changed - ////////////////////////////////////////////////////// - boolean contextExists = false; - List newContextsToQuery = new ArrayList(); - for (String aliasName : allowedConfigs){ - for (ISymbianBuildContext context : sbsv2FilteredConetxts){ - ISBSv2BuildContext sbsv2Context = (ISBSv2BuildContext)context; - if (sbsv2Context.getSBSv2Alias().equals(aliasName)){ - contextExists = true; - continue; - } - } - if (!contextExists){ - newContextsToQuery.add(aliasName); - } - contextExists = false; - } - - String configQueryXML = ""; - try { - configQueryXML = SBSv2QueryUtils.getConfigQueryXML(sdk, newContextsToQuery); - } catch (SBSv2MinimumVersionException e) { - // ignore, previous exception would have caught the error - } - for (String alias : newContextsToQuery){ - // TODO: Need to test for variants. Right now variants are not added - 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); - sbsv2FilteredConetxts.add(sbsv2Context); - } - + contextExists = false; } - // Now we need to remove any configs that should not be present per filtering preferences - List contextsToReturn = new ArrayList(); - for (ISymbianBuildContext currentContext : sbsv2FilteredConetxts){ - for (String alias : allowedConfigs){ - if (alias.equals(((ISBSv2BuildContext)currentContext).getSBSv2Alias())){ - contextsToReturn.add(currentContext); + String configQueryXML = ""; + try { + configQueryXML = SBSv2QueryUtils.getConfigQueryXML(sdk, newContextsToQuery); + } catch (SBSv2MinimumVersionException e) { + // ignore, previous exception would have caught the error + } + for (String alias : newContextsToQuery){ + // TODO: Need to test for variants. Right now variants are not added + 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); + sbsv2FilteredConetxts.add(sbsv2Context); + } + + } + + private void initSBSv2BuildContextList(List allowedConfigs) throws SBSv2MinimumVersionException { + List filteredAliasList = new ArrayList(); + + for (String alias : aliasToMeaningMap.keySet()){ + for (String checkedAlias : allowedConfigs){ + if (checkedAlias.equalsIgnoreCase(alias)){ + filteredAliasList.add(alias); + break; } } } - return contextsToReturn; + if (productList != null && productList.size() > 0){ + for (String testConfig : allowedConfigs) { + if (testConfig.contains(".")){ + String tokens[] = testConfig.split("\\."); + for (String tok : tokens){ + if (productList.contains(tok)){ + filteredAliasList.add(testConfig); + break; + } + } + } + } + } + + String configQueryXML = SBSv2QueryUtils.getConfigQueryXML(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); + sbsv2FilteredConetxts.add(sbsv2Context); + } + } + + private String getMeaningForVariant(String alias) { + String meaning = null; + + // TODO: Assuming now that the alias now is the first part and the last bits are the variant bits. + String tokens[] = alias.split("\\."); + if (tokens.length > 0){ + meaning = aliasToMeaningMap.get(tokens[0]); + for (int i = 1; i < tokens.length; i++){ + meaning += "." + tokens[i]; + } + } + + return meaning; } public List getPlatformMacros(String platform) { // TODO: Need to get from Raptor Query - // TODO: Are these the metadata macros or compiler macros? + // TODO: Are these the metadata macros or compiler macros? I presume these are the metadata macros + // but double check on how the CPP macros are applied (e.g. adding '__" prefix to the name. List platformMacros = cachedPlatformMacros.get(platform.toUpperCase()); if (platformMacros == null) { synchronized (cachedPlatformMacros) { diff -r 9dcfd25090a5 -r 31f428aec716 core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/BuildPlatformFilterPage.java --- a/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/BuildPlatformFilterPage.java Mon Jun 21 12:08:54 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/BuildPlatformFilterPage.java Mon Jun 21 14:27:08 2010 -0500 @@ -38,7 +38,6 @@ SBSv1PlatformFilterComposite sbsv1Tab; SBSv2PlatformFilterComposite sbsv2Tab; - SBSv2ConfigManager sbsConfigManagerTab; public BuildPlatformFilterPage() { super(); @@ -62,18 +61,6 @@ sbsv2Tab = new SBSv2PlatformFilterComposite(tabFolder); sbsv2Tab.createControls(); sbsv2TabItem.setControl(sbsv2Tab); - - // TODO: We will likely remove this suggested approach - // which means removing the SBSv2PlatformFilterComposite page too -// // New SBS config manager, to replace SBSv2PlatformFilterComposite -// TabItem sbsConfigMgrItem = new TabItem(tabFolder, SWT.NONE); -// sbsConfigMgrItem.setText("SBS Configuration Manager"); //$NON-NLS-1$ -// sbsConfigMgrItem.setToolTipText("TODO"); //$NON-NLS-1$ -// -// sbsConfigManagerTab = new SBSv2ConfigManager(tabFolder); -// sbsConfigManagerTab.createControls(); -// sbsConfigMgrItem.setControl(sbsConfigManagerTab); - } if (SBSv2Utils.enableSBSv1Support()) { diff -r 9dcfd25090a5 -r 31f428aec716 core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/SBSv2ConfigManager.java --- a/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/SBSv2ConfigManager.java Mon Jun 21 12:08:54 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,259 +0,0 @@ -package com.nokia.carbide.cpp.internal.api.sdk.ui; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.CellEditor; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ColumnViewer; -import org.eclipse.jface.viewers.EditingSupport; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Text; - -import com.nokia.carbide.cpp.internal.api.sdk.BuildContextSBSv2; -import com.nokia.carbide.cpp.sdk.core.ISBSv2BuildContext; -import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; -import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; -import com.nokia.carbide.cpp.ui.TextAndDialogCellEditor; -import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils; - -public class SBSv2ConfigManager extends Composite { - - private CheckboxTableViewer sbsConfigTableViewer; - private List sbsContexts; - List globalBuildAliasList = new ArrayList(); - List globalProductList = new ArrayList(); - List sbsBuildContexts = new ArrayList(); - - private class SBSv2BuildContextLabelProvider extends LabelProvider implements ITableLabelProvider { - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - public String getColumnText(Object element, int columnIndex) { - ISBSv2BuildContext buildContext = (ISBSv2BuildContext) element; - switch (columnIndex) { - case 1: - return buildContext.getSBSv2Alias(); - case 2: - return buildContext.getBuildVariationName(); - case 3: - return buildContext.getDisplayString(); - default: - return ""; - } - } - } - - private class BuildAliasEditingSupport extends EditingSupport { - private BuildAliasCellEditor editor; - - public BuildAliasEditingSupport(ColumnViewer viewer) { - super(viewer); - editor = new BuildAliasCellEditor((Composite) viewer.getControl()); - } - - @Override - protected boolean canEdit(Object element) { - if (element instanceof ISBSv2BuildContext) { - return true; - } - return false; - } - - @Override - protected CellEditor getCellEditor(Object element) { - return editor; - } - - @Override - protected Object getValue(Object element) { - ISBSv2BuildContext context = (ISBSv2BuildContext) element; - return context.getSBSv2Alias(); - } - - @Override - protected void setValue(Object element, Object value) { - if (value == null) - return; - - ISBSv2BuildContext context = (ISBSv2BuildContext) element; - - // TODO: Use real data. Here we can find an existing build context that works, or create a new one if a variant was applied - // We would need to run the query here to fill out extra params - String alias = value.toString(); - String aliasTokens[] = alias.split("_"); - String platform = aliasTokens[0].toUpperCase(); - String target = aliasTokens[1].toUpperCase(); - String displayName = platform + " " + target; - String configID = ISBSv2BuildContext.BUILDER_ID + "." + value.toString() + "." + context.getSDK().getUniqueId(); - ISBSv2BuildContext newContext = new BuildContextSBSv2(context.getSDK(), platform, target, alias, displayName, configID); - - if (contextExists(newContext)){ - return; - } - - // TODO: Handle edit and store data if alias changes - sbsBuildContexts.add(newContext); - sbsBuildContexts.remove(sbsBuildContexts.indexOf(context)); - addBuildConfigurationTableItems(); - getViewer().refresh(); - } - - private boolean contextExists(ISBSv2BuildContext context) { - for (ISBSv2BuildContext prefContext : sbsBuildContexts){ - if (prefContext.equals(context)){ - return true; - } - } - return false; - } - } - - private class BuildAliasCellEditor extends TextAndDialogCellEditor { - private Button button; - private Text text; - - public BuildAliasCellEditor(Composite parent) { - super(parent); - } - - @Override - protected Control createControl(Composite parent) { - Control control = super.createControl(parent); - button = getButton(); - button.setText("..."); //$NON-NLS-1$ - return control; - } - - @Override - protected Object openDialogBox(Control cellEditorWindow) { - DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN); - BrowseDialogUtils.initializeFrom(dialog, text); - return dialog.open(); - } - } - - public SBSv2ConfigManager(Composite parent) { - super(parent, SWT.NONE); - } - - public void createControls() { - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 2; - setLayout(gridLayout); - - initData(); - - sbsConfigTableViewer = CheckboxTableViewer.newCheckList(this, - SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); - createSBSConfigTable(); - - addBuildConfigurationTableItems(); - } - - private void initData() { - - ////////////////////TODO: DUMMY DATA. GET FROM RAPTOR QUERY - globalBuildAliasList.add("armv5_udeb"); - globalBuildAliasList.add("armv5_urel"); - globalBuildAliasList.add("winscw_udeb"); - globalBuildAliasList.add("winscw_urel"); - globalBuildAliasList.add("tools2_deb"); - globalBuildAliasList.add("tools2_rel"); - ///////////////////// - - /////// TODO: DUMMY SBSv2 BUILD CONTEXTS FOR TABLE - ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDKList().get(0); - - ISBSv2BuildContext testContext = new BuildContextSBSv2(sdk, "ARMV5", "DEBUG", "arvm5_udeb", "ARMV5 Debug", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb." + sdk.getUniqueId()); - sbsBuildContexts.add(testContext); - - testContext = new BuildContextSBSv2(sdk, "ARMV5", "Release", "arvm5_urel", "ARMV5 Release", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb." + sdk.getUniqueId()); - sbsBuildContexts.add(testContext); - - testContext = new BuildContextSBSv2(sdk, "ARMV5", "Release", "arvm5_urel_gcce", "ARMV5 Release", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb_gcce." + sdk.getUniqueId()); - sbsBuildContexts.add(testContext); - - testContext = new BuildContextSBSv2(sdk, "ARMV5", "Release", "arvm5_urel_gcce", "ARMV5 Release", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb_gcce." + sdk.getUniqueId()); - sbsBuildContexts.add(testContext); - - testContext = new BuildContextSBSv2(sdk, "WINSCW", "Release", "winscw_urel", "WINSCW Release", ISBSv2BuildContext.BUILDER_ID + ".winscw_urel." + sdk.getUniqueId()); - sbsBuildContexts.add(testContext); - - testContext = new BuildContextSBSv2(sdk, "WINSCW", "Debug", "winsw_udeb", "WINSCW Debug", ISBSv2BuildContext.BUILDER_ID + ".winscw_udeb." + sdk.getUniqueId()); - sbsBuildContexts.add(testContext); - - - - - } - - private void createSBSConfigTable() { - final Table table = sbsConfigTableViewer.getTable(); - GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false); - gridData.widthHint = 425; - gridData.heightHint = table.getItemHeight() * 10; - table.setLayoutData(gridData); - table.setHeaderVisible(true); - table.setLinesVisible(false); - - - TableViewerColumn enabledCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT); - enabledCol.getColumn().setText("Enabled"); //$NON-NLS-1$ - enabledCol.getColumn().setWidth(50); - - TableViewerColumn aliasCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT); - aliasCol.setEditingSupport(new BuildAliasEditingSupport(sbsConfigTableViewer)); //$NON-NLS-1$ - aliasCol.getColumn().setText("SBS Configuration"); - aliasCol.getColumn().setWidth(160); - - TableViewerColumn variantCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT); - //aliasCol.setEditingSupport(new IdEditingSupport(sbsConfigTableViewer)); //$NON-NLS-1$ - variantCol.getColumn().setText("Product Variant"); - variantCol.getColumn().setWidth(120); - - TableViewerColumn displaNameCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT); - //aliasCol.setEditingSupport(new IdEditingSupport(sbsConfigTableViewer)); //$NON-NLS-1$ - displaNameCol.getColumn().setText("Display Name"); - displaNameCol.getColumn().setWidth(160); - - } - - private void addBuildConfigurationTableItems() { - sbsConfigTableViewer.setLabelProvider(new SBSv2BuildContextLabelProvider()); - sbsConfigTableViewer.setContentProvider(new ArrayContentProvider()); - sbsContexts = getGlobalSBSContexts(); - sbsConfigTableViewer.setInput(sbsContexts.toArray()); - sbsConfigTableViewer.getTable().setToolTipText("TODO Tooltip"); //$NON-NLS-1$ - setCheckedElements(); -// addSDKTableViewerListeners(); - if (sbsContexts == null || sbsContexts.size() == 0){ -// statusError(Messages.getString("SDKPreferencePage.No_SDKs_Available_Message")); //$NON-NLS-1$ - } - } - - // TODO: Get context list from SDKManager for SBSv2 - private List getGlobalSBSContexts() { - - return sbsBuildContexts; - } - - private void setCheckedElements() { - // TODO Auto-generated method stub - - } - -}