Skip to content

Commit

Permalink
FORGE-2316: Prototype on Stacks
Browse files Browse the repository at this point in the history
As a proof-of-concept, the CDI: Setup command is only enabled on Java EE 7 projects

To create a JavaEE 7 project, use: project-new --named demo --stack java-ee-7
To create a JavaEE 6 project, use: project-new --named demo --stack java-ee-6

Observe that after the project is created, the JavaEE dependencies are set in the pom.xml

FORGE-2316: Renamed StackFacet.getName() to StackFacet.getStackName()

FORGE-2316: Refactoring

FORGE-2316: More refactoring. JPA Setup now displays only the supported stack version

FORGE-2316: Introduced project-list-stacks command

FORGE-2316: Introduced Stack and StackBuilder

FORGE-2316: Stack is Comparable

FORGE-2316: Comparing stacks in New Project wizard

FORGE-2316: Moved annotations to annotations subpackage

FORGE-2316: JPA Setup version is not shown if stack allows only one option

FORGE-2316: Moved priority() to StackFacet

FORGE-2316: Added supports(ProjectType) in StacksFacet

FORGE-2316: Moved stack definition to interface attribute
  • Loading branch information
gastaldi committed Jan 13, 2016
1 parent 20d8b0f commit 36c2fc3
Show file tree
Hide file tree
Showing 43 changed files with 1,065 additions and 136 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,38 @@

package org.jboss.forge.addon.javaee.facets;

import static org.jboss.forge.addon.projects.stacks.StackBuilder.stack;

import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_0;
import org.jboss.forge.addon.javaee.ejb.EJBFacet_3_1;
import org.jboss.forge.addon.javaee.faces.FacesFacet_2_0;
import org.jboss.forge.addon.javaee.jms.JMSFacet_1_1;
import org.jboss.forge.addon.javaee.jpa.JPAFacet_2_0;
import org.jboss.forge.addon.javaee.jta.JTAFacet_1_1;
import org.jboss.forge.addon.javaee.rest.RestFacet_1_1;
import org.jboss.forge.addon.javaee.servlet.ServletFacet_3_0;
import org.jboss.forge.addon.javaee.validation.ValidationFacet;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.addon.projects.stacks.StackFacet;

/**
* Configures a project to depend on the JavaEE 6 libraries
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public interface JavaEE6Facet extends JavaEESpecFacet
{

/**
* The {@link Stack} associated with this {@link StackFacet}
*/
public static final Stack STACK = stack("Java EE 6")
.includes(CDIFacet_1_0.class)
.includes(EJBFacet_3_1.class)
.includes(FacesFacet_2_0.class)
.includes(JMSFacet_1_1.class)
.includes(JPAFacet_2_0.class)
.includes(JTAFacet_1_1.class)
.includes(RestFacet_1_1.class)
.includes(ServletFacet_3_0.class)
.includes(ValidationFacet.class);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,41 @@

package org.jboss.forge.addon.javaee.facets;

import static org.jboss.forge.addon.projects.stacks.StackBuilder.stack;

import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.javaee.ejb.EJBFacet_3_2;
import org.jboss.forge.addon.javaee.faces.FacesFacet_2_2;
import org.jboss.forge.addon.javaee.jms.JMSFacet_2_0;
import org.jboss.forge.addon.javaee.jpa.JPAFacet_2_1;
import org.jboss.forge.addon.javaee.jta.JTAFacet_1_2;
import org.jboss.forge.addon.javaee.rest.RestFacet_2_0;
import org.jboss.forge.addon.javaee.servlet.ServletFacet_3_1;
import org.jboss.forge.addon.javaee.validation.ValidationFacet;
import org.jboss.forge.addon.javaee.websocket.WebSocketFacet;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.addon.projects.stacks.StackFacet;

