Skip to content

Commit

Permalink
FORGE-2324: Being able to create Servlet Filter
Browse files Browse the repository at this point in the history
  • Loading branch information
agoncal committed Jul 31, 2015
1 parent 22ffdb1 commit ed03d3b
Show file tree
Hide file tree
Showing 2 changed files with 215 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/**
* Copyright 2014 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.javaee.servlet.ui;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

import org.jboss.forge.addon.projects.Project;
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.util.Metadata;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.source.MethodSource;

/**
* Creates a new Servlet
*
* @author <a href="mailto:antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
public class ServletNewFilterCommand extends AbstractServletNewCommand<JavaClassSource>
{

@Override
public Metadata getMetadata(UIContext context)
{
return Metadata.from(super.getMetadata(context), getClass())
.name("Servlet: New Filter")
.description("Creates a new Servlet Filter");
}

@Override
protected String getType()
{
return "Servlet Filter";
}

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

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

@Override
public JavaClassSource decorateSource(UIExecutionContext context, Project project, JavaClassSource source)
throws Exception
{
source.addInterface(Filter.class).addAnnotation(WebFilter.class);

MethodSource<?> init = source.addMethod().setPublic().setName("init").setReturnTypeVoid();
init.addParameter(FilterConfig.class, "filterConfig");
init.addThrows(ServletException.class);
init.setBody("").addAnnotation(Override.class);

MethodSource<?> doFilter = source.addMethod().setPublic().setName("doFilter").setReturnTypeVoid();
doFilter.addParameter(ServletRequest.class, "request");
doFilter.addParameter(ServletResponse.class, "response");
doFilter.addParameter(FilterChain.class, "chain");
doFilter.addThrows(IOException.class);
doFilter.addThrows(ServletException.class);
doFilter.setBody("").addAnnotation(Override.class);

MethodSource<?> destroy = source.addMethod().setPublic().setName("destroy").setReturnTypeVoid();
destroy.setBody("").addAnnotation(Override.class);

return source;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
/**
* Copyright 2014 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.javaee.servlet.ui;

import static org.hamcrest.CoreMatchers.*;
import static org.jboss.forge.addon.javaee.JavaEEPackageConstants.DEFAULT_SERVLET_PACKAGE;
import static org.junit.Assert.*;

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;
import javax.servlet.annotation.WebFilter;

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.servlet.ServletFacet;
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;
import org.jboss.forge.addon.shell.test.ShellTest;
import org.jboss.forge.addon.ui.controller.CommandController;
import org.jboss.forge.addon.ui.metadata.UICommandMetadata;
import org.jboss.forge.addon.ui.result.Failed;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.test.UITestHarness;
import org.jboss.forge.arquillian.AddonDependencies;
import org.jboss.forge.arquillian.archive.AddonArchive;
import org.jboss.forge.roaster.model.JavaClass;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
*
* @author <a href="antonio.goncalves@gmail.com">Antonio Goncalves</a>
*/
@RunWith(Arquillian.class)
public class ServletNewFilterCommandTest
{
@Deployment
@AddonDependencies
public static AddonArchive getDeployment()
{
return ShrinkWrap.create(AddonArchive.class).addBeansXML().addClass(ProjectHelper.class);
}

@Inject
private UITestHarness uiTestHarness;

@Inject
private ShellTest shellTest;

@Inject
private ProjectHelper projectHelper;

private Project project;

@Before
public void setUp()
{
project = projectHelper.createJavaLibraryProject();
projectHelper.installServlet_3_1(project);
}

@Test
public void checkCommandMetadata() throws Exception
{
try (CommandController controller = uiTestHarness.createCommandController(ServletNewFilterCommand.class,
project.getRoot()))
{
controller.initialize();
// Checks the command metadata
assertTrue(controller.getCommand() instanceof ServletNewFilterCommand);
assertTrue(controller.getCommand() instanceof AbstractServletNewCommand);
UICommandMetadata metadata = controller.getMetadata();
assertEquals("Servlet: New Filter", metadata.getName());
assertEquals("Java EE", metadata.getCategory().getName());
assertEquals("Servlet", 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(DEFAULT_SERVLET_PACKAGE));
}
}

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

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

@Test
public void testCreateNewServletFilter() throws Exception
{
try (CommandController controller = uiTestHarness.createCommandController(ServletNewFilterCommand.class,
project.getRoot()))
{
controller.initialize();
controller.setValueFor("named", "MyFilter");
controller.setValueFor("targetPackage", "org.jboss.forge.test");
assertTrue(controller.isValid());
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.MyFilter");
assertNotNull(javaResource);
assertThat(javaResource.getJavaType(), is(instanceOf(JavaClass.class)));
assertEquals(0, javaResource.getJavaType().getSyntaxErrors().size());
assertTrue(javaResource.getJavaType().hasAnnotation(WebFilter.class));
assertEquals(3, ((JavaClass<?>) javaResource.getJavaType()).getMethods().size());
}
}

0 comments on commit ed03d3b

Please sign in to comment.