You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by aw...@apache.org on 2009/07/17 20:52:57 UTC
svn commit: r795193 [1/2] - in /incubator/shindig/trunk/java:
gadgets/src/main/java/org/apache/shindig/gadgets/preload/
gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/
gadgets/src/main/java/org/apache/shindig/gadgets/spec/ gadgets/src/main/ja...
Author: awiner
Date: Fri Jul 17 18:52:55 2009
New Revision: 795193
URL: http://svn.apache.org/viewvc?rev=795193&view=rev
Log:
Add new Variable tag to pipelining and (server-side) templates, as an osx: extension
Refactor pipeline code a bit now that we have a third type of task (social, http, and variable)
Move tags down into a tags subpackage of templates
Repackage tags into
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/CompositeTagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/HtmlTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/IfTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RenderTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RepeatTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java (contents, props changed)
- copied, changed from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VariableTagHandler.java (with props)
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/AbstractTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistryTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/CompositeTagRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistryTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTagRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/FlashTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/HtmlTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/IfTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/IfTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RepeatTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandlerTest.java (contents, props changed)
- copied, changed from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandlerTest.java
Removed:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/CompositeTagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/HtmlTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/IfTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RenderTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RepeatTagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandler.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/AbstractTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/CompositeTagRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTagRegistryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/FlashTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/HtmlTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/IfTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RepeatTagHandlerTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandlerTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/ElementELResolver.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagRegistry.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndTest.java
incubator/shindig/trunk/java/server/src/test/resources/endtoend/pipeliningTest.xml
incubator/shindig/trunk/java/server/src/test/resources/endtoend/templateRewriter.xml
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java Fri Jul 17 18:52:55 2009
@@ -48,6 +48,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
@@ -72,22 +73,32 @@
public Collection<Callable<PreloadedData>> createPreloadTasks(GadgetContext context,
PipelinedData.Batch batch) {
List<Callable<PreloadedData>> preloadList = Lists.newArrayList();
-
- // Load any social preloads into a JSONArray for delivery to
- // JsonRpcServlet
- if (!batch.getSocialPreloads().isEmpty()) {
- Callable<PreloadedData> preloader = new SocialPreloadTask(context,
- batch.getSocialPreloads().values());
- preloadList.add(preloader);
- }
-
- if (!batch.getHttpPreloads().isEmpty()) {
- for (Map.Entry<String, RequestAuthenticationInfo> httpPreloadEntry
- : batch.getHttpPreloads().entrySet()) {
- preloadList.add(new HttpPreloadTask(context, httpPreloadEntry.getValue(),
- httpPreloadEntry.getKey()));
- }
-
+
+ Collection<Object> socialRequest = Lists.newArrayList();
+ // Gather all the preload entries; all social requests in one batch, each HTTP
+ // in its own
+ for (Map.Entry<String, PipelinedData.BatchItem> preloadEntry : batch.getPreloads().entrySet()) {
+ PipelinedData.BatchItem preloadItem = preloadEntry.getValue();
+ switch (preloadItem.getType()) {
+ case HTTP:
+ preloadList.add(new HttpPreloadTask(context, (RequestAuthenticationInfo) preloadItem.getData(),
+ preloadEntry.getKey()));
+ break;
+ case SOCIAL:
+ socialRequest.add(preloadItem.getData());
+ break;
+ case VARIABLE:
+ // TODO: this is rather crazy: these tasks don't need to execute on
+ // another thread.
+ preloadList.add(new VariableTask(preloadEntry.getKey(), preloadItem.getData()));
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown pipeline type");
+ }
+ }
+
+ if (!socialRequest.isEmpty()) {
+ preloadList.add(new SocialPreloadTask(context, socialRequest));
}
return preloadList;
@@ -105,6 +116,23 @@
return response;
}
+ private static class VariableTask implements Callable<PreloadedData> {
+ private ImmutableMap<String, Object> result;
+
+ public VariableTask(String key, Object data) {
+ this.result = (data == null) ? ImmutableMap.of("id", (Object) key)
+ : ImmutableMap.of("id", key, "data", data);
+ }
+
+ public PreloadedData call() throws Exception {
+ return new PreloadedData() {
+ public Collection<Object> toJson() throws PreloadException {
+ return ImmutableList.<Object>of(result);
+ }
+ };
+ }
+ }
+
/**
* Callable for issuing HttpRequests to JsonRpcServlet.
*/
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/TemplateRewriter.java Fri Jul 17 18:52:55 2009
@@ -29,19 +29,19 @@
import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.MessageBundle;
-import org.apache.shindig.gadgets.templates.CompositeTagRegistry;
import org.apache.shindig.gadgets.templates.ContainerTagLibraryFactory;
-import org.apache.shindig.gadgets.templates.DefaultTagRegistry;
import org.apache.shindig.gadgets.templates.MessageELResolver;
-import org.apache.shindig.gadgets.templates.TagHandler;
import org.apache.shindig.gadgets.templates.TagRegistry;
-import org.apache.shindig.gadgets.templates.TemplateBasedTagHandler;
import org.apache.shindig.gadgets.templates.TemplateContext;
import org.apache.shindig.gadgets.templates.TemplateLibrary;
import org.apache.shindig.gadgets.templates.TemplateLibraryFactory;
import org.apache.shindig.gadgets.templates.TemplateParserException;
import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.apache.shindig.gadgets.templates.TemplateResource;
+import org.apache.shindig.gadgets.templates.tags.CompositeTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.DefaultTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
+import org.apache.shindig.gadgets.templates.tags.TemplateBasedTagHandler;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/PipelinedData.java Fri Jul 17 18:52:55 2009
@@ -52,17 +52,15 @@
* Parsing code for <os:*> elements.
*/
public class PipelinedData {
- private final Map<String, SocialData> socialPreloads;
- private final Map<String, HttpData> httpPreloads;
-
private boolean needsViewer;
private boolean needsOwner;
+ private Map<String, BatchItemData> allPreloads;
public static final String OPENSOCIAL_NAMESPACE = "http://ns.opensocial.org/2008/markup";
+ public static final String EXTENSION_NAMESPACE = "http://ns.opensocial.org/2009/extensions";
public PipelinedData(Element element, Uri base) throws SpecParserException {
- Map<String, SocialData> socialPreloads = Maps.newHashMap();
- Map<String, HttpData> httpPreloads = Maps.newHashMap();
+ Map<String, BatchItemData> allPreloads = Maps.newHashMap();
// TODO: extract this loop into XmlUtils.getChildrenWithNamespace
for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) {
@@ -71,62 +69,61 @@
}
Element child = (Element) node;
- // Ignore elements not in the namespace
- if (!OPENSOCIAL_NAMESPACE.equals(child.getNamespaceURI())) {
- continue;
- }
-
- String elementName = child.getLocalName();
-
- String key = child.getAttribute("key");
- if (key == null) {
- throw new SpecParserException("Missing key attribute on os:" + elementName);
- }
-
- try {
- if ("PeopleRequest".equals(elementName)) {
- socialPreloads.put(key, createPeopleRequest(child));
- } else if ("ViewerRequest".equals(elementName)) {
- socialPreloads.put(key, createViewerRequest(child));
- } else if ("OwnerRequest".equals(elementName)) {
- socialPreloads.put(key, createOwnerRequest(child));
- } else if ("PersonAppDataRequest".equals(elementName)) {
- // TODO: delete when 0.9 app data retrieval is supported
- socialPreloads.put(key, createPersonAppDataRequest(child));
- } else if ("ActivitiesRequest".equals(elementName)) {
- socialPreloads.put(key, createActivityRequest(child));
- } else if ("DataRequest".equals(elementName)) {
- socialPreloads.put(key, createDataRequest(child));
- } else if ("HttpRequest".equals(elementName)) {
- httpPreloads.put(key, createHttpRequest(child, base));
- } else {
- // TODO: This is wrong - the spec should parse, but should preload
- // notImplemented
- throw new SpecParserException("Unknown element <os:" + elementName + '>');
+
+ if (EXTENSION_NAMESPACE.equals(child.getNamespaceURI())) {
+ if ("Variable".equals(child.getLocalName())) {
+ allPreloads.put(child.getAttribute("key"), createVariableRequest(child));
+ }
+
+ } else if (OPENSOCIAL_NAMESPACE.equals(child.getNamespaceURI())) {
+ String elementName = child.getLocalName();
+
+ String key = child.getAttribute("key");
+ if (key == null) {
+ throw new SpecParserException("Missing key attribute on os:" + elementName);
+ }
+
+ try {
+ if ("PeopleRequest".equals(elementName)) {
+ allPreloads.put(key, createPeopleRequest(child));
+ } else if ("ViewerRequest".equals(elementName)) {
+ allPreloads.put(key, createViewerRequest(child));
+ } else if ("OwnerRequest".equals(elementName)) {
+ allPreloads.put(key, createOwnerRequest(child));
+ } else if ("PersonAppDataRequest".equals(elementName)) {
+ // TODO: delete when 0.9 app data retrieval is supported
+ allPreloads.put(key, createPersonAppDataRequest(child));
+ } else if ("ActivitiesRequest".equals(elementName)) {
+ allPreloads.put(key, createActivityRequest(child));
+ } else if ("DataRequest".equals(elementName)) {
+ allPreloads.put(key, createDataRequest(child));
+ } else if ("HttpRequest".equals(elementName)) {
+ allPreloads.put(key, createHttpRequest(child, base));
+ } else {
+ // TODO: This is wrong - the spec should parse, but should preload
+ // notImplemented
+ throw new SpecParserException("Unknown element <os:" + elementName + '>');
+ }
+ } catch (ELException ele) {
+ throw new SpecParserException(new XmlException(ele));
}
- } catch (ELException ele) {
- throw new SpecParserException(new XmlException(ele));
}
}
- this.socialPreloads = Collections.unmodifiableMap(socialPreloads);
- this.httpPreloads = Collections.unmodifiableMap(httpPreloads);
+ this.allPreloads = Collections.unmodifiableMap(allPreloads);
}
- private PipelinedData(PipelinedData socialData, Substitutions substituter) {
- Map<String, SocialData> socialPreloads = Maps.newHashMap();
- Map<String, HttpData> httpPreloads = Maps.newHashMap();
-
- // TODO: support hangman substitutions for social preloads?
- socialPreloads.putAll(socialData.socialPreloads);
+ private BatchItemData createVariableRequest(Element child) {
+ return new VariableData(child.getAttribute("value"));
+ }
- for (Map.Entry<String, HttpData> httpPreload : socialData.httpPreloads.entrySet()) {
- httpPreloads.put(httpPreload.getKey(), httpPreload.getValue().substitute(substituter));
+ private PipelinedData(PipelinedData socialData, Substitutions substituter) {
+ Map<String, BatchItemData> allPreloads = Maps.newHashMap();
+ for (Map.Entry<String, BatchItemData> preload : socialData.allPreloads.entrySet()) {
+ allPreloads.put(preload.getKey(), preload.getValue().substitute(substituter));
}
-
- this.socialPreloads = Collections.unmodifiableMap(socialPreloads);
- this.httpPreloads = Collections.unmodifiableMap(httpPreloads);
-
+
+ this.allPreloads = Collections.unmodifiableMap(allPreloads);
}
/**
@@ -138,11 +135,29 @@
}
public interface Batch {
- Map<String, Object> getSocialPreloads();
- Map<String, RequestAuthenticationInfo> getHttpPreloads();
+ Map<String, BatchItem> getPreloads();
Batch getNextBatch(ELResolver rootObjects);
}
-
+
+ /** Temporary type until BatchItem is made fully polymorphic */
+ public enum BatchType {
+ SOCIAL,
+ HTTP,
+ VARIABLE
+ }
+
+ /** Item within a batch */
+ public interface BatchItem {
+ BatchType getType();
+ Object getData();
+ }
+
+ /** Shared data used to generate BatchItems */
+ interface BatchItemData {
+ BatchItem evaluate(Expressions expressions, ELContext elContext);
+ BatchItemData substitute(Substitutions substituter);
+ }
+
/**
* Gets the first batch of preload requests. Preloads that require root
* objects not yet available will not be executed in this batch, but may
@@ -154,7 +169,7 @@
* @return a batch, or null if no batch could be created
*/
public Batch getBatch(Expressions expressions, ELResolver rootObjects) {
- return getBatch(expressions, rootObjects, socialPreloads, httpPreloads);
+ return getBatch(expressions, rootObjects, allPreloads);
}
/**
@@ -166,95 +181,64 @@
* @param currentHttpPreloads the remaining http preloads
*/
private Batch getBatch(Expressions expressions, ELResolver rootObjects,
- Map<String, SocialData> currentSocialPreloads,
- Map<String, HttpData> currentHttpPreloads) {
+ Map<String, BatchItemData> currentPreloads) {
ELContext elContext = expressions.newELContext(rootObjects);
- // Evaluate all existing social preloads
- Map<String, Object> evaluatedSocialPreloads = Maps.newHashMap();
- Map<String, SocialData> pendingSocialPreloads = null;
-
- if (currentSocialPreloads != null) {
- for (Map.Entry<String, SocialData> preload : currentSocialPreloads.entrySet()) {
+ Map<String, BatchItem> evaluatedPreloads = Maps.newHashMap();
+ Map<String, BatchItemData> pendingPreloads = null;
+
+ if (currentPreloads != null) {
+ for (Map.Entry<String, BatchItemData> preload : currentPreloads.entrySet()) {
try {
- Object value = preload.getValue().toJson(expressions, elContext);
- evaluatedSocialPreloads.put(preload.getKey(), value);
- } catch (PropertyNotFoundException pnfe) {
- // Missing top-level property: put it in the pending set
- if (pendingSocialPreloads == null) {
- pendingSocialPreloads = Maps.newHashMap();
+ BatchItem value = preload.getValue().evaluate(expressions, elContext);
+ evaluatedPreloads.put(preload.getKey(), value);
+ } catch (PropertyNotFoundException pe) {
+ // Property-not-found: presume that this is because a top-level
+ // variable isn't available yet, which means that this needs to be
+ // postponed to the next batch.
+ if (pendingPreloads == null) {
+ pendingPreloads = Maps.newHashMap();
}
- pendingSocialPreloads.put(preload.getKey(), preload.getValue());
+
+ pendingPreloads.put(preload.getKey(), preload.getValue());
} catch (ELException e) {
// TODO: Handle!?!
throw new RuntimeException(e);
}
}
}
- // And evaluate all existing HTTP preloads
- Map<String, RequestAuthenticationInfo> evaluatedHttpPreloads = Maps.newHashMap();
- Map<String, HttpData> pendingHttpPreloads = null;
-
- if (currentHttpPreloads != null) {
- for (Map.Entry<String, HttpData> preload : currentHttpPreloads.entrySet()) {
- try {
- RequestAuthenticationInfo value = preload.getValue().evaluate(expressions, elContext);
- evaluatedHttpPreloads.put(preload.getKey(), value);
- } catch (PropertyNotFoundException pnfe) {
- if (pendingHttpPreloads == null) {
- pendingHttpPreloads = Maps.newHashMap();
- }
- pendingHttpPreloads.put(preload.getKey(), preload.getValue());
- } catch (ELException e) {
- // TODO: Handle!?!
- throw new RuntimeException(e);
- }
- }
- }
-
+
// Nothing evaluated or pending; return null for the batch. Note that
// there may be multiple PipelinedData objects (e.g., from multiple
// <script type="text/os-data"> elements), so even if all evaluations
// fail here, evaluations might succeed elsewhere and free up pending preloads
- if (evaluatedSocialPreloads.isEmpty() && evaluatedHttpPreloads.isEmpty() &&
- pendingHttpPreloads == null && pendingSocialPreloads == null) {
+ if (evaluatedPreloads.isEmpty() && pendingPreloads == null) {
return null;
}
- return new BatchImpl(expressions, evaluatedSocialPreloads, evaluatedHttpPreloads,
- pendingSocialPreloads, pendingHttpPreloads);
+ return new BatchImpl(expressions, evaluatedPreloads, pendingPreloads);
}
/** Batch implementation */
class BatchImpl implements Batch {
private final Expressions expressions;
- private final Map<String, Object> evaluatedSocialPreloads;
- private final Map<String, RequestAuthenticationInfo> evaluatedHttpPreloads;
- private final Map<String, SocialData> pendingSocialPreloads;
- private final Map<String, HttpData> pendingHttpPreloads;
-
- public BatchImpl(Expressions expressions,
- Map<String, Object> evaluatedSocialPreloads,
- Map<String, RequestAuthenticationInfo> evaluatedHttpPreloads,
- Map<String, SocialData> pendingSocialPreloads, Map<String, HttpData> pendingHttpPreloads) {
- this.expressions = expressions;
- this.evaluatedSocialPreloads = evaluatedSocialPreloads;
- this.evaluatedHttpPreloads = evaluatedHttpPreloads;
- this.pendingSocialPreloads = pendingSocialPreloads;
- this.pendingHttpPreloads = pendingHttpPreloads;
- }
+ private final Map<String, BatchItem> evaluatedPreloads;
+ private final Map<String, BatchItemData> pendingPreloads;
- public Map<String, Object> getSocialPreloads() {
- return evaluatedSocialPreloads;
+ public BatchImpl(Expressions expressions, Map<String, BatchItem> evaluatedPreloads,
+ Map<String, BatchItemData> pendingPreloads) {
+ this.expressions = expressions;
+ this.evaluatedPreloads = evaluatedPreloads;
+ this.pendingPreloads = pendingPreloads;
}
- public Map<String, RequestAuthenticationInfo> getHttpPreloads() {
- return evaluatedHttpPreloads;
+ public Batch getNextBatch(ELResolver rootObjects) {
+ return getBatch(expressions, rootObjects, pendingPreloads);
}
- public Batch getNextBatch(ELResolver rootObjects) {
- return getBatch(expressions, rootObjects, pendingSocialPreloads, pendingHttpPreloads);
+ public Map<String, BatchItem> getPreloads() {
+ return evaluatedPreloads;
}
}
@@ -424,7 +408,7 @@
/**
* A single pipelined HTTP makerequest.
*/
- private static class HttpData {
+ private static class HttpData implements BatchItemData {
private final AuthType authz;
private final Uri base;
private final String href;
@@ -481,7 +465,7 @@
* Evaluate expressions and return a RequestAuthenticationInfo.
* @throws ELException if expression evaluation fails.
*/
- public RequestAuthenticationInfo evaluate(Expressions expressions, ELContext context)
+ public BatchItem evaluate(Expressions expressions, ELContext context)
throws ELException {
String hrefString = String.valueOf(expressions.parse(href, String.class)
.getValue(context));
@@ -494,7 +478,7 @@
String.valueOf(expression.getValue(context)));
}
- return new RequestAuthenticationInfo() {
+ final RequestAuthenticationInfo info = new RequestAuthenticationInfo() {
public Map<String, String> getAttributes() {
return evaluatedAttributes;
}
@@ -515,6 +499,16 @@
return signViewer;
}
};
+
+ return new BatchItem() {
+ public Object getData() {
+ return info;
+ }
+
+ public BatchType getType() {
+ return BatchType.HTTP;
+ }
+ };
}
/** Parse a boolean expression off an XML attribute. */
@@ -531,7 +525,7 @@
/**
* A single social data request.
*/
- private static class SocialData {
+ private static class SocialData implements BatchItemData {
private final List<Property> properties = Lists.newArrayList();
private final String id;
private final String method;
@@ -546,7 +540,7 @@
}
/** Create the JSON request form for the social data */
- public JSONObject toJson(Expressions expressions, ELContext elContext) throws ELException {
+ private JSONObject toJson(Expressions expressions, ELContext elContext) throws ELException {
JSONObject object = new JSONObject();
try {
object.put("method", method);
@@ -589,5 +583,50 @@
}
}
}
+
+ public BatchItem evaluate(Expressions expressions, ELContext elContext) throws ELException {
+ final JSONObject jsonResult = toJson(expressions, elContext);
+ return new BatchItem() {
+ public Object getData() {
+ return jsonResult;
+ }
+
+ public BatchType getType() {
+ return BatchType.SOCIAL;
+ }
+ };
+ }
+
+ public BatchItemData substitute(Substitutions substituter) {
+ // TODO: support hangman substution on social data?
+ return this;
+ }
+ }
+
+ private static class VariableData implements BatchItemData {
+ private final String value;
+
+ public VariableData(String value) {
+ this.value = value;
+ }
+
+ public BatchItem evaluate(Expressions expressions, ELContext elContext) throws ELException {
+ ValueExpression expression = expressions.parse(value, Object.class);
+ final Object result = expression.getValue(elContext);
+ return new BatchItem() {
+ public Object getData() {
+ return result;
+ }
+
+ public BatchType getType() {
+ return BatchType.VARIABLE;
+ }
+
+ };
+ }
+
+ public BatchItemData substitute(Substitutions substituter) {
+ return this;
+ }
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java Fri Jul 17 18:52:55 2009
@@ -21,6 +21,8 @@
import org.apache.shindig.expressions.Expressions;
import org.apache.shindig.gadgets.GadgetELResolver;
import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.apache.shindig.gadgets.templates.tags.RepeatTagHandler;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/ElementELResolver.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/ElementELResolver.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/ElementELResolver.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/ElementELResolver.java Fri Jul 17 18:52:55 2009
@@ -34,7 +34,7 @@
/**
* ELResolver that processes DOM elements.
*/
-class ElementELResolver extends ELResolver {
+public class ElementELResolver extends ELResolver {
/**
* A wrapper for a DOM Element that overrides toString().
* TODO: remove with JUEL 2.1.1.
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/NullTemplateLibrary.java Fri Jul 17 18:52:55 2009
@@ -19,6 +19,8 @@
package org.apache.shindig.gadgets.templates;
import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.templates.tags.DefaultTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
import com.google.common.collect.ImmutableSet;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagRegistry.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagRegistry.java Fri Jul 17 18:52:55 2009
@@ -18,6 +18,8 @@
*/
package org.apache.shindig.gadgets.templates;
+import org.apache.shindig.gadgets.templates.tags.DefaultTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
import org.w3c.dom.Element;
import com.google.inject.ImplementedBy;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java Fri Jul 17 18:52:55 2009
@@ -18,6 +18,14 @@
*/
package org.apache.shindig.gadgets.templates;
+import org.apache.shindig.gadgets.templates.tags.FlashTagHandler;
+import org.apache.shindig.gadgets.templates.tags.HtmlTagHandler;
+import org.apache.shindig.gadgets.templates.tags.IfTagHandler;
+import org.apache.shindig.gadgets.templates.tags.RenderTagHandler;
+import org.apache.shindig.gadgets.templates.tags.RepeatTagHandler;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
+import org.apache.shindig.gadgets.templates.tags.VariableTagHandler;
+
import com.google.common.collect.ImmutableSet;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
@@ -34,6 +42,8 @@
@Override
protected void configure() {
bind(TemplateProcessor.class).to(DefaultTemplateProcessor.class);
+ // TODO: switch to Guice multibindings when that JAR becomes available
+ // in a Maven repository
bind(new TypeLiteral<Set<TagHandler>>(){}).toProvider(TagHandlersProvider.class);
}
@@ -44,9 +54,11 @@
@Inject
public TagHandlersProvider(HtmlTagHandler htmlHandler,
IfTagHandler ifHandler, RepeatTagHandler repeatHandler,
- RenderTagHandler renderHandler, FlashTagHandler flashHandler) {
+ RenderTagHandler renderHandler, FlashTagHandler flashHandler,
+ VariableTagHandler variableHandler) {
handlers = ImmutableSet.of((TagHandler) htmlHandler, ifHandler,
- repeatHandler, renderHandler, flashHandler);
+ repeatHandler, renderHandler, flashHandler,
+ variableHandler);
}
public Set<TagHandler> get() {
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java Fri Jul 17 18:52:55 2009
@@ -22,6 +22,9 @@
import org.apache.shindig.common.xml.DomUtil;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
+import org.apache.shindig.gadgets.templates.tags.DefaultTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
+import org.apache.shindig.gadgets.templates.tags.TemplateBasedTagHandler;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,9 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagRegistry.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagRegistry.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/AbstractTagRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java Fri Jul 17 18:52:55 2009
@@ -16,8 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+import org.apache.shindig.gadgets.templates.TagRegistry;
import org.w3c.dom.Element;
public abstract class AbstractTagRegistry implements TagRegistry {
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/AbstractTagRegistry.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/CompositeTagRegistry.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/CompositeTagRegistry.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/CompositeTagRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java Fri Jul 17 18:52:55 2009
@@ -16,7 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+
+import org.apache.shindig.gadgets.templates.TagRegistry;
import java.util.Collection;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/CompositeTagRegistry.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTagRegistry.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTagRegistry.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTagRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java Fri Jul 17 18:52:55 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
import java.util.Map;
import java.util.Set;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/DefaultTagRegistry.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/FlashTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
import com.google.common.collect.Maps;
import com.google.common.collect.ImmutableSet;
@@ -30,6 +30,7 @@
import org.apache.shindig.common.util.Utf8UrlCoder;
import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.apache.shindig.gadgets.GadgetFeatureRegistry;
import org.apache.shindig.gadgets.RenderingContext;
import org.apache.shindig.gadgets.GadgetFeature;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/HtmlTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/HtmlTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/HtmlTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/HtmlTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/IfTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/IfTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/IfTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,8 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/IfTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RenderTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RenderTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RenderTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,8 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
+import org.apache.shindig.gadgets.templates.ElementELResolver.ElementWrapper;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -25,7 +27,6 @@
import java.util.Map;
import com.google.inject.Inject;
-import org.apache.shindig.gadgets.templates.ElementELResolver.ElementWrapper;
/**
* Tag Handler for <os:Render/> tag.
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RenderTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RepeatTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RepeatTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/RepeatTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,8 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/RepeatTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,8 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java (from r794096, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandler.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandler.java&r1=794096&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateBasedTagHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java Fri Jul 17 18:52:55 2009
@@ -16,8 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
+import org.apache.shindig.gadgets.templates.ElementELResolver.ElementWrapper;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -29,7 +31,6 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import org.apache.shindig.gadgets.templates.ElementELResolver.ElementWrapper;
/**
* TagHandler implemented by an declarative XML definition.
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VariableTagHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VariableTagHandler.java?rev=795193&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VariableTagHandler.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VariableTagHandler.java Fri Jul 17 18:52:55 2009
@@ -0,0 +1,56 @@
+/*
+ * 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.templates.tags;
+
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
+/**
+ * Implement the osx:Variable tag
+ */
+public class VariableTagHandler extends AbstractTagHandler {
+
+ static final String TAG_NAME = "Variable";
+
+ @Inject
+ public VariableTagHandler(@Named("shindig.template-rewrite.extension-tag-namespace") String namespace) {
+ super(namespace, TAG_NAME);
+ }
+
+ public void process(Node result, Element tag, TemplateProcessor processor) {
+ // Get the key. Don't support EL (to match pipelining)
+ String key = tag.getAttribute("key");
+ if ("".equals(key)) {
+ return;
+ }
+
+ // Get the value (with EL)
+ Object value = getValueFromTag(tag, "value", processor, Object.class);
+
+ if (processor.getTemplateContext().getMy() == null) {
+ processor.getTemplateContext().setMy(Maps.<String, Object> newHashMap());
+ }
+ processor.getTemplateContext().getMy().put(key, value);
+ }
+}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VariableTagHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java Fri Jul 17 18:52:55 2009
@@ -121,8 +121,8 @@
ImmutableList.of(pipeline));
// Verify the data set is injected, and the os-data was deleted
- assertTrue(batchCapture.getValue().getSocialPreloads().containsKey("me"));
- assertTrue(batchCapture.getValue().getHttpPreloads().containsKey("json"));
+ assertTrue(batchCapture.getValue().getPreloads().containsKey("me"));
+ assertTrue(batchCapture.getValue().getPreloads().containsKey("json"));
JsonAssert.assertJsonEquals("[{id: 'key', data: {foo: 'bar'}}]",
JsonSerializer.serialize(results.results));
@@ -187,11 +187,12 @@
// Verify the data set is injected, and the os-data was deleted
// Check the evaluated HTTP request
- RequestAuthenticationInfo request = firstBatch.getValue().getHttpPreloads().get("json");
+ RequestAuthenticationInfo request = (RequestAuthenticationInfo)
+ firstBatch.getValue().getPreloads().get("json").getData();
assertEquals("http://example.org/test.json", request.getHref().toString());
// Check the evaluated person request
- JSONObject personRequest = (JSONObject) secondBatch.getValue().getSocialPreloads().get("me");
+ JSONObject personRequest = (JSONObject) secondBatch.getValue().getPreloads().get("me").getData();
assertEquals("canonical", personRequest.getJSONObject("params").getJSONArray("userId").get(0));
}
@@ -239,8 +240,8 @@
ImmutableList.of(pipeline));
// Verify the data set is injected, and the os-data was deleted
- assertTrue(batchCapture.getValue().getSocialPreloads().containsKey("me"));
- assertTrue(batchCapture.getValue().getHttpPreloads().containsKey("json"));
+ assertTrue(batchCapture.getValue().getPreloads().containsKey("me"));
+ assertTrue(batchCapture.getValue().getPreloads().containsKey("json"));
JsonAssert.assertJsonEquals("[{id: 'key', error: {message: 'NO!', code: 500}}]",
JsonSerializer.serialize(results.results));
@@ -307,8 +308,17 @@
}
PipelinedData.Batch batch = (PipelinedData.Batch) obj;
- return (socialCount == batch.getSocialPreloads().size()
- && httpCount == batch.getHttpPreloads().size());
+ int actualSocialCount = 0;
+ int actualHttpCount = 0;
+ for (PipelinedData.BatchItem item : batch.getPreloads().values()) {
+ if (item.getType() == PipelinedData.BatchType.HTTP) {
+ actualHttpCount++;
+ } else if (item.getType() == PipelinedData.BatchType.SOCIAL) {
+ actualSocialCount++;
+ }
+ }
+
+ return socialCount == actualSocialCount && httpCount == actualHttpCount;
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java Fri Jul 17 18:52:55 2009
@@ -74,6 +74,13 @@
+ " <os:HttpRequest key=\"p\" href=\"" + HTTP_REQUEST_URL + "\" "
+ "refreshInterval=\"60\" method=\"POST\"/>" + "</Content></Module>";
+ private static final String XML_WITH_VARIABLE = "<Module " +
+ "xmlns:os=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\" " +
+ "xmlns:osx=\"" + PipelinedData.EXTENSION_NAMESPACE + "\">"
+ + "<ModulePrefs title=\"Title\"/>"
+ + "<Content href=\"http://example.org/proxied.php\" view=\"profile\">"
+ + " <osx:Variable key=\"p\" value=\"${1+1}\"/>" + "</Content></Module>";
+
private static final String XML_WITH_HTTP_REQUEST_FOR_TEXT = "<Module xmlns:os=\""
+ PipelinedData.OPENSOCIAL_NAMESPACE + "\">"
+ "<ModulePrefs title=\"Title\"/>"
@@ -457,6 +464,34 @@
assertEquals(1, tasks.size());
}
+ @Test
+ public void testVariablePreload() throws Exception {
+ GadgetSpec spec = new GadgetSpec(GADGET_URL, XML_WITH_VARIABLE);
+
+ RecordingRequestPipeline pipeline = new RecordingRequestPipeline("");
+ PipelinedDataPreloader preloader = new PipelinedDataPreloader(pipeline, containerConfig);
+
+ view = "profile";
+ contextParams.put("st", "token");
+
+ Gadget gadget = new Gadget()
+ .setContext(context)
+ .setSpec(spec)
+ .setCurrentView(spec.getView("profile"));
+
+ PipelinedData.Batch batch = getBatch(gadget);
+ Collection<Callable<PreloadedData>> tasks = preloader.createPreloadTasks(
+ context, batch);
+ assertEquals(1, tasks.size());
+ // Nothing fetched yet
+ assertEquals(0, pipeline.requests.size());
+
+ Collection<Object> result = tasks.iterator().next().call().toJson();
+ assertEquals(1, result.size());
+
+ JsonAssert.assertObjectEquals("{id: 'p', data: 2}", result.iterator().next());
+ }
+
private static class RecordingRequestPipeline implements RequestPipeline {
public final List<HttpRequest> requests = Lists.newArrayList();
private final HttpResponse response;
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java Fri Jul 17 18:52:55 2009
@@ -138,8 +138,8 @@
assertFalse("os-data wasn't deleted",
content.getContent().contains("type=\"text/os-data\""));
- assertTrue(batchCapture.getValue().getSocialPreloads().containsKey("me"));
- assertTrue(batchCapture.getValue().getHttpPreloads().containsKey("json"));
+ assertTrue(batchCapture.getValue().getPreloads().containsKey("me"));
+ assertTrue(batchCapture.getValue().getPreloads().containsKey("json"));
assertEquals(ImmutableSet.of("opensocial-data"), gadget.getRemovedFeatures());
assertEquals(ImmutableSet.of("opensocial-data-context"), gadget.getAddedFeatures());
@@ -197,8 +197,17 @@
}
PipelinedData.Batch batch = (PipelinedData.Batch) obj;
- return (socialCount == batch.getSocialPreloads().size()
- && httpCount == batch.getHttpPreloads().size());
+ int actualSocialCount = 0;
+ int actualHttpCount = 0;
+ for (PipelinedData.BatchItem item : batch.getPreloads().values()) {
+ if (item.getType() == PipelinedData.BatchType.HTTP) {
+ actualHttpCount++;
+ } else if (item.getType() == PipelinedData.BatchType.SOCIAL) {
+ actualSocialCount++;
+ }
+ }
+
+ return socialCount == actualSocialCount && httpCount == actualHttpCount;
}
}
@@ -240,11 +249,13 @@
assertEquals(1, pipelines.size());
PipelinedData pipeline = pipelines.keySet().iterator().next();
PipelinedData.Batch batch = pipeline.getBatch(Expressions.forTesting(), new RootELResolver());
- Map<String, Object> preloads = batch.getSocialPreloads();
-
+ Map<String, PipelinedData.BatchItem> preloads = batch.getPreloads();
+ assertTrue(preloads.containsKey("me"));
+ assertEquals(PipelinedData.BatchType.SOCIAL, preloads.get("me").getType());
+
JsonAssert.assertObjectEquals(
- "{me: {params: {userId: 'canonical'}, method: 'people.get', id: 'me'}}",
- preloads);
+ "{params: {userId: 'canonical'}, method: 'people.get', id: 'me'}",
+ preloads.get("me").getData());
}
/** Create a mock Callable for a single preload task */
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java Fri Jul 17 18:52:55 2009
@@ -34,15 +34,15 @@
import org.apache.shindig.gadgets.render.FakeMessageBundleFactory;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.SpecParserException;
-import org.apache.shindig.gadgets.templates.AbstractTagHandler;
import org.apache.shindig.gadgets.templates.ContainerTagLibraryFactory;
-import org.apache.shindig.gadgets.templates.DefaultTagRegistry;
import org.apache.shindig.gadgets.templates.DefaultTemplateProcessor;
-import org.apache.shindig.gadgets.templates.TagHandler;
import org.apache.shindig.gadgets.templates.TemplateLibrary;
import org.apache.shindig.gadgets.templates.TemplateLibraryFactory;
import org.apache.shindig.gadgets.templates.TemplateProcessor;
import org.apache.shindig.gadgets.templates.XmlTemplateLibrary;
+import org.apache.shindig.gadgets.templates.tags.AbstractTagHandler;
+import org.apache.shindig.gadgets.templates.tags.DefaultTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Before;
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java Fri Jul 17 18:52:55 2009
@@ -24,11 +24,14 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import org.apache.shindig.common.JsonAssert;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.xml.XmlUtil;
import org.apache.shindig.expressions.Expressions;
import org.apache.shindig.expressions.RootELResolver;
import org.apache.shindig.gadgets.AuthType;
+import org.apache.shindig.gadgets.spec.PipelinedData.BatchItem;
+import org.apache.shindig.gadgets.spec.PipelinedData.BatchType;
import java.util.Map;
@@ -84,9 +87,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
}
@Test
@@ -113,9 +117,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
assertNull(batch.getNextBatch(elResolver));
}
@@ -146,9 +151,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
}
@Test
@@ -168,9 +174,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
}
@Test
@@ -190,9 +197,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
}
@Test
@@ -213,9 +221,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
}
@Test
@@ -236,9 +245,10 @@
+ "}}");
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getHttpPreloads().isEmpty());
- assertEquals(1, batch.getSocialPreloads().size());
- assertEquals(expected.toString(), batch.getSocialPreloads().get("key").toString());
+ assertEquals(1, batch.getPreloads().size());
+ PipelinedData.BatchItem batchItem = batch.getPreloads().get("key");
+ assertEquals(PipelinedData.BatchType.SOCIAL, batchItem.getType());
+ JsonAssert.assertObjectEquals(expected, batchItem.getData());
}
@Test
@@ -274,22 +284,43 @@
PipelinedData socialData = new PipelinedData(XmlUtil.parse(xml), GADGET_URI);
PipelinedData.Batch batch = socialData.getBatch(expressions, elResolver);
- assertTrue(batch.getSocialPreloads().isEmpty());
- assertTrue(batch.getHttpPreloads().isEmpty());
+
+ assertTrue(batch.getPreloads().isEmpty());
// Now have "userId", the next batch should resolve the people request
elValues.put("userId", "foo");
batch = batch.getNextBatch(elResolver);
- assertEquals(1, batch.getSocialPreloads().size());
- assertTrue(batch.getHttpPreloads().isEmpty());
+ assertEquals(1, batch.getPreloads().size());
+ assertTrue(batch.getPreloads().containsKey("key"));
+ // Now, add "key", the next batch should resolve the HTTP request
elValues.put("key", "somedata");
batch = batch.getNextBatch(elResolver);
- assertTrue(batch.getSocialPreloads().isEmpty());
- assertEquals(1, batch.getHttpPreloads().size());
+ assertEquals(1, batch.getPreloads().size());
+ assertTrue(batch.getPreloads().containsKey("key2"));
+
+ // And the final batch should be empty
assertNull(batch.getNextBatch(elResolver));
}
+ @Test
+ public void testVariable() throws Exception {
+ String xml = "<Content xmlns=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\">"
+ + "<osx:Variable xmlns:osx=\"" + PipelinedData.EXTENSION_NAMESPACE + "\" "
+ + "key=\"key\" value=\"${1+1}\"/>"
+ + "</Content>";
+
+ PipelinedData pipelinedData = new PipelinedData(XmlUtil.parse(xml), GADGET_URI);
+
+ PipelinedData.Batch batch = pipelinedData.getBatch(expressions, elResolver);
+ assertFalse(pipelinedData.needsViewer());
+ assertFalse(pipelinedData.needsOwner());
+
+ assertEquals(1, batch.getPreloads().size());
+ BatchItem output = batch.getPreloads().get("key");
+ assertEquals(BatchType.VARIABLE, output.getType());
+ assertEquals(2L, output.getData());
+ }
@Test
public void httpRequestDefaults() throws Exception {
@@ -303,11 +334,12 @@
assertFalse(pipelinedData.needsViewer());
assertFalse(pipelinedData.needsOwner());
- assertEquals(1, batch.getHttpPreloads().size());
- RequestAuthenticationInfo preload = batch.getHttpPreloads().get("key");
+ assertEquals(1, batch.getPreloads().size());
+ BatchItem output = batch.getPreloads().get("key");
+ assertEquals(BatchType.HTTP, output.getType());
+ RequestAuthenticationInfo preload = (RequestAuthenticationInfo) output.getData();
assertEquals(AuthType.NONE, preload.getAuthType());
assertEquals(Uri.parse("http://example.org/example.html"), preload.getHref());
- assertTrue(batch.getSocialPreloads().isEmpty());
}
@Test
@@ -324,11 +356,12 @@
assertTrue(pipelinedData.needsViewer());
assertFalse(pipelinedData.needsOwner());
- assertEquals(1, batch.getHttpPreloads().size());
- RequestAuthenticationInfo preload = batch.getHttpPreloads().get("key");
+ assertEquals(1, batch.getPreloads().size());
+ BatchItem output = batch.getPreloads().get("key");
+ assertEquals(BatchType.HTTP, output.getType());
+ RequestAuthenticationInfo preload = (RequestAuthenticationInfo) output.getData();
assertEquals(AuthType.SIGNED, preload.getAuthType());
assertTrue(preload.isSignViewer());
assertFalse(preload.isSignOwner());
- assertTrue(batch.getSocialPreloads().isEmpty());
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java Fri Jul 17 18:52:55 2009
@@ -226,8 +226,8 @@
PipelinedData.Batch batch = view.getPipelinedData().getBatch(
Expressions.forTesting(), new RootELResolver());
- assertEquals(1, batch.getSocialPreloads().size());
- assertTrue(batch.getSocialPreloads().containsKey("key"));
+ assertEquals(1, batch.getPreloads().size());
+ assertTrue(batch.getPreloads().containsKey("key"));
}
@Test(expected = SpecParserException.class)
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java Fri Jul 17 18:52:55 2009
@@ -31,6 +31,9 @@
import org.apache.shindig.gadgets.parse.ParseModule;
import org.apache.shindig.gadgets.parse.nekohtml.SocialMarkupHtmlParser;
import org.apache.shindig.gadgets.render.SanitizingGadgetRewriter;
+import org.apache.shindig.gadgets.templates.tags.AbstractTagHandler;
+import org.apache.shindig.gadgets.templates.tags.DefaultTagRegistry;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Before;
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java?rev=795193&r1=795192&r2=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java Fri Jul 17 18:52:55 2009
@@ -25,6 +25,7 @@
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.xml.XmlUtil;
import org.apache.shindig.expressions.Expressions;
+import org.apache.shindig.gadgets.templates.tags.TagHandler;
import org.junit.BeforeClass;
import org.junit.Test;
import org.w3c.dom.Element;
Copied: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandlerTest.java (from r793628, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/AbstractTagHandlerTest.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandlerTest.java?p2=incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandlerTest.java&p1=incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/AbstractTagHandlerTest.java&r1=793628&r2=795193&rev=795193&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/AbstractTagHandlerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/AbstractTagHandlerTest.java Fri Jul 17 18:52:55 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.shindig.gadgets.templates;
+package org.apache.shindig.gadgets.templates.tags;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.eq;
@@ -28,6 +28,8 @@
import static org.junit.Assert.assertNull;
import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
+import org.apache.shindig.gadgets.templates.tags.AbstractTagHandler;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.DOMImplementation;