/**
* Configures a project to depend on the JavaEE 7 libraries
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public interface JavaEE7Facet extends JavaEESpecFacet
{
/**
* The {@link Stack} associated with this {@link StackFacet}
*/
public static final Stack STACK = stack("Java EE 7")
.includes(CDIFacet_1_1.class)
.includes(EJBFacet_3_2.class)
.includes(FacesFacet_2_2.class)
.includes(JMSFacet_2_0.class)
.includes(JPAFacet_2_1.class)
.includes(JTAFacet_1_2.class)
.includes(RestFacet_2_0.class)
.includes(ServletFacet_3_1.class)
.includes(ValidationFacet.class)
.includes(WebSocketFacet.class);

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@
package org.jboss.forge.addon.javaee.facets;

import org.jboss.forge.addon.javaee.JavaEEFacet;
import org.jboss.forge.addon.projects.stacks.StackFacet;

/**
* A common interface for the JavaEE spec facets
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public interface JavaEESpecFacet extends JavaEEFacet
public interface JavaEESpecFacet extends JavaEEFacet, StackFacet
{

}
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,13 @@ public void testScaffoldSetup() throws Exception
public void shouldCreateOneErrorPageForEachErrorCode() throws Exception
{
shellTest.execute("servlet-setup --servlet-version 3.1", 10, TimeUnit.SECONDS);
shellTest.execute("jpa-setup", 10, TimeUnit.SECONDS);
shellTest.execute("jpa-new-entity --named Customer", 10, TimeUnit.SECONDS);
shellTest.execute("jpa-new-field --named firstName", 10, TimeUnit.SECONDS);
shellTest.execute("jpa-new-entity --named Publisher", 10, TimeUnit.SECONDS);
shellTest.execute("jpa-new-field --named firstName", 10, TimeUnit.SECONDS);
Assert.assertThat(shellTest.execute("scaffold-setup", 10, TimeUnit.SECONDS),
not(instanceOf(Failed.class)));
Result result = shellTest.execute("scaffold-setup --provider Faces", 10, TimeUnit.SECONDS);
Assert.assertThat(result, not(instanceOf(Failed.class)));
Project project = projectFactory.findProject(shellTest.getShell().getCurrentResource());
Assert.assertTrue(project.hasFacet(ServletFacet_3_1.class));
ServletFacet_3_1 servletFacet = project.getFacet(ServletFacet_3_1.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,21 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.inject.Inject;

import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.facets.JavaEE6Facet;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.ProjectType;
import org.jboss.forge.addon.projects.dependencies.DependencyInstaller;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.furnace.util.Sets;
import org.jboss.forge.furnace.versions.SingleVersion;
import org.jboss.forge.furnace.versions.Version;

Expand Down Expand Up @@ -59,6 +65,25 @@ protected Map<Dependency, List<Dependency>> getRequiredDependencyOptions()
return result;
}

@Override
public Stack getStack()
{
return JavaEE6Facet.STACK;
}

@Override
public int priority()
{
return 1;
}

@Override
public boolean supports(ProjectType projectType)
{
Set<Class<? extends ProjectFacet>> facets = Sets.toSet(projectType.getRequiredFacets());
return facets.contains(JavaSourceFacet.class);
}

@Override
public boolean uninstall()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,20 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.inject.Inject;

import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.facets.JavaEE7Facet;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.ProjectType;
import org.jboss.forge.addon.projects.dependencies.DependencyInstaller;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.furnace.util.Sets;
import org.jboss.forge.furnace.versions.SingleVersion;
import org.jboss.forge.furnace.versions.Version;

Expand All @@ -31,7 +37,6 @@
@FacetConstraint(DependencyFacet.class)
public class JavaEE7FacetImpl extends AbstractJavaEEFacet implements JavaEE7Facet
{

@Inject
public JavaEE7FacetImpl(DependencyInstaller installer)
{
Expand Down Expand Up @@ -64,6 +69,25 @@ protected Iterable<Dependency> getRequiredManagedDependenciesFor(Dependency depe
return Collections.emptySet();
}

@Override
public Stack getStack()
{
return JavaEE7Facet.STACK;
}

@Override
public boolean supports(ProjectType projectType)
{
Set<Class<? extends ProjectFacet>> facets = Sets.toSet(projectType.getRequiredFacets());
return facets.contains(JavaSourceFacet.class);
}

@Override
public int priority()
{
return 1;
}

@Override
public boolean uninstall()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.cdi.CDIFacet;
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.facets.ResourcesFacet;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
Expand All @@ -29,6 +31,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@FacetConstraint({ DependencyFacet.class, ResourcesFacet.class })
@StackConstraint({ CDIFacet.class })
public class CDISetupCommandImpl extends AbstractJavaEECommand implements CDISetupCommand
{
@Override
Expand All @@ -50,7 +53,11 @@ public Metadata getMetadata(UIContext context)
@Override
public void initializeUI(UIBuilder builder) throws Exception
{
builder.add(cdiVersion);
Project project = getSelectedProject(builder);
if (filterValueChoicesFromStack(project, cdiVersion))
{
builder.add(cdiVersion);
}
}

@Override
Expand All @@ -68,5 +75,4 @@ protected boolean isProjectRequired()
{
return true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;

import org.jboss.forge.addon.javaee.ejb.EJBFacet;
import org.jboss.forge.addon.javaee.ejb.EJBOperations;
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.resources.JavaResource;
import org.jboss.forge.addon.parser.java.resources.JavaResourceVisitor;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.visit.VisitContext;
import org.jboss.forge.addon.ui.context.UIBuilder;
Expand All @@ -39,6 +41,7 @@
import org.jboss.forge.roaster.model.source.AnnotationSource;
import org.jboss.forge.roaster.model.source.JavaClassSource;

@StackConstraint(EJBFacet.class)
public class EJBSetClassTransactionAttributeCommand extends AbstractJavaEECommand
{
@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
import javax.inject.Inject;

import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.javaee.ejb.EJBFacet;
import org.jboss.forge.addon.javaee.ejb.EJBOperations;
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.resources.JavaMethodResource;
import org.jboss.forge.addon.parser.java.resources.JavaResource;
import org.jboss.forge.addon.parser.java.resources.JavaResourceVisitor;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.resource.visit.VisitContext;
Expand All @@ -47,6 +49,7 @@
import org.jboss.forge.roaster.model.source.JavaSource;
import org.jboss.forge.roaster.model.source.MethodSource;

@StackConstraint(EJBFacet.class)
public class EJBSetMethodTransactionAttributeCommand extends AbstractJavaEECommand
{
@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
Expand All @@ -32,6 +33,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@FacetConstraint(DependencyFacet.class)
@StackConstraint(EJBFacet.class)
public class EJBSetupWizardImpl extends AbstractJavaEECommand implements EJBSetupWizard
{

Expand All @@ -53,7 +55,11 @@ public Metadata getMetadata(UIContext context)
@Override
public void initializeUI(UIBuilder builder) throws Exception
{
builder.add(ejbVersion);
Project project = getSelectedProject(builder);
if (filterValueChoicesFromStack(project, ejbVersion))
{
builder.add(ejbVersion);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.resources.JavaResource;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.ui.context.UIBuilder;
Expand All @@ -42,6 +43,7 @@
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@StackConstraint(EJBFacet.class)
public class NewEJBCommand extends AbstractJavaEECommand implements UIWizard
{
@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@
import javax.inject.Inject;

import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.javaee.ejb.EJBFacet;
import org.jboss.forge.addon.javaee.ejb.EJBOperations;
import org.jboss.forge.addon.javaee.ejb.JMSDestinationType;
import org.jboss.forge.addon.javaee.jms.JMSFacet;
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
import org.jboss.forge.addon.parser.java.resources.JavaResource;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
Expand All @@ -39,6 +41,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
@StackConstraint(EJBFacet.class)
public class NewMDBSetupStep extends AbstractJavaEECommand implements UIWizardStep
{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.jboss.forge.addon.parser.java.ui.AbstractJavaSourceCommand;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.projects.stacks.annotations.StackConstraint;
import org.jboss.forge.addon.ui.command.PrerequisiteCommandsProvider;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.result.NavigationResult;
Expand All @@ -29,6 +30,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
@StackConstraint(FacesFacet.class)
public abstract class AbstractFacesCommand<T extends JavaSource<?>> extends AbstractJavaSourceCommand<T>
implements PrerequisiteCommandsProvider
{
Expand Down

0 comments on commit 36c2fc3

Please sign in to comment.