diff options
author | Igor Fedorenko | 2012-01-11 11:59:30 +0000 |
---|---|---|
committer | Igor Fedorenko | 2012-01-11 11:59:30 +0000 |
commit | d3e1297520427f139d1f054dbe27c6effdfe05fc (patch) | |
tree | 51f902374768ad8fb088b2d5ce6700a339269375 /org.eclipse.m2e.core.ui | |
parent | 789b8b46e299d19ac29fdce62c52cd6e72a456dd (diff) | |
download | m2e-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')
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 |