Skip to content

Commit

Permalink
Added JPA 2 Metamodel generation support
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Oct 8, 2013
1 parent d5651e3 commit 5ccbfb1
Show file tree
Hide file tree
Showing 13 changed files with 365 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/
package org.jboss.forge.addon.javaee.jpa;

import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.dependencies.DependencyRepository;

/**
Expand All @@ -18,9 +18,9 @@
public interface MetaModelProvider
{
/**
* The dependency containing the APT processor class.
* The coordinate containing the APT processor class.
*/
Dependency getAptDependency();
Coordinate getAptCoordinate();

/**
* The processor class name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,14 @@
package org.jboss.forge.addon.javaee.jpa;

import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.javaee.JavaEEFacet;
import org.jboss.forge.addon.projects.ProjectFacet;

/**
* Returns information about metamodel generation for JPA projects
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
* FIXME: Missing implementation
*/
public interface PersistenceMetaModelFacet extends JavaEEFacet
public interface PersistenceMetaModelFacet extends ProjectFacet
{
/**
* The annotation processor used
Expand All @@ -32,4 +30,9 @@ public interface PersistenceMetaModelFacet extends JavaEEFacet
* The Coordinate of the annotation processor
*/
Coordinate getProcessorCoordinate();

/**
* Sets the metamodel provider. This should be called before {@link PersistenceMetaModelFacet#install()}
*/
void setMetaModelProvider(MetaModelProvider provider);
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public interface PersistenceProvider
/**
* Validate against the supplied datastore
*
* @throws any exception if the supplied datasource state is invali
* @throws any exception if the supplied datasource state is invalid
*/
void validate(JPADataSource dataSource) throws Exception;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,19 @@ public FileResource<?> setup(String unitName, Project project, JPADataSource dat
provider.configure(unit, dataSource);
facet.saveConfig(config);
result = facet.getConfigFile();
}
if (configureMetadata)
{
facetFactory.install(project, PersistenceMetaModelFacet.class);
if (configureMetadata)
{
Iterable<PersistenceMetaModelFacet> facets = facetFactory.createFacets(project,
PersistenceMetaModelFacet.class);
for (PersistenceMetaModelFacet metaModelFacet : facets)
{
metaModelFacet.setMetaModelProvider(provider.getMetaModelProvider());
if (facetFactory.install(project, metaModelFacet))
{
break;
}
}
}
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
*/
package org.jboss.forge.addon.javaee.jpa.providers;

import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.dependencies.DependencyRepository;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder;
import org.jboss.forge.addon.javaee.jpa.MetaModelProvider;

public class EclipseLinkMetaModelProvider implements MetaModelProvider
{

@Override
public Dependency getAptDependency()
public Coordinate getAptCoordinate()
{
return DependencyBuilder.create()
return CoordinateBuilder.create()
.setGroupId("org.eclipse.persistence")
.setArtifactId("eclipselink")
.setVersion("2.4.0");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
*/
package org.jboss.forge.addon.javaee.jpa.providers;

import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.dependencies.DependencyRepository;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder;
import org.jboss.forge.addon.javaee.jpa.MetaModelProvider;

public class HibernateMetaModelProvider implements MetaModelProvider
{

@Override
public Dependency getAptDependency()
public Coordinate getAptCoordinate()
{
return DependencyBuilder.create()
return CoordinateBuilder.create()
.setGroupId("org.hibernate")
.setArtifactId("hibernate-jpamodelgen");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
*/
package org.jboss.forge.addon.javaee.jpa.providers;

import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.dependencies.DependencyRepository;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder;
import org.jboss.forge.addon.javaee.jpa.MetaModelProvider;

public class OpenJPAMetaModelProvider implements MetaModelProvider
{

@Override
public Dependency getAptDependency()
public Coordinate getAptCoordinate()
{
return DependencyBuilder.create()
return CoordinateBuilder.create()
.setGroupId("org.apache.openjpa")
.setArtifactId("openjpa-persistence");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.javaee.jpa.PersistenceFacet;
import org.jboss.forge.addon.javaee.jpa.PersistenceMetaModelFacet;
import org.jboss.forge.addon.javaee.jpa.containers.CustomJTAContainer;
import org.jboss.forge.addon.javaee.jpa.providers.HibernateMetaModelProvider;
import org.jboss.forge.addon.javaee.jpa.providers.HibernateProvider;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
Expand Down Expand Up @@ -69,19 +70,16 @@ public static ForgeArchive getDeployment()
@Inject
private ProjectFactory projectFactory;

@Inject
private FacetFactory facetFactory;

@Inject
private WizardTester<PersistenceSetupWizard> tester;

@Test
public void testNewEntity() throws Exception
public void testSetup() throws Exception
{
// Execute SUT
final Project project = projectFactory.createTempProject();
tester.setInitialSelection(project.getProjectRoot());

// Launch
tester.launch();

Expand All @@ -108,11 +106,55 @@ public void wizardExecuted(UIWizard wizard, Result result)
Assert.assertEquals(2, counter.get());

// Check SUT values
PersistenceDescriptor config = facetFactory.install(project, PersistenceFacet.class).getConfig();
PersistenceDescriptor config = project.getFacet(PersistenceFacet.class).getConfig();
List<PersistenceUnit<PersistenceDescriptor>> allUnits = config.getAllPersistenceUnit();
PersistenceUnit<PersistenceDescriptor> unit = allUnits.get(0);

Assert.assertEquals("java:jboss:jta-ds", unit.getJtaDataSource());
}

@Test
public void testSetupMetadata() throws Exception
{
// Execute SUT
final Project project = projectFactory.createTempProject();
tester.setInitialSelection(project.getProjectRoot());

// Launch
tester.launch();

Assert.assertFalse(tester.canFlipToPreviousPage());
// Setting UI values
tester.setValueFor("providers", defaultProvider);
tester.setValueFor("containers", customJTAProvider);
tester.setValueFor("configureMetadata", Boolean.TRUE);
Assert.assertTrue(tester.canFlipToNextPage());

String result = tester.next();
Assert.assertNull(result);

tester.setValueFor("dataSourceName", "java:jboss:jta-ds");
final AtomicInteger counter = new AtomicInteger();
tester.finish(new WizardListener()
{
@Override
public void wizardExecuted(UIWizard wizard, Result result)
{
counter.incrementAndGet();
}
});
// Ensure that the two pages were invoked
Assert.assertEquals(2, counter.get());

// Check SUT values
PersistenceDescriptor config = project.getFacet(PersistenceFacet.class).getConfig();
List<PersistenceUnit<PersistenceDescriptor>> allUnits = config.getAllPersistenceUnit();
PersistenceUnit<PersistenceDescriptor> unit = allUnits.get(0);

Assert.assertEquals("java:jboss:jta-ds", unit.getJtaDataSource());

Assert.assertTrue(project.hasFacet(PersistenceMetaModelFacet.class));
PersistenceMetaModelFacet facet = project.getFacet(PersistenceMetaModelFacet.class);
Assert.assertEquals(new HibernateMetaModelProvider().getProcessor(), facet.getProcessor());
}
}
6 changes: 6 additions & 0 deletions maven/addon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@
<classifier>forge-addon</classifier>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>javaee</artifactId>
<classifier>forge-addon</classifier>
<optional>true</optional>
</dependency>

<!-- Furnace Container -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

/**
* A plugin adapter for {@link Plugin} and {@link MavenPlugin}
*
*
* @author <a href="mailto:paul.bakker.nl@gmail.com">Paul Bakker</a>
*/

Expand Down Expand Up @@ -57,7 +57,10 @@ private List<org.apache.maven.model.Dependency> transformDependencies(MavenPlugi
pluginDependency.setGroupId(dependency.getCoordinate().getGroupId());
pluginDependency.setVersion(dependency.getCoordinate().getVersion());
pluginDependency.setScope(dependency.getScopeType());
pluginDependency.setExclusions(transformExclusions(dependency.getExcludedCoordinates()));
if (dependency.getExcludedCoordinates() != null)
{
pluginDependency.setExclusions(transformExclusions(dependency.getExcludedCoordinates()));
}
dependencies.add(pluginDependency);
}
return dependencies;
Expand Down
28 changes: 18 additions & 10 deletions maven/impl-projects/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,36 +47,44 @@

<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>environment-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
<artifactId>environment</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>projects-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
<artifactId>projects</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>ui-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
<artifactId>ui</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>resources-api</artifactId>
<artifactId>resources</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>dependencies-api</artifactId>
<artifactId>dependencies</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>parser-java-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
<artifactId>parser-java</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>javaee</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
</dependencies>
Expand Down

0 comments on commit 5ccbfb1

Please sign in to comment.