Skip to content

Commit

Permalink
FORGE-2080: Added enabled flag in CDI New DecoratorCommand
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Jan 14, 2016
1 parent 5707c14 commit 06115a3
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,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 @@ -20,6 +21,7 @@
/**
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
@StackConstraint(CDIFacet.class)
public abstract class AbstractCDICommand<T extends JavaSource<?>> extends AbstractJavaSourceCommand<T>
implements PrerequisiteCommandsProvider
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import javax.decorator.Delegate;
import javax.inject.Inject;

import org.jboss.forge.addon.javaee.cdi.CDIFacet;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_0;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
Expand All @@ -20,6 +23,7 @@
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.roaster.model.source.FieldSource;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.shrinkwrap.descriptor.api.beans10.BeansDescriptor;

/**
* Creates a new CDI Decorator
Expand All @@ -32,6 +36,10 @@ public class CDINewDecoratorCommand extends AbstractCDICommand<JavaClassSource>
@WithAttributes(label = "Interface to delegate", required = true)
private UIInput<String> delegate;

@Inject
@WithAttributes(label = "Enabled", description = "Adds to beans.xml")
private UIInput<Boolean> enabled;

@Override
public Metadata getMetadata(UIContext context)
{
Expand All @@ -40,23 +48,23 @@ public Metadata getMetadata(UIContext context)
.description("Creates a new CDI Decorator");
}

@Override
protected String getType()
{
return "CDI Decorator";
}
@Override
protected String getType()
{
return "CDI Decorator";
}

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

@Override
public void initializeUI(UIBuilder builder) throws Exception
{
super.initializeUI(builder);
builder.add(delegate);
builder.add(delegate).add(enabled);
}

@Override
Expand All @@ -68,7 +76,25 @@ public JavaClassSource decorateSource(UIExecutionContext context, Project projec
FieldSource<?> field = decorator.addField().setPrivate().setName("delegate").setType(delegate.getValue());
field.addAnnotation(Inject.class);
field.addAnnotation(Delegate.class);

if (enabled.getValue())
{
CDIFacet<?> facet = project.getFacet(CDIFacet.class);
// TODO: Create a parent BeansDescriptor
if (facet instanceof CDIFacet_1_0)
{
CDIFacet_1_0 cdiFacet_1_0 = (CDIFacet_1_0) facet;
BeansDescriptor bd = cdiFacet_1_0.getConfig();
bd.getOrCreateDecorators().clazz(decorator.getQualifiedName());
cdiFacet_1_0.saveConfig(bd);
}
else if (facet instanceof CDIFacet_1_1)
{
CDIFacet_1_1 cdiFacet_1_1 = (CDIFacet_1_1) facet;
org.jboss.shrinkwrap.descriptor.api.beans11.BeansDescriptor bd = cdiFacet_1_1.getConfig();
bd.getOrCreateDecorators().clazz(decorator.getQualifiedName());
cdiFacet_1_1.saveConfig(bd);
}
}
return decorator;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

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

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
Expand All @@ -16,6 +17,7 @@
import static org.junit.Assert.assertTrue;

import java.lang.annotation.Inherited;
import java.util.List;
import java.util.concurrent.TimeUnit;

import javax.decorator.Decorator;
Expand All @@ -25,6 +27,7 @@
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.javaee.ProjectHelper;
import org.jboss.forge.addon.javaee.cdi.CDIFacet;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_0;
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 Down Expand Up @@ -103,12 +106,13 @@ public void checkCommandMetadata() throws Exception
assertEquals("CDI: New Decorator", metadata.getName());
assertEquals("Java EE", metadata.getCategory().getName());
assertEquals("CDI", metadata.getCategory().getSubCategory().getName());
assertEquals(4, controller.getInputs().size());
assertEquals(5, 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.hasInput("delegate"));
assertTrue(controller.hasInput("enabled"));
assertTrue(controller.getValueFor("targetPackage").toString().endsWith(DEFAULT_CDI_PACKAGE));
}
}
Expand Down Expand Up @@ -150,5 +154,40 @@ public void testCreateNewDecorator() throws Exception
Assert.assertTrue(ann.isAbstract());
Assert.assertTrue(ann.hasField("delegate"));
Assert.assertFalse(ann.hasAnnotation(Inherited.class));
CDIFacet_1_0 cdiFacet = project.getFacet(CDIFacet_1_0.class);
List<String> allClazz = cdiFacet.getConfig().getOrCreateDecorators().getAllClazz();
Assert.assertThat(allClazz.size(), is(0));
}

@Test
public void testCreateNewEnabledDecorator() throws Exception
{
try (CommandController controller = uiTestHarness.createCommandController(CDINewDecoratorCommand.class,
project.getRoot()))
{
controller.initialize();
controller.setValueFor("named", "MyDecorator");
controller.setValueFor("targetPackage", "org.jboss.forge.test");
controller.setValueFor("delegate", "java.io.Serializable");
controller.setValueFor("enabled", true);
Assert.assertTrue(controller.isValid());
Assert.assertTrue(controller.canExecute());
Result result = controller.execute();
Assert.assertThat(result, is(not(instanceOf(Failed.class))));
}

JavaSourceFacet facet = project.getFacet(JavaSourceFacet.class);
JavaResource javaResource = facet.getJavaResource("org.jboss.forge.test.MyDecorator");
Assert.assertNotNull(javaResource);
Assert.assertThat(javaResource.getJavaType(), is(instanceOf(JavaClass.class)));
JavaClass<?> ann = javaResource.getJavaType();
Assert.assertTrue(ann.hasAnnotation(Decorator.class));
Assert.assertTrue(ann.isAbstract());
Assert.assertTrue(ann.hasField("delegate"));
Assert.assertFalse(ann.hasAnnotation(Inherited.class));
CDIFacet_1_0 cdiFacet = project.getFacet(CDIFacet_1_0.class);
List<String> allClazz = cdiFacet.getConfig().getOrCreateDecorators().getAllClazz();
Assert.assertThat(allClazz.size(), is(1));
Assert.assertThat(allClazz.get(0), equalTo("org.jboss.forge.test.MyDecorator"));
}
}

0 comments on commit 06115a3

Please sign in to comment.