You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/08/13 16:52:18 UTC

svn commit: r803911 - in /labs/magma/trunk/magma-eclipse: META-INF/ src/org/apache/magma/tools/magmaeclipse/basics/

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: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org