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]

Reply via email to