Skip to content

Commit

Permalink
Merge pull request #541 from agoncal/FORGE-2261
Browse files Browse the repository at this point in the history
FORGE-2261: Refactoring the Bean Validation Commands
  • Loading branch information
gastaldi committed Mar 2, 2015
2 parents 2c0ab81 + ae8b35c commit 8ebe516
Show file tree
Hide file tree
Showing 11 changed files with 345 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
*/
public interface JavaEEFacet extends ProjectFacet
{
public static final String DEFAULT_ENTITY_PACKAGE = "model";
public static final String DEFAULT_CONSTRAINT_PACKAGE = "constraints";

/**
* Return the {@link Version} of the specification for which this facet represents.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.jboss.forge.addon.javaee.validation.ui;

import org.jboss.forge.addon.ui.command.UICommand;

/**
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
public interface ValidationNewPayloadCommand extends UICommand
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@ public abstract class AbstractJPAFacetImpl<DESCRIPTOR extends PersistenceCommonD
implements JPAFacet<DESCRIPTOR>
{

public static final String DEFAULT_ENTITY_PACKAGE = "model";

public AbstractJPAFacetImpl(DependencyInstaller installer)
{
super(installer);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.jboss.forge.addon.javaee.validation.ui;

import static org.jboss.forge.addon.javaee.JavaEEFacet.DEFAULT_CONSTRAINT_PACKAGE;

import org.jboss.forge.addon.javaee.validation.ValidationFacet;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.ui.AbstractJavaSourceCommand;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.ui.command.PrerequisiteCommandsProvider;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.result.NavigationResult;
import org.jboss.forge.addon.ui.result.navigation.NavigationResultBuilder;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.roaster.model.source.JavaSource;

/**
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
public abstract class AbstractValidationCommand<T extends JavaSource<?>> extends AbstractJavaSourceCommand<T>
implements PrerequisiteCommandsProvider
{

@Override
public Metadata getMetadata(UIContext context)
{
return Metadata.from(super.getMetadata(context), getClass())
.category(Categories.create(Categories.create("Java EE"), "Bean Validation"));
}

@Override
protected boolean isProjectRequired()
{
return true;
}

@Override
protected String calculateDefaultPackage(UIContext context)
{
return getSelectedProject(context).getFacet(JavaSourceFacet.class).getBasePackage() + "."
+ DEFAULT_CONSTRAINT_PACKAGE;
}

@Override
public NavigationResult getPrerequisiteCommands(UIContext context)
{
NavigationResultBuilder builder = NavigationResultBuilder.create();
Project project = getSelectedProject(context);
if (project != null)
{
if (!project.hasFacet(ValidationFacet.class))
{
builder.add(ValidationProviderSetupCommand.class);
}
}
return builder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,7 @@

package org.jboss.forge.addon.javaee.validation.ui;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
Expand All @@ -23,12 +18,9 @@
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;

import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.ui.AbstractJavaSourceCommand;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.roaster.model.source.JavaAnnotationSource;

Expand All @@ -37,28 +29,21 @@
*
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
public class ValidationNewAnnotationCommandImpl extends AbstractJavaSourceCommand<JavaAnnotationSource> implements
public class ValidationNewAnnotationCommandImpl extends AbstractValidationCommand<JavaAnnotationSource> implements
ValidationNewAnnotationCommand
{
@Override
public Metadata getMetadata(UIContext context)
{
return Metadata.from(super.getMetadata(context), getClass())
.name("Constraint: New Annotation")
.description("Create a Bean Validation constraint annotation")
.category(Categories.create(super.getMetadata(context).getCategory(), "Bean Validation"));
.description("Create a Bean Validation constraint annotation");
}

@Override
protected String getType()
{
return "Bean Validation Constraint Annotations";
}

@Override
protected boolean isProjectRequired()
{
return true;
return "Constraint Annotation";
}

@Override
Expand All @@ -67,12 +52,6 @@ protected Class<JavaAnnotationSource> getSourceType()
return JavaAnnotationSource.class;
}

@Override
protected String calculateDefaultPackage(UIContext context)
{
return getSelectedProject(context).getFacet(JavaSourceFacet.class).getBasePackage() + ".constraints";
}

@Override
public JavaAnnotationSource decorateSource(UIExecutionContext context, Project project,
JavaAnnotationSource constraint)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,15 @@
*/
package org.jboss.forge.addon.javaee.validation.ui;

import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.ui.AbstractJavaSourceCommand;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.roaster.model.source.JavaInterfaceSource;

/**
*
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
public class ValidationNewGroupCommandImpl extends AbstractJavaSourceCommand<JavaInterfaceSource> implements
public class ValidationNewGroupCommandImpl extends AbstractValidationCommand<JavaInterfaceSource> implements
ValidationNewGroupCommand
{

Expand All @@ -26,31 +23,18 @@ public Metadata getMetadata(UIContext context)
{
return Metadata.from(super.getMetadata(context), getClass())
.name("Constraint: New Group")
.description("Create a Bean Validation group")
.category(Categories.create(super.getMetadata(context).getCategory(), "Bean Validation"));
.description("Create a Bean Validation group");
}

@Override
protected String getType()
{
return "Bean Validation Group";
return "Constraint Group";
}

@Override
protected Class<JavaInterfaceSource> getSourceType()
{
return JavaInterfaceSource.class;
}

@Override
protected boolean isProjectRequired()
{
return true;
}

@Override
protected String calculateDefaultPackage(UIContext context)
{
return getSelectedProject(context).getFacet(JavaSourceFacet.class).getBasePackage() + ".constraints";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.jboss.forge.addon.javaee.validation.ui;

import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.roaster.model.source.JavaClassSource;

import javax.validation.Payload;

/**
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
public class ValidationNewPayloadCommandImpl extends AbstractValidationCommand<JavaClassSource> implements ValidationNewPayloadCommand
{
@Override
public Metadata getMetadata(UIContext context)
{
return Metadata.from(super.getMetadata(context), getClass())
.name("Constraint: New Payload")
.description("Create a Bean Validation payload");
}

@Override
protected String getType()
{
return "Constraint Payload";
}

@Override
protected Class<JavaClassSource> getSourceType()
{
return JavaClassSource.class;
}

@Override
public JavaClassSource decorateSource(UIExecutionContext context, Project project, JavaClassSource source) throws Exception {
source.addInterface(Payload.class);
return source;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,19 @@
package org.jboss.forge.addon.javaee.validation.ui;

import static org.hamcrest.CoreMatchers.*;
import static org.jboss.forge.addon.javaee.JavaEEFacet.DEFAULT_CONSTRAINT_PACKAGE;
import static org.junit.Assert.*;

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;
import javax.validation.Constraint;
import javax.validation.ReportAsSingleViolation;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.javaee.ProjectHelper;
import org.jboss.forge.addon.javaee.validation.ValidationFacet;
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;
Expand All @@ -38,6 +42,7 @@
import org.junit.runner.RunWith;

/**
* Tests the creation of a new Bean Validation constraint annotation
*
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
Expand All @@ -61,11 +66,11 @@ public static AddonArchive getDeployment()
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"),
AddonDependencyEntry.create("org.jboss.forge.addon:projects"),
AddonDependencyEntry.create("org.jboss.forge.addon:javaee"),
AddonDependencyEntry.create("org.jboss.forge.addon:maven"),
AddonDependencyEntry.create("org.jboss.forge.addon:shell-test-harness"),
AddonDependencyEntry.create("org.jboss.forge.addon:ui"),
AddonDependencyEntry.create("org.jboss.forge.addon:ui-test-harness")
AddonDependencyEntry.create("org.jboss.forge.addon:ui-test-harness"),
AddonDependencyEntry.create("org.jboss.forge.addon:shell-test-harness"),
AddonDependencyEntry.create("org.jboss.forge.addon:javaee"),
AddonDependencyEntry.create("org.jboss.forge.addon:maven")
);
}

Expand Down Expand Up @@ -96,19 +101,30 @@ public void checkCommandMetadata() throws Exception
controller.initialize();
// Checks the command metadata
assertTrue(controller.getCommand() instanceof ValidationNewAnnotationCommand);
assertTrue(controller.getCommand() instanceof AbstractValidationCommand);
UICommandMetadata metadata = controller.getMetadata();
assertEquals("Constraint: New Annotation", metadata.getName());
assertEquals("Java", metadata.getCategory().getName());
assertEquals("Java EE", metadata.getCategory().getName());
assertEquals("Bean Validation", metadata.getCategory().getSubCategory().getName());
assertEquals(3, controller.getInputs().size());
assertFalse("Project is created, shouldn't have targetLocation", controller.hasInput("targetLocation"));
assertTrue(controller.hasInput("named"));
assertTrue(controller.hasInput("targetPackage"));
assertTrue(controller.hasInput("overwrite"));
assertTrue(controller.getValueFor("targetPackage").toString().endsWith(".constraints"));
assertTrue(controller.getValueFor("targetPackage").toString().endsWith(DEFAULT_CONSTRAINT_PACKAGE));
}
}

@Test
public void checkCommandShell() throws Exception
{
shellTest.getShell().setCurrentResource(project.getRoot());
Result result = shellTest.execute(("constraint-new-annotation --named Dummy"), 10, TimeUnit.SECONDS);

Assert.assertThat(result, not(instanceOf(Failed.class)));
Assert.assertTrue(project.hasFacet(ValidationFacet.class));
}

@Test
public void testCreateNewAnnotation() throws Exception
{
Expand Down
Loading

0 comments on commit 8ebe516

Please sign in to comment.