You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/06/02 11:05:02 UTC
svn commit: r950443 [4/7] - in /shindig/branches/2.0.x: ./ config/
content/samplecontainer/ content/samplecontainer/examples/
content/samplecontainer/examples/ActivityStreams/ content/sampledata/
extras/src/main/java/org/apache/shindig/extras/ extras/s...
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java Wed Jun 2 09:04:51 2010
@@ -35,6 +35,7 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriter;
import org.apache.shindig.gadgets.rewrite.image.BaseOptimizer.ImageIOOutputter;
import org.apache.shindig.gadgets.rewrite.image.BaseOptimizer.ImageOutputter;
import org.apache.shindig.gadgets.uri.UriCommon.Param;
@@ -45,7 +46,6 @@ import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -59,8 +59,15 @@ import javax.imageio.ImageWriter;
* <p>Security Note: Uses the Sanselan library to parse image content and metadata to avoid security
* issues in the ImageIO library. Uses ImageIO for output.
*/
-public class BasicImageRewriter implements ImageRewriter {
+public class BasicImageRewriter implements ResponseRewriter {
+ static final String
+ CONTENT_TYPE_AND_EXTENSION_MISMATCH =
+ "Content is not an image but file extension asserts it is";
+ static final String
+ CONTENT_TYPE_AND_MIME_MISMATCH =
+ "Content is not an image but mime type asserts it is";
+
private static final String CONTENT_TYPE_IMAGE_PNG = "image/png";
/** Returned as the output message if a huge image is submitted to be scaled */
private static final String RESIZE_IMAGE_TOO_LARGE = "The image is too large to resize";
@@ -68,21 +75,15 @@ public class BasicImageRewriter implemen
private static final String RESIZE_OUTPUT_FORMAT = "png";
private static final String CONTENT_LENGTH = "Content-Length";
+
/** Parameter used to request image rendering quality */
- public static final String PARAM_RESIZE_QUALITY = Param.RESIZE_QUALITY.getKey();
+ private static final String PARAM_RESIZE_QUALITY = Param.RESIZE_QUALITY.getKey();
/** Parameter used to request image width change */
- public static final String PARAM_RESIZE_WIDTH = Param.RESIZE_WIDTH.getKey();
+ private static final String PARAM_RESIZE_WIDTH = Param.RESIZE_WIDTH.getKey();
/** Parameter used to request image height change */
- public static final String PARAM_RESIZE_HEIGHT = Param.RESIZE_HEIGHT.getKey();
+ private static final String PARAM_RESIZE_HEIGHT = Param.RESIZE_HEIGHT.getKey();
/** Parameter used to request resizing will not expand image */
- public static final String PARAM_NO_EXPAND = Param.NO_EXPAND.getKey();
-
- public static final String
- CONTENT_TYPE_AND_EXTENSION_MISMATCH =
- "Content is not an image but file extension asserts it is";
- public static final String
- CONTENT_TYPE_AND_MIME_MISMATCH =
- "Content is not an image but mime type asserts it is";
+ private static final String PARAM_NO_EXPAND = Param.NO_EXPAND.getKey();
private static final int DEFAULT_QUALITY = 100;
private static final int BITS_PER_BYTE = 8;
@@ -98,21 +99,16 @@ public class BasicImageRewriter implemen
private final OptimizerConfig config;
- private final AtomicLong totalSourceImageSize = new AtomicLong();
- private final AtomicLong totalRewrittenImageBytes = new AtomicLong();
-
@Inject
public BasicImageRewriter(OptimizerConfig config) {
this.config = config;
}
- public HttpResponse rewrite(HttpRequest request, HttpResponse response) {
- if (request == null || response == null)
- return response;
+ public void rewrite(HttpRequest request, HttpResponseBuilder response) {
+ if (request == null || response == null) return;
Uri uri = request.getUri();
- if (null == uri)
- return response;
+ if (null == uri) return;
try {
// Check resizing
@@ -123,28 +119,29 @@ public class BasicImageRewriter implemen
// If the path or MIME type don't match, continue
if (!isSupportedContent(response) && !isImage(uri)) {
- return response;
+ return;
}
if (!isUsableParameter(requestedWidth) || !isUsableParameter(requestedHeight) ||
!isUsableParameter(resizeQuality)) {
- return response;
+ return;
}
// Content header checking is fast so this is fine to do for every response.
ImageFormat imageFormat = Sanselan
- .guessFormat(new ByteSourceInputStream(response.getResponse(), uri.getPath()));
+ .guessFormat(new ByteSourceInputStream(response.getContentBytes(), uri.getPath()));
if (imageFormat == ImageFormat.IMAGE_FORMAT_UNKNOWN) {
- return enforceUnreadableImageRestrictions(uri, response);
+ enforceUnreadableImageRestrictions(uri, response);
+ return;
}
// Don't handle very small images, but check after parsing format to
// detect attacks.
if (response.getContentLength() < config.getMinThresholdBytes()) {
- return response;
+ return;
}
- ImageInfo imageInfo = Sanselan.getImageInfo(response.getResponse(), uri.getPath());
+ ImageInfo imageInfo = Sanselan.getImageInfo(response.getContentBytes(), uri.getPath());
boolean noExpand = "1".equals(request.getParam(PARAM_NO_EXPAND));
if (noExpand &&
@@ -156,20 +153,17 @@ public class BasicImageRewriter implemen
boolean isOversizedImage = isImageTooLarge(imageInfo);
if (isResizeRequested && isOversizedImage) {
- HttpResponseBuilder rejectedResponseBuilder = new HttpResponseBuilder()
- .setHttpStatusCode(HttpResponse.SC_FORBIDDEN)
- .setResponseString(RESIZE_IMAGE_TOO_LARGE);
- return rejectedResponseBuilder.create();
+ errorResponse(response, HttpResponse.SC_FORBIDDEN, RESIZE_IMAGE_TOO_LARGE);
+ return;
}
// Don't handle animations.
// TODO: This doesn't work as current Sanselan doesn't return accurate image counts.
// See animated GIF detection below.
if (imageInfo.getNumberOfImages() > 1 || isOversizedImage) {
- return response;
+ return;
}
- int originalContentSize = response.getContentLength();
- totalSourceImageSize.addAndGet(originalContentSize);
+
BufferedImage image = readImage(imageFormat, response);
if (isResizeRequested) {
@@ -219,11 +213,10 @@ public class BasicImageRewriter implemen
if (isResizeRequired(requestedWidth, requestedHeight, imageInfo)
&& !isTargetImageTooLarge(requestedWidth, requestedHeight, imageInfo)) {
image = resizeImage(image, requestedWidth, requestedHeight, widthDelta, heightDelta);
- response = updateResponse(response, image);
+ updateResponse(response, image);
}
}
- response = getOptimizer(response, imageFormat, image);
- totalRewrittenImageBytes.addAndGet(response.getContentLength());
+ applyOptimizer(response, imageFormat, image);
} catch (IOException ioe) {
log.log(Level.WARNING, "IO Error rewriting image " + request.toString() + " - " + ioe.getMessage());
} catch (RuntimeException re) {
@@ -233,7 +226,6 @@ public class BasicImageRewriter implemen
} catch (ImageReadException ire) {
log.log(Level.INFO, "Failed to read image. Skipping " + request.toString(), ire.getMessage());
}
- return response;
}
/**
@@ -245,16 +237,15 @@ public class BasicImageRewriter implemen
* @param image the resized image that needs to be substituted for the original image from
* the response
*/
- private HttpResponse updateResponse(HttpResponse response, BufferedImage image)
+ private void updateResponse(HttpResponseBuilder response, BufferedImage image)
throws IOException {
ImageWriter imageWriter = ImageIO.getImageWritersByFormatName(RESIZE_OUTPUT_FORMAT).next();
ImageOutputter outputter = new ImageIOOutputter(imageWriter, null);
byte[] imageBytes = outputter.toBytes(image);
- HttpResponseBuilder newResponseBuilder = new HttpResponseBuilder(response)
+ response
.setResponse(imageBytes)
.setHeader(CONTENT_TYPE, CONTENT_TYPE_IMAGE_PNG)
.setHeader(CONTENT_LENGTH, String.valueOf(imageBytes.length));
- return newResponseBuilder.create();
}
private boolean isUsableParameter(Integer parameterValue) {
@@ -267,9 +258,8 @@ public class BasicImageRewriter implemen
/** Gets the feasible resize ratio. */
private double getResizeRatio(int requestedWidth, int requestedHeight, int origWidth,
int origHeight) {
- double ratio = min(requestedWidth / (double) origWidth,
- requestedHeight / (double) origHeight);
- return ratio;
+ return min(requestedWidth / (double) origWidth,
+ requestedHeight / (double) origHeight);
}
/**
@@ -329,24 +319,22 @@ public class BasicImageRewriter implemen
g2d.setComposite(AlphaComposite.SrcOver);
}
- private HttpResponse getOptimizer(HttpResponse response, ImageFormat imageFormat,
+ private void applyOptimizer(HttpResponseBuilder response, ImageFormat imageFormat,
BufferedImage image) throws IOException {
-
if (imageFormat == ImageFormat.IMAGE_FORMAT_GIF) {
// Detecting the existence of the NETSCAPE2.0 extension by string comparison
// is not exactly clean but is good enough to determine if a GIF is animated
// Remove once Sanselan returns image count
- if (!response.getResponseAsString().contains("NETSCAPE2.0")) {
- response = new GIFOptimizer(config, response).rewrite(image);
+ if (!response.create().getResponseAsString().contains("NETSCAPE2.0")) {
+ new GIFOptimizer(config, response).rewrite(image);
}
} else if (imageFormat == ImageFormat.IMAGE_FORMAT_PNG) {
- response = new PNGOptimizer(config, response).rewrite(image);
+ new PNGOptimizer(config, response).rewrite(image);
} else if (imageFormat == ImageFormat.IMAGE_FORMAT_JPEG) {
- response = new JPEGOptimizer(config, response).rewrite(image);
+ new JPEGOptimizer(config, response).rewrite(image);
} else if (imageFormat == ImageFormat.IMAGE_FORMAT_BMP) {
- response = new BMPOptimizer(config, response).rewrite(image);
+ new BMPOptimizer(config, response).rewrite(image);
}
- return response;
}
private boolean isImageTooLarge(ImageInfo imageInfo) {
@@ -367,7 +355,7 @@ public class BasicImageRewriter implemen
return imageSizeBits > config.getMaxInMemoryBytes() * BITS_PER_BYTE;
}
- private boolean isSupportedContent(HttpResponse response) {
+ private boolean isSupportedContent(HttpResponseBuilder response) {
return SUPPORTED_MIME_TYPES.contains(response.getHeader(CONTENT_TYPE));
}
@@ -397,17 +385,16 @@ public class BasicImageRewriter implemen
* MIME-type indicate that image content should be available but we failed to read it, then return
* an error response.
*/
- HttpResponse enforceUnreadableImageRestrictions(Uri uri, HttpResponse original) {
- String contentType = original.getHeader(CONTENT_TYPE);
+ void enforceUnreadableImageRestrictions(Uri uri, HttpResponseBuilder response) {
+ String contentType = response.getHeader(CONTENT_TYPE);
if (contentType != null) {
contentType = contentType.toLowerCase();
for (String expected : SUPPORTED_MIME_TYPES) {
if (contentType.contains(expected)) {
// MIME type says its a supported image but we can't read it. Reject.
- return new HttpResponseBuilder(original)
- .setHttpStatusCode(HttpResponse.SC_UNSUPPORTED_MEDIA_TYPE)
- .setResponseString(CONTENT_TYPE_AND_MIME_MISMATCH)
- .create();
+ errorResponse(response, HttpResponse.SC_UNSUPPORTED_MEDIA_TYPE,
+ CONTENT_TYPE_AND_MIME_MISMATCH);
+ return;
}
}
}
@@ -416,26 +403,18 @@ public class BasicImageRewriter implemen
for (String supportedExtension : SUPPORTED_FILE_EXTENSIONS) {
if (path.endsWith(supportedExtension)) {
// The file extension says its a supported image but we can't read it. Reject.
- return new HttpResponseBuilder(original)
- .setHttpStatusCode(HttpResponse.SC_UNSUPPORTED_MEDIA_TYPE)
- .setResponseString(CONTENT_TYPE_AND_EXTENSION_MISMATCH)
- .create();
+ errorResponse(response, HttpResponse.SC_UNSUPPORTED_MEDIA_TYPE,
+ CONTENT_TYPE_AND_EXTENSION_MISMATCH);
+ return;
}
}
- return original;
- }
-
- public long getOriginalImageBytes() {
- // Thread-safe?
- return totalSourceImageSize.get();
}
-
- public long getRewrittenImageBytes() {
- // Thread-safe?
- return totalRewrittenImageBytes.get();
+
+ private void errorResponse(HttpResponseBuilder response, int status, String msg) {
+ response.clearAllHeaders().setHttpStatusCode(status).setResponseString(msg);
}
- protected BufferedImage readImage(ImageFormat imageFormat, HttpResponse response)
+ protected BufferedImage readImage(ImageFormat imageFormat, HttpResponseBuilder response)
throws ImageReadException, IOException{
if (imageFormat == ImageFormat.IMAGE_FORMAT_GIF) {
return readGif(response);
@@ -454,19 +433,19 @@ public class BasicImageRewriter implemen
// implement additional security constraints or use their own more efficient
// image reading mechanisms
- protected BufferedImage readBmp(HttpResponse response) throws ImageReadException, IOException {
- return BMPOptimizer.readBmp(response.getResponse());
+ protected BufferedImage readBmp(HttpResponseBuilder response) throws ImageReadException, IOException {
+ return BMPOptimizer.readBmp(response.getContentBytes());
}
- protected BufferedImage readPng(HttpResponse response) throws ImageReadException, IOException {
- return PNGOptimizer.readPng(response.getResponse());
+ protected BufferedImage readPng(HttpResponseBuilder response) throws ImageReadException, IOException {
+ return PNGOptimizer.readPng(response.getContentBytes());
}
- protected BufferedImage readGif(HttpResponse response) throws ImageReadException, IOException {
- return GIFOptimizer.readGif(response.getResponse());
+ protected BufferedImage readGif(HttpResponseBuilder response) throws ImageReadException, IOException {
+ return GIFOptimizer.readGif(response.getContentBytes());
}
- protected BufferedImage readJpeg(HttpResponse response) throws ImageReadException, IOException {
- return JPEGOptimizer.readJpeg(response.getResponse());
+ protected BufferedImage readJpeg(HttpResponseBuilder response) throws ImageReadException, IOException {
+ return JPEGOptimizer.readJpeg(response.getContentBytes());
}
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/GIFOptimizer.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/GIFOptimizer.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/GIFOptimizer.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/GIFOptimizer.java Wed Jun 2 09:04:51 2010
@@ -19,7 +19,7 @@ package org.apache.shindig.gadgets.rewri
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.Sanselan;
-import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
@@ -38,8 +38,8 @@ public class GIFOptimizer extends PNGOpt
private boolean usePng;
- public GIFOptimizer(OptimizerConfig config, HttpResponse original) {
- super(config, original);
+ public GIFOptimizer(OptimizerConfig config, HttpResponseBuilder response) {
+ super(config, response);
}
@Override
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java Wed Jun 2 09:04:51 2010
@@ -31,8 +31,8 @@ import java.util.Map;
/**
* Utility functions for image processing and introspection.
*/
-public class ImageUtils {
-
+public final class ImageUtils {
+ private ImageUtils() {}
/**
* Convert an image to a palletized one. Will not create a palette above a fixed
* number of entries
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java Wed Jun 2 09:04:51 2010
@@ -20,7 +20,7 @@ package org.apache.shindig.gadgets.rewri
import org.apache.commons.io.IOUtils;
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.Sanselan;
-import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import javax.imageio.ImageIO;
import java.awt.color.ICC_Profile;
@@ -53,8 +53,8 @@ public class JPEGOptimizer extends BaseO
private boolean usePng;
- public JPEGOptimizer(OptimizerConfig config, HttpResponse original) {
- super(config, original);
+ public JPEGOptimizer(OptimizerConfig config, HttpResponseBuilder response) {
+ super(config, response);
}
@Override
@@ -65,7 +65,7 @@ public class JPEGOptimizer extends BaseO
config.getMinThresholdBytes());
// Output the image as PNG
- PNGOptimizer pngOptimizer = new PNGOptimizer(pngConfig, originalResponse);
+ PNGOptimizer pngOptimizer = new PNGOptimizer(pngConfig, response);
pngOptimizer.rewriteImpl(image);
int pngLength = Integer.MAX_VALUE;
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java Wed Jun 2 09:04:51 2010
@@ -19,7 +19,7 @@ package org.apache.shindig.gadgets.rewri
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.Sanselan;
-import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
@@ -41,8 +41,8 @@ class PNGOptimizer extends BaseOptimizer
private boolean useJpeg;
- public PNGOptimizer(OptimizerConfig config, HttpResponse original) {
- super(config, original);
+ public PNGOptimizer(OptimizerConfig config, HttpResponseBuilder response) {
+ super(config, response);
}
@Override
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/CssRequestRewriter.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/CssRequestRewriter.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/CssRequestRewriter.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/CssRequestRewriter.java Wed Jun 2 09:04:51 2010
@@ -23,10 +23,10 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import org.apache.shindig.gadgets.parse.caja.CajaCssLexerParser;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
-import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.RequestRewriter;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriter;
import org.apache.shindig.gadgets.rewrite.RewriterUtils;
import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.gadgets.rewrite.old.LinkRewriter;
@@ -50,7 +50,7 @@ import com.google.inject.Inject;
/**
* Rewrite links to referenced content in a stylesheet
*/
-public class CssRequestRewriter implements RequestRewriter {
+public class CssRequestRewriter implements ResponseRewriter {
private static final Logger logger = Logger.getLogger(CssRequestRewriter.class.getName());
@@ -67,20 +67,18 @@ public class CssRequestRewriter implemen
this.proxyingLinkRewriterFactory = proxyingLinkRewriterFactory;
}
- public boolean rewrite(HttpRequest request, HttpResponse original,
- MutableContent content) throws RewritingException {
- if (!RewriterUtils.isCss(request, original)) {
- return false;
+ public void rewrite(HttpRequest request, HttpResponseBuilder response)
+ throws RewritingException {
+ if (!RewriterUtils.isCss(request, response)) {
+ return;
}
ContentRewriterFeature.Config feature = rewriterFeatureFactory.get(request);
- String css = content.getContent();
+ String css = response.getContent();
StringWriter sw = new StringWriter((css.length() * 110) / 100);
rewrite(new StringReader(css), request.getUri(),
proxyingLinkRewriterFactory.create(request.getGadget(), feature,
request.getContainer(), false, request.getIgnoreCache()), sw, false);
- content.setContent(sw.toString());
-
- return true;
+ response.setContent(sw.toString());
}
/**
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/CssRequestRewriter.java
('svn:mergeinfo' removed)
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriter.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriter.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriter.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/old/HTMLContentRewriter.java Wed Jun 2 09:04:51 2010
@@ -21,11 +21,11 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.common.xml.DomUtil;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
-import org.apache.shindig.gadgets.rewrite.RequestRewriter;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriter;
import org.apache.shindig.gadgets.rewrite.RewriterUtils;
import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.gadgets.spec.View;
@@ -52,7 +52,7 @@ import com.google.inject.Inject;
* - Moving all style into head and converting @imports into links
* - Proxying referred content of images and embeds
*/
-public class HTMLContentRewriter implements GadgetRewriter, RequestRewriter {
+public class HTMLContentRewriter implements GadgetRewriter, ResponseRewriter {
private final static String JS_MIME_TYPE = "text/javascript";
@@ -79,15 +79,12 @@ public class HTMLContentRewriter impleme
this.proxyingLinkRewriterFactory = proxyingLinkRewriterFactory;
}
- public boolean rewrite(HttpRequest request, HttpResponse original,
- MutableContent content) throws RewritingException {
- if (RewriterUtils.isHtml(request, original)) {
+ public void rewrite(HttpRequest request, HttpResponseBuilder response) throws RewritingException {
+ if (RewriterUtils.isHtml(request, response)) {
ContentRewriterFeature.Config feature = rewriterFeatureFactory.get(request);
- return rewriteImpl(feature, request.getGadget(), request.getUri(), content,
+ rewriteImpl(feature, request.getGadget(), request.getUri(), response,
request.getContainer(), false, request.getIgnoreCache());
}
-
- return false;
}
public void rewrite(Gadget gadget, MutableContent content) throws RewritingException {
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java Wed Jun 2 09:04:51 2010
@@ -18,21 +18,18 @@
*/
package org.apache.shindig.gadgets.servlet;
+import com.google.caja.lexer.CharProducer;
import com.google.caja.lexer.ExternalReference;
import com.google.caja.lexer.InputSource;
import com.google.caja.lexer.escaping.Escaping;
import com.google.caja.opensocial.DefaultGadgetRewriter;
import com.google.caja.opensocial.GadgetRewriteException;
-import com.google.caja.opensocial.UriCallback;
-import com.google.caja.opensocial.UriCallbackException;
-import com.google.caja.parser.html.Nodes;
-import com.google.caja.render.Concatenator;
+import com.google.caja.plugin.PluginEnvironment;
import com.google.caja.reporting.BuildInfo;
import com.google.caja.reporting.Message;
import com.google.caja.reporting.MessageContext;
import com.google.caja.reporting.MessageLevel;
import com.google.caja.reporting.MessageQueue;
-import com.google.caja.reporting.RenderContext;
import com.google.caja.reporting.SimpleMessageQueue;
import com.google.caja.reporting.SnippetProducer;
import com.google.caja.util.Pair;
@@ -42,141 +39,150 @@ import com.google.inject.Inject;
import org.apache.shindig.common.cache.Cache;
import org.apache.shindig.common.cache.CacheProvider;
import org.apache.shindig.common.util.HashUtil;
+import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.parse.HtmlSerialization;
import org.apache.shindig.gadgets.parse.HtmlSerializer;
+import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
import org.apache.shindig.gadgets.rewrite.MutableContent;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
import java.net.URI;
import java.util.Map;
import java.util.logging.Logger;
-public class CajaContentRewriter implements org.apache.shindig.gadgets.rewrite.GadgetRewriter {
+public class CajaContentRewriter implements GadgetRewriter {
public static final String CAJOLED_DOCUMENTS = "cajoledDocuments";
- private final Logger logger = Logger.getLogger(CajaContentRewriter.class.getName());
- private Cache<String, Element> cajoledCache;
+ private static final Logger logger = Logger.getLogger(CajaContentRewriter.class.getName());
+
+ private final Cache<String, Element> cajoledCache;
+ private final RequestPipeline requestPipeline;
+ private final HtmlSerializer htmlSerializer;
@Inject
- public void setCacheProvider(CacheProvider cacheProvider) {
- cajoledCache = cacheProvider.createCache(CAJOLED_DOCUMENTS);
+ public CajaContentRewriter(CacheProvider cacheProvider, RequestPipeline requestPipeline,
+ HtmlSerializer htmlSerializer) {
+ this.cajoledCache = cacheProvider.createCache(CAJOLED_DOCUMENTS);
logger.info("Cajoled cache created" + cajoledCache);
+ this.requestPipeline = requestPipeline;
+ this.htmlSerializer = htmlSerializer;
}
- public void rewrite(Gadget gadget, MutableContent content) {
- if (gadget.getSpec().getModulePrefs().getFeatures().containsKey("caja") ||
- "1".equals(gadget.getContext().getParameter("caja"))) {
-
- final URI retrievedUri = gadget.getContext().getUrl().toJavaUri();
- UriCallback cb = new UriCallback() {
- public Reader retrieve(ExternalReference externalReference, String string)
- throws UriCallbackException {
- logger.info("Retrieving " + externalReference.toString());
- Reader in = null;
- try {
- URI resourceUri = retrievedUri.resolve(externalReference.getUri());
- in = new InputStreamReader(
- resourceUri.toURL().openConnection().getInputStream(), "UTF-8");
- char[] buf = new char[4096];
- StringBuilder sb = new StringBuilder();
- for (int n; (n = in.read(buf)) > 0;) {
- sb.append(buf, 0, n);
- }
- return new StringReader(sb.toString());
- } catch (java.net.MalformedURLException ex) {
- throw new UriCallbackException(externalReference, ex);
- } catch (IOException ex) {
- throw new UriCallbackException(externalReference, ex);
- } finally {
- try {
- in.close();
- } catch (IOException e) {
- // Not sure what else we can do here
- throw new RuntimeException(e);
- }
- }
- }
-
- public URI rewrite(ExternalReference externalReference, String mimeType) {
- URI uri = externalReference.getUri();
- if (uri.getScheme().equalsIgnoreCase("https") ||
- uri.getScheme().equalsIgnoreCase("http")) {
- return retrievedUri.resolve(uri);
- } else if ("javascript".equalsIgnoreCase(uri.getScheme())) {
- // Commonly used javascript url for links with onclick handlers
- return uri.toString().equals("javascript:void(0)") ? uri : null;
- } else {
- return null;
- }
- }
- };
- String key = HashUtil.rawChecksum(content.getContent().getBytes());
- Document doc = content.getDocument();
- Node root = doc.createDocumentFragment();
- root.appendChild(doc.getDocumentElement());
- Element cajoledOutput = null;
- if (null != cajoledCache) {
- cajoledOutput = cajoledCache.getElement(key);
- if (null != cajoledOutput) {
- createContainerFor(doc, doc.adoptNode(cajoledOutput));
- content.documentChanged();
- HtmlSerialization.attach(doc, new CajaHtmlSerializer(), null);
- return;
- }
+ public void rewrite(Gadget gadget, MutableContent mc) {
+ if (!cajaEnabled(gadget)) return;
+
+ Document doc = mc.getDocument();
+
+ // Serialize outside of MutableContent, to prevent a re-parse.
+ String docContent = HtmlSerialization.serialize(doc);
+ String cacheKey = HashUtil.rawChecksum(docContent.getBytes());
+ Node root = doc.createDocumentFragment();
+ root.appendChild(doc.getDocumentElement());
+
+ Node cajoledData = null;
+ if (cajoledCache != null) {
+ Element cajoledOutput = cajoledCache.getElement(cacheKey);
+ if (cajoledOutput != null) {
+ cajoledData = doc.adoptNode(cajoledOutput);
+ createContainerFor(doc, cajoledData);
+ mc.documentChanged();
}
+ }
+
+ if (cajoledData == null) {
+ PluginEnvironment pluginEnv = makePluginEnv(gadget);
+ URI javaGadgetUri = gadget.getContext().getUrl().toJavaUri();
MessageQueue mq = new SimpleMessageQueue();
BuildInfo bi = BuildInfo.getInstance();
DefaultGadgetRewriter rw = new DefaultGadgetRewriter(bi, mq);
- InputSource is = new InputSource(retrievedUri);
+ InputSource is = new InputSource(javaGadgetUri);
boolean safe = false;
-
+
try {
- Pair<Node, Element> htmlAndJs = rw.rewriteContent(retrievedUri, root, cb);
+ Pair<Node, Element> htmlAndJs = rw.rewriteContent(javaGadgetUri, root, pluginEnv, null);
Node html = htmlAndJs.a;
Element script = htmlAndJs.b;
-
- cajoledOutput = doc.createElement("div");
+
+ Element cajoledOutput = doc.createElement("div");
cajoledOutput.setAttribute("id", "cajoled-output");
cajoledOutput.setAttribute("classes", "g___");
cajoledOutput.setAttribute("style", "position: relative;");
-
+
cajoledOutput.appendChild(doc.adoptNode(html));
cajoledOutput.appendChild(tameCajaClientApi(doc));
cajoledOutput.appendChild(doc.adoptNode(script));
-
- Element messagesNode = formatErrors(doc, is, content.getContent(), mq,
- /* visible */ false);
+
+ Element messagesNode = formatErrors(doc, is, docContent, mq,
+ /* is invisible */ false);
cajoledOutput.appendChild(messagesNode);
if (cajoledCache != null) {
- cajoledCache.addElement(key, cajoledOutput);
+ cajoledCache.addElement(cacheKey, cajoledOutput);
}
- createContainerFor(doc, cajoledOutput);
- content.documentChanged();
safe = true;
- HtmlSerialization.attach(doc, new CajaHtmlSerializer(), null);
+ cajoledData = cajoledOutput;
+ createContainerFor(doc, cajoledData);
+ mc.documentChanged();
+ safe = true;
+ HtmlSerialization.attach(doc, htmlSerializer, null);
} catch (GadgetRewriteException e) {
// There were cajoling errors
// Content is only used to produce useful snippets with error messages
createContainerFor(doc,
- formatErrors(doc, is, content.getContent(), mq, true /* visible */));
+ formatErrors(doc, is, docContent, mq, true /* visible */));
logException(e, mq);
safe = true;
} finally {
if (!safe) {
// Fail safe
- content.setContent("");
+ mc.setContent("");
+ return;
}
}
}
}
+
+ private boolean cajaEnabled(Gadget gadget) {
+ return (gadget.getAllFeatures().contains("caja") ||
+ "1".equals(gadget.getContext().getParameter("caja")));
+ }
+
+ private PluginEnvironment makePluginEnv(Gadget gadget) {
+ final Uri gadgetUri = gadget.getContext().getUrl();
+ final String container = gadget.getContext().getContainer();
+
+ return new PluginEnvironment() {
+ public CharProducer loadExternalResource(
+ ExternalReference externalReference, String string) {
+ logger.info("Retrieving " + externalReference.toString());
+ Uri resourceUri = gadgetUri.resolve(Uri.fromJavaUri(externalReference.getUri()));
+ HttpRequest request =
+ new HttpRequest(resourceUri).setContainer(container).setGadget(gadgetUri);
+ try {
+ HttpResponse response = requestPipeline.execute(request);
+ return CharProducer.Factory.fromString(response.getResponseAsString(), externalReference.getReferencePosition());
+ } catch (GadgetException e) {
+ logger.info("Failed to retrieve: " + externalReference.toString());
+ return null;
+ }
+ }
+
+ public String rewriteUri(ExternalReference externalReference, String mimeType) {
+ URI uri = externalReference.getUri();
+ if (uri.getScheme().equalsIgnoreCase("https") ||
+ uri.getScheme().equalsIgnoreCase("http")) {
+ return gadgetUri.resolve(Uri.fromJavaUri(uri)).toString();
+ }
+ return null;
+ }
+ };
+ }
private void createContainerFor(Document doc, Node el) {
Element docEl = doc.createElement("html");
@@ -240,11 +246,4 @@ public class CajaContentRewriter impleme
}
logger.info("Unable to cajole gadget: " + errbuilder);
}
-
- private static class CajaHtmlSerializer implements HtmlSerializer {
- public String serialize(Document doc) {
- StringWriter sw = HtmlSerialization.createWriter(doc);
- return Nodes.render(doc, new RenderContext(new Concatenator(sw, null)).asXml());
- }
- }
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java Wed Jun 2 09:04:51 2010
@@ -30,7 +30,7 @@ import org.apache.shindig.gadgets.Gadget
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
-import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.gadgets.uri.ConcatUriManager;
import org.apache.shindig.gadgets.uri.UriCommon.Param;
@@ -63,7 +63,7 @@ public class ConcatProxyServlet extends
private RequestPipeline requestPipeline;
private ConcatUriManager concatUriManager;
- private RequestRewriterRegistry contentRewriterRegistry;
+ private ResponseRewriterRegistry contentRewriterRegistry;
@Inject
public void setRequestPipeline(RequestPipeline requestPipeline) {
@@ -76,7 +76,7 @@ public class ConcatProxyServlet extends
}
@Inject
- public void setContentRewriterRegistry(RequestRewriterRegistry contentRewriterRegistry) {
+ public void setContentRewriterRegistry(ResponseRewriterRegistry contentRewriterRegistry) {
this.contentRewriterRegistry = contentRewriterRegistry;
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java Wed Jun 2 09:04:51 2010
@@ -211,8 +211,7 @@ public class HtmlAccelServlet extends Ga
.setIgnoreCache(context.getIgnoreCache())
.setContainer(context.getContainer());
- HttpResponse results = requestPipeline.execute(request);
- return results;
+ return requestPipeline.execute(request);
}
private void respondVerbatim(HttpResponse results, HttpServletResponse response)
@@ -255,9 +254,9 @@ public class HtmlAccelServlet extends Ga
String paramsStr = null;
String accelUrl = null;
// Check for chain param style request:
- if (path.startsWith(accelServletPrefix + "/")) {
+ if (path.startsWith(accelServletPrefix + '/')) {
int startQuery = accelServletPrefix.length() + 1;
- int endQuery = path.indexOf("/", startQuery);
+ int endQuery = path.indexOf('/', startQuery);
if (endQuery >= startQuery) {
paramsStr = path.substring(startQuery, endQuery);
accelUrl = path.substring(endQuery + 1); // + "?" + req.getQueryString();
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpGadgetContext.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpGadgetContext.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpGadgetContext.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpGadgetContext.java Wed Jun 2 09:04:51 2010
@@ -260,7 +260,7 @@ public class HttpGadgetContext extends G
if (c == null) {
return null;
}
- return c.equals("1") ? RenderingContext.CONTAINER : RenderingContext.GADGET;
+ return "1".equals(c) ? RenderingContext.CONTAINER : RenderingContext.GADGET;
}
/**
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java Wed Jun 2 09:04:51 2010
@@ -29,7 +29,7 @@ import org.apache.shindig.gadgets.http.H
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.protocol.BaseRequestItem;
import org.apache.shindig.protocol.Operation;
@@ -85,7 +85,7 @@ import com.google.inject.Inject;
* in the above format. The RPC itself succeeded in these cases. If an RPC error occurred the client
* should introspect the error message for information as to the cause.
*
- * TODO: send errors using "data", not plain content
+ * TODO: send errors using "result", not plain content
*
* @see MakeRequestHandler
*/
@@ -95,11 +95,11 @@ public class HttpRequestHandler {
static final Set<String> BAD_HEADERS = ImmutableSet.of("HOST", "ACCEPT-ENCODING");
private final RequestPipeline requestPipeline;
- private final RequestRewriterRegistry contentRewriterRegistry;
+ private final ResponseRewriterRegistry contentRewriterRegistry;
@Inject
public HttpRequestHandler(RequestPipeline requestPipeline,
- RequestRewriterRegistry contentRewriterRegistry) {
+ ResponseRewriterRegistry contentRewriterRegistry) {
this.requestPipeline = requestPipeline;
this.contentRewriterRegistry = contentRewriterRegistry;
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java Wed Jun 2 09:04:51 2010
@@ -20,6 +20,8 @@ package org.apache.shindig.gadgets.servl
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
+
+import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.common.servlet.HttpUtil;
@@ -38,6 +40,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -47,6 +50,13 @@ import javax.servlet.http.HttpServletRes
* Used by type=URL gadgets in loading JavaScript resources.
*/
public class JsServlet extends InjectedServlet {
+ static final String ONLOAD_JS_TPL = "(function() {" +
+ "var nm='%s';" +
+ "if (typeof window[nm]==='function') {" +
+ "window[nm]();" +
+ '}' +
+ "})();";
+ private static final Pattern ONLOAD_FN_PATTERN = Pattern.compile("[a-zA-Z0-9_]+");
private FeatureRegistry registry;
@Inject
@@ -148,6 +158,16 @@ public class JsServlet extends InjectedS
}
}
+ String onloadStr = req.getParameter("onload");
+ if (onloadStr != null) {
+ if (!ONLOAD_FN_PATTERN.matcher(onloadStr).matches()) {
+ resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid onload callback: " +
+ onloadStr);
+ return;
+ }
+ jsData.append(String.format(ONLOAD_JS_TPL, StringEscapeUtils.escapeJavaScript(onloadStr)));
+ }
+
if (jsData.length() == 0) {
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java Wed Jun 2 09:04:51 2010
@@ -36,7 +36,7 @@ import org.apache.shindig.gadgets.http.H
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.RewritingException;
import java.io.IOException;
@@ -68,11 +68,11 @@ public class MakeRequestHandler extends
public static final String AUTHZ_PARAM = "authz";
private final RequestPipeline requestPipeline;
- private final RequestRewriterRegistry contentRewriterRegistry;
+ private final ResponseRewriterRegistry contentRewriterRegistry;
@Inject
public MakeRequestHandler(RequestPipeline requestPipeline,
- RequestRewriterRegistry contentRewriterRegistry) {
+ ResponseRewriterRegistry contentRewriterRegistry) {
this.requestPipeline = requestPipeline;
this.contentRewriterRegistry = contentRewriterRegistry;
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java Wed Jun 2 09:04:51 2010
@@ -203,6 +203,6 @@ public abstract class ProxyBase {
if (ignoreCache == null) {
return false;
}
- return !ignoreCache.equals("0");
+ return !"0".equals(ignoreCache);
}
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java Wed Jun 2 09:04:51 2010
@@ -31,7 +31,7 @@ import org.apache.shindig.gadgets.Locked
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.RequestPipeline;
-import org.apache.shindig.gadgets.rewrite.RequestRewriterRegistry;
+import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.gadgets.uri.ProxyUriManager;
@@ -55,13 +55,13 @@ public class ProxyHandler extends ProxyB
private final RequestPipeline requestPipeline;
private final LockedDomainService lockedDomainService;
- private final RequestRewriterRegistry contentRewriterRegistry;
+ private final ResponseRewriterRegistry contentRewriterRegistry;
private final ProxyUriManager proxyUriManager;
@Inject
public ProxyHandler(RequestPipeline requestPipeline,
LockedDomainService lockedDomainService,
- RequestRewriterRegistry contentRewriterRegistry,
+ ResponseRewriterRegistry contentRewriterRegistry,
ProxyUriManager proxyUriManager) {
this.requestPipeline = requestPipeline;
this.lockedDomainService = lockedDomainService;
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java Wed Jun 2 09:04:51 2010
@@ -42,7 +42,6 @@ public class RpcServlet extends Injected
static final String GET_REQUEST_REQ_PARAM = "req";
static final String GET_REQUEST_CALLBACK_PARAM = "callback";
- private static final int POST_REQUEST_MAX_SIZE = 1024 * 128;
private static final Logger logger = Logger.getLogger("org.apache.shindig.gadgets");
private JsonRpcHandler jsonHandler;
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java Wed Jun 2 09:04:51 2010
@@ -55,17 +55,17 @@ public class OAuthService {
continue;
}
String childName = child.getNodeName();
- if (childName.equals("Request")) {
+ if ("Request".equals(childName)) {
if (requestUrl != null) {
throw new SpecParserException("Multiple OAuth/Service/Request elements");
}
requestUrl = parseEndPoint("OAuth/Service/Request", (Element)child, base);
- } else if (childName.equals("Authorization")) {
+ } else if ("Authorization".equals(childName)) {
if (authorizationUrl != null) {
throw new SpecParserException("Multiple OAuth/Service/Authorization elements");
}
authorizationUrl = parseAuthorizationUrl((Element)child, base);
- } else if (childName.equals("Access")) {
+ } else if ("Access".equals(childName)) {
if (accessUrl != null) {
throw new SpecParserException("Multiple OAuth/Service/Access elements");
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java Wed Jun 2 09:04:51 2010
@@ -21,7 +21,6 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.common.xml.XmlException;
import org.apache.shindig.expressions.Expressions;
import org.apache.shindig.gadgets.AuthType;
-import org.apache.shindig.gadgets.GadgetELResolver;
import org.apache.shindig.gadgets.variables.Substitutions;
import java.util.Collections;
@@ -165,7 +164,7 @@ public class PipelinedData {
*
* @param rootObjects an ELResolver that can evaluate currently available
* root objects.
- * @see GadgetELResolver
+ * @see org.apache.shindig.gadgets.GadgetELResolver
* @return a batch, or null if no batch could be created
*/
public Batch getBatch(Expressions expressions, ELResolver rootObjects) {
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
('svn:mergeinfo' removed)
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java Wed Jun 2 09:04:51 2010
@@ -27,7 +27,7 @@ import com.google.common.collect.Immutab
/**
* Null object implementation of TemplateLibrary.
*/
-public class NullTemplateLibrary implements TemplateLibrary {
+public final class NullTemplateLibrary implements TemplateLibrary {
public static final TemplateLibrary INSTANCE = new NullTemplateLibrary();
private final TagRegistry registry = new DefaultTagRegistry(ImmutableSet.<TagHandler>of());
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java
('svn:mergeinfo' removed)
Propchange: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java
('svn:mergeinfo' removed)
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ConcatUriManager.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ConcatUriManager.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ConcatUriManager.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ConcatUriManager.java Wed Jun 2 09:04:51 2010
@@ -189,7 +189,7 @@ public interface ConcatUriManager {
/**
* Validate the version of the resource list.
- * @param resourceUri Uri of a proxied resource
+ * @param resourceUris Uris of a proxied resource
* @param container Container requesting the resource
* @param value Version value to validate.
* @return Status of the version.
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java Wed Jun 2 09:04:51 2010
@@ -23,6 +23,9 @@ import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.name.Named;
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.auth.SecurityTokenDecoder;
+import org.apache.shindig.auth.SecurityTokenException;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.uri.UriBuilder;
import org.apache.shindig.config.ContainerConfig;
@@ -53,13 +56,18 @@ public class DefaultIframeUriManager imp
private final ContainerConfig config;
private final LockedDomainPrefixGenerator ldGen;
+ private final SecurityTokenDecoder securityTokenCodec;
+
private final List<String> ldSuffixes;
-
+
@Inject
public DefaultIframeUriManager(ContainerConfig config,
- LockedDomainPrefixGenerator ldGen) {
+ LockedDomainPrefixGenerator ldGen,
+ SecurityTokenDecoder securityTokenCodec) {
this.config = config;
this.ldGen = ldGen;
+ this.securityTokenCodec = securityTokenCodec;
+
Collection<String> containers = config.getContainers();
List<String> ldSuffixes = Lists.newArrayListWithCapacity(containers.size());
for (String container : containers) {
@@ -141,7 +149,7 @@ public class DefaultIframeUriManager imp
boolean upInFragment = !view.needsUserPrefSubstitution();
addParam(uri, UriCommon.USER_PREF_PREFIX + up.getName(), data, useTpl, upInFragment);
}
-
+
if (versioner != null) {
// Added on the query string, obviously not templated.
addParam(uri, Param.VERSION.getKey(),
@@ -151,7 +159,8 @@ public class DefaultIframeUriManager imp
if (gadget.getAllFeatures().contains(SECURITY_TOKEN_FEATURE_NAME) ||
config.getBool(container, SECURITY_TOKEN_ALWAYS_KEY)) {
boolean securityTokenOnQuery = isTokenNeededForRendering(gadget);
- String securityToken = null; // Always templated at the moment, can ignore.
+
+ String securityToken = wantsSecurityToken(gadget) ? generateSecurityToken(gadget) : null;
addParam(uri, Param.SECURITY_TOKEN.getKey(), securityToken, true, !securityTokenOnQuery);
}
@@ -159,6 +168,24 @@ public class DefaultIframeUriManager imp
return uri.toUri();
}
+
+ protected String generateSecurityToken(Gadget gadget) {
+ // Find a security token in the context
+ try {
+ SecurityToken token = gadget.getContext().getToken();
+
+ if (securityTokenCodec != null && token != null) {
+ return securityTokenCodec.encodeToken(token);
+ }
+ } catch (SecurityTokenException e) {
+ // ignore -- no security token
+ }
+ return null;
+ }
+
+ protected boolean wantsSecurityToken(Gadget gadget) {
+ return true;
+ }
// This method should be overridden to provide better caching characteristics
// for rendering Uris. In particular, it should return true only when the gadget
@@ -223,7 +250,7 @@ public class DefaultIframeUriManager imp
return versioner.validate(gadgetUri, container, version);
}
- public static final String tplKey(String key) {
+ public static String tplKey(String key) {
return '%' + key + '%';
}
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManager.java Wed Jun 2 09:04:51 2010
@@ -138,6 +138,7 @@ public class DefaultProxyUriManager impl
return uri.toUri();
}
+ @SuppressWarnings("deprecation")
public ProxyUri process(Uri uriIn) throws GadgetException {
UriStatus status = UriStatus.BAD_URI;
Uri uri = null;
@@ -162,9 +163,9 @@ public class DefaultProxyUriManager impl
int start = path.indexOf(containerStr);
if (start > 0) {
start += containerStr.length();
- int end = path.indexOf("&", start);
+ int end = path.indexOf('&', start);
if (end < start) {
- end = path.indexOf("/", start);
+ end = path.indexOf('/', start);
}
if (end > start) {
// Looks like chained proxy syntax. Pull out params.
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/HashShaLockedDomainPrefixGenerator.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/HashShaLockedDomainPrefixGenerator.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/HashShaLockedDomainPrefixGenerator.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/HashShaLockedDomainPrefixGenerator.java Wed Jun 2 09:04:51 2010
@@ -25,7 +25,6 @@ import org.apache.shindig.common.uri.Uri
public class HashShaLockedDomainPrefixGenerator implements LockedDomainPrefixGenerator {
public String getLockedDomainPrefix(Uri gadgetUri) {
byte[] sha1 = DigestUtils.sha(gadgetUri.toString());
- String hash = new String(Base32.encodeBase32(sha1));
- return hash;
+ return new String(Base32.encodeBase32(sha1)); // a hash
}
}
\ No newline at end of file
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java Wed Jun 2 09:04:51 2010
@@ -64,7 +64,7 @@ public interface JsUriManager {
@ImplementedBy(DefaultJsVersioner.class)
public interface Versioner {
/**
- * @param gadget Gadget for which extern Uri was generated.
+ * @param gadgeUri Gadget for which extern Uri was generated.
* @param extern Collection of libs externed.
* @return Version string for the Uri.
*/
Modified: shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriBase.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriBase.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriBase.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/ProxyUriBase.java Wed Jun 2 09:04:51 2010
@@ -242,10 +242,7 @@ public class ProxyUriBase {
}
protected static boolean getBooleanValue(String str) {
- if (str != null && "1".equals(str)) {
- return true;
- }
- return false;
+ return str != null && "1".equals(str);
}
protected static Integer getIntegerValue(String str) {
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java Wed Jun 2 09:04:51 2010
@@ -19,7 +19,7 @@
package org.apache.shindig.gadgets;
import static org.easymock.EasyMock.expect;
-import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import org.apache.shindig.common.cache.CacheProvider;
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultMessageBundleFactoryTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultMessageBundleFactoryTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultMessageBundleFactoryTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultMessageBundleFactoryTest.java Wed Jun 2 09:04:51 2010
@@ -21,7 +21,7 @@ package org.apache.shindig.gadgets;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.verify;
-import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java Wed Jun 2 09:04:51 2010
@@ -18,12 +18,12 @@
*/
package org.apache.shindig.gadgets.encoding;
-import static org.easymock.classextension.EasyMock.expect;
-import static org.easymock.classextension.EasyMock.replay;
-import static org.easymock.classextension.EasyMock.verify;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
-import org.easymock.classextension.EasyMock;
+import org.easymock.EasyMock;
import org.junit.Test;
import java.nio.charset.Charset;
@@ -44,7 +44,7 @@ public class EncodingDetectorTest {
byte[] data = "Hello, world".getBytes("US-ASCII");
assertEquals("UTF-8", EncodingDetector.detectEncoding(data, true, null).name());
}
-
+
@Test
public void detectedUtf8WithByteOrderMark() {
byte[] data = {
@@ -57,7 +57,14 @@ public class EncodingDetectorTest {
@Test
public void assumeLatin1OnInvalidUtf8() throws Exception {
byte[] data = "\u4F60\u597D".getBytes("BIG5");
-
+
+ assertEquals("ISO-8859-1", EncodingDetector.detectEncoding(data, true, null).name());
+ }
+
+ @Test
+ public void badStreamEnd() throws Exception {
+ byte[] data = { 'd', 'u', (byte)0xC0 };
+
assertEquals("ISO-8859-1", EncodingDetector.detectEncoding(data, true, null).name());
}
@@ -68,13 +75,13 @@ public class EncodingDetectorTest {
"\u8FBE\u4E0D\u51FA\uFF0C\u6709\u611F\u60C5\u65E0\u6CD5\u503E\u5410")
.getBytes("GB18030");
- EncodingDetector.FallbackEncodingDetector detector =
+ EncodingDetector.FallbackEncodingDetector detector =
newMockFallbackEncoding(data, "GB18030");
assertEquals("GB18030", EncodingDetector.detectEncoding(data, false, detector).name());
verify(detector);
}
-
+
// Test the fallback detector:
@Test
public void doNotAssumeLatin1OnInvalidUtf8() throws Exception {
@@ -111,7 +118,7 @@ public class EncodingDetectorTest {
assertEquals("UTF-8", detector.detectEncoding(data).name());
}
-
+
@Test(expected=NullPointerException.class)
public void nullCustomDetector() throws Exception {
byte[] data = "\u4F60\u597D".getBytes("BIG5");
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java Wed Jun 2 09:04:51 2010
@@ -68,7 +68,7 @@ public class FeatureRegistryTest {
private static int resourceIdx = 0;
private FeatureResourceLoader resourceLoader;
private ResourceMock resourceMock;
- FeatureRegistry registry;
+ private FeatureRegistry registry;
private Map<String, String> lastAttribs;
@Before
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureResourceLoaderTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureResourceLoaderTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureResourceLoaderTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureResourceLoaderTest.java Wed Jun 2 09:04:51 2010
@@ -19,10 +19,10 @@ package org.apache.shindig.gadgets.featu
import com.google.common.collect.Maps;
-import static org.easymock.classextension.EasyMock.createMock;
-import static org.easymock.classextension.EasyMock.eq;
-import static org.easymock.classextension.EasyMock.expect;
-import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java Wed Jun 2 09:04:51 2010
@@ -18,7 +18,7 @@
package org.apache.shindig.gadgets.http;
import static org.easymock.EasyMock.expect;
-import static org.easymock.classextension.EasyMock.replay;
+import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
@@ -30,12 +30,10 @@ import com.google.common.collect.Maps;
import org.apache.shindig.auth.BasicSecurityToken;
import org.apache.shindig.auth.SecurityToken;
import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.common.util.FakeTimeSource;
-import org.apache.shindig.common.util.TimeSource;
import org.apache.shindig.gadgets.AuthType;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
import org.apache.shindig.gadgets.spec.RequestAuthenticationInfo;
-import org.easymock.classextension.EasyMock;
+import org.easymock.EasyMock;
import org.junit.Test;
import java.util.Map;
@@ -225,7 +223,6 @@ public class AbstractHttpCacheTest {
@Test
public void getResponseNotCacheable() {
HttpRequest request = new HttpRequest(DEFAULT_URI);
- String key = cache.createKey(request);
HttpResponse response = new HttpResponseBuilder().setStrictNoCache().create();
cache.addResponse(request, response);
@@ -348,10 +345,6 @@ public class AbstractHttpCacheTest {
.create();
cache.map.put(key, response);
- TimeSource fakeClock = new FakeTimeSource(expiration + 60L);
-
- cache.setClock(fakeClock);
-
// The cache itself still hold and return staled value,
// caller responsible to decide what to do about it
assertEquals(response, cache.removeResponse(request));
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java Wed Jun 2 09:04:51 2010
@@ -57,7 +57,7 @@ public abstract class AbstractHttpFetche
Uri uri = Uri.parse("http://a:b:c/");
HttpRequest request = new HttpRequest(uri);
try {
- HttpResponse response = fetcher.fetch(request);
+ fetcher.fetch(request);
fail("Expected GadgetException");
} catch (GadgetException e) {
assertEquals(400, e.getHttpStatusCode());
@@ -69,7 +69,7 @@ public abstract class AbstractHttpFetche
Uri uri = Uri.parse("http://a:b/");
HttpRequest request = new HttpRequest(uri);
try {
- HttpResponse response = fetcher.fetch(request);
+ fetcher.fetch(request);
fail("Expected GadgetException");
} catch (GadgetException e) {
assertEquals(400, e.getHttpStatusCode());
@@ -81,7 +81,7 @@ public abstract class AbstractHttpFetche
Uri uri = Uri.parse("host/data");
HttpRequest request = new HttpRequest(uri);
try {
- HttpResponse response = fetcher.fetch(request);
+ fetcher.fetch(request);
fail("Expected GadgetException");
} catch (GadgetException e) {
assertEquals(400, e.getHttpStatusCode());
@@ -93,7 +93,7 @@ public abstract class AbstractHttpFetche
Uri uri = Uri.parse("//host/data");
HttpRequest request = new HttpRequest(uri);
try {
- HttpResponse response = fetcher.fetch(request);
+ fetcher.fetch(request);
fail("Expected GadgetException");
} catch (GadgetException e) {
assertEquals(400, e.getHttpStatusCode());
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultInvalidationServiceTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultInvalidationServiceTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultInvalidationServiceTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultInvalidationServiceTest.java Wed Jun 2 09:04:51 2010
@@ -24,7 +24,7 @@ import org.apache.shindig.common.testing
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.AuthType;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.rewrite.image.NoOpImageRewriter;
+import org.apache.shindig.gadgets.rewrite.DefaultResponseRewriterRegistry;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Assert;
@@ -80,8 +80,9 @@ public class DefaultInvalidationServiceT
fetcher = new DefaultRequestPipelineTest.FakeHttpFetcher();
oauth = new DefaultRequestPipelineTest.FakeOAuthRequestProvider();
- requestPipeline = new DefaultRequestPipeline(fetcher, cache, oauth, new NoOpImageRewriter(),
- service, new HttpResponseMetadataHelper());
+ requestPipeline = new DefaultRequestPipeline(fetcher, cache, oauth,
+ new DefaultResponseRewriterRegistry(null, null), service,
+ new HttpResponseMetadataHelper());
}
@Test
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultRequestPipelineTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultRequestPipelineTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultRequestPipelineTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/DefaultRequestPipelineTest.java Wed Jun 2 09:04:51 2010
@@ -26,7 +26,7 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.gadgets.AuthType;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.oauth.OAuthRequest;
-import org.apache.shindig.gadgets.rewrite.image.NoOpImageRewriter;
+import org.apache.shindig.gadgets.rewrite.DefaultResponseRewriterRegistry;
import org.junit.Test;
import java.util.Map;
@@ -45,7 +45,7 @@ public class DefaultRequestPipelineTest
}
};
private final RequestPipeline pipeline = new DefaultRequestPipeline(fetcher, cache, oauth,
- new NoOpImageRewriter(), new NoOpInvalidationService(), helper);
+ new DefaultResponseRewriterRegistry(null, null), new NoOpInvalidationService(), helper);
@Test
public void authTypeNoneNotCached() throws Exception {
@@ -75,7 +75,7 @@ public class DefaultRequestPipelineTest
fetcher.response = new HttpResponse("response");
RequestPipeline pipeline = new DefaultRequestPipeline(fetcher, cache, oauth,
- new NoOpImageRewriter(), new NoOpInvalidationService(),
+ new DefaultResponseRewriterRegistry(null, null), new NoOpInvalidationService(),
new HttpResponseMetadataHelper());
HttpResponse response = pipeline.execute(request);
assertEquals(1, response.getMetadata().size());
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java Wed Jun 2 09:04:51 2010
@@ -203,6 +203,33 @@ public class HttpResponseBuilderTest {
// Insure that headers are stored in the order they are added
assertEquals(Joiner.on(",").join(resp.getHeaders("Soup")), Joiner.on(",").join(soupList));
-
+ }
+
+ @Test
+ public void noModsReturnsSameResponse() {
+ HttpResponseBuilder builder = new HttpResponseBuilder();
+ builder.setHttpStatusCode(HttpResponse.SC_BAD_GATEWAY);
+ builder.setResponseString("foo");
+ HttpResponse response = builder.create();
+ assertSame(response, builder.create());
+ }
+
+ @Test
+ public void noModsReturnsSameResponseBuilderCtor() {
+ HttpResponseBuilder builder = new HttpResponseBuilder();
+ builder.setHttpStatusCode(HttpResponse.SC_OK);
+ HttpResponseBuilder nextBuilder = new HttpResponseBuilder(builder);
+ assertSame(builder.create(), nextBuilder.create());
+ }
+
+ @Test
+ public void noModsReturnsSameResponseBaseCtor() {
+ HttpResponse response = new HttpResponse("foo");
+ HttpResponseBuilder builder = new HttpResponseBuilder(response);
+ assertSame(response, builder.create());
+ builder.setHttpStatusCode(HttpResponse.SC_BAD_GATEWAY);
+ HttpResponse newResponse = builder.create();
+ assertNotSame(response, newResponse);
+ assertSame(newResponse, builder.create());
}
}
Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java?rev=950443&r1=950442&r2=950443&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java Wed Jun 2 09:04:51 2010
@@ -33,12 +33,11 @@ import org.apache.shindig.gadgets.Gadget
import org.apache.shindig.gadgets.LockedDomainService;
import org.apache.shindig.gadgets.UrlGenerator;
import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.oauth.OAuthResponseParams.OAuthRequestException;
import org.apache.shindig.gadgets.process.ProcessingException;
import org.apache.shindig.gadgets.process.Processor;
import org.easymock.IArgumentMatcher;
-import org.easymock.classextension.EasyMock;
-import org.easymock.classextension.IMocksControl;
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
import org.junit.Before;
import org.junit.Test;
@@ -94,7 +93,7 @@ public class GadgetOAuthCallbackGenerato
getGenerator().generateCallback(fetcherConfig, "base", request, responseParams);
fail("Should have thrown");
} catch (OAuthRequestException e) {
- assertEquals(OAuthError.UNKNOWN_PROBLEM.toString(), responseParams.getError());
+ assertEquals(OAuthError.UNKNOWN_PROBLEM.name(), e.getError());
}
control.verify();
@@ -114,7 +113,7 @@ public class GadgetOAuthCallbackGenerato
getGenerator().generateCallback(fetcherConfig, "base", request, responseParams);
fail("Should have thrown");
} catch (OAuthRequestException e) {
- assertEquals(OAuthError.UNKNOWN_PROBLEM.toString(), responseParams.getError());
+ assertEquals(OAuthError.UNKNOWN_PROBLEM.name(), e.getError());
}
control.verify();
@@ -246,7 +245,7 @@ public class GadgetOAuthCallbackGenerato
}
public void appendTo(StringBuffer buffer) {
- buffer.append("GadgetContextMatcher(" + securityToken + ", " + arguments + ')');
+ buffer.append("GadgetContextMatcher(").append(securityToken).append(", ").append(arguments).append(')');
}
}
}