Skip to content

Commit

Permalink
Merge branch 'issue431' into 1.4.x
Browse files Browse the repository at this point in the history
  • Loading branch information
alexo committed May 14, 2012
2 parents 635d0ee + d8f4e9d commit 889fa73
Show file tree
Hide file tree
Showing 8 changed files with 174 additions and 31 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -7,7 +7,7 @@
<version>1.4.7-SNAPSHOT</version>
<packaging>pom</packaging>

<name>Web Resource Optimizer Parent</name>
<name>wro4j parent</name>
<inceptionYear>2008</inceptionYear>
<url>http://code.google.com/p/wro4j/</url>

Expand Down
19 changes: 10 additions & 9 deletions wro4j-core/src/main/java/ro/isdc/wro/config/Context.java
Expand Up @@ -248,15 +248,6 @@ public static void destroy() {
CONTEXT_MAP.clear();
}


/**
* {@inheritDoc}
*/
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}

/**
* Set the correlationId to the current thread.
*/
Expand All @@ -283,4 +274,14 @@ public static String getCorrelationId() {
validateContext();
return CORRELATION_ID.get();
}


/**
* {@inheritDoc}
*/
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}

}
71 changes: 71 additions & 0 deletions wro4j-core/src/main/java/ro/isdc/wro/http/WroContextFilter.java
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2008. All rights reserved.
*/
package ro.isdc.wro.http;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.http.support.ServletContextAttributeHelper;


/**
* This filter is responsible for setting the {@link Context} to the current request cycle. This is required if you want
* to use {@link ServletContextAttributeHelper} in order to access wro related attributes from within a tag or a
* servlet. Usually this filter will be mapped to all requests:
*
* <pre>
* <filter-mapping>
* <filter-name>wroContextFilter</filter-name>
* <url-pattern>/*</url-pattern>
* </filter-mapping>
*
* </pre>
*
* @author Alex Objelean
* @created 12 May 2012
* @since 1.4.7
*/
public class WroContextFilter
implements Filter {
private FilterConfig filterConfig;

/**
* {@inheritDoc}
*/
public void init(final FilterConfig filterConfig)
throws ServletException {
this.filterConfig = filterConfig;
}

/**
* {@inheritDoc}
*/
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain)
throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
try {
Context.set(Context.webContext(request, response, this.filterConfig));
chain.doFilter(request, response);
} finally {
Context.unset();
}
}

/**
* {@inheritDoc}
*/
public void destroy() {
Context.destroy();
}
}
@@ -0,0 +1,67 @@
/*
* Copyright (c) 2010. All rights reserved.
*/
package ro.isdc.wro.http;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import ro.isdc.wro.config.Context;


/**
* Test for {@link WroFilter} class.
*
* @author Alex Objelean
* @created Created on Jul 13, 2009
*/
public class TestWroContextFilter {
private WroContextFilter victim;
@Mock
private FilterConfig mockFilterConfig;
@Mock
private ServletContext mockServletContext;
@Mock
private HttpServletRequest mockRequest;
@Mock
private HttpServletResponse mockResponse;
@Mock
private FilterChain mockFilterChain;

@Before
public void setUp()
throws Exception {
MockitoAnnotations.initMocks(this);
victim = new WroContextFilter();
Mockito.when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
victim.init(mockFilterConfig);
}

@Test
public void shouldInitializeContextForChainedFilters() throws Exception {
Mockito.doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation)
throws Throwable {
Assert.assertTrue(Context.isContextSet());
return null;
}
}).when(mockFilterChain).doFilter(Mockito.any(HttpServletRequest.class), Mockito.any(HttpServletResponse.class));
victim.doFilter(mockRequest, mockResponse, mockFilterChain);
Mockito.verify(mockFilterChain, Mockito.times(1)).doFilter(Mockito.any(HttpServletRequest.class),
Mockito.any(HttpServletResponse.class));
//After chain processing, the context must be unset
Assert.assertFalse(Context.isContextSet());
}
}
2 changes: 1 addition & 1 deletion wro4j-examples/pom.xml
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>ro.isdc.wro4j</groupId>
<artifactId>wro4j-parent</artifactId>
<version>1.4.6</version>
<version>1.4.7-SNAPSHOT</version>
</parent>

<artifactId>wro4j-examples</artifactId>
Expand Down
Expand Up @@ -10,14 +10,27 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.http.support.ServletContextAttributeHelper;
import ro.isdc.wro.model.WroModel;

/**
* @author Alex Objelean
*/
@SuppressWarnings("serial")
public class ExternalResourceServlet extends HttpServlet {
private static final Logger LOG = LoggerFactory.getLogger(ExternalResourceServlet.class);


@Override
protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException {
ServletContextAttributeHelper helper = new ServletContextAttributeHelper(getServletContext());

WroModel model = helper.getManagerFactory().create().getModelFactory().create();
LOG.debug("model: " + model);
resp.sendRedirect("http://code.jquery.com/jquery-1.4.4.js");
}
}
Expand Up @@ -14,6 +14,9 @@
import ro.isdc.wro.examples.http.DispatchResourceServlet;
import ro.isdc.wro.examples.http.DynamicResourceServlet;
import ro.isdc.wro.examples.http.RedirectResourceServlet;
import ro.isdc.wro.extensions.http.CoffeeScriptFilter;
import ro.isdc.wro.extensions.http.LessCssFilter;
import ro.isdc.wro.http.WroContextFilter;
import ro.isdc.wro.http.WroFilter;

import com.google.common.collect.Maps;
Expand All @@ -35,18 +38,26 @@ protected void configureServlets() {
bind(DynamicResourceServlet.class).in(Singleton.class);
bind(RedirectResourceServlet.class).in(Singleton.class);
bind(DispatchResourceServlet.class).in(Singleton.class);
bind(LessCssFilter.class).in(Singleton.class);
bind(CoffeeScriptFilter.class).in(Singleton.class);
bind(WroContextFilter.class).in(Singleton.class);

// filters
// TODO find out how to add dispatchers to the filter mapping configuration
// filter("/wro/*").through(WroFilter.class);

filter("/*").through(WroContextFilter.class);
wicketFilter("/*");
filter("*.less").through(LessCssFilter.class);
filter("*.coffee").through(CoffeeScriptFilter.class);

//servlets
serve("/dwr/*").with(DwrServlet.class);
serve("/external/*").with(ExternalResourceServlet.class);
serve("/resource/dynamic.js").with(DynamicResourceServlet.class);
serve("/resource/redirect.js").with(RedirectResourceServlet.class);
serve("/resource/dispatch.js").with(DispatchResourceServlet.class);

}

/**
Expand Down
20 changes: 0 additions & 20 deletions wro4j-examples/wro4j-demo/src/main/webapp/WEB-INF/web.xml
Expand Up @@ -24,26 +24,6 @@
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>lessFilter</filter-name>
<filter-class>ro.isdc.wro.extensions.http.LessCssFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>lessFilter</filter-name>
<url-pattern>*.less</url-pattern>
</filter-mapping>


<filter>
<filter-name>coffeeScriptFilter</filter-name>
<filter-class>ro.isdc.wro.extensions.http.CoffeeScriptFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>coffeeScriptFilter</filter-name>
<url-pattern>*.coffee</url-pattern>
</filter-mapping>


<filter>
<filter-name>WebResourceOptimizer</filter-name>
<filter-class>ro.isdc.wro.http.WroFilter</filter-class>
Expand Down

0 comments on commit 889fa73

Please sign in to comment.