Skip to content

Commit

Permalink
Use artifacts that are definitely in Maven central
Browse files Browse the repository at this point in the history
  • Loading branch information
lincolnthree committed May 11, 2013
1 parent d0cca92 commit 063ecd3
Show file tree
Hide file tree
Showing 2 changed files with 307 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,302 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.maven.projects.workspace;

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

import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
import org.jboss.forge.maven.projects.MavenFacet;
import org.jboss.forge.maven.resources.MavenPomResource;
import org.jboss.forge.projects.Project;
import org.jboss.forge.resource.FileResource;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.repository.WorkspaceReader;
import org.sonatype.aether.repository.WorkspaceRepository;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class ParentProjectWorkspaceReader implements WorkspaceReader
{
private final WorkspaceRepository repository = new WorkspaceRepository("forge");
private Project project;

public ParentProjectWorkspaceReader(Project project)
{
this.project = project;
}

@Override
public File findArtifact(Artifact artifact)
{
MavenFacet maven = project.getFacet(MavenFacet.class);
File result = findArtifact(artifact, new HashSet<MavenPomResource>(), maven.getPomResource());
return result;
}

private File findArtifact(Artifact artifact, Set<MavenPomResource> seen, MavenPomResource pomResource)
{
if (seen.contains(pomResource))
return null;
else
seen.add(pomResource);

if (pomMatches(artifact, pomResource, true))
return pomResource.getUnderlyingResourceObject();

List<String> modules = pomResource.getCurrentModel().getModules();
for (String module : modules)
{
MavenPomResource modulePom = project.getProjectRoot().getChild(module + "/" + "pom.xml")
.reify(MavenPomResource.class);

if (modulePom.exists())
{
File modulePomFile = findArtifact(artifact, seen, modulePom);
if (modulePomFile != null)
{
return modulePomFile;
}
}
}

Parent parent = pomResource.getCurrentModel().getParent();
if (parent != null)
{
FileResource<?> temp = project.getProjectRoot();
String relativePath = parent.getRelativePath();
if (relativePath != null)
{
relativePath = relativePath.trim();
while (relativePath.startsWith("."))
{
if (relativePath.startsWith(".."))
{
relativePath = relativePath.replaceFirst("\\.\\.(\\\\|/)", "");
temp = temp.getParent();
}
else if (relativePath.startsWith("."))
{
relativePath = relativePath.replaceFirst("\\.(\\\\|/)", "");
}
}
}

MavenPomResource parentPom = temp.getChild(relativePath).reify(MavenPomResource.class);

if (parentPom.exists())
{
return findArtifact(artifact, seen, parentPom);
}
}

return null;
}

private boolean pomMatches(Artifact artifact, MavenPomResource modulePom, boolean matchVersion)
{
Model pom = modulePom.getCurrentModel();
String groupId = pom.getGroupId();
if (groupId == null && pom.getParent() != null)
{
groupId = pom.getParent().getGroupId();
}

String artifactId = pom.getArtifactId();

String version = pom.getVersion();
if (version == null && pom.getParent() != null)
{
version = pom.getParent().getGroupId();
}

return (groupId != null && groupId.trim().equals(artifact.getGroupId().trim()))
&& (artifactId != null && artifactId.trim().equals(artifact.getArtifactId().trim()))
&& (!matchVersion || (version != null && version.trim().equals(artifact.getVersion().trim())));
}

@Override
public List<String> findVersions(Artifact artifact)
{
MavenFacet maven = project.getFacet(MavenFacet.class);
List<String> result = findVersions(artifact, new HashSet<MavenPomResource>(), maven.getPomResource());
return result;
}

private List<String> findVersions(Artifact artifact, HashSet<MavenPomResource> seen, MavenPomResource pomResource)
{
List<String> result = new ArrayList<String>();
if (seen.contains(pomResource))
return null;
else
seen.add(pomResource);

if (pomMatches(artifact, pomResource, false))
{
Model model = pomResource.getCurrentModel();
String version = model.getVersion();
if (version == null && model.getParent() != null)
{
version = model.getParent().getVersion();
}
if (result != null)
result.add(version);
}

List<String> modules = pomResource.getCurrentModel().getModules();
for (String module : modules)
{
MavenPomResource modulePom = project.getProjectRoot().getChild(module + "/" + "pom.xml")
.reify(MavenPomResource.class);

if (modulePom.exists())
{
result.addAll(findVersions(artifact, seen, modulePom));
}
}

Parent parent = pomResource.getCurrentModel().getParent();
if (parent != null)
{
FileResource<?> temp = project.getProjectRoot();
String relativePath = parent.getRelativePath();
if (relativePath != null)
{
relativePath = relativePath.trim();
while (relativePath.startsWith("."))
{
if (relativePath.startsWith(".."))
{
relativePath = relativePath.replaceFirst("\\.\\.(\\\\|/)", "");
temp = temp.getParent();
}
else if (relativePath.startsWith("."))
{
relativePath = relativePath.replaceFirst("\\.(\\\\|/)", "");
}
}
}

MavenPomResource parentPom = temp.getChild(relativePath).reify(MavenPomResource.class);

if (parentPom.exists())
{
result.addAll(findVersions(artifact, seen, parentPom));
}
}

return result;
}

public List<MavenPomResource> gatherPoms()
{
HashSet<MavenPomResource> seen = new HashSet<MavenPomResource>();
gatherPoms(seen, project.getFacet(MavenFacet.class).getPomResource());
return new ArrayList<MavenPomResource>(seen);
}

private void gatherPoms(Set<MavenPomResource> seen, MavenPomResource pomResource)
{
if (!seen.contains(pomResource))
{
seen.add(pomResource);

List<String> modules = pomResource.getCurrentModel().getModules();
for (String module : modules)
{
MavenPomResource modulePom = project.getProjectRoot().getChild(module + "/" + "pom.xml")
.reify(MavenPomResource.class);

if (modulePom.exists())
{
gatherPoms(seen, modulePom);
}
}

Parent parent = pomResource.getCurrentModel().getParent();
if (parent != null)
{
FileResource<?> temp = project.getProjectRoot();
String relativePath = parent.getRelativePath();
if (relativePath != null)
{
relativePath = relativePath.trim();
while (relativePath.startsWith("."))
{
if (relativePath.startsWith(".."))
{
relativePath = relativePath.replaceFirst("\\.\\.(\\\\|/)", "");
temp = temp.getParent();
}
else if (relativePath.startsWith("."))
{
relativePath = relativePath.replaceFirst("\\.(\\\\|/)", "");
}
}
}

MavenPomResource parentPom = temp.getChild(relativePath).reify(MavenPomResource.class);

if (parentPom.exists())
{
gatherPoms(seen, parentPom);
}
}
}
}

public MavenPomResource getParentPom()
{
return getParentPom(project.getFacet(MavenFacet.class).getPomResource());
}

private MavenPomResource getParentPom(MavenPomResource pomResource)
{
Parent parent = pomResource.getCurrentModel().getParent();
if (parent != null)
{
FileResource<?> temp = project.getProjectRoot();
String relativePath = parent.getRelativePath();
if (relativePath != null)
{
relativePath = relativePath.trim();
while (relativePath.startsWith("."))
{
if (relativePath.startsWith(".."))
{
relativePath = relativePath.replaceFirst("\\.\\.(\\\\|/)", "");
temp = temp.getParent();
}
else if (relativePath.startsWith("."))
{
relativePath = relativePath.replaceFirst("\\.(\\\\|/)", "");
}
}
}

MavenPomResource parentPom = temp.getChild(relativePath).reify(MavenPomResource.class);

if (parentPom.exists())
{
return getParentPom(parentPom);
}
}
return pomResource;
}

@Override
public WorkspaceRepository getRepository()
{
return repository;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void setUp()
@Test
public void testResolveClassifiedArtifact() throws Exception
{
CoordinateBuilder coordinate = CoordinateBuilder.create("org.jboss.forge:resources:2.0.0-SNAPSHOT")
CoordinateBuilder coordinate = CoordinateBuilder.create("org.jboss.forge:resources:2.0.0.Alpha3")
.setClassifier("forge-addon");
DependencyQueryBuilder query = DependencyQueryBuilder.create(coordinate).setFilter(addonFilter);
Set<Dependency> artifacts = resolver.resolveDependencies(query);
Expand Down Expand Up @@ -102,7 +102,7 @@ public void testResolveVersionsDependency() throws Exception
public void testResolveArtifact() throws Exception
{
DependencyQuery query = DependencyQueryBuilder
.create("org.jboss.forge:resources:jar:forge-addon:2.0.0-SNAPSHOT");
.create("org.jboss.forge:resources:jar:forge-addon:2.0.0.Alpha3");
Dependency artifact = resolver.resolveArtifact(query);
Assert.assertNotNull(artifact);
Assert.assertTrue("Artifact does not exist: " + artifact, artifact.getArtifact().exists());
Expand All @@ -113,7 +113,7 @@ public void testResolveDependencyHierarchy() throws Exception
{
DependencyNode root = resolver
.resolveDependencyHierarchy(DependencyQueryBuilder
.create("org.jboss.forge:resources:jar:forge-addon:2.0.0-SNAPSHOT"));
.create("org.jboss.forge:resources:jar:forge-addon:2.0.0.Alpha3"));
Assert.assertNotNull(root);
Assert.assertEquals(5, root.getChildren().size());
Assert.assertEquals("convert", root.getChildren().get(1).getDependency().getCoordinate().getArtifactId());
Expand All @@ -124,7 +124,7 @@ public void testResolveDependencyHierarchy() throws Exception
public void testResolveProvidedAddons() throws Exception
{
DependencyNode root = resolver.resolveAddonDependencyHierarchy(DependencyQueryBuilder
.create("org.jboss.forge:addons:jar:forge-addon:2.0.0-SNAPSHOT"));
.create("org.jboss.forge:addons:jar:forge-addon:2.0.0.Alpha3"));
Assert.assertNotNull(root);
Assert.assertEquals(7, root.getChildren().size());
}
Expand All @@ -133,7 +133,7 @@ public void testResolveProvidedAddons() throws Exception
public void testResolveProvidedAddons2() throws Exception
{
DependencyNode root = resolver.resolveAddonDependencyHierarchy(DependencyQueryBuilder
.create("org.jboss.forge:resources:jar:forge-addon:2.0.0-SNAPSHOT"));
.create("org.jboss.forge:resources:jar:forge-addon:2.0.0.Alpha3"));
Assert.assertNotNull(root);
Assert.assertEquals(5, root.getChildren().size());
}
Expand Down

0 comments on commit 063ecd3

Please sign in to comment.