Skip to content

Commit

Permalink
First step toward FORGE-1247
Browse files Browse the repository at this point in the history
  • Loading branch information
lincolnthree committed Oct 4, 2013
1 parent 05bd7d0 commit 96df7d3
Show file tree
Hide file tree
Showing 17 changed files with 646 additions and 207 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.facets.FacetNotFoundException;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.maven.projects.MavenBuildSystem;
import org.jboss.forge.addon.parser.java.facets.JavaCompilerFacet;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
Expand Down Expand Up @@ -65,6 +66,9 @@ public class AddonProjectConfigurator
@Inject
private DependencyInstaller dependencyInstaller;

@Inject
private MavenBuildSystem buildSystem;

public void setupSimpleAddonProject(Project project, Version forgeVersion, Iterable<AddonId> dependencyAddons)
throws FileNotFoundException, FacetNotFoundException
{
Expand Down Expand Up @@ -202,7 +206,7 @@ private Project createSubmoduleProject(final Project parent, String moduleName,
{
DirectoryResource location = parent.getProjectRoot().getOrCreateChildDirectory(moduleName);

Project project = projectFactory.createProject(location, Arrays.asList(requiredProjectFacets));
Project project = projectFactory.createProject(location, buildSystem, Arrays.asList(requiredProjectFacets));

MetadataFacet metadata = project.getFacet(MetadataFacet.class);
metadata.setProjectName(artifactId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* 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.addon.maven.projects;

import org.jboss.forge.addon.projects.BuildSystem;

/**
* Marker interface for the Maven {@link BuildSystem}.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public interface MavenBuildSystem extends BuildSystem
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
/*
* Copyright 2012 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.addon.maven.projects;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.inject.Inject;

import org.jboss.forge.addon.facets.Facet;
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.maven.projects.facets.MavenDependencyFacet;
import org.jboss.forge.addon.maven.projects.facets.MavenMetadataFacet;
import org.jboss.forge.addon.maven.projects.facets.MavenPackagingFacet;
import org.jboss.forge.addon.maven.projects.facets.MavenResourceFacet;
import org.jboss.forge.addon.maven.projects.facets.MavenWebResourcesFacet;
import org.jboss.forge.addon.parser.java.facets.JavaCompilerFacet;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.facets.MetadataFacet;
import org.jboss.forge.addon.projects.facets.PackagingFacet;
import org.jboss.forge.addon.projects.facets.ResourcesFacet;
import org.jboss.forge.addon.projects.facets.WebResourcesFacet;
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.Resource;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class MavenBuildSystemImpl implements MavenBuildSystem
{
private static final Logger log = Logger.getLogger(MavenBuildSystemImpl.class.getName());

@Inject
private FacetFactory factory;

@Override
public String getType()
{
return "Maven";
}

@Override
public Project createProject(final DirectoryResource dir)
{
Project project = new MavenProject(dir);

try
{
factory.install(project, MavenFacetImpl.class);
factory.install(project, MavenPluginFacet.class);
factory.install(project, MavenMetadataFacet.class);
factory.install(project, MavenPackagingFacet.class);
factory.install(project, MavenDependencyFacet.class);
factory.install(project, MavenResourceFacet.class);
try
{
factory.register(project, MavenWebResourcesFacet.class);
}
catch (IllegalStateException e)
{
log.log(Level.FINE, "Could not install [" + MavenWebResourcesFacet.class.getName() + "] into project ["
+ project + "]", e);
}
}
catch (RuntimeException e)
{
throw new IllegalStateException("Could not install Maven into Project located at ["
+ dir.getFullyQualifiedName() + "]", e);
}

return project;
}

@Override
public boolean containsProject(final DirectoryResource dir)
{
Resource<?> pom = dir.getChild("pom.xml");
return pom.exists() && pom instanceof FileResource;
}

@Override
public Set<Class<? extends Facet<?>>> getProvidedFacetTypes()
{
Set<Class<? extends Facet<?>>> result = new HashSet<Class<? extends Facet<?>>>();
result.add(MavenFacet.class);
result.add(MavenPluginFacet.class);
result.add(DependencyFacet.class);
result.add(MetadataFacet.class);
result.add(PackagingFacet.class);
result.add(ResourcesFacet.class);

addSafe(result, new Callable<Class<? extends Facet<?>>>()

This comment has been minimized.

Copy link
@gastaldi

gastaldi Oct 5, 2013

Member

Why is this method needed?

This comment has been minimized.

Copy link
@lincolnthree

lincolnthree Oct 5, 2013

Author Member

Because if the optional addon dependency that provides this class does not exist, it will throw a NoClassDefFoundError or CNFE :)

{
@Override
public Class<? extends Facet<?>> call() throws Exception
{
return WebResourcesFacet.class;
}
});
addSafe(result, new Callable<Class<? extends Facet<?>>>()
{
@Override
public Class<? extends Facet<?>> call() throws Exception
{
return JavaCompilerFacet.class;
}
});
addSafe(result, new Callable<Class<? extends Facet<?>>>()
{
@Override
public Class<? extends Facet<?>> call() throws Exception
{
return JavaSourceFacet.class;
}
});
return result;
}

private void addSafe(Set<Class<? extends Facet<?>>> result, Callable<Class<? extends Facet<?>>> callable)
{
try
{
Class<? extends Facet<?>> facetType = callable.call();
if (facetType != null)
result.add(facetType);
}
catch (NoClassDefFoundError e)
{

This comment has been minimized.

Copy link
@lincolnthree

lincolnthree Oct 5, 2013

Author Member

Which is why this exists here :)

This comment has been minimized.

Copy link
@gastaldi

gastaldi via email Oct 5, 2013

Member

This comment has been minimized.

Copy link
@gastaldi

gastaldi Oct 5, 2013

Member

Probably we would have similar use cases in other parts of the whole framework. Worth creating an utility method for that?

Something like:

    void doSafely(Runnable runnable) {
         try {  
           runnnable.run();
          } catch(ClassNotFoundException e) {...} 
    }
}
catch (ClassNotFoundException e)
{
}
catch (RuntimeException e)
{
throw e;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,18 @@
import static org.junit.Assert.assertNull;

import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Repository;
import org.eclipse.aether.repository.AuthenticationContext;
import org.jboss.forge.addon.maven.projects.util.RepositoryUtils;
import org.junit.Test;

/**
* Test case for {@link RepositoryUtils} class
*
*
* @author George Gastaldi <gegastaldi@gmail.com>
*
*
*/
public class RepositoryUtilsTest
{

@Test
public void testConvertFromMavenProxyExpectNull()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.maven.projects.MavenBuildSystemImpl;
import org.jboss.forge.addon.maven.projects.MavenFacet;
import org.jboss.forge.addon.maven.projects.MavenPluginFacet;
import org.jboss.forge.addon.maven.projects.MavenProjectLocator;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.facets.MetadataFacet;
import org.jboss.forge.addon.projects.facets.PackagingFacet;
import org.jboss.forge.addon.projects.facets.ResourcesFacet;
import org.jboss.forge.addon.projects.facets.WebResourcesFacet;
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.ResourceFactory;
Expand All @@ -36,7 +37,7 @@
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class MavenProjectLocatorTest
public class MavenBuildSystemImplTest
{
@Deployment
@Dependencies({
Expand Down Expand Up @@ -67,12 +68,30 @@ public static ForgeArchive getDeployment()
private Furnace forge;

@Inject
private MavenProjectLocator locator;
private MavenBuildSystemImpl buildSystem;

@Test
public void testInjectionNotNull()
{
Assert.assertNotNull(locator);
Assert.assertNotNull(buildSystem);
}

@Test
public void testGetType()
{
Assert.assertEquals("Maven", buildSystem.getType());
}

@Test
public void testProvidedFacets()
{
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(MavenFacet.class));
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(MavenPluginFacet.class));
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(MetadataFacet.class));
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(PackagingFacet.class));
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(DependencyFacet.class));
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(ResourcesFacet.class));
Assert.assertTrue(buildSystem.getProvidedFacetTypes().contains(WebResourcesFacet.class));
}

@Test
Expand All @@ -82,11 +101,11 @@ public void testFindProject() throws Exception
DirectoryResource.class);
DirectoryResource projectDir = addonDir.createTempResource();
FileResource<?> pomFile = projectDir.getChild("pom.xml").reify(FileResource.class);
Assert.assertFalse(locator.containsProject(projectDir));
Assert.assertFalse(buildSystem.containsProject(projectDir));
pomFile.createNewFile();
pomFile.setContents(getClass().getResourceAsStream("pom-template.xml"));

Assert.assertTrue(locator.containsProject(projectDir));
Assert.assertTrue(buildSystem.containsProject(projectDir));

projectDir.delete(true);
}
Expand All @@ -97,7 +116,7 @@ public void testEnabledFacets() throws Exception
DirectoryResource addonDir = factory.create(forge.getRepositories().get(0).getRootDirectory()).reify(
DirectoryResource.class);
DirectoryResource projectDir = addonDir.createTempResource();
Project project = locator.createProject(projectDir);
Project project = buildSystem.createProject(projectDir);
boolean hasFacets = project.hasFacet(MavenFacet.class)
&& project.hasFacet(MavenPluginFacet.class)
&& project.hasFacet(MetadataFacet.class)
Expand Down
Loading

0 comments on commit 96df7d3

Please sign in to comment.