[yocto] [RFC v1 4/5] plugins/sdk.ide: Update projects affected by changes of a target profile
Timo Mueller
mail at timomueller.eu
Fri Feb 8 05:28:19 PST 2013
From: Timo Mueller <timo.mueller at bmw-carit.de>
If a target profile is modified, renamed or deleted globally the
projects using this profile are updated accordingly.
On deletion of a target profile the affected projects will set use the
standard target profile.
Signed-off-by: Timo Mueller <timo.mueller at bmw-carit.de>
---
.../org/yocto/sdk/ide/YoctoSDKMessages.properties | 2 +-
.../ide/preferences/YoctoSDKPreferencePage.java | 91 +++++++++++++++++++++-
2 files changed, 89 insertions(+), 4 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 bfdde41..e779f7d 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
@@ -60,7 +60,7 @@ Preferences.Profile.Rename.Dialog.Title = Rename target profile
Preferences.Profile.Rename.Dialog.Message = Please input a new profile name.
Preferences.Profile.Remove.Title = Remove
Preferences.Profile.Remove.Dialog.Title = Remove target profile
-Preferences.Profile.Remove.Dialog.Message = Do you really want to the remove the target profile "{0}"?
+Preferences.Profile.Remove.Dialog.Message = Do you really want to the remove the target profile "{0}"?\nProjects using this target profile will be reconfigured to use the standard profile.
Preferences.Profile.Standard.Modification.Title = Modify standard target profile
Preferences.Profile.Standard.Modification.Message = Standard target 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 fb015ab..b5963cf 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,6 +10,11 @@
*******************************************************************************/
package org.yocto.sdk.ide.preferences;
+import java.util.HashSet;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.InputDialog;
@@ -25,6 +30,7 @@ import org.yocto.sdk.ide.YoctoProfileElement;
import org.yocto.sdk.ide.YoctoProfileSetting;
import org.yocto.sdk.ide.YoctoSDKMessages;
import org.yocto.sdk.ide.YoctoSDKPlugin;
+import org.yocto.sdk.ide.YoctoSDKProjectNature;
import org.yocto.sdk.ide.YoctoSDKUtils;
import org.yocto.sdk.ide.YoctoSDKUtils.SDKCheckRequestFrom;
import org.yocto.sdk.ide.YoctoUIElement;
@@ -80,8 +86,8 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench
System.out.println(e.getMessage());
return result;
}
-
}
+
/*
* @see IPreferencePage#performOk()
*/
@@ -95,6 +101,8 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench
YoctoProfileElement profileElement = yoctoProfileSetting.getCurrentInput();
YoctoSDKUtils.saveProfilesToDefaultStore(profileElement);
+ updateAffectedProjects(profileElement.getSelectedProfile(), elem);
+
return super.performOk();
} catch (YoctoGeneralException e) {
// TODO Auto-generated catch block
@@ -151,9 +159,86 @@ public class YoctoSDKPreferencePage extends PreferencePage implements IWorkbench
public void renameProfile(String oldProfileName, String newProfileName) {
YoctoUIElement oldProfileElement = YoctoSDKUtils.getElemFromStore(YoctoSDKPlugin.getProfilePreferenceStore(oldProfileName));
YoctoSDKUtils.saveElemToStore(oldProfileElement, YoctoSDKPlugin.getProfilePreferenceStore(newProfileName));
+
+ renameProfileInAffectedProjects(oldProfileName, newProfileName);
+ }
+
+ public void deleteProfile(String selectedProfile)
+ {
+ resetProfileInAffectedProjects(selectedProfile);
}
- public void deleteProfile(String selectedProfile) {
- // do nothing
+ private void resetProfileInAffectedProjects(String usedProfile)
+ {
+ HashSet<IProject> yoctoProjects = getAffectedProjects(usedProfile);
+ YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore();
+ profileElement.setSelectedProfile(PreferenceConstants.STANDARD_PROFILE_NAME);
+
+ for (IProject project : yoctoProjects)
+ {
+ YoctoSDKUtils.saveProfilesToProjectPreferences(profileElement, project);
+ YoctoUIElement elem = YoctoSDKUtils.getElemFromStore(
+ YoctoSDKPlugin.getProfilePreferenceStore(PreferenceConstants.STANDARD_PROFILE_NAME));
+ YoctoSDKUtils.saveElemToProjectEnv(elem, project);
+ }
+ }
+
+ private void renameProfileInAffectedProjects(String oldProfileName, String newProfileName) {
+ HashSet<IProject> yoctoProjects = getAffectedProjects(oldProfileName);
+ YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromDefaultStore();
+ profileElement.setSelectedProfile(newProfileName);
+
+ for (IProject project : yoctoProjects)
+ {
+ YoctoSDKUtils.saveProfilesToProjectPreferences(profileElement, project);
+ }
+ }
+
+ private void updateAffectedProjects(String usedProfile, YoctoUIElement elem) {
+ HashSet<IProject> yoctoProjects = getAffectedProjects(usedProfile);
+
+ for (IProject project : yoctoProjects)
+ {
+ YoctoSDKUtils.saveElemToProjectEnv(elem, project);
+ }
+ }
+
+ private HashSet<IProject> getAffectedProjects(String usedProfile)
+ {
+ HashSet<IProject> yoctoProjects = new HashSet<IProject>();
+
+ IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+
+ for (IProject project : projects)
+ {
+ try
+ {
+ if (!project.hasNature(YoctoSDKProjectNature.YoctoSDK_NATURE_ID)) {
+ continue;
+ }
+ } catch (CoreException e)
+ {
+ // project is closed or does not exist so don't update
+ continue;
+ }
+
+ if (!projectUsesProfile(project, usedProfile)) {
+ continue;
+ }
+
+ yoctoProjects.add(project);
+ }
+ return yoctoProjects;
+ }
+
+ private boolean projectUsesProfile(IProject project, String profile)
+ {
+ YoctoProfileElement profileElement = YoctoSDKUtils.getProfilesFromProjectPreferences(project);
+
+ if (!profileElement.getSelectedProfile().equals(profile)) {
+ return false;
+ }
+
+ return true;
}
}
--
1.7.11.7
More information about the yocto
mailing list