diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2014-09-23 17:52:44 +0300 |
---|---|---|
committer | Johannes Dahlström <johannesd@vaadin.com> | 2014-09-23 18:48:18 +0300 |
commit | d156b34db4aad889e5dcdfe6de660826e53de050 (patch) | |
tree | 272be49c88c03ff5b59a5b8a8ea4cc740daf3689 | |
parent | dd26a0da34260f0ad303b820e8a1624ca13de04a (diff) | |
download | vaadin-framework-d156b34db4aad889e5dcdfe6de660826e53de050.tar.gz vaadin-framework-d156b34db4aad889e5dcdfe6de660826e53de050.zip |
Add default implementation of Renderer.encode to AbstractRenderer (#13334)
Change-Id: I74a0960bbe56e71702762e4cf1067098dd428125
8 files changed, 46 insertions, 51 deletions
diff --git a/server/src/com/vaadin/ui/components/grid/AbstractRenderer.java b/server/src/com/vaadin/ui/components/grid/AbstractRenderer.java index d1cf77c24b..a0eea891e7 100644 --- a/server/src/com/vaadin/ui/components/grid/AbstractRenderer.java +++ b/server/src/com/vaadin/ui/components/grid/AbstractRenderer.java @@ -17,6 +17,9 @@ package com.vaadin.ui.components.grid; import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.AbstractExtension; +import com.vaadin.server.JsonCodec; + +import elemental.json.JsonValue; /** * An abstract base class for server-side Grid renderers. @@ -65,6 +68,30 @@ public abstract class AbstractRenderer<T> extends AbstractExtension implements return presentationType; } + @Override + public JsonValue encode(T value) { + return JsonCodec.encode(doEncode(value), null, getPresentationType(), + getUI().getConnectorTracker()).getEncodedValue(); + } + + /** + * Encodes the given value to an intermediate representation that can be + * serialized to JSON by Vaadin. The default implementation simply returns + * the value as is. + * <p> + * This is a helper method intended to be overridden if the value must be + * processed somehow but doing the JSON serialization manually is not + * desired. For instance, a {@code Renderer<Date>} could return a formatted + * string from {@code doEncode}. + * + * @param value + * the value to be encoded + * @return a value that can be serialized by Vaadin + */ + protected Object doEncode(T value) { + return value; + } + /** * Gets the item id for a row key. * <p> diff --git a/server/src/com/vaadin/ui/components/grid/renderers/DateRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/DateRenderer.java index aeb653ae27..e5b7fe8ae4 100644 --- a/server/src/com/vaadin/ui/components/grid/renderers/DateRenderer.java +++ b/server/src/com/vaadin/ui/components/grid/renderers/DateRenderer.java @@ -21,9 +21,6 @@ import java.util.Locale; import com.vaadin.ui.components.grid.AbstractRenderer; -import elemental.json.Json; -import elemental.json.JsonValue; - /** * A renderer for presenting date values. * @@ -133,11 +130,11 @@ public class DateRenderer extends AbstractRenderer<Date> { } @Override - public JsonValue encode(Date value) { + protected String doEncode(Date value) { if (dateFormat != null) { - return Json.create(dateFormat.format(value)); + return dateFormat.format(value); } else { - return Json.create(String.format(locale, formatString, value)); + return String.format(locale, formatString, value); } } diff --git a/server/src/com/vaadin/ui/components/grid/renderers/HtmlRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/HtmlRenderer.java index acbe4a69e7..6e68314ce2 100644 --- a/server/src/com/vaadin/ui/components/grid/renderers/HtmlRenderer.java +++ b/server/src/com/vaadin/ui/components/grid/renderers/HtmlRenderer.java @@ -17,9 +17,6 @@ package com.vaadin.ui.components.grid.renderers; import com.vaadin.ui.components.grid.AbstractRenderer; -import elemental.json.Json; -import elemental.json.JsonValue; - /** * A renderer for presenting HTML content. * @@ -33,9 +30,4 @@ public class HtmlRenderer extends AbstractRenderer<String> { public HtmlRenderer() { super(String.class); } - - @Override - public JsonValue encode(String value) { - return Json.create(value); - } } diff --git a/server/src/com/vaadin/ui/components/grid/renderers/NumberRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/NumberRenderer.java index 0f4619c180..12a2f1b10f 100644 --- a/server/src/com/vaadin/ui/components/grid/renderers/NumberRenderer.java +++ b/server/src/com/vaadin/ui/components/grid/renderers/NumberRenderer.java @@ -20,9 +20,6 @@ import java.util.Locale; import com.vaadin.ui.components.grid.AbstractRenderer; -import elemental.json.Json; -import elemental.json.JsonValue; - /** * A renderer for presenting number values. * @@ -134,11 +131,11 @@ public class NumberRenderer extends AbstractRenderer<Number> { } @Override - public JsonValue encode(Number value) { + protected String doEncode(Number value) { if (formatString != null && locale != null) { - return Json.create(String.format(locale, formatString, value)); + return String.format(locale, formatString, value); } else if (numberFormat != null) { - return Json.create(numberFormat.format(value)); + return numberFormat.format(value); } else { throw new IllegalStateException(String.format("Internal bug: " + "%s is in an illegal state: " diff --git a/server/src/com/vaadin/ui/components/grid/renderers/TextRenderer.java b/server/src/com/vaadin/ui/components/grid/renderers/TextRenderer.java index 26fc226cfa..bffbc34e7e 100644 --- a/server/src/com/vaadin/ui/components/grid/renderers/TextRenderer.java +++ b/server/src/com/vaadin/ui/components/grid/renderers/TextRenderer.java @@ -17,9 +17,6 @@ package com.vaadin.ui.components.grid.renderers; import com.vaadin.ui.components.grid.AbstractRenderer; -import elemental.json.Json; -import elemental.json.JsonValue; - /** * A renderer for presenting simple plain-text string values. * @@ -34,9 +31,4 @@ public class TextRenderer extends AbstractRenderer<String> { public TextRenderer() { super(String.class); } - - @Override - public JsonValue encode(String value) { - return Json.create(value); - } } diff --git a/server/tests/src/com/vaadin/tests/server/component/grid/RendererTest.java b/server/tests/src/com/vaadin/tests/server/component/grid/RendererTest.java index 54d15f15d8..a98ce22469 100644 --- a/server/tests/src/com/vaadin/tests/server/component/grid/RendererTest.java +++ b/server/tests/src/com/vaadin/tests/server/component/grid/RendererTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertSame; import java.util.Locale; +import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; @@ -32,11 +33,12 @@ import com.vaadin.data.util.converter.Converter.ConversionException; import com.vaadin.data.util.converter.StringToIntegerConverter; import com.vaadin.server.VaadinSession; import com.vaadin.tests.util.AlwaysLockedVaadinSession; +import com.vaadin.ui.ConnectorTracker; +import com.vaadin.ui.UI; import com.vaadin.ui.components.grid.Grid; import com.vaadin.ui.components.grid.GridColumn; import com.vaadin.ui.components.grid.renderers.TextRenderer; -import elemental.json.Json; import elemental.json.JsonValue; public class RendererTest { @@ -51,9 +53,8 @@ public class RendererTest { private static class TestRenderer extends TextRenderer { @Override - public JsonValue encode(String value) { - return Json.create("renderer(" + super.encode(value).asString() - + ")"); + protected String doEncode(String value) { + return "renderer(" + super.doEncode(value) + ")"; } } @@ -114,7 +115,13 @@ public class RendererTest { item.getItemProperty("baz").setValue(new TestBean()); item.getItemProperty("bah").setValue(new ExtendedBean()); + UI ui = EasyMock.createNiceMock(UI.class); + ConnectorTracker ct = EasyMock.createNiceMock(ConnectorTracker.class); + EasyMock.expect(ui.getConnectorTracker()).andReturn(ct).anyTimes(); + EasyMock.replay(ui, ct); + grid = new Grid(c); + grid.setParent(ui); foo = grid.getColumn("foo"); bar = grid.getColumn("bar"); diff --git a/uitest/src/com/vaadin/tests/components/grid/IntArrayRenderer.java b/uitest/src/com/vaadin/tests/components/grid/IntArrayRenderer.java index ccedcc908a..737dccbc82 100644 --- a/uitest/src/com/vaadin/tests/components/grid/IntArrayRenderer.java +++ b/uitest/src/com/vaadin/tests/components/grid/IntArrayRenderer.java @@ -17,21 +17,8 @@ package com.vaadin.tests.components.grid; import com.vaadin.ui.components.grid.AbstractRenderer; -import elemental.json.Json; -import elemental.json.JsonArray; -import elemental.json.JsonValue; - public class IntArrayRenderer extends AbstractRenderer<int[]> { public IntArrayRenderer() { super(int[].class); } - - @Override - public JsonValue encode(int[] value) { - JsonArray valueArray = Json.createArray(); - for (int i = 0; i < value.length; ++i) { - valueArray.set(i, value[i]); - } - return valueArray; - } } diff --git a/uitest/src/com/vaadin/tests/components/grid/RowAwareRenderer.java b/uitest/src/com/vaadin/tests/components/grid/RowAwareRenderer.java index 41ccddc2cf..2b89d2ea99 100644 --- a/uitest/src/com/vaadin/tests/components/grid/RowAwareRenderer.java +++ b/uitest/src/com/vaadin/tests/components/grid/RowAwareRenderer.java @@ -19,9 +19,6 @@ import com.vaadin.tests.widgetset.client.grid.RowAwareRendererConnector.RowAware import com.vaadin.ui.Label; import com.vaadin.ui.components.grid.AbstractRenderer; -import elemental.json.Json; -import elemental.json.JsonValue; - public class RowAwareRenderer extends AbstractRenderer<Void> { public RowAwareRenderer(final Label debugLabel) { super(Void.class); @@ -35,8 +32,7 @@ public class RowAwareRenderer extends AbstractRenderer<Void> { } @Override - public JsonValue encode(Void value) { - return Json.createNull(); + protected Object doEncode(Void value) { + return null; } - } |