[yocto] [RFC v2 07/18] plugins/sdk.ide: Modified preferences storage to support profiles.
Timo Mueller
mail at timomueller.eu
Wed Jan 30 05:56:23 PST 2013
From: Timo Mueller <timo.mueller at 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.mueller at 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
More information about the yocto
mailing list