[yocto] [PATCH 5/5] plugin/sdk.ide: Update projects on profile update

Timo Mueller mail at timomueller.eu
Tue Feb 26 05:49:22 PST 2013


From: Timo Mueller <timo.mueller at bmw-carit.de>

If a cross development profile is changed that is used by projects,
the user will be warned that these projects will also be changed. If
the user accepts the affected projects are updated and are marked
"dirty". Next time the projects are built a reconfigure will also be
triggered.

Signed-off-by: Timo Mueller <timo.mueller at bmw-carit.de>
---
 .../org/yocto/sdk/ide/YoctoSDKMessages.properties  |  2 ++
 .../ide/preferences/YoctoSDKPreferencePage.java    | 32 +++++++++++++++++-----
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties
index 0323d1c..e5748f7 100644
--- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties
+++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/YoctoSDKMessages.properties
@@ -61,6 +61,8 @@ Preferences.Profile.Rename.Dialog.Message = Please input a new profile name.
 Preferences.Profile.Remove.Title = Remove
 Preferences.Profile.Remove.Dialog.Title = Remove cross development profile
 Preferences.Profile.Remove.Dialog.Message = Do you really want to the remove the cross development profile "{0}"?\nProjects using this cross development profile will be reconfigured to use the standard profile.
+Preferences.Profile.Update.Dialog.Title = Update cross development profile
+Preferences.Profile.Update.Dialog.Message = Do you really want to the update the cross development profile "{0}"?\nProjects using this cross development profile will be reconfigured.
 Preferences.Profile.Standard.Modification.Title = Modify standard cross development profile
 Preferences.Profile.Standard.Modification.Message = Standard cross development profile cannot be removed or renamed.
 
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 b5963cf..4d57b45 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
@@ -18,6 +18,7 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.swt.SWT;
@@ -40,6 +41,8 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench
 
 	private static final String NEW_DIALOG_TITLE = "Preferences.Profile.New.Dialog.Title";
 	private static final String NEW_DIALOG_MESSAGE = "Preferences.Profile.New.Dialog.Message";
+	private static final String UPDATE_DIALOG_TITLE = "Preferences.Profile.Update.Dialog.Title";
+	private static final String UPDATE_DIALOG_MESSAGE = "Preferences.Profile.Update.Dialog.Message";
 
 	private YoctoProfileSetting yoctoProfileSetting;
 	private YoctoUISetting yoctoUISetting;
@@ -93,15 +96,32 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench
 	 */
 	public boolean performOk() {
 		try {
-			yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, true);
+			yoctoUISetting.validateInput(SDKCheckRequestFrom.Preferences, false);
+
+			YoctoUIElement savedElement = YoctoSDKUtils.getElemFromStore(getPreferenceStore());
+			YoctoUIElement modifiedElement = yoctoUISetting.getCurrentInput();
 
-			YoctoUIElement elem = yoctoUISetting.getCurrentInput();
-			YoctoSDKUtils.saveElemToStore(elem, getPreferenceStore());
+			if (savedElement.equals(modifiedElement)) {
+				return true;
+			}
 
 			YoctoProfileElement profileElement = yoctoProfileSetting.getCurrentInput();
+			HashSet<IProject> yoctoProjects = getAffectedProjects(profileElement.getSelectedProfile());
+
+			if (!yoctoProjects.isEmpty()) {
+				boolean deleteConfirmed =
+						MessageDialog.openConfirm(null, YoctoSDKMessages.getString(UPDATE_DIALOG_TITLE),
+								YoctoSDKMessages.getFormattedString(UPDATE_DIALOG_MESSAGE, profileElement.getSelectedProfile()));
+
+				if (!deleteConfirmed) {
+					return false;
+				}
+			}
+
+			YoctoSDKUtils.saveElemToStore(modifiedElement, getPreferenceStore());
 			YoctoSDKUtils.saveProfilesToDefaultStore(profileElement);
 
-			updateAffectedProjects(profileElement.getSelectedProfile(), elem);
+			updateProjects(yoctoProjects, modifiedElement);
 
 			return super.performOk();
 		} catch (YoctoGeneralException e) {
@@ -194,9 +214,7 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench
 		}
 	}
 
-	private void updateAffectedProjects(String usedProfile, YoctoUIElement elem) {
-		HashSet<IProject> yoctoProjects = getAffectedProjects(usedProfile);
-
+	private void updateProjects(HashSet<IProject> yoctoProjects, YoctoUIElement elem) {
 		for (IProject project : yoctoProjects)
 		{
 			YoctoSDKUtils.saveElemToProjectEnv(elem, project);
-- 
1.7.11.7




More information about the yocto mailing list