diff options
author | Fred Bricon | 2015-02-14 00:41:09 +0000 |
---|---|---|
committer | Fred Bricon | 2015-02-19 22:40:21 +0000 |
commit | d61eb55886b0b3829ccd946b692b5d1536e85610 (patch) | |
tree | d7895133a7a06376df46848aec510f323f66268e | |
parent | 432370256a099978714d7c0b29c9c20eb3cc2ed6 (diff) | |
download | m2e-core-d61eb55886b0b3829ccd946b692b5d1536e85610.tar.gz m2e-core-d61eb55886b0b3829ccd946b692b5d1536e85610.tar.xz m2e-core-d61eb55886b0b3829ccd946b692b5d1536e85610.zip |
459046 : trigger LM discovery on project creation
Change-Id: Ie79a73cddd9c50711a24388e4f89f0d77a76367f
Signed-off-by: Fred Bricon <fbricon@gmail.com>
4 files changed, 108 insertions, 73 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/AbstractCreateMavenProjectJob.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/AbstractCreateMavenProjectJob.java index 4ebd8565..7fa1afc2 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/AbstractCreateMavenProjectJob.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/AbstractCreateMavenProjectJob.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008-2010 Sonatype, Inc. + * Copyright (c) 2008-2015 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -13,6 +13,7 @@ package org.eclipse.m2e.core.ui.internal.wizards; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IProject; @@ -32,6 +33,8 @@ public abstract class AbstractCreateMavenProjectJob extends WorkspaceJob { private final List<IWorkingSet> workingSets; + private List<IProject> createdProjects; + public AbstractCreateMavenProjectJob(String name, List<IWorkingSet> workingSets) { super(name); this.workingSets = workingSets; @@ -40,6 +43,7 @@ public abstract class AbstractCreateMavenProjectJob extends WorkspaceJob { @Override public final IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { setProperty(IProgressConstants.ACTION_PROPERTY, new OpenMavenConsoleAction()); + createdProjects = null; AbstractCreateMavenProjectsOperation op = new AbstractCreateMavenProjectsOperation(workingSets) { @Override protected List<IProject> doCreateMavenProjects(IProgressMonitor monitor) throws CoreException { @@ -48,6 +52,10 @@ public abstract class AbstractCreateMavenProjectJob extends WorkspaceJob { }; try { op.run(monitor); + List<IProject> projects = op.getCreatedProjects(); + if(projects != null) { + createdProjects = Collections.unmodifiableList(projects); + } } catch(InvocationTargetException e) { return AbstractCreateMavenProjectsOperation.toStatus(e); } catch(InterruptedException e) { @@ -62,4 +70,11 @@ public abstract class AbstractCreateMavenProjectJob extends WorkspaceJob { return AbstractCreateMavenProjectsOperation.toProjects(results); } + /** + * @return an unmodifiable list of created projects, or <code>null</code> + * @since 1.6 + */ + public List<IProject> getCreatedProjects() { + return createdProjects; + } } diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/ImportMavenProjectsJob.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/ImportMavenProjectsJob.java index 9c42c5c4..aa2852e3 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/ImportMavenProjectsJob.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/ImportMavenProjectsJob.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010-2013 Sonatype, Inc. and others. + * Copyright (c) 2010-2015 Sonatype, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -23,14 +23,9 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.PlatformUI; import org.eclipse.m2e.core.MavenPlugin; -import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.LifecycleMappingDiscoveryRequest; import org.eclipse.m2e.core.project.IMavenProjectImportResult; import org.eclipse.m2e.core.project.MavenProjectInfo; import org.eclipse.m2e.core.project.ProjectImportConfiguration; @@ -81,27 +76,8 @@ public class ImportMavenProjectsJob extends WorkspaceJob { try { importOperation.run(monitor); List<IProject> createdProjects = importOperation.getCreatedProjects(); - //Detect and resolve Lifecycle Mapping issues - LifecycleMappingDiscoveryRequest discoveryRequest = LifecycleMappingDiscoveryHelper - .createLifecycleMappingDiscoveryRequest(createdProjects, monitor); - if(discoveryRequest.isMappingComplete()) { - return Status.OK_STATUS; - } - //LifecycleMappingHelper will discover proposals only if discovery service is available - LifecycleMappingDiscoveryHelper.discoverProposals(discoveryRequest, monitor); - final MavenDiscoveryProposalWizard proposalWizard = new MavenDiscoveryProposalWizard(createdProjects, - discoveryRequest); - proposalWizard.init(null, null); - //Some errors were detected - - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - final IWorkbench workbench = PlatformUI.getWorkbench(); - WizardDialog dialog = new WizardDialog(workbench.getActiveWorkbenchWindow().getShell(), proposalWizard); - dialog.open(); - } - }); + MappingDiscoveryJob discoveryJob = new MappingDiscoveryJob(createdProjects); + discoveryJob.schedule(); } catch(InvocationTargetException e) { return AbstractCreateMavenProjectsOperation.toStatus(e); } catch(InterruptedException e) { diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MappingDiscoveryJob.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MappingDiscoveryJob.java new file mode 100644 index 00000000..b03ec3d2 --- /dev/null +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MappingDiscoveryJob.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2010-2015 Sonatype, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Sonatype, Inc. - initial API and implementation + * Fred Bricon (Red Hat Inc.)-extracted mapping discovery to workspace job + *******************************************************************************/ + +package org.eclipse.m2e.core.ui.internal.wizards; + +import java.util.Collection; + +import org.eclipse.core.resources.IProject; +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.Status; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.PlatformUI; + +import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.LifecycleMappingDiscoveryRequest; + + +/** + * Lifecycle Mapping Discovery Job + * + * @author Fred Bricon + * @since 1.6.0 + */ +public class MappingDiscoveryJob extends WorkspaceJob { + + private Collection<IProject> projects; + + public MappingDiscoveryJob(Collection<IProject> projects) { + super("Discover lifecycle mappings"); + this.projects = projects; + + } + + public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { + //Detect and resolve Lifecycle Mapping issues + LifecycleMappingDiscoveryRequest discoveryRequest = LifecycleMappingDiscoveryHelper + .createLifecycleMappingDiscoveryRequest(projects, monitor); + if(discoveryRequest.isMappingComplete()) { + return Status.OK_STATUS; + } + //Some errors were detected + discoverProposals(discoveryRequest, monitor); + + openProposalWizard(projects, discoveryRequest); + + return Status.OK_STATUS; + } + + protected void discoverProposals(LifecycleMappingDiscoveryRequest discoveryRequest, IProgressMonitor monitor) + throws CoreException { + //LifecycleMappingHelper will discover proposals only if discovery service is available + LifecycleMappingDiscoveryHelper.discoverProposals(discoveryRequest, monitor); + } + + protected void openProposalWizard(Collection<IProject> projects, LifecycleMappingDiscoveryRequest discoveryRequest) { + + final MavenDiscoveryProposalWizard proposalWizard = new MavenDiscoveryProposalWizard(projects, discoveryRequest); + proposalWizard.init(null, null); + + Display.getDefault().asyncExec(new Runnable() { + @Override + public void run() { + final IWorkbench workbench = PlatformUI.getWorkbench(); + WizardDialog dialog = new WizardDialog(workbench.getActiveWorkbenchWindow().getShell(), proposalWizard); + dialog.open(); + } + }); + } + +} diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenProjectWizard.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenProjectWizard.java index 685fa7d5..b04e75de 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenProjectWizard.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenProjectWizard.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008-2010 Sonatype, Inc. + * Copyright (c) 2008-2015 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -24,7 +24,6 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -213,7 +212,7 @@ public class MavenProjectWizard extends AbstractMavenProjectWizard implements IN return false; } - final Job job; + final AbstractCreateMavenProjectJob job; if(simpleProject.getSelection()) { final String[] folders = artifactPage.getFolders(); @@ -260,55 +259,17 @@ public class MavenProjectWizard extends AbstractMavenProjectWizard implements IN } }); } + + MappingDiscoveryJob discoveryJob = new MappingDiscoveryJob(job.getCreatedProjects()); + discoveryJob.schedule(); + } }); job.setRule(MavenPlugin.getProjectConfigurationManager().getRule()); job.schedule(); -// ProjectListener listener = new ProjectListener(); -// workspace.addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE); -// try { -// job.setRule(plugin.getProjectConfigurationManager().getRule()); -// job.schedule(); -// -// // MNGECLIPSE-766 wait until new project is created -// while(listener.getNewProject() == null && (job.getState() & (Job.WAITING | Job.RUNNING)) > 0) { -// try { -// Thread.sleep(100L); -// } catch (InterruptedException ex) { -// // ignore -// } -// } -// -// } finally { -// workspace.removeResourceChangeListener(listener); -// } - return true; } -// static class ProjectListener implements IResourceChangeListener { -// private IProject newProject = null; -// -// public void resourceChanged(IResourceChangeEvent event) { -// IResourceDelta root = event.getDelta(); -// IResourceDelta[] projectDeltas = root.getAffectedChildren(); -// for (int i = 0; i < projectDeltas.length; i++) { -// IResourceDelta delta = projectDeltas[i]; -// IResource resource = delta.getResource(); -// if (delta.getKind() == IResourceDelta.ADDED) { -// newProject = (IProject)resource; -// } -// } -// } -// /** -// * Gets the newProject. -// * @return Returns a IProject -// */ -// public IProject getNewProject() { -// return newProject; -// } -// } - } |