Skip to content

Commit

Permalink
Implements FORGE-1102 - Facet dependencies should be registered in co…
Browse files Browse the repository at this point in the history
…rrect order, and optional dependencies should be respected.
  • Loading branch information
lincolnthree committed Sep 5, 2013
1 parent 9ec04e1 commit 0627909
Show file tree
Hide file tree
Showing 60 changed files with 709 additions and 203 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
package org.jboss.forge.addon.addons.facets;

import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
Expand All @@ -20,7 +20,7 @@
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*/
@RequiresFacet({ JavaSourceFacet.class, DefaultFurnaceContainerAPIFacet.class, CDIFacet_1_1.class })
@FacetConstraint({ JavaSourceFacet.class, DefaultFurnaceContainerAPIFacet.class, CDIFacet_1_1.class })
public class AddonAPIFacet extends AbstractFacet<Project> implements ProjectFacet
{
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
package org.jboss.forge.addon.addons.facets;

import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
Expand All @@ -20,7 +20,7 @@
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*/
@RequiresFacet({ JavaSourceFacet.class, FurnacePluginFacet.class, FurnacePluginFacet.class, AddonClassifierFacet.class,
@FacetConstraint({ JavaSourceFacet.class, FurnacePluginFacet.class, FurnacePluginFacet.class, AddonClassifierFacet.class,
DefaultFurnaceContainerFacet.class, CDIFacet_1_1.class })
public class AddonAddonFacet extends AbstractFacet<Project> implements ProjectFacet
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
package org.jboss.forge.addon.addons.facets;

import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
Expand All @@ -20,7 +20,7 @@
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet({ JavaSourceFacet.class, DefaultFurnaceContainerAPIFacet.class, CDIFacet_1_1.class })
@FacetConstraint({ JavaSourceFacet.class, DefaultFurnaceContainerAPIFacet.class, CDIFacet_1_1.class })
public class AddonImplFacet extends AbstractFacet<Project> implements ProjectFacet
{
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.parser.java.facets.JavaCompilerFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
Expand All @@ -23,7 +23,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet({ JavaCompilerFacet.class, FurnaceVersionFacet.class })
@FacetConstraint({ JavaCompilerFacet.class, FurnaceVersionFacet.class })
public class AddonParentFacet extends AbstractFacet<Project> implements ProjectFacet
{
@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
package org.jboss.forge.addon.addons.facets;

import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
Expand All @@ -19,7 +19,7 @@
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*/
@RequiresFacet({ JavaSourceFacet.class, FurnacePluginFacet.class, AddonClassifierFacet.class, FurnaceAPIFacet.class })
@FacetConstraint({ JavaSourceFacet.class, FurnacePluginFacet.class, AddonClassifierFacet.class, FurnaceAPIFacet.class })
public class AddonSPIFacet extends AbstractFacet<Project> implements ProjectFacet
{
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
Expand All @@ -31,7 +31,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet({ JavaSourceFacet.class, DependencyFacet.class, FurnaceVersionFacet.class,
@FacetConstraint({ JavaSourceFacet.class, DependencyFacet.class, FurnaceVersionFacet.class,
DefaultFurnaceContainerFacet.class })
public class AddonTestFacet extends AbstractFacet<Project> implements ProjectFacet
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.dependencies.DependencyInstaller;
Expand All @@ -21,7 +21,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet({ FurnaceVersionFacet.class })
@FacetConstraint({ FurnaceVersionFacet.class })
public class DefaultFurnaceContainerAPIFacet extends AbstractFacet<Project> implements ProjectFacet
{
public static Dependency FURNACE_CONTAINER_API_DEPENDENCY = DependencyBuilder.create()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.dependencies.DependencyInstaller;
Expand All @@ -21,7 +21,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet({ FurnaceVersionFacet.class })
@FacetConstraint({ FurnaceVersionFacet.class })
public class DefaultFurnaceContainerFacet extends AbstractFacet<Project> implements ProjectFacet
{
public static Dependency FURNACE_CONTAINER_DEPENDENCY = DependencyBuilder.create()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.dependencies.DependencyInstaller;
Expand All @@ -21,7 +21,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet({ FurnaceVersionFacet.class })
@FacetConstraint({ FurnaceVersionFacet.class })
public class FurnaceAPIFacet extends AbstractFacet<Project> implements ProjectFacet
{
public static Dependency FURNACE_API_DEPENDENCY = DependencyBuilder.create()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.maven.plugins.ConfigurationBuilder;
import org.jboss.forge.addon.maven.plugins.ConfigurationElementBuilder;
import org.jboss.forge.addon.maven.plugins.Execution;
Expand All @@ -26,7 +26,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*/
@RequiresFacet(FurnaceVersionFacet.class)
@FacetConstraint(FurnaceVersionFacet.class)
public class FurnacePluginFacet extends AbstractFacet<Project> implements ProjectFacet
{
private static final CoordinateBuilder FURNACE_PLUGIN_COORDINATE = CoordinateBuilder.create()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
package org.jboss.forge.addon.addons.facets;

import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.facets.constraints.RequiresFacet;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.addon.projects.facets.MetadataFacet;
Expand All @@ -17,7 +17,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@RequiresFacet(MetadataFacet.class)
@FacetConstraint(MetadataFacet.class)
public class FurnaceVersionFacet extends AbstractFacet<Project> implements ProjectFacet
{
public static final String VERSION_PROPERTY = "${version.furnace}";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public <FACETEDTYPE extends Faceted<?>, FACETTYPE extends Facet<FACETEDTYPE>> It
* @throws IllegalStateException if installation failed
*/
public <FACETEDTYPE extends Faceted<?>, FACETTYPE extends Facet<FACETEDTYPE>> FACETTYPE install(
FACETEDTYPE origin, Class<FACETTYPE> type) throws FacetNotFoundException, IllegalStateException;
FACETEDTYPE origin, Class<FACETTYPE> type) throws FacetNotFoundException, IllegalStateException,
FacetIsAmbiguousException;

/**
* Install a {@link Facet} instance into the given {@link Faceted} origin.
Expand All @@ -59,7 +60,7 @@ public <FACETEDTYPE extends Faceted<?>, FACETTYPE extends Facet<FACETEDTYPE>> FA
* @return <code>true</code> if installation was successful; <code>false</code> if installation failed.
*/
public <FACETEDTYPE extends Faceted<?>, FACETTYPE extends Facet<FACETEDTYPE>> boolean install(
FACETEDTYPE origin, FACETTYPE facet) throws IllegalArgumentException;
FACETEDTYPE origin, FACETTYPE facet) throws IllegalArgumentException, IllegalStateException;

/**
* Register a {@link Facet} type into the given {@link Faceted} origin. (Facets may be registered when their
Expand All @@ -68,16 +69,17 @@ public <FACETEDTYPE extends Faceted<?>, FACETTYPE extends Facet<FACETEDTYPE>> bo
* @throws IllegalArgumentException when the given {@link Facet#getFaceted()} is not equal to the specified
* {@link Faceted} origin instance, or if the given {@link Faceted} type does not implement
* {@link MutableFaceted}.
*
* @return the new {@link Facet} instance. (Never null.)
*
* @throws FacetNotFoundException if no implementation can be found.
* @throws FacetIsAmbiguousException if the given facet type is an interface or abstract class, and multiple
* implementations were found.
* @throws IllegalStateException if installation failed
* @throws IllegalStateException if installation failed.
*
* @return the new {@link Facet} instance. (Never null.)
*
*/
public <FACETEDTYPE extends Faceted<?>, FACETTYPE extends Facet<FACETEDTYPE>> FACETTYPE register(
FACETEDTYPE origin, Class<FACETTYPE> type) throws FacetNotFoundException, IllegalStateException;
FACETEDTYPE origin, Class<FACETTYPE> type) throws FacetNotFoundException, IllegalStateException,
FacetIsAmbiguousException, IllegalArgumentException;

/**
* Register a {@link Facet} instance into the given {@link Faceted} origin. (Facets may be registered when their
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,22 @@
import org.jboss.forge.addon.facets.Faceted;

/**
* The annotated element requires the given {@link Facet} types.
* The annotated element has a relationship depending on the given {@link Facet} types.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface RequiresFacet
public @interface FacetConstraint
{
/**
* The facets required by the annotated {@link Faceted}
*/
Class<? extends Facet<?>>[] value();

/**
* The type of this constraint.
*/
FacetConstraintType type() default FacetConstraintType.REQUIRED;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
* 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.facets.constraints;

/**
* Specifies the type of a corresponding {@link FacetConstraint}.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public enum FacetConstraintType
{
REQUIRED, OPTIONAL;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* 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.facets.constraints;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.jboss.forge.addon.facets.Facet;

/**
* Allows multiple {@link FacetConstraint} instances to be specified on a given element.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FacetConstraints
{
/**
* The facets constraints for the annotated {@link Facet}
*/
FacetConstraint[] value();
}

0 comments on commit 0627909

Please sign in to comment.