Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2012-01-11 11:59:30 +0000
committerIgor Fedorenko2012-01-11 11:59:30 +0000
commitd3e1297520427f139d1f054dbe27c6effdfe05fc (patch)
tree51f902374768ad8fb088b2d5ce6700a339269375 /org.eclipse.m2e.core.ui
parent789b8b46e299d19ac29fdce62c52cd6e72a456dd (diff)
downloadm2e-core-d3e1297520427f139d1f054dbe27c6effdfe05fc.tar.gz
m2e-core-d3e1297520427f139d1f054dbe27c6effdfe05fc.tar.xz
m2e-core-d3e1297520427f139d1f054dbe27c6effdfe05fc.zip
367547 refactored and moved update logic to ProjectConfigurationManager
Moved project refresh/update/rebuild logic from UI UpdateMavenProjectJob a new method of ProjectConfigurationManager. For now the new method is discouraged, but the plan is to promote it to API. Refactored update project implementation to first refresh all projects, then update configuration of all projects, then to clean all projects. This will ensure that each update step operates on the most up-to-date project information and configuration and should better support cases when update configuration is used to recover from out-of-sync project registry. Removed broken suppot for workspace !autobuilding. The proper support should behave similarly to how Project->Clean... dialog works, i.e. provide UI checkbox to run build job after clean. Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.core.ui')
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java2
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/UpdateMavenProjectJob.java90
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/UpdateMavenProjectAction.java2
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/UpdateMavenProjectsDialog.java16
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties4
5 files changed, 40 insertions, 74 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java
index 36aa4aac..53967744 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java
@@ -824,7 +824,7 @@ public class Messages extends NLS {
public static String UpdateMavenProjectDialog_btnUpdateProjectConfiguration_text;
- public static String UpdateMavenProjectDialog_btnCleanFullBuild_text;
+ public static String UpdateMavenProjectDialog_btnCleanProjects_text;
public static String LifecycleMappingPropertyPage_mntmShowIgnoredExecutions_text;
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/UpdateMavenProjectJob.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/UpdateMavenProjectJob.java
index b40e869e..1cbd50d9 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/UpdateMavenProjectJob.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/UpdateMavenProjectJob.java
@@ -11,37 +11,29 @@
package org.eclipse.m2e.core.ui.internal;
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
-import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.progress.IProgressConstants;
import org.eclipse.m2e.core.MavenPlugin;
-import org.eclipse.m2e.core.project.IMavenProjectRegistry;
-import org.eclipse.m2e.core.project.IProjectConfigurationManager;
+import org.eclipse.m2e.core.internal.project.ProjectConfigurationManager;
import org.eclipse.m2e.core.project.MavenUpdateRequest;
import org.eclipse.m2e.core.ui.internal.actions.OpenMavenConsoleAction;
import org.eclipse.m2e.core.ui.internal.util.M2EUIUtils;
+@SuppressWarnings("restriction")
public class UpdateMavenProjectJob extends WorkspaceJob {
- private static final Logger log = LoggerFactory.getLogger(UpdateMavenProjectJob.class);
private final IProject[] projects;
@@ -51,7 +43,7 @@ public class UpdateMavenProjectJob extends WorkspaceJob {
private final boolean updateConfiguration;
- private final boolean rebuild;
+ private final boolean cleanProjects;
public UpdateMavenProjectJob(IProject[] projects) {
this(projects, MavenPlugin.getMavenConfiguration().isOffline(), false /*forceUpdateDependencies*/,
@@ -59,7 +51,7 @@ public class UpdateMavenProjectJob extends WorkspaceJob {
}
public UpdateMavenProjectJob(IProject[] projects, boolean offline, boolean forceUpdateDependencies,
- boolean updateConfiguration, boolean rebuild) {
+ boolean updateConfiguration, boolean cleanProjects) {
super(Messages.UpdateSourcesAction_job_update_conf);
@@ -67,70 +59,44 @@ public class UpdateMavenProjectJob extends WorkspaceJob {
this.offline = offline;
this.forceUpdateDependencies = forceUpdateDependencies;
this.updateConfiguration = updateConfiguration;
- this.rebuild = rebuild;
+ this.cleanProjects = cleanProjects;
setRule(MavenPlugin.getProjectConfigurationManager().getRule());
}
public IStatus runInWorkspace(IProgressMonitor monitor) {
- IProjectConfigurationManager configurationManager = MavenPlugin.getProjectConfigurationManager();
- IMavenProjectRegistry projectRegistry = MavenPlugin.getMavenProjectRegistry();
- boolean autoBuilding = ResourcesPlugin.getWorkspace().isAutoBuilding();
+ ProjectConfigurationManager configurationManager = (ProjectConfigurationManager) MavenPlugin
+ .getProjectConfigurationManager();
setProperty(IProgressConstants.ACTION_PROPERTY, new OpenMavenConsoleAction());
- monitor.beginTask(getName(), projects.length);
- long l1 = System.currentTimeMillis();
- log.info("Update started"); //$NON-NLS-1$
+ MavenUpdateRequest request = new MavenUpdateRequest(projects, offline, forceUpdateDependencies);
+ Map<String, IStatus> updateStatus = configurationManager.updateProjectConfiguration(request, updateConfiguration,
+ cleanProjects, monitor);
- MultiStatus status = null;
- //project names to the errors encountered when updating them
- Map<String, Throwable> updateErrors = new HashMap<String, Throwable>();
+ Map<String, Throwable> errorMap = new LinkedHashMap<String, Throwable>();
+ ArrayList<IStatus> errors = new ArrayList<IStatus>();
- for(IProject project : projects) {
- if(monitor.isCanceled()) {
- throw new OperationCanceledException();
+ for(Map.Entry<String, IStatus> entry : updateStatus.entrySet()) {
+ if(!entry.getValue().isOK()) {
+ errors.add(entry.getValue());
+ errorMap.put(entry.getKey(), new CoreException(entry.getValue()));
}
+ }
- monitor.subTask(project.getName());
- SubProgressMonitor submonitor = new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
-
- try {
- MavenUpdateRequest request = new MavenUpdateRequest(project, offline, forceUpdateDependencies);
- if(updateConfiguration) {
- configurationManager.updateProjectConfiguration(request, submonitor);
- } else {
- projectRegistry.refresh(request, submonitor);
- }
- // only rebuild projects that were successfully updated
- if(rebuild) {
- project.build(IncrementalProjectBuilder.CLEAN_BUILD, submonitor);
- if(autoBuilding) {
- // TODO this is not enough, in most cases we need to re-run the build several times
- project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, submonitor);
- }
- }
- } catch(CoreException ex) {
- if(status == null) {
- status = new MultiStatus(M2EUIPluginActivator.PLUGIN_ID, IStatus.ERROR, //
- Messages.UpdateSourcesAction_error_cannot_update, null);
- }
- status.add(ex.getStatus());
- updateErrors.put(project.getName(), ex);
- } catch(IllegalArgumentException e) {
- status = new MultiStatus(M2EUIPluginActivator.PLUGIN_ID, IStatus.ERROR, //
- Messages.UpdateSourcesAction_error_cannot_update, null);
- updateErrors.put(project.getName(), e);
- }
+ if(errorMap.size() > 0) {
+ handleErrors(errorMap);
}
- if(updateErrors.size() > 0) {
- handleErrors(updateErrors);
+ IStatus status = Status.OK_STATUS;
+ if(errors.size() == 1) {
+ status = errors.get(0);
+ } else {
+ status = new MultiStatus(M2EUIPluginActivator.PLUGIN_ID, -1, errors.toArray(new IStatus[errors.size()]),
+ Messages.UpdateSourcesAction_error_cannot_update, null);
}
- long l2 = System.currentTimeMillis();
- log.info(NLS.bind("Update completed: {0} sec", ((l2 - l1) / 1000))); //$NON-NLS-1$
- return status != null ? status : Status.OK_STATUS;
+ return status;
}
private void handleErrors(final Map<String, Throwable> updateErrors) {
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/UpdateMavenProjectAction.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/UpdateMavenProjectAction.java
index 12c317f1..5e019bea 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/UpdateMavenProjectAction.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/UpdateMavenProjectAction.java
@@ -29,7 +29,7 @@ public class UpdateMavenProjectAction extends MavenProjectActionSupport {
UpdateMavenProjectsDialog dialog = new UpdateMavenProjectsDialog(getShell(), getProjects());
if(dialog.open() == Window.OK) {
new UpdateMavenProjectJob(dialog.getSelectedProjects(), dialog.isOffline(), dialog.isForceUpdateDependencies(),
- dialog.isUpdateConfiguration(), dialog.isRebuild()).schedule();
+ dialog.isUpdateConfiguration(), dialog.isCleanProjects()).schedule();
}
}
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/UpdateMavenProjectsDialog.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/UpdateMavenProjectsDialog.java
index 263666be..89906c69 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/UpdateMavenProjectsDialog.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/UpdateMavenProjectsDialog.java
@@ -97,7 +97,7 @@ public class UpdateMavenProjectsDialog extends TitleAreaDialog implements IMenuL
/**
* Perform full/clean build after project update
*/
- private boolean rebuild;
+ private boolean cleanProjects;
protected String dialogTitle;
@@ -314,9 +314,9 @@ public class UpdateMavenProjectsDialog extends TitleAreaDialog implements IMenuL
btnUpdateProjectConfiguration.setSelection(true);
btnUpdateProjectConfiguration.setText(Messages.UpdateMavenProjectDialog_btnUpdateProjectConfiguration_text);
- btnCleanFullBuild = new Button(optionsComposite, SWT.CHECK);
- btnCleanFullBuild.setSelection(true);
- btnCleanFullBuild.setText(Messages.UpdateMavenProjectDialog_btnCleanFullBuild_text);
+ btnCleanProjects = new Button(optionsComposite, SWT.CHECK);
+ btnCleanProjects.setSelection(true);
+ btnCleanProjects.setText(Messages.UpdateMavenProjectDialog_btnCleanProjects_text);
setTitle(getDialogTitle());
setMessage(getDialogMessage());
@@ -346,7 +346,7 @@ public class UpdateMavenProjectsDialog extends TitleAreaDialog implements IMenuL
offlineMode = offlineModeBtn.getSelection();
forceUpdateDependencies = forceUpdateBtn.getSelection();
updateConfiguration = btnUpdateProjectConfiguration.getSelection();
- rebuild = btnCleanFullBuild.getSelection();
+ cleanProjects = btnCleanProjects.getSelection();
super.okPressed();
}
@@ -408,8 +408,8 @@ public class UpdateMavenProjectsDialog extends TitleAreaDialog implements IMenuL
return updateConfiguration;
}
- public boolean isRebuild() {
- return rebuild;
+ public boolean isCleanProjects() {
+ return cleanProjects;
}
private IProject getProject(String path) {
@@ -467,7 +467,7 @@ public class UpdateMavenProjectsDialog extends TitleAreaDialog implements IMenuL
private Button btnUpdateProjectConfiguration;
- private Button btnCleanFullBuild;
+ private Button btnCleanProjects;
/**
* @return Returns the dialogTitle or an empty String if the value is null.
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties
index 8df02127..b8522ffc 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties
@@ -1,5 +1,5 @@
#Eclipse modern messages class
-#Sun Jan 01 11:21:53 EST 2012
+#Tue Jan 10 20:42:30 EST 2012
AddDependencyAction_error_msg=Can't add dependency to {0}
AddDependencyAction_error_title=Add Dependency
AddDependencyAction_searchDialog_title=Add Dependency
@@ -301,7 +301,7 @@ UpdateDepenciesDialog_offline=&Offline
UpdateDepenciesDialog_selectAll=&Select All
UpdateDepenciesDialog_selectTree=Select Tree
UpdateMavenProjectDialog_btnCheckButton_text=Update dependencies
-UpdateMavenProjectDialog_btnCleanFullBuild_text=Clean build
+UpdateMavenProjectDialog_btnCleanProjects_text=Clean projects
UpdateMavenProjectDialog_btnUpdateProjectConfiguration_text=Update project configuration from pom.xml
UpdateMavenProjectDialog_dialogMessage=Select Maven projects and update options
UpdateMavenProjectDialog_title=Update Maven Project

Back to the top