You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by dd...@apache.org on 2012/08/14 15:49:35 UTC

svn commit: r1372882 - in /shindig/trunk: content/samplecontainer/examples/templates/ java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/ java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/ java/gadgets/src/test/java/org/...

Author: ddumont
Date: Tue Aug 14 13:49:34 2012
New Revision: 1372882

URL: http://svn.apache.org/viewvc?rev=1372882&view=rev
Log:
SHINDIG-1737 - Declaring Variables Inline - <os:Var> does not work
Committed for Erik Bi

Added:
    shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml   (with props)
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java   (with props)
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java   (with props)
Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java

Added: shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml?rev=1372882&view=auto
==============================================================================
--- shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml (added)
+++ shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml Tue Aug 14 13:49:34 2012
@@ -0,0 +1,17 @@
+<Module>
+	<ModulePrefs title="Varible Replacement Templating Example"
+		height="400" width="400">
+		<Require feature="opensocial-templates">
+		</Require>
+	</ModulePrefs>
+	<Content view="default" type="html">
+	<![CDATA[
+		<div>
+			<script type="text/os-template" xmlns:os="http://ns.opensocial.org/2008/markup" >
+				<os:Var key="myvar" value="3"></os:Var>
+				This value of myvar is ${myvar}
+			</script>
+		</div>
+	]]>
+	</Content>
+</Module>
\ No newline at end of file

Propchange: shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shindig/trunk/content/samplecontainer/examples/templates/VarTag.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java?rev=1372882&r1=1372881&r2=1372882&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateModule.java Tue Aug 14 13:49:34 2012
@@ -27,6 +27,7 @@ import org.apache.shindig.gadgets.templa
 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.VarTagHandler;
 import org.apache.shindig.gadgets.templates.tags.VariableTagHandler;
 
 /**
@@ -50,5 +51,6 @@ public class TemplateModule extends Abst
     tagBinder.addBinding().to(RepeatTagHandler.class);
     tagBinder.addBinding().to(FlashTagHandler.class);
     tagBinder.addBinding().to(VariableTagHandler.class);
+    tagBinder.addBinding().to(VarTagHandler.class);
   }
 }

Added: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java?rev=1372882&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java (added)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java Tue Aug 14 13:49:34 2012
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets.templates.tags;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Inject;
+
+import org.apache.shindig.gadgets.templates.TemplateProcessor;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * Implement the os:Var tag
+ */
+public class VarTagHandler extends AbstractTagHandler {
+
+  private static final String TAG_VAR = "Var";
+  private static final String TAG_KEY = "key";
+  private static final String TAG_VALUE = "value";
+
+  @Inject
+  public VarTagHandler() {
+    super(TagHandler.OPENSOCIAL_NAMESPACE, TAG_VAR);
+  }
+
+  public void process(Node result, Element tag, TemplateProcessor processor) {
+    // Get the key.  Don't support EL (to match pipelining)
+    String key = tag.getAttribute(TAG_KEY);
+    if ("".equals(key)) {
+      return;
+    }
+
+    // Get the value (with EL)
+    Object value = getValueFromTag(tag, TAG_VALUE, processor, Object.class);
+
+    if (processor.getTemplateContext().getMy() == null) {
+      processor.getTemplateContext().setMy(Maps.<String, Object> newHashMap());
+    }
+    processor.getTemplateContext().getMy().put(key, value);
+  }
+
+}
+

Propchange: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/VarTagHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java?rev=1372882&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java (added)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java Tue Aug 14 13:49:34 2012
@@ -0,0 +1,109 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+
+import org.apache.shindig.expressions.Expressions;
+import org.apache.shindig.expressions.RootELResolver;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.parse.DefaultHtmlSerializer;
+import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.parse.SocialDataTags;
+import org.apache.shindig.gadgets.parse.nekohtml.NekoSimplifiedHtmlParser;
+import org.apache.shindig.gadgets.templates.DefaultTemplateProcessor;
+import org.apache.shindig.gadgets.templates.TagRegistry;
+import org.apache.shindig.gadgets.templates.TemplateContext;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+
+import javax.el.ELResolver;
+
+public class VarTagHandlerTest {
+
+  private Expressions expressions;
+
+  private TemplateContext context;
+  private DefaultTemplateProcessor processor;
+  private Map<String, Object> variables;
+  private ELResolver resolver;
+  private TagRegistry registry;
+
+  private NekoSimplifiedHtmlParser parser;
+  protected Document result;
+
+  @Before
+  public void setUp() throws Exception {
+
+    expressions = Expressions.forTesting();
+    variables = Maps.newHashMap();
+    Set<TagHandler> handlers = ImmutableSet.<TagHandler> of(new VarTagHandler());
+    registry = new DefaultTagRegistry(handlers);
+
+    processor = new DefaultTemplateProcessor(expressions);
+    resolver = new RootELResolver();
+    parser = new NekoSimplifiedHtmlParser(new ParseModule.DOMImplementationProvider().get());
+    context = new TemplateContext(new Gadget(), variables);
+
+  }
+
+  @Test
+  public void testTag() throws Exception {
+    String output = executeTemplate("<os:Var key='myvar' value='3'></os:Var>The value of my var is ${myvar}",
+            "xmlns:os=\"http://ns.opensocial.org/2008/markup\"");
+    assertEquals("The value of my var is 3", output);
+  }
+
+  private String executeTemplate(String markup, String extra) throws Exception {
+    Element template = prepareTemplate(markup, extra);
+    DocumentFragment result = processor.processTemplate(template, context, resolver, registry);
+    return serialize(result);
+  }
+
+  private Element prepareTemplate(String markup, String extra) throws GadgetException {
+    String content = "<script type=\"text/os-template\"" + extra + '>' + markup + "</script>";
+    Document document = parser.parseDom(content);
+    return SocialDataTags.getTags(document, SocialDataTags.OSML_TEMPLATE_TAG).get(0);
+  }
+
+  private String serialize(Node node) throws IOException {
+    StringBuilder sb = new StringBuilder();
+    NodeList children = node.getChildNodes();
+    for (int i = 0; i < children.getLength(); i++) {
+      Node child = children.item(i);
+      new DefaultHtmlSerializer().serialize(child, sb);
+    }
+    return sb.toString();
+  }
+
+}

Propchange: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/VarTagHandlerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain