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 99d1a6c
Show file tree
Hide file tree
Showing 23 changed files with 877 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,25 @@

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.jpa.JPAFacet_2_0;
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(JPAFacet_2_0.class);

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,25 @@

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.jpa.JPAFacet_2_1;
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(JPAFacet_2_1.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 @@ -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 @@ -12,9 +12,11 @@
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.cdi.CDIFacet;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
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,8 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@FacetConstraint({ DependencyFacet.class, ResourcesFacet.class })
// Change to CDIFacet.class
@StackConstraint({ CDIFacet_1_1.class })
public class CDISetupCommandImpl extends AbstractJavaEECommand implements CDISetupCommand
{
@Override
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 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(JMSFacet.class)
public class JMSSetupWizard extends AbstractJavaEECommand
{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@

package org.jboss.forge.addon.javaee.jpa.ui.setup;

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import javax.inject.Inject;

import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.jpa.JPAFacet;
Expand All @@ -25,11 +24,13 @@
import org.jboss.forge.addon.javaee.ui.AbstractJavaEECommand;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.addon.projects.stacks.StackFacet;
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;
import org.jboss.forge.addon.ui.context.UINavigationContext;
import org.jboss.forge.addon.ui.context.UIValidationContext;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.input.UISelectOne;
import org.jboss.forge.addon.ui.metadata.WithAttributes;
Expand All @@ -41,6 +42,7 @@
import org.jboss.forge.furnace.services.Imported;

@FacetConstraint(JavaSourceFacet.class)
@StackConstraint(JPAFacet.class)
public class JPASetupWizardImpl extends AbstractJavaEECommand implements JPASetupWizard
{
@Inject
Expand Down Expand Up @@ -82,32 +84,55 @@ public Metadata getMetadata(UIContext context)
@Override
public void initializeUI(UIBuilder builder) throws Exception
{
initContainers(builder.getUIContext());
UIContext uiContext = builder.getUIContext();
if (initJpaVersion(uiContext))
{
builder.add(jpaVersion);
}
initContainers(uiContext);
initProviders();
initConfigureMetadata();
builder.add(jpaVersion).add(container).add(provider).add(configureMetadata);
builder.add(container).add(provider).add(configureMetadata);
}

private void initContainers(UIContext context)
@SuppressWarnings({ "rawtypes", "unchecked" })
private boolean initJpaVersion(UIContext context)
{
final boolean isGUI = context.getProvider().isGUI();
container.setItemLabelConverter(new Converter<PersistenceContainer, String>()
final Project project = getSelectedProject(context);
if (project.hasFacet(JPAFacet.class))
{
@Override
public String convert(PersistenceContainer source)
{
return source != null ? source.getName(isGUI) : null;
}
});
// Ordering items:
TreeSet<PersistenceContainer> treeSet = new TreeSet<>(new Comparator<PersistenceContainer>()
// If JPA is already installed, do not ask for JPA Version
jpaVersion.setEnabled(false);
return false;
}
else
{
@Override
public int compare(PersistenceContainer o1, PersistenceContainer o2)
// Filtering only supported facets
// TODO: Should this be moved to DefaultFacetComponentEnricher?
if (project.hasFacet(StackFacet.class))
{
return String.valueOf(o1.getName(isGUI)).compareTo(o2.getName(isGUI));
StackFacet stackFacet = project.getFacet(StackFacet.class);
Stack stack = stackFacet.getStack();
Iterable valueChoices = jpaVersion.getValueChoices();
Set filter = stack.filter(JPAFacet.class, valueChoices);
jpaVersion.setValueChoices(filter);
if (filter.size() == 1)
{
jpaVersion.setDefaultValue((JPAFacet<?>) filter.iterator().next());
return false;
}
}
});
return true;
}
}

private void initContainers(UIContext context)
{
final boolean isGUI = context.getProvider().isGUI();
container.setItemLabelConverter((source) -> source.getName(isGUI));
// Ordering items:
TreeSet<PersistenceContainer> treeSet = new TreeSet<>(
(o1, o2) -> String.valueOf(o1.getName(isGUI)).compareTo(o2.getName(isGUI)));
Iterable<PersistenceContainer> valueChoices = container.getValueChoices();
for (PersistenceContainer persistenceContainer : valueChoices)
{
Expand All @@ -119,14 +144,7 @@ public int compare(PersistenceContainer o1, PersistenceContainer o2)

private void initProviders()
{
provider.setItemLabelConverter(new Converter<PersistenceProvider, String>()
{
@Override
public String convert(PersistenceProvider source)
{
return source != null ? source.getName() : null;
}
});
provider.setItemLabelConverter((source) -> source.getName());
provider.setDefaultValue(defaultProvider);
}

Expand All @@ -139,24 +157,26 @@ private void initConfigureMetadata()
}
}

@Override
public void validate(UIValidationContext validator)
{
// NOOP
}

@Override
public Result execute(final UIExecutionContext context) throws Exception
{
applyUIValues(context.getUIContext());
Project project = getSelectedProject(context);
JPAFacet<?> facet = jpaVersion.getValue();
if (facetFactory.install(project, facet))
if (jpaVersion.isEnabled())
{
JPAFacet<?> facet = jpaVersion.getValue();
if (facetFactory.install(project, facet))
{
context.getUIContext().setSelection(facet.getConfigFile());
return Results.success();
}
}
else
{
context.getUIContext().setSelection(facet.getConfigFile());
return Results.success();
}
return Results.fail("Could not install JPA.");

}

@Override
Expand Down

0 comments on commit 99d1a6c

Please sign in to comment.