Skip to content

Commit

Permalink
Addon dependencies resolution works
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Nov 26, 2012
1 parent 314d47c commit d61ef50
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@

package org.jboss.forge.maven.container;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Settings;
import org.jboss.forge.addon.dependency.Coordinate;
import org.jboss.forge.addon.dependency.Dependency;
import org.jboss.forge.addon.dependency.DependencyRepository;
import org.jboss.forge.addon.dependency.builder.DependencyBuilder;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.graph.DependencyNode;
import org.sonatype.aether.repository.Authentication;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.util.artifact.DefaultArtifact;
Expand Down Expand Up @@ -51,4 +55,20 @@ static Artifact coordinateToMavenArtifact(final Coordinate dep)
dep.getPackaging() == null ? "far" : dep.getPackaging(), dep.getVersion());
return artifact;
}

static Dependency convertToDependency(DependencyNode node)
{
org.sonatype.aether.graph.Dependency artifactDependency = node.getDependency();
Artifact artifact = artifactDependency.getArtifact();
File file = artifact.getFile();

Dependency d = DependencyBuilder.create().setArtifactId(artifact.getArtifactId())
.setGroupId(artifact.getGroupId()).setVersion(artifact.getVersion())
.setPackaging(artifact.getExtension()).setArtifact(file)
.setOptional(artifactDependency.isOptional())
.setClassifier(artifact.getClassifier())
.setScopeType(artifactDependency.getScope());
return d;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.collection.CollectRequest;
import org.sonatype.aether.graph.DependencyNode;
import org.sonatype.aether.graph.DependencyVisitor;
import org.sonatype.aether.repository.LocalRepository;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.resolution.ArtifactRequest;
Expand All @@ -42,6 +43,7 @@
import org.sonatype.aether.resolution.DependencyResult;
import org.sonatype.aether.resolution.VersionRangeRequest;
import org.sonatype.aether.resolution.VersionRangeResult;
import org.sonatype.aether.util.graph.TreeDependencyVisitor;
import org.sonatype.aether.version.Version;

@Singleton
Expand Down Expand Up @@ -88,16 +90,7 @@ public Set<Dependency> resolveDependencies(DependencyQuery query)
DependencyNode root = artifacts.getRoot();
for (DependencyNode node : root.getChildren())
{
org.sonatype.aether.graph.Dependency artifactDependency = node.getDependency();
Artifact artifact = artifactDependency.getArtifact();
File file = artifact.getFile();

Dependency d = DependencyBuilder.create().setArtifactId(artifact.getArtifactId())
.setGroupId(artifact.getGroupId()).setVersion(artifact.getVersion())
.setPackaging(artifact.getExtension()).setArtifact(file)
.setOptional(artifactDependency.isOptional())
.setClassifier(artifact.getClassifier())
.setScopeType(artifactDependency.getScope());
Dependency d = MavenConvertUtils.convertToDependency(node);
if (filter == null || filter.accept(d))
{
result.add(d);
Expand Down Expand Up @@ -204,4 +197,67 @@ public File resolveArtifact(DependencyQuery query)
throw new MavenOperationException(e);
}
}

public List<Dependency> resolveAddonDependencies(String coordinates) throws Exception
{
RepositorySystem system = container.lookup(RepositorySystem.class);
Settings settings = container.getSettings();
MavenRepositorySystemSession session = setupRepoSession(system, settings);
final CoordinateBuilder coord = CoordinateBuilder.create(coordinates);
Artifact queryArtifact = coordinateToMavenArtifact(coord);
CollectRequest collectRequest = new CollectRequest(new org.sonatype.aether.graph.Dependency(queryArtifact,
null), container.getEnabledRepositoriesFromProfile(settings));

DependencyRequest dr = new DependencyRequest(collectRequest, null);
DependencyResult result = system.resolveDependencies(session, dr);
List<Dependency> collect = new ArrayList<Dependency>();
DependencyVisitor visitor = new TreeDependencyVisitor(new AddonDependencyVisitor(coord.getGroupId(),
coord.getArtifactId(), collect));
result.getRoot().accept(visitor);
return collect;
}

private class AddonDependencyVisitor implements DependencyVisitor
{
private String addonGroupId;
private String addonArtifactId;
private List<Dependency> dependencies;

public AddonDependencyVisitor(String addonGroupId, String addonArtifactId, List<Dependency> listCollector)
{
super();
this.addonGroupId = addonGroupId;
this.addonArtifactId = addonArtifactId;
this.dependencies = listCollector;
}

@Override
public boolean visitEnter(DependencyNode node)
{
Artifact artifact = node.getDependency().getArtifact();
// If it is the
if (addonGroupId.equals(artifact.getGroupId()) && addonArtifactId.equals(artifact.getArtifactId()))
{
return true;
}
else
{
if ("far".equals(artifact.getExtension()))
{
return false;
}
else
{
dependencies.add(MavenConvertUtils.convertToDependency(node));
return true;
}
}
}

@Override
public boolean visitLeave(DependencyNode node)
{
return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import org.jboss.forge.addon.dependency.DependencyRepository;
import org.jboss.forge.addon.dependency.builder.CoordinateBuilder;
import org.jboss.forge.addon.dependency.builder.DependencyQueryBuilder;
import org.jboss.forge.addon.dependency.spi.DependencyResolver;
import org.jboss.forge.maven.container.MavenContainer;
import org.jboss.forge.maven.container.MavenDependencyResolver;
import org.jboss.forge.maven.dependency.filter.PackagingDependencyFilter;
Expand All @@ -30,7 +29,7 @@
*/
public class MavenDependencyResolverTest
{
private DependencyResolver resolver;
private MavenDependencyResolver resolver;

@Before
public void setUp()
Expand Down Expand Up @@ -84,4 +83,14 @@ public void testResolveArtifact() throws Exception
Assert.assertNotNull(artifact);
Assert.assertTrue("Artifact does not exist: " + artifact, artifact.exists());
}

@Test
public void testResolveNode() throws Exception
{
List<Dependency> addonDeps = resolver
.resolveAddonDependencies("org.jboss.forge:forge-example-plugin:far::2.0.0-SNAPSHOT");
Assert.assertNotNull(addonDeps);
Assert.assertEquals(1, addonDeps.size());
Assert.assertEquals("commons-lang", addonDeps.get(0).getCoordinate().getArtifactId());
}
}

0 comments on commit d61ef50

Please sign in to comment.