From: Timo Mueller <timo.muel...@bmw-carit.de> Yocto preferences are now stored using a user-defined name that identifies a target profile. To store these preferences eclipse' scoped preferences provider is used. The filename in the eclipse configuration area is derived from the unique target profile name.
Signed-off-by: Timo Mueller <timo.muel...@bmw-carit.de> --- .../src/org/yocto/sdk/ide/YoctoSDKPlugin.java | 9 ++++ .../org/yocto/sdk/ide/YoctoSDKProjectNature.java | 10 ++-- .../src/org/yocto/sdk/ide/YoctoSDKUtils.java | 60 +++++++++++++++++----- .../sdk/ide/preferences/PreferenceConstants.java | 4 ++ .../sdk/ide/preferences/PreferenceInitializer.java | 22 ++++---- .../ide/preferences/YoctoSDKPreferencePage.java | 36 ++++--------- .../preferences/YoctoSDKProjectPropertyPage.java | 4 +- .../sdk/ide/wizard/NewYoctoCProjectTemplate.java | 7 ++- 8 files changed, 99 insertions(+), 53 deletions(-) diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKPlugin.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKPlugin.java index b0b5447..9777396 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKPlugin.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKPlugin.java @@ -16,9 +16,12 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.preferences.ScopedPreferenceStore; import org.osgi.framework.BundleContext; /** @@ -65,6 +68,12 @@ public class YoctoSDKPlugin extends AbstractUIPlugin { return plugin; } + public static IPreferenceStore getProfilePreferenceStore(String profileName) { + int profileIdentifier = profileName.hashCode(); + + return new ScopedPreferenceStore(InstanceScope.INSTANCE,getUniqueIdentifier() + "." + profileIdentifier); + } + public static void log(IStatus status) { ResourcesPlugin.getPlugin().getLog().log(status); } diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKProjectNature.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKProjectNature.java index ec49dcc..6f16732 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKProjectNature.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKProjectNature.java @@ -18,10 +18,13 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; import java.util.StringTokenizer; + import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants; +import org.eclipse.cdt.internal.autotools.core.configure.AutotoolsConfigurationManager; +import org.eclipse.cdt.internal.autotools.core.configure.IAConfiguration; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; @@ -34,8 +37,7 @@ import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.cdt.internal.autotools.core.configure.AutotoolsConfigurationManager; -import org.eclipse.cdt.internal.autotools.core.configure.IAConfiguration; +import org.eclipse.jface.preference.IPreferenceStore; import org.yocto.sdk.ide.YoctoSDKUtils.SDKCheckRequestFrom; @@ -151,7 +153,9 @@ public class YoctoSDKProjectNature implements IProjectNature { } public static void configureAutotools(IProject project) throws YoctoGeneralException { - YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(); + YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore(); + IPreferenceStore selecteProfileStore = YoctoSDKPlugin.getProfilePreferenceStore(profileElement.getSelectedProfile()); + YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(selecteProfileStore); YoctoSDKUtils.SDKCheckResults result = YoctoSDKUtils.checkYoctoSDK(elem); if (result != YoctoSDKUtils.SDKCheckResults.SDK_PASS){ String strErrorMsg = YoctoSDKUtils.getErrorMessage(result, SDKCheckRequestFrom.Wizard); diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java index ab969ea..12af7e3 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKUtils.java @@ -7,6 +7,7 @@ * * Contributors: * Intel - initial API and implementation + * BMW Car IT - add methods to use different preference stores *******************************************************************************/ package org.yocto.sdk.ide; @@ -16,7 +17,6 @@ import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Iterator; @@ -38,6 +38,7 @@ import org.eclipse.jface.preference.IPreferenceStore; import org.yocto.sdk.ide.preferences.PreferenceConstants; public class YoctoSDKUtils { + public static enum SDKCheckResults { SDK_PASS, POKY_DEVICE_EMPTY, @@ -396,7 +397,7 @@ public class YoctoSDKUtils { } - /* Load project wide POKY Preference settings into YoctoUIElement */ + /* Get POKY Preference settings from project's environment */ public static YoctoUIElement getElemFromProjectEnv(IProject project) { YoctoUIElement elem = new YoctoUIElement(); @@ -422,7 +423,7 @@ public class YoctoSDKUtils { return elem; } - /* Save YoctoUIElement to project settings */ + /* Save POKY Preference settings to project's environment */ public static void saveElemToProjectEnv(YoctoUIElement elem, IProject project) { ConsoleOutputStream consoleOutStream = null; @@ -461,11 +462,15 @@ public class YoctoSDKUtils { } } - /* Load IDE wide POKY Preference settings into Preference Store */ - public static void saveElemToStore(YoctoUIElement elem) + /* Save IDE wide POKY Preference settings to the default preference store */ + public static void saveElemToDefaultStore(YoctoUIElement elem) { - IPreferenceStore store= YoctoSDKPlugin.getDefault().getPreferenceStore(); + saveElemToStore(elem, YoctoSDKPlugin.getDefault().getPreferenceStore()); + } + /* Save IDE wide POKY Preference settings to a specific preference store */ + public static void saveElemToStore(YoctoUIElement elem, IPreferenceStore store) + { store.setValue(PreferenceConstants.TARGET_ARCH_INDEX, elem.getIntTargetIndex()); if (elem.getEnumPokyMode() == YoctoUIElement.PokyMode.POKY_SDK_MODE) store.setValue(PreferenceConstants.SDK_MODE, IPreferenceStore.TRUE); @@ -482,10 +487,14 @@ public class YoctoSDKUtils { store.setValue(PreferenceConstants.TOOLCHAIN_TRIPLET, elem.getStrTarget()); } - /* Load IDE wide POKY Preference settings into YoctoUIElement */ - public static YoctoUIElement getElemFromStore() + /* Get IDE wide POKY Preference settings from the default preference store */ + public static YoctoUIElement getElemFromDefaultStore() { - IPreferenceStore store = YoctoSDKPlugin.getDefault().getPreferenceStore(); + return getElemFromStore(YoctoSDKPlugin.getDefault().getPreferenceStore()); + } + + /* Get IDE wide POKY Preference settings from a specific preference store */ + public static YoctoUIElement getElemFromStore(IPreferenceStore store) { YoctoUIElement elem = new YoctoUIElement(); if (store.getString(PreferenceConstants.SDK_MODE).equals(IPreferenceStore.TRUE)) elem.setEnumPokyMode(YoctoUIElement.PokyMode.POKY_SDK_MODE); @@ -507,8 +516,8 @@ public class YoctoSDKUtils { return elem; } - /* Load default IDE wide POKY Preference settings into YoctoUIElement */ - public static YoctoUIElement getDefaultElemFromStore() + /* Get default POKY Preference settings from the default preference store */ + public static YoctoUIElement getDefaultElemFromDefaultStore() { IPreferenceStore store = YoctoSDKPlugin.getDefault().getPreferenceStore(); YoctoUIElement elem = new YoctoUIElement(); @@ -674,4 +683,31 @@ public class YoctoSDKUtils { } return arch; } -} \ No newline at end of file + + /* Save profiles and selected profile to the default preference store */ + public static void saveProfilesToDefaultStore(YoctoProfileElement profileElement) { + saveProfilesToStore(profileElement, YoctoSDKPlugin.getDefault().getPreferenceStore()); + } + + /* Save profiles and selected profile to a specific preference store */ + public static void saveProfilesToStore(YoctoProfileElement profileElement, IPreferenceStore store) + { + store.setValue(PreferenceConstants.PROFILES, profileElement.getProfilesAsString()); + store.setValue(PreferenceConstants.SELECTED_PROFILE, profileElement.getSelectedProfile()); + } + + /* Get profiles and selected profile from the default preference store */ + public static YoctoProfileElement getProfilesFromDefaultStore() + { + return getProfilesFromStore(YoctoSDKPlugin.getDefault().getPreferenceStore()); + } + + /* Get profiles and selected profile from a specific preference store */ + public static YoctoProfileElement getProfilesFromStore(IPreferenceStore store) + { + String profiles = store.getString(PreferenceConstants.PROFILES); + String selectedProfile = store.getString(PreferenceConstants.SELECTED_PROFILE); + + return new YoctoProfileElement(profiles, selectedProfile); + } +} diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java index d6ca41f..814397a 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceConstants.java @@ -34,4 +34,8 @@ public class PreferenceConstants { public static final String IP_ADDR = "IPAddr"; public static final String STANDARD_PROFILE_NAME = "Standard Profile"; + + public static final String PROFILES = "profiles"; + + public static final String SELECTED_PROFILE = "selectedProfile"; } diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java index 33c7117..40f37d0 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/PreferenceInitializer.java @@ -15,6 +15,8 @@ import org.eclipse.jface.preference.IPreferenceStore; import org.yocto.sdk.ide.YoctoSDKPlugin; +import static org.yocto.sdk.ide.preferences.PreferenceConstants.*; + /** * Class used to initialize default preference values. */ @@ -26,15 +28,17 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer { */ public void initializeDefaultPreferences() { IPreferenceStore store = YoctoSDKPlugin.getDefault().getPreferenceStore(); - store.setDefault(PreferenceConstants.TOOLCHAIN_ROOT, ""); - store.setDefault(PreferenceConstants.SDK_MODE, true); - store.setDefault(PreferenceConstants.TARGET_MODE, false); - store.setDefault(PreferenceConstants.TARGET_ARCH_INDEX, -1); - store.setDefault(PreferenceConstants.IP_ADDR, ""); - store.setDefault(PreferenceConstants.QEMU_KERNEL, ""); - store.setDefault(PreferenceConstants.QEMU_OPTION, ""); - store.setDefault(PreferenceConstants.SYSROOT, ""); - store.setDefault(PreferenceConstants.TOOLCHAIN_TRIPLET, ""); + store.setDefault(TOOLCHAIN_ROOT, ""); + store.setDefault(SDK_MODE, true); + store.setDefault(TARGET_MODE, false); + store.setDefault(TARGET_ARCH_INDEX, -1); + store.setDefault(IP_ADDR, ""); + store.setDefault(QEMU_KERNEL, ""); + store.setDefault(QEMU_OPTION, ""); + store.setDefault(SYSROOT, ""); + store.setDefault(TOOLCHAIN_TRIPLET, ""); + store.setDefault(PROFILES, "\"" + STANDARD_PROFILE_NAME + "\""); + store.setDefault(SELECTED_PROFILE, STANDARD_PROFILE_NAME); } } diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java index d1c1a72..64c9968 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKPreferencePage.java @@ -10,32 +10,20 @@ *******************************************************************************/ package org.yocto.sdk.ide.preferences; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; - import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; - +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; import org.yocto.sdk.ide.YoctoGeneralException; -import org.yocto.sdk.ide.YoctoSDKUtils; import org.yocto.sdk.ide.YoctoSDKPlugin; +import org.yocto.sdk.ide.YoctoSDKUtils; import org.yocto.sdk.ide.YoctoSDKUtils.SDKCheckRequestFrom; - import org.yocto.sdk.ide.YoctoUIElement; import org.yocto.sdk.ide.YoctoUISetting; -import java.util.ArrayList; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Text; - - - public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private YoctoUISetting yoctoUISetting; @@ -44,7 +32,7 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench //super(GRID); setPreferenceStore(YoctoSDKPlugin.getDefault().getPreferenceStore()); //setDescription(YoctoSDKMessages.getString(PREFERENCES_Yocto_CONFIG)); - YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(); + YoctoUIElement elem = YoctoSDKUtils.getElemFromDefaultStore(); this.yoctoUISetting = new YoctoUISetting(elem); } @@ -74,30 +62,26 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench * @see IPreferencePage#performOk() */ public boolean performOk() { - - try { yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, true); YoctoUIElement elem = yoctoUISetting.getCurrentInput(); - YoctoSDKUtils.saveElemToStore(elem); + YoctoSDKUtils.saveElemToDefaultStore(elem); return super.performOk(); } catch (YoctoGeneralException e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); return false; - } + } } /* * @see PreferencePage#performDefaults() */ protected void performDefaults() { - YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromStore(); + YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore(); yoctoUISetting.setCurrentInput(defaultElement); super.performDefaults(); } - - } diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java index f2247ca..56cc4cb 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/preferences/YoctoSDKProjectPropertyPage.java @@ -74,7 +74,7 @@ public class YoctoSDKProjectPropertyPage extends PropertyPage implements || uiElement.getStrTarget().isEmpty()) { // No project environment has been set yet, use the Preference // values - uiElement = YoctoSDKUtils.getElemFromStore(); + uiElement = YoctoSDKUtils.getElemFromDefaultStore(); } return uiElement; @@ -85,7 +85,7 @@ public class YoctoSDKProjectPropertyPage extends PropertyPage implements */ @Override protected void performDefaults() { - YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromStore(); + YoctoUIElement defaultElement = YoctoSDKUtils.getDefaultElemFromDefaultStore(); yoctoUISetting.setCurrentInput(defaultElement); super.performDefaults(); } diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java index ec241aa..7c02f87 100644 --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java @@ -40,8 +40,11 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.cdt.autotools.core.AutotoolsNewProjectNature; import org.eclipse.cdt.internal.autotools.core.configure.AutotoolsConfigurationManager; +import org.eclipse.jface.preference.IPreferenceStore; import org.yocto.sdk.ide.YoctoGeneralException; +import org.yocto.sdk.ide.YoctoProfileElement; import org.yocto.sdk.ide.YoctoSDKEmptyProjectNature; +import org.yocto.sdk.ide.YoctoSDKPlugin; import org.yocto.sdk.ide.YoctoSDKProjectNature; import org.yocto.sdk.ide.YoctoSDKUtils; import org.yocto.sdk.ide.YoctoUIElement; @@ -114,7 +117,9 @@ public class NewYoctoCProjectTemplate extends ProcessRunner { IWorkspace workspace = ResourcesPlugin.getWorkspace(); turnOffAutoBuild(workspace); - YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(); + YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore(); + IPreferenceStore selecteProfileStore = YoctoSDKPlugin.getProfilePreferenceStore(profileElement.getSelectedProfile()); + YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(selecteProfileStore); YoctoSDKUtils.SDKCheckResults result = YoctoSDKUtils.checkYoctoSDK(elem); if (result != YoctoSDKUtils.SDKCheckResults.SDK_PASS){ String strErrorMsg = YoctoSDKUtils.getErrorMessage(result, SDKCheckRequestFrom.Wizard); -- 1.7.11.7 _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto