Author: awiner
Date: Fri Mar 6 21:45:14 2009
New Revision: 751088
URL: http://svn.apache.org/viewvc?rev=751088&view=rev
Log:
Make HTMLContentRewriter and CSSContentRewriter container aware
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterUris.java
(with props)
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java?rev=751088&r1=751087&r2=751088&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
Fri Mar 6 21:45:14 2009
@@ -25,12 +25,6 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.parse.caja.CajaCssLexerParser;
-
-import com.google.caja.lexer.ParseException;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
import org.w3c.dom.Element;
import java.io.IOException;
@@ -43,6 +37,10 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import com.google.caja.lexer.ParseException;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
/**
* Rewrite links to referenced content in a stylesheet
*/
@@ -51,15 +49,15 @@
private static final Logger logger =
Logger.getLogger(CSSContentRewriter.class.getName());
private final ContentRewriterFeatureFactory rewriterFeatureFactory;
- private final String proxyBaseNoGadget;
private final CajaCssLexerParser cssParser;
+ private final ContentRewriterUris rewriterUris;
@Inject
public CSSContentRewriter(ContentRewriterFeatureFactory
rewriterFeatureFactory,
- @Named("shindig.content-rewrite.proxy-url")String proxyBaseNoGadget,
+ ContentRewriterUris rewriterUris,
CajaCssLexerParser cssParser) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
- this.proxyBaseNoGadget = proxyBaseNoGadget;
+ this.rewriterUris = rewriterUris;
this.cssParser = cssParser;
}
@@ -77,7 +75,7 @@
String css = content.getContent();
StringWriter sw = new StringWriter((css.length() * 110) / 100);
rewrite(new StringReader(css), request.getUri(),
- createLinkRewriter(request.getGadget(), feature), sw, false);
+ createLinkRewriter(request.getGadget(), feature,
request.getContainer()), sw, false);
content.setContent(sw.toString());
return RewriterResults.cacheableIndefinitely();
@@ -184,8 +182,9 @@
return imports;
}
- protected LinkRewriter createLinkRewriter(Uri gadgetUri,
ContentRewriterFeature feature) {
- return new ProxyingLinkRewriter(gadgetUri, feature, proxyBaseNoGadget);
+ protected LinkRewriter createLinkRewriter(Uri gadgetUri,
ContentRewriterFeature feature, String container) {
+ String proxyBase = rewriterUris.getProxyBase(container);
+ return new ProxyingLinkRewriter(gadgetUri, feature, proxyBase);
}
}
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterUris.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterUris.java?rev=751088&view=auto
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterUris.java
(added)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterUris.java
Fri Mar 6 21:45:14 2009
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.gadgets.rewrite;
+
+import org.apache.shindig.config.ContainerConfig;
+
+import com.google.common.base.Objects;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
+/**
+ * Provider of base URIs to HTMLContentRewriter and CSSContentRewriter.
+ */
+public class ContentRewriterUris {
+ private final ContainerConfig config;
+ private final String proxyBaseNoGadget;
+ private final String concatBaseNoGadget;
+
+ static final String PROXY_BASE_CONFIG_PROPERTY = "gadgets.rewriteProxyBase";
+ static final String CONCAT_BASE_CONFIG_PROPERTY =
"gadgets.rewriteConcatBase";
+
+ @Inject
+ public ContentRewriterUris(
+ ContainerConfig config,
+ @Named("shindig.content-rewrite.proxy-url")String proxyBaseNoGadget,
+ @Named("shindig.content-rewrite.concat-url")String concatBaseNoGadget) {
+ this.config = config;
+ this.proxyBaseNoGadget = proxyBaseNoGadget;
+ this.concatBaseNoGadget = concatBaseNoGadget;
+ }
+
+ public String getProxyBase(String container) {
+ container = Objects.firstNonNull(container,
ContainerConfig.DEFAULT_CONTAINER);
+
+ return Objects.firstNonNull(config.getString(container,
PROXY_BASE_CONFIG_PROPERTY),
+ proxyBaseNoGadget);
+ }
+
+ public String getConcatBase(String container) {
+ container = Objects.firstNonNull(container,
ContainerConfig.DEFAULT_CONTAINER);
+
+ return Objects.firstNonNull(config.getString(container,
CONCAT_BASE_CONFIG_PROPERTY),
+ concatBaseNoGadget);
+ }
+}
Propchange:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterUris.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java?rev=751088&r1=751087&r2=751088&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
Fri Mar 6 21:45:14 2009
@@ -25,17 +25,6 @@
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.servlet.ProxyBase;
import org.apache.shindig.gadgets.spec.View;
-
-import com.google.common.base.Nullable;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -46,6 +35,15 @@
import java.util.List;
import java.util.Set;
+import com.google.common.base.Nullable;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+
/**
* Perform rewriting of HTML content including
* - Concatenating & proxying of referred script content
@@ -53,7 +51,7 @@
* - Moving all style into head and converting @imports into links
* - Proxying referred content of images and embeds
*/
-public class HTMLContentRewriter implements ContentRewriter {
+public class HTMLContentRewriter implements ContentRewriter {
private final static int MAX_URL_LENGTH = 1500;
private final static String JS_MIME_TYPE = "text/javascript";
@@ -66,18 +64,15 @@
);
private final ContentRewriterFeatureFactory rewriterFeatureFactory;
- private final String proxyBaseNoGadget;
- private final String concatBaseNoGadget;
private final CSSContentRewriter cssRewriter;
+ private final ContentRewriterUris rewriterUris;
@Inject
public HTMLContentRewriter(ContentRewriterFeatureFactory
rewriterFeatureFactory,
- @Named("shindig.content-rewrite.proxy-url")String proxyBaseNoGadget,
- @Named("shindig.content-rewrite.concat-url")String concatBaseNoGadget,
+ ContentRewriterUris rewriterUris,
CSSContentRewriter cssRewriter) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
- this.concatBaseNoGadget = concatBaseNoGadget;
- this.proxyBaseNoGadget = proxyBaseNoGadget;
+ this.rewriterUris = rewriterUris;
this.cssRewriter = cssRewriter;
}
@@ -85,7 +80,8 @@
MutableContent content) {
if (RewriterUtils.isHtml(request, original)) {
ContentRewriterFeature feature = rewriterFeatureFactory.get(request);
- return rewriteImpl(feature, request.getGadget(), request.getUri(),
content);
+ return rewriteImpl(feature, request.getGadget(), request.getUri(),
content,
+ request.getContainer());
}
return null;
}
@@ -97,11 +93,12 @@
if (view != null && view.getHref() != null) {
contentBase = view.getHref();
}
- return rewriteImpl(feature, gadget.getSpec().getUrl(), contentBase,
content);
+ return rewriteImpl(feature, gadget.getSpec().getUrl(), contentBase,
content,
+ gadget.getContext().getContainer());
}
RewriterResults rewriteImpl(ContentRewriterFeature feature, Uri gadgetUri,
- Uri contentBase, MutableContent
content) {
+ Uri contentBase, MutableContent
content, String container) {
if (!feature.isRewriteEnabled() || content.getDocument() == null) {
return null;
}
@@ -119,11 +116,11 @@
// 1st step. Rewrite links in all embedded style tags. Convert @import
statements into
// links and add them to the tag list.
// Move all style and link tags into head and concat the link tags
- mutated = rewriteStyleTags(head, tagList, feature, gadgetUri, contentBase);
+ mutated = rewriteStyleTags(head, tagList, feature, gadgetUri, contentBase,
container);
// Concat script links
- mutated |= rewriteJsTags(tagList, feature, gadgetUri, contentBase);
+ mutated |= rewriteJsTags(tagList, feature, gadgetUri, contentBase,
container);
// Rewrite links in images, embeds etc
- mutated |= rewriteContentReferences(tagList, feature, gadgetUri,
contentBase);
+ mutated |= rewriteContentReferences(tagList, feature, gadgetUri,
contentBase, container);
if (mutated) {
MutableContent.notifyEdit(content.getDocument());
@@ -133,7 +130,7 @@
}
protected boolean rewriteStyleTags(Element head, List<Element> elementList,
- ContentRewriterFeature feature, Uri gadgetUri, Uri contentBase) {
+ ContentRewriterFeature feature, Uri gadgetUri, Uri contentBase, String
container) {
if (!feature.getIncludedTags().contains("style")) {
return false;
}
@@ -147,7 +144,7 @@
}
}));
- LinkRewriter linkRewriter = createLinkRewriter(gadgetUri, feature);
+ LinkRewriter linkRewriter = createLinkRewriter(gadgetUri, feature,
container);
for (Element styleTag : styleTags) {
mutated |= true;
@@ -179,18 +176,21 @@
}
}));
- String concatBase = getConcatBase(gadgetUri, feature, "text/css");
+ String concatBase = getConcatBase(gadgetUri, feature, "text/css",
container);
concatenateTags(feature, linkTags, concatBase, contentBase, "href");
return mutated;
}
- protected LinkRewriter createLinkRewriter(Uri gadgetUri,
ContentRewriterFeature feature) {
- return new ProxyingLinkRewriter(gadgetUri, feature, proxyBaseNoGadget);
+ protected LinkRewriter createLinkRewriter(Uri gadgetUri,
ContentRewriterFeature feature,
+ String container) {
+ return new ProxyingLinkRewriter(gadgetUri, feature,
rewriterUris.getProxyBase(container));
}
- protected String getConcatBase(Uri gadgetUri, ContentRewriterFeature
feature, String mimeType) {
+ protected String getConcatBase(Uri gadgetUri, ContentRewriterFeature
feature, String mimeType,
+ String container) {
+ String concatBaseNoGadget = rewriterUris.getConcatBase(container);
return concatBaseNoGadget +
ProxyBase.REWRITE_MIME_TYPE_PARAM +
'=' + mimeType +
@@ -199,7 +199,7 @@
}
protected boolean rewriteJsTags(List<Element> elementList,
ContentRewriterFeature feature,
- Uri gadgetUri, Uri contentBase) {
+ Uri gadgetUri, Uri contentBase, String container) {
if (!feature.getIncludedTags().contains("script")) {
return false;
}
@@ -217,7 +217,7 @@
}
}));
- String concatBase = getConcatBase(gadgetUri, feature, JS_MIME_TYPE);
+ String concatBase = getConcatBase(gadgetUri, feature, JS_MIME_TYPE,
container);
List<Element> concatenateable = Lists.newArrayList();
for (int i = 0; i < scriptTags.size(); i++) {
Element scriptTag = scriptTags.get(i);
@@ -245,9 +245,9 @@
}
protected boolean rewriteContentReferences(List<Element> elementList,
- ContentRewriterFeature feature, Uri gadgetUri, Uri contentBase) {
+ ContentRewriterFeature feature, Uri gadgetUri, Uri contentBase, String
container) {
boolean mutated = false;
- LinkRewriter rewriter = createLinkRewriter(gadgetUri, feature);
+ LinkRewriter rewriter = createLinkRewriter(gadgetUri, feature, container);
final Set<String> tagNames = Sets.intersection(LINKING_TAG_ATTRS.keySet(),
feature.getIncludedTags());
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java?rev=751088&r1=751087&r2=751088&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
Fri Mar 6 21:45:14 2009
@@ -20,6 +20,8 @@
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
@@ -47,7 +49,15 @@
rewriterFeatureFactory.get(createSpecWithRewrite(".*", ".*exclude.*",
"HTTP",
HTMLContentRewriter.TAGS));
ContentRewriterFeatureFactory factory =
mockContentRewriterFeatureFactory(overrideFeature);
- rewriter = new CSSContentRewriter(factory, DEFAULT_PROXY_BASE, new
CajaCssLexerParser());
+ ContainerConfig config = new AbstractContainerConfig() {
+ @Override
+ public Object getProperty(String container, String name) {
+ return null;
+ }
+ };
+
+ ContentRewriterUris rewriterUris = new ContentRewriterUris(config,
DEFAULT_PROXY_BASE, null);
+ rewriter = new CSSContentRewriter(factory, rewriterUris, new
CajaCssLexerParser());
dummyUri = Uri.parse("http://www.w3c.org");
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java?rev=751088&r1=751087&r2=751088&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
Fri Mar 6 21:45:14 2009
@@ -19,6 +19,8 @@
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.parse.caja.CajaCssLexerParser;
@@ -38,8 +40,18 @@
rewriterFeatureFactory.get(createSpecWithRewrite(".*", ".*exclude.*",
"HTTP",
HTMLContentRewriter.TAGS));
ContentRewriterFeatureFactory factory =
mockContentRewriterFeatureFactory(overrideFeature);
- rewriter = new HTMLContentRewriter(factory, DEFAULT_PROXY_BASE,
DEFAULT_CONCAT_BASE,
- new CSSContentRewriter(factory, DEFAULT_PROXY_BASE, new
CajaCssLexerParser()));
+ ContainerConfig config = new AbstractContainerConfig() {
+ @Override
+ public Object getProperty(String container, String name) {
+ return null;
+ }
+ };
+
+ ContentRewriterUris rewriterUris = new ContentRewriterUris(config,
DEFAULT_PROXY_BASE,
+ DEFAULT_CONCAT_BASE);
+
+ rewriter = new HTMLContentRewriter(factory, rewriterUris,
+ new CSSContentRewriter(factory, rewriterUris, new
CajaCssLexerParser()));
}
public void testScriptsBasic() throws Exception {