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 {


Reply via email to