Skip to content

Commit

Permalink
FORGE-2316: Introduced StackSupport
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Jan 14, 2016
1 parent 3d25a9b commit e8f7a07
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
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.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.addon.projects.stacks.StackFacet;

Expand All @@ -33,6 +34,7 @@ public interface JavaEE6Facet extends JavaEESpecFacet
*/
public static final Stack STACK = stack("Java EE 6")
.includes(JavaEE6Facet.class)
.includes(JavaSourceFacet.class)
.includes(CDIFacet_1_0.class)
.includes(EJBFacet_3_1.class)
.includes(FacesFacet_2_0.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
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.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.addon.projects.stacks.StackFacet;

Expand All @@ -34,6 +35,7 @@ public interface JavaEE7Facet extends JavaEESpecFacet
*/
public static final Stack STACK = stack("Java EE 7")
.includes(JavaEE7Facet.class)
.includes(JavaSourceFacet.class)
.includes(CDIFacet_1_1.class)
.includes(EJBFacet_3_2.class)
.includes(FacesFacet_2_2.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,16 @@
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 @@ -71,13 +66,6 @@ public Stack getStack()
return JavaEE6Facet.STACK;
}

@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,20 +12,15 @@
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 Down Expand Up @@ -75,13 +70,6 @@ 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 boolean uninstall()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.jboss.forge.addon.projects;

import org.jboss.forge.addon.projects.stacks.Stack;
import org.jboss.forge.addon.projects.stacks.StackSupport;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UINavigationContext;
import org.jboss.forge.addon.ui.result.NavigationResult;
Expand All @@ -12,7 +14,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*/
public interface ProjectType
public interface ProjectType extends StackSupport
{
/**
* Return the human-readable name for this {@link ProjectType}. This should be relatively unique.
Expand Down Expand Up @@ -64,4 +66,18 @@ default boolean isEnabled(UIContext context)
{
return true;
}

@Override
default boolean supports(Stack stack)
{
// By default, check if the required facets are supported by the given stack
for (Class<? extends ProjectFacet> requiredFacet : getRequiredFacets())
{
if (stack.supports(requiredFacet))
{
return true;
}
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

import org.jboss.forge.addon.facets.Facet;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.ProjectType;

/**
* A {@link StackFacet} represents a set of {@link Facet}s allowed in a project
Expand All @@ -22,12 +21,4 @@ public interface StackFacet extends ProjectFacet
* @return the {@link Stack} bound to this project
*/
Stack getStack();

/**
* Does this {@link StackFacet} support the given {@link ProjectType} in the New Project wizard?
*
* @param projectType the project type chosen in the NewProjectWizard
* @return <code>true</code> if the stack provided by {@link #getStack()} supports the given {@link ProjectType}
*/
boolean supports(ProjectType projectType);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright 2016 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.projects.stacks;

/**
* Classes implementing this interface may declare if they support the given {@link Stack}
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*/
@FunctionalInterface
public interface StackSupport
{
/**
* @param stack the stack to be tested upon
* @return <code>true</code> if this object supports the given {@link Stack}
*/
boolean supports(Stack stack);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectType;

/**
* This is a {@link StackFacet} implementation placeholder
Expand All @@ -35,10 +34,4 @@ public Stack getStack()
{
return NoStack.INSTANCE;
}

@Override
public boolean supports(ProjectType projectType)
{
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,8 @@ private void configureStack(InputComponentFactory factory, final UIContext conte
.setLabel("Stack")
.setDescription("The technology stack to be used in this project")
.setValueChoices(() -> list.stream()
.filter((stackFacet) -> stackFacet.supports(type.getValue()))
.filter((stackFacet) -> (type.hasValue() || type.hasDefaultValue())
&& type.getValue().supports(stackFacet.getStack()))
.collect(Collectors.toSet()))
.setDefaultValue(defaultStack)
.setItemLabelConverter((facet) -> context.getProvider().isGUI() ? facet.getStack().getName()
Expand Down

0 comments on commit e8f7a07

Please sign in to comment.