Author: simoneg
Date: Thu Aug 13 14:52:17 2009
New Revision: 803911
URL: http://svn.apache.org/viewvc?rev=803911&view=rev
Log:
LABS-408 : using embedder inside a job to download sources and schedule another
project update when finished
Added:
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/DownloadSourcesJob.java
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaProject.java
Modified:
labs/magma/trunk/magma-eclipse/META-INF/MANIFEST.MF
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaMavenListener.java
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaPDEUtils.java
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/UpdateProjectSettingsHandler.java
Modified: labs/magma/trunk/magma-eclipse/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/META-INF/MANIFEST.MF?rev=803911&r1=803910&r2=803911&view=diff
==============================================================================
--- labs/magma/trunk/magma-eclipse/META-INF/MANIFEST.MF (original)
+++ labs/magma/trunk/magma-eclipse/META-INF/MANIFEST.MF Thu Aug 13 14:52:17 2009
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: Magma Eclipse
Bundle-SymbolicName: org.apache.magma.tools.magmaeclipse;singleton:=true
-Bundle-Version: 0.0.3.0004
+Bundle-Version: 0.0.3.0005
Bundle-Activator: org.apache.magma.tools.magmaeclipse.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
Added:
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/DownloadSourcesJob.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/DownloadSourcesJob.java?rev=803911&view=auto
==============================================================================
---
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/DownloadSourcesJob.java
(added)
+++
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/DownloadSourcesJob.java
Thu Aug 13 14:52:17 2009
@@ -0,0 +1,85 @@
+package org.apache.magma.tools.magmaeclipse.basics;
+
+import java.util.Arrays;
+
+import org.apache.magma.tools.magmaeclipse.MLog;
+import org.apache.maven.embedder.ContainerCustomizer;
+import org.apache.maven.embedder.MavenEmbedder;
+import org.apache.maven.embedder.MavenEmbedderException;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.monitor.event.EventMonitor;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.maven.ide.eclipse.MavenPlugin;
+import org.maven.ide.eclipse.embedder.EmbedderFactory;
+import org.maven.ide.eclipse.embedder.MavenEmbedderManager;
+import org.maven.ide.eclipse.project.IMavenProjectFacade;
+
+public class DownloadSourcesJob extends Job {
+
+ private IMavenProjectFacade mavenProject;
+ private MagmaProject myprg;
+
+ public DownloadSourcesJob(IMavenProjectFacade mavenProject) {
+ super("Downloading source packages");
+ this.mavenProject = mavenProject;
+ myprg = new MagmaProject(mavenProject.getProject(),
"downloadSources");
+ }
+
+
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask("Downloading missing sources",
IProgressMonitor.UNKNOWN);
+ try {
+ MavenEmbedderManager embman =
MavenPlugin.getDefault().getMavenEmbedderManager();
+ MavenEmbedder myemb =
embman.createEmbedder(EmbedderFactory.createExecutionCustomizer());
+ MavenExecutionRequest req = new
DefaultMavenExecutionRequest();
+ req.setGoals(Arrays.asList("dependency:sources"));
+
req.setPom(mavenProject.getPom().getLocation().toFile());
+ req.setOffline(false);
+ req.setInteractiveMode(false);
+
+ req.addEventMonitor(new EventMonitor() {
+ public void startEvent(String arg0, String
arg1, long arg2) {
+ System.out.println("Start event " +
arg0 + " , " + arg1 + " , " + arg2);
+
+ }
+
+ public void errorEvent(String arg0, String
arg1, long arg2, Throwable arg3) {
+ System.out.println("Error event " +
arg0 + " , " + arg1 + " , " + arg2);
+ if (arg3 != null) {
+ arg3.printStackTrace();
+ }
+ }
+
+ public void endEvent(String arg0, String arg1,
long arg2) {
+ System.out.println("End event " + arg0
+ " , " + arg1 + " , " + arg2);
+
MagmaPDEUtils.setupProjectJob(mavenProject.getProject(), false);
+ }
+ });
+ myemb.execute(req);
+ myemb.stop();
+ } catch (Exception e) {
+ MLog.exception(e, "While downloading sources");
+ return new Status(Status.ERROR,
MagmaPDEUtils.PLUGIN_ID, "Error downloading sources", e);
+ } finally {
+ monitor.done();
+ }
+ return Status.OK_STATUS;
+ }
+
+ @Override
+ public boolean shouldSchedule() {
+ return manager.find(myprg).length == 0;
+ }
+
+ @Override
+ public boolean belongsTo(Object family) {
+ return myprg.equals(family);
+ }
+
+}
Modified:
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaMavenListener.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaMavenListener.java?rev=803911&r1=803910&r2=803911&view=diff
==============================================================================
---
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaMavenListener.java
(original)
+++
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaMavenListener.java
Thu Aug 13 14:52:17 2009
@@ -48,7 +48,7 @@
IProject project = mavenProject.getProject();
manager.downloadSources(project, null);
-
MagmaPDEUtils.setupSourceDependencies(mavenProject, false, monitor);
+
MagmaPDEUtils.setupSourceDependenciesJob(mavenProject, false);
}
} catch (Exception e) {
MLog.exception(e, "Error while refreshing Maven data");
Modified:
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaPDEUtils.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaPDEUtils.java?rev=803911&r1=803910&r2=803911&view=diff
==============================================================================
---
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaPDEUtils.java
(original)
+++
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaPDEUtils.java
Thu Aug 13 14:52:17 2009
@@ -33,7 +33,6 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.jdt.core.IClasspathContainer;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
@@ -42,9 +41,6 @@
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.progress.UIJob;
import org.maven.ide.eclipse.MavenPlugin;
-import org.maven.ide.eclipse.embedder.ArtifactKey;
-import org.maven.ide.eclipse.embedder.ArtifactRef;
-import org.maven.ide.eclipse.jdt.BuildPathManager;
import org.maven.ide.eclipse.project.IMavenProjectFacade;
import org.maven.ide.eclipse.project.ResolverConfiguration;
import org.osgi.service.prefs.BackingStoreException;
@@ -325,7 +321,55 @@
} catch (InterruptedException e) {
}
}
+
+ public static void setupProjectJob(final IProject project, final
boolean complete) {
+ Job setup = new Job("Setting up Magma project") {
+ private MagmaProject myprg = new MagmaProject(project,
"setupProject");
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ internal_setupProject(project, complete,
monitor);
+ return Status.OK_STATUS;
+ }
+
+ @Override
+ public boolean shouldSchedule() {
+ return manager.find(myprg).length == 0;
+ }
+
+ @Override
+ public boolean belongsTo(Object family) {
+ return myprg.equals(family);
+ }
+ };
+ setup.schedule(1000);
+ }
+ public static void setupSourceDependenciesJob(final IMavenProjectFacade
project, final boolean complete) {
+ Job setup = new Job("Setting up Magma source folders") {
+ private MagmaProject myprg = new
MagmaProject(project.getProject(), "setupSourceDependencies");
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ setupSourceDependencies(project, false,
monitor);
+ return Status.OK_STATUS;
+ }
+
+ @Override
+ public boolean shouldSchedule() {
+ return manager.find(myprg).length == 0;
+ }
+
+ @Override
+ public boolean belongsTo(Object family) {
+ return myprg.equals(family);
+ }
+ };
+ setup.schedule(1000);
+ }
+
+
+
/**
* Check inside the project properties to see if it was previously
* setup by magma.
@@ -444,12 +488,12 @@
* @param prog
*/
public static void setupSourceDependencies
- (IMavenProjectFacade mavenProject, boolean complete,
IProgressMonitor prog) {
+ (final IMavenProjectFacade mavenProject, boolean complete,
IProgressMonitor prog) {
try {
MavenProject mp = mavenProject.getMavenProject(prog);
Map<String,Artifact> artifactMap = mp.getArtifactMap();
- IProject project = mavenProject.getProject();
+ final IProject project = mavenProject.getProject();
IJavaProject prj = JavaCore.create(project);
MavenEmbedder embedder =
MavenPlugin.getDefault().getMavenProjectManager().createWorkspaceEmbedder();
@@ -482,6 +526,9 @@
MFileUtils.createEntire(linkoutfld, true, true,
null);
}
+ // Whether we need to download missing sources
+ boolean downloadSources = false;
+
// Holds a list of newly created magmalnk- folders to
add to the classpath
List<IClasspathEntry> linkstoadd = new
ArrayList<IClasspathEntry>();
@@ -555,6 +602,13 @@
new
IPath[] {}, linkoutfld.getFullPath());
linkstoadd.add(ent);
}
+ } else {
+ downloadSources = true;
+ /*
+ MLog.debug("Downloading sources
for " + art.getArtifactId());
+
MavenPlugin.getDefault().getMavenProjectManager().
+ downloadSources(project,
project.getFullPath(), art.getGroupId(), art.getArtifactId(),
art.getBaseVersion(), art.getClassifier(), true, true);
+ */
}
}
}
@@ -599,6 +653,10 @@
}
}
+ if (downloadSources) {
+ DownloadSourcesJob ds = new
DownloadSourcesJob(mavenProject);
+ ds.schedule();
+ }
} catch (Exception e) {
MLog.exception(e, "Error setting up linked folders");
Added:
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaProject.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaProject.java?rev=803911&view=auto
==============================================================================
---
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaProject.java
(added)
+++
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaProject.java
Thu Aug 13 14:52:17 2009
@@ -0,0 +1,24 @@
+package org.apache.magma.tools.magmaeclipse.basics;
+
+import org.eclipse.core.resources.IProject;
+
+public class MagmaProject {
+
+ private IProject myproject;
+ private String type;
+
+ public MagmaProject(IProject myproject, String type) {
+ super();
+ this.myproject = myproject;
+ this.type = type;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof MagmaProject)) return false;
+ MagmaProject oth = (MagmaProject) obj;
+ return oth.myproject.equals(myproject) && oth.type.equals(type);
+ }
+
+
+}
Modified:
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/UpdateProjectSettingsHandler.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/UpdateProjectSettingsHandler.java?rev=803911&r1=803910&r2=803911&view=diff
==============================================================================
---
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/UpdateProjectSettingsHandler.java
(original)
+++
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/UpdateProjectSettingsHandler.java
Thu Aug 13 14:52:17 2009
@@ -28,7 +28,7 @@
List<IProject> selected = extractProjects(event);
for (Iterator iter = selected.iterator(); iter.hasNext();) {
IProject project = (IProject) iter.next();
- MagmaPDEUtils.setupProject(project, true, null);
+ MagmaPDEUtils.setupProjectJob(project, true);
}
return null;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]