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.
--- 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;
}
--- 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();
}
--- 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<String, List<String>> cachedPlatformMacros = new HashMap<String, List<String>>();
private Map<String, String> aliasToMeaningMap = new HashMap<String, String>();
+ private List<String> productList = null;
public SBSv2BuildInfo(ISymbianSDK sdk) {
this.sdk = sdk;
@@ -66,14 +68,14 @@
@Override
public List<ISymbianBuildContext> 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<ISymbianBuildContext> 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<String> allowedConfigs = SBSv2Utils.getSBSv2FilteredConfigPreferences(); // From global prefs
+ if (productList == null){
+ // Not all SDKs will have products, so size of 0 is acceptable
+ productList = new ArrayList<String>();
+ try {
+ productList = SBSv2QueryUtils.getProductVariantsForSDK(sdk);
+ } catch (SBSv2MinimumVersionException e) {
+ // ignore
+ }
+ }
+ List<String> 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<String> filteredAliasList = new ArrayList<String>();
-
- 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<String> allowedConfigs) throws SBSv2MinimumVersionException {
+
+ // Check and see if the filtered list has changed
+ boolean contextExists = false;
+ List<String> newContextsToQuery = new ArrayList<String>();
+ 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<String> newContextsToQuery = new ArrayList<String>();
- 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<ISymbianBuildContext> contextsToReturn = new ArrayList<ISymbianBuildContext>();
- 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<String> allowedConfigs) throws SBSv2MinimumVersionException {
+ List<String> filteredAliasList = new ArrayList<String>();
+
+ 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<String> 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<String> platformMacros = cachedPlatformMacros.get(platform.toUpperCase());
if (platformMacros == null) {
synchronized (cachedPlatformMacros) {
--- 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()) {
--- 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<ISBSv2BuildContext> sbsContexts;
- List<String> globalBuildAliasList = new ArrayList<String>();
- List<String> globalProductList = new ArrayList<String>();
- List<ISBSv2BuildContext> sbsBuildContexts = new ArrayList<ISBSv2BuildContext>();
-
- 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<ISBSv2BuildContext> getGlobalSBSContexts() {
-
- return sbsBuildContexts;
- }
-
- private void setCheckedElements() {
- // TODO Auto-generated method stub
-
- }
-
-}