[gatein-commits] gatein SVN: r5290 - in components/wsrp/trunk/producer/src: test/java/org/gatein/wsrp/producer/handlers/processors and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Nov 26 06:12:14 EST 2010
Author: chris.laprun at jboss.com
Date: 2010-11-26 06:12:13 -0500 (Fri, 26 Nov 2010)
New Revision: 5290
Modified:
components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/processors/RequestProcessor.java
components/wsrp/trunk/producer/src/test/java/org/gatein/wsrp/producer/handlers/processors/MimeResponseProcessorTestCase.java
Log:
- GTNWSRP-175: Properly deal with wildcard in MIME type requests.
- GNTWSRP-176: Stop looking for next possible matches if we've found one already.
- Updated and added more tests.
Modified: components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/processors/RequestProcessor.java
===================================================================
--- components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/processors/RequestProcessor.java 2010-11-26 10:18:30 UTC (rev 5289)
+++ components/wsrp/trunk/producer/src/main/java/org/gatein/wsrp/producer/handlers/processors/RequestProcessor.java 2010-11-26 11:12:13 UTC (rev 5290)
@@ -211,16 +211,44 @@
MarkupType markupType = null;
// Get the MIME type to use
+ // todo: MIME type resolution should really be done in common... maybe as part of GTNCOMMON-14?
for (String desiredMIMEType : desiredMIMETypes)
{
- for (MarkupType type : markupTypes)
+ desiredMIMEType = desiredMIMEType.trim();
+
+ // first deal with full wildcards
+ if ("*".equals(desiredMIMEType) || "*/*".equals(desiredMIMEType))
{
- if (desiredMIMEType.equals(type.getMimeType()))
+ markupType = markupTypes.get(0);
+ break;
+ }
+ else
+ {
+ MediaType mt = MediaType.create(desiredMIMEType);
+ String superType = mt.getType().getName();
+ String subType = mt.getSubtype().getName();
+ boolean isWildcard = "*".equals(subType);
+
+ for (MarkupType type : markupTypes)
{
- markupType = type;
- break;
+ if (isWildcard && type.getMimeType().startsWith(superType))
+ {
+ markupType = type;
+ break;
+ }
+ else if (desiredMIMEType.equals(type.getMimeType()))
+ {
+ markupType = type;
+ break;
+ }
}
}
+
+ // if we've found a match, do not examine the other possible matches
+ if (markupType != null)
+ {
+ break;
+ }
}
// no MIME type was found: error!
Modified: components/wsrp/trunk/producer/src/test/java/org/gatein/wsrp/producer/handlers/processors/MimeResponseProcessorTestCase.java
===================================================================
--- components/wsrp/trunk/producer/src/test/java/org/gatein/wsrp/producer/handlers/processors/MimeResponseProcessorTestCase.java 2010-11-26 10:18:30 UTC (rev 5289)
+++ components/wsrp/trunk/producer/src/test/java/org/gatein/wsrp/producer/handlers/processors/MimeResponseProcessorTestCase.java 2010-11-26 11:12:13 UTC (rev 5290)
@@ -72,8 +72,87 @@
assertEquals("namespace", processor.invocation.getWindowContext().getNamespace());
}
+ public void testShouldProperlyHandleWildCardsInRequestedMimeTypes() throws OperationFailed, UnsupportedMode, InvalidHandle, MissingParameters, UnsupportedMimeType, ModifyRegistrationRequired, UnsupportedWindowState, InvalidRegistration
+ {
+ List<String> mimeTypes = new ArrayList<String>(1);
+ mimeTypes.add("*/*");
+ ServletAccess.setRequestAndResponse(MockHttpServletRequest.createMockRequest(MockHttpSession.createMockSession()), MockHttpServletResponse.createMockResponse());
+
+ MimeResponseProcessor processor = new RenderRequestProcessor(new TestProducerHelper(), WSRPTypeFactory.createGetMarkup(null,
+ WSRPTypeFactory.createPortletContext(PORTLET_HANDLE),
+ WSRPTypeFactory.createRuntimeContext(WSRPConstants.NONE_USER_AUTHENTICATION, "foo", "ns"), null,
+ WSRPTypeFactory.createMarkupParams(false, WSRPConstants.getDefaultLocales(), mimeTypes, WSRPConstants.VIEW_MODE, WSRPConstants.NORMAL_WINDOW_STATE)));
+
+ assertEquals(TestProducerHelper.PORTLET_MIME_TYPE, processor.markupRequest.getMediaType());
+
+ mimeTypes = new ArrayList<String>(1);
+ mimeTypes.add("*");
+
+ processor = new RenderRequestProcessor(new TestProducerHelper(), WSRPTypeFactory.createGetMarkup(null,
+ WSRPTypeFactory.createPortletContext(PORTLET_HANDLE),
+ WSRPTypeFactory.createRuntimeContext(WSRPConstants.NONE_USER_AUTHENTICATION, "foo", "ns"), null,
+ WSRPTypeFactory.createMarkupParams(false, WSRPConstants.getDefaultLocales(), mimeTypes, WSRPConstants.VIEW_MODE, WSRPConstants.NORMAL_WINDOW_STATE)));
+
+ assertEquals(TestProducerHelper.PORTLET_MIME_TYPE, processor.markupRequest.getMediaType());
+
+ mimeTypes = new ArrayList<String>(1);
+ mimeTypes.add("text/*");
+
+ processor = new RenderRequestProcessor(new TestProducerHelper(), WSRPTypeFactory.createGetMarkup(null,
+ WSRPTypeFactory.createPortletContext(PORTLET_HANDLE),
+ WSRPTypeFactory.createRuntimeContext(WSRPConstants.NONE_USER_AUTHENTICATION, "foo", "ns"), null,
+ WSRPTypeFactory.createMarkupParams(false, WSRPConstants.getDefaultLocales(), mimeTypes, WSRPConstants.VIEW_MODE, WSRPConstants.NORMAL_WINDOW_STATE)));
+
+ assertEquals(TestProducerHelper.PORTLET_MIME_TYPE, processor.markupRequest.getMediaType());
+
+ mimeTypes = new ArrayList<String>(1);
+ mimeTypes.add("image/*");
+
+ try
+ {
+ new RenderRequestProcessor(new TestProducerHelper(), WSRPTypeFactory.createGetMarkup(null,
+ WSRPTypeFactory.createPortletContext(PORTLET_HANDLE),
+ WSRPTypeFactory.createRuntimeContext(WSRPConstants.NONE_USER_AUTHENTICATION, "foo", "ns"), null,
+ WSRPTypeFactory.createMarkupParams(false, WSRPConstants.getDefaultLocales(), mimeTypes, WSRPConstants.VIEW_MODE, WSRPConstants.NORMAL_WINDOW_STATE)));
+ fail("Should have failed on unsupported MIME type");
+ }
+ catch (UnsupportedMimeType unsupportedMimeType)
+ {
+ // expected
+ }
+ }
+
+ public void testShouldReturnFirstMimeTypeMatching() throws OperationFailed, UnsupportedMode, InvalidHandle, MissingParameters, UnsupportedMimeType, ModifyRegistrationRequired, UnsupportedWindowState, InvalidRegistration
+ {
+ List<String> mimeTypes = new ArrayList<String>(2);
+ mimeTypes.add("text/xml");
+ mimeTypes.add("text/*");
+
+ ServletAccess.setRequestAndResponse(MockHttpServletRequest.createMockRequest(MockHttpSession.createMockSession()), MockHttpServletResponse.createMockResponse());
+
+ MimeResponseProcessor processor = new RenderRequestProcessor(new TestProducerHelper(), WSRPTypeFactory.createGetMarkup(null,
+ WSRPTypeFactory.createPortletContext(PORTLET_HANDLE),
+ WSRPTypeFactory.createRuntimeContext(WSRPConstants.NONE_USER_AUTHENTICATION, "foo", "ns"), null,
+ WSRPTypeFactory.createMarkupParams(false, WSRPConstants.getDefaultLocales(), mimeTypes, WSRPConstants.VIEW_MODE, WSRPConstants.NORMAL_WINDOW_STATE)));
+
+ assertEquals("text/xml", processor.markupRequest.getMediaType());
+
+ mimeTypes = new ArrayList<String>(2);
+ mimeTypes.add("image/*");
+ mimeTypes.add("text/*");
+
+ processor = new RenderRequestProcessor(new TestProducerHelper(), WSRPTypeFactory.createGetMarkup(null,
+ WSRPTypeFactory.createPortletContext(PORTLET_HANDLE),
+ WSRPTypeFactory.createRuntimeContext(WSRPConstants.NONE_USER_AUTHENTICATION, "foo", "ns"), null,
+ WSRPTypeFactory.createMarkupParams(false, WSRPConstants.getDefaultLocales(), mimeTypes, WSRPConstants.VIEW_MODE, WSRPConstants.NORMAL_WINDOW_STATE)));
+
+ assertEquals(TestProducerHelper.PORTLET_MIME_TYPE, processor.markupRequest.getMediaType());
+ }
+
private static class TestProducerHelper implements ProducerHelper
{
+ static final String PORTLET_MIME_TYPE = MediaType.TEXT_HTML.getValue();
+
public Portlet getPortletWith(PortletContext portletContext, Registration registration) throws InvalidHandle, PortletInvokerException
{
return new Portlet()
@@ -109,7 +188,8 @@
windowStateNames.add(WSRPConstants.NORMAL_WINDOW_STATE);
List<MarkupType> markupTypes = new ArrayList<MarkupType>(1);
- markupTypes.add(WSRPTypeFactory.createMarkupType(MediaType.TEXT_HTML.getValue(), modeNames, windowStateNames, locales));
+ markupTypes.add(WSRPTypeFactory.createMarkupType(PORTLET_MIME_TYPE, modeNames, windowStateNames, locales));
+ markupTypes.add(WSRPTypeFactory.createMarkupType("text/xml", modeNames, windowStateNames, locales));
return WSRPTypeFactory.createPortletDescription(PORTLET_HANDLE, markupTypes);
}
More information about the gatein-commits
mailing list