Author: simoneg
Date: Tue Oct  6 02:12:38 2009
New Revision: 822107

URL: http://svn.apache.org/viewvc?rev=822107&view=rev
Log:
LABS-410 : maven dependency container both on inpath and aspectpath with 
restrictions.

Modified:
    
labs/magma/trunk/magma-eclipse/src/org/apache/magma/tools/magmaeclipse/basics/MagmaPDEUtils.java

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=822107&r1=822106&r2=822107&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
 Tue Oct  6 02:12:38 2009
@@ -15,6 +15,7 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.embedder.MavenEmbedder;
 import org.apache.maven.project.MavenProject;
+import org.eclipse.ajdt.core.AspectJCorePreferences;
 import org.eclipse.ajdt.internal.ui.lazystart.Utils;
 import org.eclipse.ajdt.internal.ui.preferences.AJCompilerPreferencePage;
 import org.eclipse.ajdt.internal.ui.preferences.AspectJPreferences;
@@ -37,6 +38,7 @@
 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.IClasspathAttribute;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
@@ -528,7 +530,9 @@
                                        existing.add(entpath);
                                }
                        }
-       
+
+                       String restrictions = "";
+                       
                        // Create a folder for unzipped sources
                        File localrepo = 
MavenPlugin.getDefault().getMavenEmbedderManager()
                                        .getLocalRepositoryDir();
@@ -552,7 +556,12 @@
                        List<IClasspathEntry> linkstoadd = new 
ArrayList<IClasspathEntry>();
 
                        for (Artifact art : artifactMap.values()) {
-                               if 
(art.getGroupId().startsWith("org.apache.magma")) {
+                               IMavenProjectFacade artmvnprj = 
MavenPlugin.getDefault().getMavenProjectManager().getMavenProject(art.getGroupId(),
 art.getArtifactId(), art.getVersion());
+                               if (artmvnprj != null) {
+                                       // Dependency is in the workspace
+                                       IProject artprj = 
artmvnprj.getProject();
+                                       restrictions += artprj.getName() + ",";
+                               } else if 
(art.getGroupId().startsWith("org.apache.magma")) {
                                        String depname = art.getArtifactId() + 
"-" + art.getVersion();
                                        
                                        if (prog != null)
@@ -630,7 +639,7 @@
                                                downloadSources(project, 
project.getFullPath(), art.getGroupId(), art.getArtifactId(), 
art.getBaseVersion(), art.getClassifier(), true, true);
                                                */
                                        }
-                               }                               
+                               }
                        }
                        
                        // Adjust the project classpath
@@ -650,8 +659,22 @@
                                                        continue;
                                                }
                                        } else {
-                                               // bypass all the rest
-                                               nrawClasspath[j++] = 
rawClasspath[i];
+                                               boolean bypass = true;
+                                               // We have dependency projects 
to weave
+                                               if (restrictions.length() > 0) {
+                                                       while 
(restrictions.endsWith(",")) restrictions = restrictions.substring(0, 
restrictions.length() - 1);
+                                                       // Check if this is the 
Maven container
+                                                       if 
(rawClasspath[i].getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
+                                                               if 
(entpath.equals("org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER")) {
+                                                                       
nrawClasspath[j++] = aspectJEnabledMavenContainer(rawClasspath[i], 
restrictions);
+                                                                       bypass 
= false;
+                                                               }
+                                                       }
+                                               }
+                                               if (bypass) {
+                                                       // bypass all the rest
+                                                       nrawClasspath[j++] = 
rawClasspath[i];
+                                               }
                                        }
                                }
                                // Add newly created magmalnk- folders or those 
not on the classpath
@@ -706,6 +729,32 @@
        }
 
 
+       private static IClasspathEntry 
aspectJEnabledMavenContainer(IClasspathEntry maventry, String restrictions) {
+               String prevrest = 
AspectJCorePreferences.getRestriction(maventry, 
AspectJCorePreferences.ASPECTPATH_RESTRICTION_ATTRIBUTE_NAME);
+               if (prevrest == null || !prevrest.equals(restrictions)) {
+                       List<IClasspathAttribute> attrs = new 
ArrayList<IClasspathAttribute>(Arrays.asList(maventry.getExtraAttributes()));
+                       for (Iterator<IClasspathAttribute> iterator = 
attrs.iterator(); iterator.hasNext();) {
+                               IClasspathAttribute attr = iterator.next();
+                               if (
+                                               
attr.getName().equals(AspectJCorePreferences.ASPECTPATH_ATTRIBUTE_NAME) ||
+                                               
attr.getName().equals(AspectJCorePreferences.INPATH_ATTRIBUTE_NAME) ||
+                                               
attr.getName().equals(AspectJCorePreferences.ASPECTPATH_RESTRICTION_ATTRIBUTE_NAME)
 ||
+                                               
attr.getName().equals(AspectJCorePreferences.INPATH_RESTRICTION_ATTRIBUTE_NAME))
 
+                                       iterator.remove();
+                       }
+                       attrs.add(AspectJCorePreferences.ASPECTPATH_ATTRIBUTE);
+                       attrs.add(AspectJCorePreferences.INPATH_ATTRIBUTE);
+                       
attrs.add(JavaCore.newClasspathAttribute(AspectJCorePreferences.ASPECTPATH_RESTRICTION_ATTRIBUTE_NAME,
 restrictions));
+                       
attrs.add(JavaCore.newClasspathAttribute(AspectJCorePreferences.INPATH_RESTRICTION_ATTRIBUTE_NAME,
 restrictions));
+                       
+                       return JavaCore.newContainerEntry(maventry.getPath(),
+                    maventry.getAccessRules(), attrs.toArray(new 
IClasspathAttribute[attrs.size()]), 
+                    maventry.isExported());                    
+               } else {
+                       return maventry;
+               }
+       }
+
        /**
         * Adds a single entry, as the first one, to a classpath array.
         * @param prj The project



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to