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