[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