Author: johnh
Date: Wed Sep 3 18:22:28 2008
New Revision: 691846
URL: http://svn.apache.org/viewvc?rev=691846&view=rev
Log:
Two changes, complementary to one another.
1. Augmenting Gadget to maintain its own parse tree state, consistent with its
own String representation.
- addition of Gadget.getParseTree()
- Added EditListener to GadgetHtmlNode created from ParsedHtmlNode indicating
when original contents (created
from parsed) are modified. Gadget code prevents edits from being made when
new String content is set.
2. Changing ContentRewriter Gadget rewriting interface to
ContentRewriter.rewrite(Gadget).
In addition, added a few small cleanups, such as using Gadget rather than hacky
QueryPair in CachingContentRewriterRegistry for cache lookups.
This commit resolves SHINDIG-503.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlNode.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeDefaultContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/GadgetHtmlNodeTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java
Wed Sep 3 18:22:28 2008
@@ -19,6 +19,9 @@
import org.apache.shindig.common.ContainerConfig;
import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.parse.GadgetHtmlNode;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
+import org.apache.shindig.gadgets.parse.ParsedHtmlNode;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.LocaleSpec;
import org.apache.shindig.gadgets.spec.Preload;
@@ -27,8 +30,11 @@
import org.json.JSONArray;
import org.json.JSONException;
+import java.io.IOException;
+import java.io.StringWriter;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;
@@ -38,22 +44,38 @@
*/
public class Gadget {
private final GadgetContext context;
+
+ /**
+ * @return The context in which this gadget was created.
+ */
public GadgetContext getContext() {
return context;
}
private final GadgetSpec spec;
+
+ /**
+ * @return The spec from which this gadget was originally built.
+ */
public GadgetSpec getSpec() {
return spec;
}
private final Collection<JsLibrary> jsLibraries;
+
+ /**
+ * @return A mutable collection of JsLibrary objects attached to this Gadget.
+ */
public Collection<JsLibrary> getJsLibraries() {
return jsLibraries;
}
private final Map<Preload, Future<HttpResponse>> preloads
= new HashMap<Preload, Future<HttpResponse>>();
+
+ /**
+ * @return A mutable map of preloads.
+ */
public Map<Preload, Future<HttpResponse>> getPreloadMap() {
return preloads;
}
@@ -70,8 +92,12 @@
}
private final View currentView;
+
+ /**
+ * @return The (immutable) View applicable for the current request (part of
GadgetSpec).
+ */
public View getCurrentView() {
- return currentView;
+ return currentView;
}
/**
@@ -108,22 +134,113 @@
}
private String content;
+ private int contentParseId;
+
+ /**
+ * Retrieves the current content for this gadget in String form.
+ * If gadget content has been retrieved in parse tree form and has
+ * been edited, the String form is computed from the parse tree by
+ * rendering it. It is <b>strongly</b> encouraged to avoid switching
+ * between retrieval of parse tree (through [EMAIL PROTECTED] getParseTree}),
+ * with subsequent edits and retrieval of String contents to avoid
+ * repeated serialization and deserialization.
+ * @return Renderable/active content for the gadget.
+ */
public String getContent() {
+ if (parseEditId > contentParseId) {
+ // Regenerate content from parse tree node, since the parse tree
+ // was modified relative to the last time content was generated from
it.
+ // This is an expensive operation that should happen only once
+ // per rendering cycle: all rewriters (or other manipulators)
+ // operating on the parse tree should happen together.
+ contentParseId = parseEditId;
+ StringWriter sw = new StringWriter();
+ for (GadgetHtmlNode node : parseTree.getChildren()) {
+ try {
+ node.render(sw);
+ } catch (IOException e) {
+ // Never happens.
+ }
+ }
+ content = sw.toString();
+ }
return content;
}
+ /**
+ * Sets the content for the gadget as a raw String. Note, this operation
+ * may be done at any time, even after a parse tree node has been retrieved
+ * and modified (though a warning will be emitted in this case). Once
+ * new content has been set, all subsequent edits to parse trees generated
+ * from the <i>previous</i> content will be invalid, throwing an
+ * [EMAIL PROTECTED] IllegalStateException}.
+ * @param newContent New content for the gadget.
+ */
public void setContent(String newContent) {
- this.content = newContent;
+ if (!content.equals(newContent)) {
+ content = newContent;
+ if (editListener != null) {
+ editListener.stringEdited();
+ }
+ }
+ }
+
+ private GadgetHtmlNode parseTree;
+ public static final String ROOT_NODE_TAG_NAME = "gadget-root";
+
+ /**
+ * Retrieves the contents of the gadget in parse tree form, if a
+ * [EMAIL PROTECTED] GadgetHtmlParser} is configured and is able to parse
the string
+ * contents appropriately. The resultant parse tree has a special,
+ * single top-level node that wraps all subsequent content, with
+ * tag name [EMAIL PROTECTED] ROOT_NODE_TAG_NAME}. While it may be edited
just
+ * as any other node may, doing so is pointless since the root node
+ * is stripped out during rendering. Any edits to the returned parse
+ * tree performed after the source [EMAIL PROTECTED] Gadget} has new content
+ * set via [EMAIL PROTECTED] setContent} will throw an [EMAIL PROTECTED]
IllegalStateException}
+ * to maintain content consistency in the gadget. To modify a gadget's
+ * contents by parse tree after setting new String contents,
+ * this method must be called again. However, this practice is highly
+ * discouraged, as parsing a tree from String is a costly operation.
+ * @return Top-level node whose children represent the gadget's contents, or
+ * null if no parser is configured or if String contents are null.
+ * @throws GadgetException Throw by the GadgetHtmlParser generating the tree
from String.
+ */
+ public GadgetHtmlNode getParseTree() throws GadgetException {
+ if (parseTree != null && !editListener.stringWasEdited()) {
+ return parseTree;
+ }
+
+ if (content == null || contentParser == null) {
+ return null;
+ }
+
+ // One ContentEditListener per parse tree.
+ editListener = new ContentEditListener();
+ parseTree = new GadgetHtmlNode(ROOT_NODE_TAG_NAME, null);
+ List<ParsedHtmlNode> parsed = contentParser.parse(content);
+ for (ParsedHtmlNode parsedNode : parsed) {
+ parseTree.appendChild(new GadgetHtmlNode(parsedNode, editListener));
+ }
+
+ // Parse tree created from content: edit IDs are the same
+ contentParseId = parseEditId;
+ return parseTree;
}
private ContainerConfig containerConfig;
+ private GadgetHtmlParser contentParser;
+ private int parseEditId;
+ private ContentEditListener editListener;
public Gadget(GadgetContext context, GadgetSpec spec,
- Collection<JsLibrary> jsLibraries, ContainerConfig containerConfig) {
+ Collection<JsLibrary> jsLibraries, ContainerConfig containerConfig,
+ GadgetHtmlParser contentParser) {
this.context = context;
this.spec = spec;
this.jsLibraries = jsLibraries;
this.containerConfig = containerConfig;
+ this.contentParser = contentParser;
this.currentView = getView(this.containerConfig);
if (this.currentView != null) {
// View might be invalid or associated with no content (type=URL)
@@ -131,5 +248,30 @@
} else {
this.content = null;
}
+ contentParseId = 0;
+ }
+
+ // Intermediary object tracking edit behavior for the Gadget to help maintain
+ // state consistency. GadgetHtmlNode calls nodeEdited whenever a modification
+ // is made to its original source.
+ private class ContentEditListener implements GadgetHtmlNode.EditListener {
+ private boolean stringEdited = false;
+
+ public void nodeEdited() {
+ ++parseEditId;
+ if (stringEdited) {
+ // Parse tree is invalid: a new String representation was set
+ // as tree source in the meantime.
+ throw new IllegalStateException("Edited parse node after
setting String content");
+ }
+ }
+
+ private void stringEdited() {
+ stringEdited = true;
+ }
+
+ private boolean stringWasEdited() {
+ return stringEdited;
+ }
}
}
\ No newline at end of file
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
Wed Sep 3 18:22:28 2008
@@ -23,6 +23,7 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
import org.apache.shindig.gadgets.spec.Auth;
import org.apache.shindig.gadgets.spec.Feature;
@@ -55,6 +56,7 @@
private final GadgetBlacklist blacklist;
private final ContainerConfig containerConfig;
private final ContentRewriterRegistry rewriterRegistry;
+ private final GadgetHtmlParser htmlParser;
private ContentFetcherFactory preloadFetcherFactory;
private GadgetSpecFactory specFactory;
@@ -66,6 +68,7 @@
GadgetBlacklist blacklist,
ContainerConfig containerConfig,
ContentRewriterRegistry rewriterRegistry,
+ GadgetHtmlParser htmlParser,
ContentFetcherFactory preloadFetcherFactory,
GadgetSpecFactory specFactory,
MessageBundleFactory bundleFactory) {
@@ -74,6 +77,7 @@
this.blacklist = blacklist;
this.containerConfig = containerConfig;
this.rewriterRegistry = rewriterRegistry;
+ this.htmlParser = htmlParser;
this.preloadFetcherFactory = preloadFetcherFactory;
this.specFactory = specFactory;
this.bundleFactory = bundleFactory;
@@ -110,11 +114,11 @@
spec = spec.substitute(substituter);
Collection<JsLibrary> jsLibraries = getLibraries(spec, context);
- Gadget gadget = new Gadget(context, spec, jsLibraries, containerConfig);
+ Gadget gadget = new Gadget(context, spec, jsLibraries, containerConfig,
htmlParser);
// Perform rewriting operations on the Gadget.
if (rewriterRegistry != null) {
- rewriterRegistry.rewriteGadget(context, gadget);
+ rewriterRegistry.rewriteGadget(gadget);
}
startPreloads(gadget);
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlNode.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlNode.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlNode.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlNode.java
Wed Sep 3 18:22:28 2008
@@ -42,6 +42,7 @@
private Map<String, String> attributes;
private List<GadgetHtmlNode> children;
private String text;
+ private EditListener editListener;
private enum NodeType {
TAG, TEXT
@@ -50,8 +51,10 @@
/**
* Construct a mutable HTML node from a parsed one.
* @param parsed HTML node object from parser.
+ * @param editListener Object receiving notifications when an edit op
happens to
+ * the original contents of a node, as created from parsed equivalent. May
be null.
*/
- public GadgetHtmlNode(ParsedHtmlNode parsed) {
+ public GadgetHtmlNode(ParsedHtmlNode parsed, EditListener editListener) {
if (parsed.getText() == null) {
// Tag type
type = NodeType.TAG;
@@ -63,12 +66,13 @@
}
children = new LinkedList<GadgetHtmlNode>();
for (ParsedHtmlNode node: parsed.getChildren()) {
- appendChild(new GadgetHtmlNode(node));
+ appendChild(new GadgetHtmlNode(node, editListener));
}
} else {
type = NodeType.TEXT;
setText(parsed.getText());
}
+ this.editListener = editListener;
}
/**
@@ -126,6 +130,7 @@
newTag = newTag.trim();
if (newTag.matches("[\\w\\-_:]+")) {
this.tagName = newTag;
+ sendEditNotice();
return true;
}
}
@@ -151,7 +156,11 @@
validateNodeType(NodeType.TAG);
boolean hasBefore = hasAttribute(key);
attributes.remove(key);
- return hasBefore && !hasAttribute(key);
+ boolean ret = hasBefore && !hasAttribute(key);
+ if (ret) {
+ sendEditNotice();
+ }
+ return ret;
}
/**
@@ -167,6 +176,7 @@
return false;
}
attributes.put(putKey, value);
+ sendEditNotice();
return true;
}
@@ -208,14 +218,15 @@
node.setParentNode(this);
if (before == null) {
children.add(node);
- return;
- }
- int befIx = children.indexOf(before);
- if (befIx >= 0) {
- children.add(befIx, node);
} else {
- children.add(node);
+ int befIx = children.indexOf(before);
+ if (befIx >= 0) {
+ children.add(befIx, node);
+ } else {
+ children.add(node);
+ }
}
+ sendEditNotice();
}
/**
@@ -228,7 +239,11 @@
// For good measure, dissociate from parent
node.setParentNode(null);
- return children.remove(node);
+ boolean ret = children.remove(node);
+ if (ret) {
+ sendEditNotice();
+ }
+ return ret;
}
/**
@@ -252,6 +267,9 @@
// Internal helper: sets parent for tree-node management
private void setParentNode(GadgetHtmlNode parent) {
+ if (parentNode != parent) {
+ sendEditNotice();
+ }
parentNode = parent;
}
@@ -282,6 +300,7 @@
public void setText(String text) {
validateNodeType(NodeType.TEXT);
this.text = text;
+ sendEditNotice();
}
/**
@@ -387,4 +406,14 @@
"Attempted " + expected + " operation on node of type " + type);
}
}
+
+ private void sendEditNotice() {
+ if (editListener != null) {
+ editListener.nodeEdited();
+ }
+ }
+
+ public static interface EditListener {
+ public void nodeEdited();
+ }
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistry.java
Wed Sep 3 18:22:28 2008
@@ -24,7 +24,6 @@
import java.util.List;
import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
/**
@@ -55,23 +54,19 @@
}
/** [EMAIL PROTECTED] */
- public boolean rewriteGadget(GadgetContext context, Gadget gadget) throws
GadgetException {
- String content = gadget.getContent();
- String originalContent = content;
+ public boolean rewriteGadget(Gadget gadget) throws GadgetException {
+ String originalContent = gadget.getContent();
if (originalContent == null) {
+ // Nothing to rewrite.
return false;
}
-
+
for (ContentRewriter rewriter : getRewriters()) {
- String rewritten = rewriter.rewriteGadgetView(gadget.getSpec(), content,
"text/html");
- if (rewritten != null) {
- content = rewritten;
- }
+ rewriter.rewrite(gadget);
}
- gadget.setContent(content);
- return !originalContent.equals(content);
+ return !originalContent.equals(gadget.getContent());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistry.java
Wed Sep 3 18:22:28 2008
@@ -23,7 +23,6 @@
import org.apache.shindig.common.cache.CacheProvider;
import org.apache.shindig.gadgets.CachingWebRetrievalFactory;
import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.rewrite.BasicContentRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
@@ -38,7 +37,7 @@
* provides a layer of caching atop that.
*/
public class CachingContentRewriterRegistry
- extends CachingWebRetrievalFactory<String,
CachingContentRewriterRegistry.QueryPair, String>
+ extends CachingWebRetrievalFactory<String, Gadget, String>
implements ContentRewriterRegistry {
static final Logger logger =
Logger.getLogger(CachingContentRewriterRegistry.class.getName());
@@ -59,10 +58,10 @@
}
@Override
- protected String getCacheKeyFromQueryObj(QueryPair qp) {
+ protected String getCacheKeyFromQueryObj(Gadget gadget) {
// Cache by URI + View. Since we always append a view, there should be no
// key conflicts associated with this operation.
- return qp.gadget.getSpec().getUrl().toString() + "#v=" +
qp.gadget.getCurrentView().getName();
+ return gadget.getSpec().getUrl().toString() + "#v=" +
gadget.getCurrentView().getName();
}
@Override
@@ -71,22 +70,22 @@
}
@Override
- protected FetchedObject<String> retrieveRawObject(QueryPair qp,
+ protected FetchedObject<String> retrieveRawObject(Gadget gadget,
boolean ignoreCache) throws GadgetException {
// Always attempt to rewrite the inbound gadget object.
// Even if that fails, the non-rewritten Gadget should be cached,
// to avoid superfluous rewrites later.
- baseRegistry.rewriteGadget(qp.context, qp.gadget);
+ baseRegistry.rewriteGadget(gadget);
// Expiration time of 30 minutes by default. This number is arbitrary.
// TODO: Make this value configurable.
long expiration = System.currentTimeMillis() + (1000 * 60 * 30);
- Object expirationObj =
qp.gadget.getSpec().getAttribute(GadgetSpec.EXPIRATION_ATTRIB);
+ Object expirationObj =
gadget.getSpec().getAttribute(GadgetSpec.EXPIRATION_ATTRIB);
if (expirationObj instanceof Long) {
expiration = (Long)expirationObj;
}
- return new FetchedObject<String>(qp.gadget.getContent(), expiration);
+ return new FetchedObject<String>(gadget.getContent(), expiration);
}
/** [EMAIL PROTECTED] */
@@ -95,9 +94,9 @@
}
/** [EMAIL PROTECTED] */
- public boolean rewriteGadget(GadgetContext context, Gadget gadget)
+ public boolean rewriteGadget(Gadget gadget)
throws GadgetException {
- String cached = doCachedFetch(new QueryPair(context, gadget),
context.getIgnoreCache());
+ String cached = doCachedFetch(gadget,
gadget.getContext().getIgnoreCache());
// At present, the output of rewriting is just the string contained within
// the Gadget object. Thus, a successful cache hit results in copying over
the
// rewritten value to the input gadget object.
@@ -107,19 +106,10 @@
gadget.setContent(cached);
return true;
}
- return baseRegistry.rewriteGadget(context, gadget);
+ return baseRegistry.rewriteGadget(gadget);
}
public void appendRewriter(ContentRewriter rewriter) {
baseRegistry.appendRewriter(rewriter);
}
-
- public static class QueryPair {
- private GadgetContext context;
- private Gadget gadget;
- private QueryPair(GadgetContext context, Gadget gadget) {
- this.context = context;
- this.gadget = gadget;
- }
- }
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriter.java
Wed Sep 3 18:22:28 2008
@@ -17,9 +17,9 @@
*/
package org.apache.shindig.gadgets.rewrite;
+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.spec.GadgetSpec;
import com.google.inject.ImplementedBy;
@@ -32,7 +32,7 @@
public interface ContentRewriter {
/**
- * Rewrite the original content located at source
+ * Rewrite the original content located at source.
* @param request Originating request
* @param original Original content
* @return A rewritten copy of the original or null if no rewriting occurred
@@ -40,13 +40,10 @@
public HttpResponse rewrite(HttpRequest request, HttpResponse original);
/**
- * Rewrite the original gadget content located at source
- * @param spec GadgetSpec to use for rewriting rules. May be null
- * @param original Original content
- * @param mimeType A string containing the mime type of the content, may
- * contain other content as allowed in the HTTP Content-Type
- * header
- * @return A rewritten copy of the original or null if no rewriting occurred
+ * Rewrite the gadget. The Gadget object's manipulation methods are used
+ * for the bulk of this.
+ *
+ * @param gadget Gadget to rewrite.
*/
- public String rewriteGadgetView(GadgetSpec spec, String original, String
mimeType);
+ public void rewrite(Gadget gadget);
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterRegistry.java
Wed Sep 3 18:22:28 2008
@@ -22,7 +22,6 @@
import java.util.List;
import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
@ImplementedBy(BasicContentRewriterRegistry.class)
@@ -34,10 +33,9 @@
/**
* Rewrites a [EMAIL PROTECTED] Gadget} object given the registered
rewriters.
- * @param context Context for gadget rewriting
* @param gadget Gadget object to rewrite
* @return True if rewriting occurred
* @throws GadgetException Potentially passed through from rewriters
*/
- public boolean rewriteGadget(GadgetContext context, Gadget gadget) throws
GadgetException;
+ public boolean rewriteGadget(Gadget gadget) throws GadgetException;
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultContentRewriter.java
Wed Sep 3 18:22:28 2008
@@ -20,6 +20,8 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
+
+import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.GadgetSpecFactory;
import org.apache.shindig.gadgets.http.HttpRequest;
@@ -103,12 +105,11 @@
}
}
- public String rewriteGadgetView(GadgetSpec spec, String view, String
mimeType) {
+ public void rewrite(Gadget gadget) {
StringWriter sw = new StringWriter();
- if (rewrite(spec, spec.getUrl(), new StringReader(view), mimeType, sw)) {
- return sw.toString();
- } else {
- return null;
+ GadgetSpec spec = gadget.getSpec();
+ if (rewrite(spec, spec.getUrl(), new StringReader(gadget.getContent()),
"text/html", sw)) {
+ gadget.setContent(sw.toString());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/NoOpContentRewriter.java
Wed Sep 3 18:22:28 2008
@@ -18,9 +18,9 @@
*/
package org.apache.shindig.gadgets.rewrite;
+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.spec.GadgetSpec;
/**
* A no-op content rewriter
@@ -34,7 +34,7 @@
return null;
}
- public String rewriteGadgetView(GadgetSpec spec, String original, String
mimeType) {
- return null;
+ public void rewrite(Gadget gadget) {
+ // Do nothing.
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeDefaultContentRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeDefaultContentRewriter.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeDefaultContentRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeDefaultContentRewriter.java
Wed Sep 3 18:22:28 2008
@@ -20,6 +20,7 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
+import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.GadgetSpecFactory;
import org.apache.shindig.gadgets.http.HttpRequest;
@@ -103,12 +104,11 @@
}
}
- public String rewriteGadgetView(GadgetSpec spec, String view, String
mimeType) {
+ public void rewrite(Gadget gadget) {
StringWriter sw = new StringWriter();
- if (rewrite(spec, spec.getUrl(), view, mimeType, sw)) {
- return sw.toString();
- } else {
- return null;
+ GadgetSpec spec = gadget.getSpec();
+ if (rewrite(spec, spec.getUrl(), gadget.getContent(), "text/html", sw)) {
+ gadget.setContent(sw.toString());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
Wed Sep 3 18:22:28 2008
@@ -337,7 +337,7 @@
List<GadgetHtmlNode> nodes = new LinkedList<GadgetHtmlNode>();
for (ParsedHtmlNode parsedNode : parsed) {
- nodes.add(new GadgetHtmlNode(parsedNode));
+ nodes.add(new GadgetHtmlNode(parsedNode, null));
}
return nodes;
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java
Wed Sep 3 18:22:28 2008
@@ -21,9 +21,15 @@
import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.replay;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import org.apache.shindig.common.ContainerConfig;
import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.parse.GadgetHtmlNode;
+import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.LocaleSpec;
import org.apache.shindig.gadgets.spec.Preload;
@@ -73,7 +79,7 @@
spec = new GadgetSpec(URI.create(SPEC_URL), SPEC_XML);
libraries = Arrays.asList(lib);
- gadget = new Gadget(context, spec, libraries, config);
+ gadget = new Gadget(context, spec, libraries, config, new
CajaHtmlParser());
}
@Test
@@ -95,6 +101,80 @@
assertEquals("DEFAULT VIEW", view.getContent());
}
+
+ @Test
+ public void getContentAndParseTreeNoSets() throws Exception {
+ replay(config);
+
+ String content = gadget.getContent();
+ assertEquals("DEFAULT VIEW", content);
+
+ GadgetHtmlNode root = gadget.getParseTree();
+ assertEquals(1, root.getChildren().size());
+ assertTrue(root.getChildren().get(0).isText());
+ assertEquals(content, root.getChildren().get(0).getText());
+
+ assertSame(content, gadget.getContent());
+ assertSame(root, gadget.getParseTree());
+ }
+
+ @Test
+ public void modifyContentReflectedInTree() throws Exception {
+ replay(config);
+
+ gadget.setContent("NEW CONTENT");
+ GadgetHtmlNode root = gadget.getParseTree();
+ assertEquals(1, root.getChildren().size());
+ assertEquals("NEW CONTENT", root.getChildren().get(0).getText());
+ }
+
+ @Test
+ public void modifyTreeReflectedInContent() throws Exception {
+ replay(config);
+
+ GadgetHtmlNode root = gadget.getParseTree();
+
+ // First child should be text node per other tests. Modify it.
+ root.getChildren().get(0).setText("FOO CONTENT");
+ assertEquals("FOO CONTENT", gadget.getContent());
+
+ // Do it again
+ root.getChildren().get(0).setText("BAR CONTENT");
+ assertEquals("BAR CONTENT", gadget.getContent());
+
+ // GadgetHtmlNode hasn't changed because string hasn't changed
+ assertSame(root, gadget.getParseTree());
+ }
+
+ @Test
+ public void staleTreeEditsInvalidatedAfterContentSet() throws Exception {
+ replay(config);
+
+ GadgetHtmlNode firstRoot = gadget.getParseTree();
+
+ // Re-set content
+ gadget.setContent("INVALIDATING CONTENT");
+
+ // Should still be able to obtain this.
+ GadgetHtmlNode secondRoot = gadget.getParseTree();
+ assertNotSame(firstRoot, secondRoot);
+
+ // Should be able to *obtain* first child node...
+ GadgetHtmlNode firstTextNode = firstRoot.getChildren().get(0);
+ try {
+ // ...but not edit it.
+ firstTextNode.setText("STALE-SET CONTENT");
+ fail("Should not be able to modify stale parse tree");
+ } catch (IllegalStateException e) {
+ // Expected condition.
+ }
+
+ assertEquals("INVALIDATING CONTENT",
secondRoot.getChildren().get(0).getText());
+
+ // For good measure, modify secondRoot and get content
+ secondRoot.getChildren().get(0).setText("NEW CONTENT");
+ assertEquals("NEW CONTENT", gadget.getContent());
+ }
@Test
public void getAliasedView() {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
Wed Sep 3 18:22:28 2008
@@ -31,7 +31,6 @@
import org.apache.shindig.gadgets.oauth.OAuthFetcher;
import org.apache.shindig.gadgets.rewrite.BasicContentRewriterRegistry;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
import java.util.concurrent.ExecutorService;
@@ -59,7 +58,7 @@
registry = new GadgetFeatureRegistry(null, fetcher);
gadgetServer = new GadgetServer(executor, registry, blacklist,
containerConfig, new BasicContentRewriterRegistry(rewriter),
- fetcherFactory, specFactory, bundleFactory);
+ null, fetcherFactory, specFactory, bundleFactory);
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -72,9 +71,8 @@
return original;
}
- public String rewriteGadgetView(GadgetSpec spec, String original, String
mimeType) {
+ public void rewrite(Gadget gadget) {
rewroteView = true;
- return original;
}
public boolean viewWasRewritten() {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpCacheTest.java
Wed Sep 3 18:22:28 2008
@@ -17,7 +17,7 @@
*/
package org.apache.shindig.gadgets.http;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
+import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import static org.easymock.EasyMock.expect;
@@ -88,8 +88,8 @@
private static String PFX_STR = "--prefixtest--";
private static class TestContentRewriter implements ContentRewriter {
- public String rewriteGadgetView(GadgetSpec spec, String content, String
mime) {
- return PFX_STR + content;
+ public void rewrite(Gadget gadget) {
+ gadget.setContent(PFX_STR + gadget.getContent());
}
public HttpResponse rewrite(HttpRequest req, HttpResponse resp) {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/GadgetHtmlNodeTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/GadgetHtmlNodeTest.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/GadgetHtmlNodeTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/GadgetHtmlNodeTest.java
Wed Sep 3 18:22:28 2008
@@ -95,8 +95,10 @@
makeParsedTagNode("span", null, null)
};
ParsedHtmlNode parsed = makeParsedTagNode("div", tagTreeAttribs,
parsedKids);
- GadgetHtmlNode node = new GadgetHtmlNode(parsed);
+ TestEditListener tel = new TestEditListener();
+ GadgetHtmlNode node = new GadgetHtmlNode(parsed, tel);
validateTagTreeGetters(node);
+ assertTrue(tel.numEdits > 0);
}
public void testTagTreeCreatedByNewGetters() {
@@ -144,8 +146,10 @@
private static String textGetterContent = "content";
public void testTextCreatedFromParsedGetters() {
ParsedHtmlNode parsed = makeParsedTextNode(textGetterContent);
- GadgetHtmlNode node = new GadgetHtmlNode(parsed);
+ TestEditListener tel = new TestEditListener();
+ GadgetHtmlNode node = new GadgetHtmlNode(parsed, tel);
validateTextGetters(node);
+ assertEquals(0, tel.numEdits);
}
public void testTextCreatedByNewGetters() {
@@ -161,8 +165,10 @@
// Test: tag name setter
public void testTagCreatedFromParsedTagSetter() {
ParsedHtmlNode parsed = makeParsedTagNode("div", null, null);
- GadgetHtmlNode node = new GadgetHtmlNode(parsed);
+ TestEditListener tel = new TestEditListener();
+ GadgetHtmlNode node = new GadgetHtmlNode(parsed, tel);
validateTagNameSetter(node);
+ assertEquals(1, tel.numEdits);
}
public void testTagCreatedFromNewTagSetter() {
@@ -181,8 +187,10 @@
public void testTagCreatedFromParsedAttributeManipulation() {
ParsedHtmlNode parsed =
makeParsedTagNode("div", tagManipAttribs, null);
- GadgetHtmlNode node = new GadgetHtmlNode(parsed);
+ TestEditListener tel = new TestEditListener();
+ GadgetHtmlNode node = new GadgetHtmlNode(parsed, tel);
validateTagAttributeManipulation(node);
+ assertTrue(tel.numEdits > 0);
}
public void testTagCreatedFromNewAttributeManipulation() {
@@ -244,7 +252,9 @@
public void testTagCreatedFromParsedNodeManipulation() {
ParsedHtmlNode[] kidNodes = { makeParsedTextNode("content") };
ParsedHtmlNode parsed = makeParsedTagNode("div", null, kidNodes);
- GadgetHtmlNode parentNode = new GadgetHtmlNode(parsed);
+ TestEditListener tel = new TestEditListener();
+ GadgetHtmlNode parentNode = new GadgetHtmlNode(parsed, tel);
+ tel.numEdits = 0;
// Sanity check on created child
List<GadgetHtmlNode> initialChildren = parentNode.getChildren();
@@ -253,10 +263,12 @@
GadgetHtmlNode textNode = initialChildren.get(0);
assertTrue(textNode.isText());
assertSame(parentNode, textNode.getParentNode());
+ assertEquals(0, tel.numEdits);
// appendChild
- GadgetHtmlNode afterNode = new GadgetHtmlNode(makeParsedTagNode("after",
null, null));
+ GadgetHtmlNode afterNode = new GadgetHtmlNode(makeParsedTagNode("after",
null, null), null);
parentNode.appendChild(afterNode);
+ assertEquals(1, tel.numEdits);
List<GadgetHtmlNode> appendKids = parentNode.getChildren();
assertNotNull(appendKids);
assertEquals(2, appendKids.size());
@@ -264,10 +276,12 @@
assertSame(afterNode, appendKids.get(1));
assertSame(parentNode, textNode.getParentNode());
assertSame(parentNode, afterNode.getParentNode());
+ assertEquals(1, tel.numEdits);
// insertBefore
- GadgetHtmlNode beforeNode = new GadgetHtmlNode(makeParsedTagNode("before",
null, null));
+ GadgetHtmlNode beforeNode = new GadgetHtmlNode(makeParsedTagNode("before",
null, null), null);
parentNode.insertBefore(beforeNode, textNode);
+ assertEquals(2, tel.numEdits);
List<GadgetHtmlNode> insertKids = parentNode.getChildren();
assertNotNull(insertKids);
assertEquals(3, insertKids.size());
@@ -280,9 +294,13 @@
// remove before and text, leaving only after
assertTrue(parentNode.removeChild(beforeNode));
+ assertEquals(3, tel.numEdits);
assertFalse(parentNode.removeChild(beforeNode));
+ assertEquals(3, tel.numEdits);
assertTrue(parentNode.removeChild(textNode));
+ assertEquals(5, tel.numEdits); // 5 = parent node change plus removal
assertFalse(parentNode.removeChild(textNode));
+ assertEquals(5, tel.numEdits);
assertNull(beforeNode.getParentNode());
assertNull(textNode.getParentNode());
List<GadgetHtmlNode> remainingKids = parentNode.getChildren();
@@ -290,9 +308,11 @@
assertEquals(1, remainingKids.size());
assertSame(parentNode, afterNode.getParentNode());
assertSame(afterNode, remainingKids.get(0));
+ assertEquals(5, tel.numEdits);
// clear nodes
parentNode.clearChildren();
+ assertEquals(6, tel.numEdits);
List<GadgetHtmlNode> clearedKids = parentNode.getChildren();
assertNotNull(clearedKids);
assertEquals(0, clearedKids.size());
@@ -301,11 +321,13 @@
// Test: text setter
public void testTextCreatedFromParsedTextSetter() {
ParsedHtmlNode parsed = makeParsedTextNode("content");
- GadgetHtmlNode node = new GadgetHtmlNode(parsed);
+ TestEditListener tel = new TestEditListener();
+ GadgetHtmlNode node = new GadgetHtmlNode(parsed, tel);
validateTextSetter(node);
+ assertEquals(1, tel.numEdits);
}
- public void tesetTextCreatedFromNewTextSetter() {
+ public void testTextCreatedFromNewTextSetter() {
validateTextSetter(makeTextNodeFromNew("content"));
}
@@ -319,7 +341,7 @@
// Test: text-node API limitation
public void testTagsFromParsedCantUseTextApis() {
validateTagsCantUseTextApis(
- new GadgetHtmlNode(makeParsedTagNode("tag", null, null)));
+ new GadgetHtmlNode(makeParsedTagNode("tag", null, null), null));
}
public void testTagsFromNewCantUseTextApis() {
@@ -346,7 +368,7 @@
// Test: tag-node API limitation
public void testTextFromParsedCantUseTagsApis() {
- validateTextCantUseTagsApis(new
GadgetHtmlNode(makeParsedTextNode("content")));
+ validateTextCantUseTagsApis(new
GadgetHtmlNode(makeParsedTextNode("content"), null));
}
public void testTextFromNewCantUseTagsApis() {
@@ -572,4 +594,12 @@
}
return sw.toString();
}
+
+ private static class TestEditListener implements GadgetHtmlNode.EditListener
{
+ private int numEdits = 0;
+
+ public void nodeEdited() {
+ ++numEdits;
+ }
+ }
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/AppendingRewriter.java
Wed Sep 3 18:22:28 2008
@@ -17,9 +17,9 @@
*/
package org.apache.shindig.gadgets.rewrite;
+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.spec.GadgetSpec;
/**
* Simple ContentRewriter implementation that appends
@@ -38,9 +38,8 @@
return null;
}
- public String rewriteGadgetView(GadgetSpec spec, String original,
- String mimeType) {
+ public void rewrite(Gadget gadget) {
// Appends appender to the end of the input string.
- return original + appender;
+ gadget.setContent(gadget.getContent() + appender);
}
}
\ No newline at end of file
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BasicContentRewriterRegistryTest.java
Wed Sep 3 18:22:28 2008
@@ -78,9 +78,9 @@
expect(context.getView()).andReturn(GadgetSpec.DEFAULT_VIEW).anyTimes();
replay(context, view, spec);
- Gadget gadget = new Gadget(context, spec, null, null);
+ Gadget gadget = new Gadget(context, spec, null, null, null);
assertEquals(inputContent, gadget.getContent());
- assertTrue(r.rewriteGadget(context, gadget));
+ assertTrue(r.rewriteGadget(gadget));
assertEquals(rewrittenContent, gadget.getContent());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CachingContentRewriterRegistryTest.java
Wed Sep 3 18:22:28 2008
@@ -62,19 +62,19 @@
expect(context.getView()).andReturn(GadgetSpec.DEFAULT_VIEW).anyTimes();
replay(context, view, spec);
- Gadget gadget = new Gadget(context, spec, null, null);
+ Gadget gadget = new Gadget(context, spec, null, null, null);
assertEquals(inputContent, gadget.getContent());
// Should be rewritten the first time.
- assertTrue(r.rewriteGadget(context, gadget));
+ assertTrue(r.rewriteGadget(gadget));
assertEquals(rewrittenContent, gadget.getContent());
r.appendRewriter(new AppendingRewriter("-end"));
// Should also be rewritten the second time, but with the previous
// expected rewritten content value.
- Gadget nextGadget = new Gadget(context, spec, null, null);
- assertTrue(r.rewriteGadget(context, nextGadget));
+ Gadget nextGadget = new Gadget(context, spec, null, null, null);
+ assertTrue(r.rewriteGadget(nextGadget));
assertEquals(rewrittenContent, nextGadget.getContent());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java?rev=691846&r1=691845&r2=691846&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java
Wed Sep 3 18:22:28 2008
@@ -130,7 +130,7 @@
"</Module>";
GadgetSpec spec = new GadgetSpec(URI.create(SPEC_URL), xml);
replay();
- Gadget gadget = new Gadget(context, spec,
Collections.<JsLibrary>emptyList(), containerConfig);
+ Gadget gadget = new Gadget(context, spec,
Collections.<JsLibrary>emptyList(), containerConfig, null);
URI iframeUrl = URI.create(realUrlGenerator.getIframeUrl(gadget));
@@ -150,7 +150,7 @@
"</Module>";
GadgetSpec spec = new GadgetSpec(URI.create(SPEC_URL), xml);
replay();
- Gadget gadget = new Gadget(context, spec,
Collections.<JsLibrary>emptyList(), containerConfig);
+ Gadget gadget = new Gadget(context, spec,
Collections.<JsLibrary>emptyList(), containerConfig, null);
URI iframeUrl = URI.create(realUrlGenerator.getIframeUrl(gadget));