From f0ba4933d13515c8932659a4a01c3fb9bd6ddc76 Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Thu, 6 Jul 2017 23:06:09 -0300 Subject: [PATCH] Make ListAdapter a generic collection adapter --- CHANGELOG.md | 17 +++++++--- README.md | 8 ++--- pom.xml | 2 +- .../phpserializer/SerializerBuilder.java | 6 ++-- .../adapter/CollectionAdapter.java | 33 +++++++++++++++++++ .../phpserializer/adapter/ListAdapter.java | 33 ------------------- ...erTest.java => CollectionAdapterTest.java} | 8 ++--- 7 files changed, 59 insertions(+), 48 deletions(-) create mode 100755 src/main/java/com/marcospassos/phpserializer/adapter/CollectionAdapter.java delete mode 100755 src/main/java/com/marcospassos/phpserializer/adapter/ListAdapter.java rename src/test/java/com/marcospassos/phpserializer/adapter/{ListAdapterTest.java => CollectionAdapterTest.java} (83%) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6ea208..44f43a8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## Versions - -### Unreleased +## Unreleased There are currently no unreleased changes. -### [0.1.0](https://github.com/marcospassos/java-php-serializer/releases/tag/0.1.0) (2017-06-29) +## [0.2.0](https://github.com/marcospassos/java-php-serializer/releases/tag/0.2.0) (2017-07-06) + +### Changed + +- Rename `ListMap` to `CollectionAdapter` since it supports any collection. + +### Added + +- Adapter for `Set` in the list of builtin adapters registered by +`SerializerBuilder::registerBuiltinAdapters()`. + +## [0.1.0](https://github.com/marcospassos/java-php-serializer/releases/tag/0.1.0) (2017-06-29) - First beta release \ No newline at end of file diff --git a/README.md b/README.md index e20a95b..18ec135 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ to the `dependencies` section of its `pom.xml` file: com.marcospassos phpserializer - 0.1.0 + 0.2.0 ``` @@ -227,8 +227,8 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -[maven-central-badge]: https://img.shields.io/badge/maven%20central-v0.1.0-blue.svg -[maven-central-latest]: http://search.maven.org/#artifactdetails%7Ccom.marcospassos%7Cphpserializer%7C0.1.0%7Cjar +[maven-central-badge]: https://img.shields.io/badge/maven%20central-v0.2.0-blue.svg +[maven-central-latest]: http://search.maven.org/#artifactdetails%7Ccom.marcospassos%7Cphpserializer%7C0.2.0%7Cjar [coverall-status]: https://coveralls.io/github/marcospassos/java-php-serializer [coverall-badge]: https://coveralls.io/repos/github/marcospassos/java-php-serializer/badge.svg [travis-badge]: https://travis-ci.org/marcospassos/java-php-serializer.svg?branch=master @@ -243,4 +243,4 @@ DEALINGS IN THE SOFTWARE. [issue-tracker]: https://github.com/marcospassos/java-php-serializer/issues [repository]: https://github.com/marcospassos/java-php-serializer [releases-page]: https://github.com/marcospassos/java-php-serializer/releases -[latest-release]: https://github.com/marcospassos/java-php-serializer/releases/tag/0.1.0 +[latest-release]: https://github.com/marcospassos/java-php-serializer/releases/tag/0.2.0 diff --git a/pom.xml b/pom.xml index d1a2c16..623f50b 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.marcospassos phpserializer - 0.1.0-SNAPSHOT + 0.2.0-SNAPSHOT jar Java PHP Serializer diff --git a/src/main/java/com/marcospassos/phpserializer/SerializerBuilder.java b/src/main/java/com/marcospassos/phpserializer/SerializerBuilder.java index a4c454d..3fa5a5f 100755 --- a/src/main/java/com/marcospassos/phpserializer/SerializerBuilder.java +++ b/src/main/java/com/marcospassos/phpserializer/SerializerBuilder.java @@ -3,7 +3,7 @@ import com.marcospassos.phpserializer.adapter.ArrayAdapter; import com.marcospassos.phpserializer.adapter.BooleanAdapter; import com.marcospassos.phpserializer.adapter.IntegerAdapter; -import com.marcospassos.phpserializer.adapter.ListAdapter; +import com.marcospassos.phpserializer.adapter.CollectionAdapter; import com.marcospassos.phpserializer.adapter.MapAdapter; import com.marcospassos.phpserializer.adapter.ObjectAdapter; import com.marcospassos.phpserializer.adapter.ReferableObjectAdapter; @@ -15,6 +15,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * Provides a friendly API for creating instances of {@link Serializer}. @@ -165,7 +166,8 @@ public SerializerBuilder registerBuiltinAdapters() registerAdapter(char[].class, arrayAdapter); registerAdapter(short[].class, arrayAdapter); registerAdapter(Map.class, new MapAdapter()); - registerAdapter(List.class, new ListAdapter()); + registerAdapter(List.class, new CollectionAdapter()); + registerAdapter(Set.class, new CollectionAdapter()); registerAdapter(Boolean.class, new BooleanAdapter()); registerAdapter(Integer.class, new IntegerAdapter()); registerAdapter(String.class, new StringAdapter()); diff --git a/src/main/java/com/marcospassos/phpserializer/adapter/CollectionAdapter.java b/src/main/java/com/marcospassos/phpserializer/adapter/CollectionAdapter.java new file mode 100755 index 0000000..707ffe4 --- /dev/null +++ b/src/main/java/com/marcospassos/phpserializer/adapter/CollectionAdapter.java @@ -0,0 +1,33 @@ +package com.marcospassos.phpserializer.adapter; + +import com.marcospassos.phpserializer.Context; +import com.marcospassos.phpserializer.TypeAdapter; +import com.marcospassos.phpserializer.Writer; +import java.util.Collection; + +/** + * Adapter for handling collections. + * + * @param The type of values in the collection. + * + * @author Marcos Passos + * @since 1.0 + */ +public class CollectionAdapter implements TypeAdapter> +{ + @Override + public void write(Collection collection, Writer writer, Context context) + { + int size = collection.size(); + + writer.writeArrayStart(size); + + int index = 0; + for (Object value: collection) { + writer.writeKey(index++); + context.write(value, writer); + } + + writer.writeArrayEnd(); + } +} diff --git a/src/main/java/com/marcospassos/phpserializer/adapter/ListAdapter.java b/src/main/java/com/marcospassos/phpserializer/adapter/ListAdapter.java deleted file mode 100755 index 889f242..0000000 --- a/src/main/java/com/marcospassos/phpserializer/adapter/ListAdapter.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.marcospassos.phpserializer.adapter; - -import com.marcospassos.phpserializer.Context; -import com.marcospassos.phpserializer.TypeAdapter; -import com.marcospassos.phpserializer.Writer; -import java.util.List; - -/** - * Adapter for handling lists. - * - * @param The type of values in the list. - * - * @author Marcos Passos - * @since 1.0 - */ -public class ListAdapter implements TypeAdapter> -{ - @Override - public void write(List list, Writer writer, Context context) - { - int size = list.size(); - - writer.writeArrayStart(size); - - for (int index = 0; index < size; index++) { - writer.writeKey(index); - - context.write(list.get(index), writer); - } - - writer.writeArrayEnd(); - } -} diff --git a/src/test/java/com/marcospassos/phpserializer/adapter/ListAdapterTest.java b/src/test/java/com/marcospassos/phpserializer/adapter/CollectionAdapterTest.java similarity index 83% rename from src/test/java/com/marcospassos/phpserializer/adapter/ListAdapterTest.java rename to src/test/java/com/marcospassos/phpserializer/adapter/CollectionAdapterTest.java index e989907..9f34b3d 100755 --- a/src/test/java/com/marcospassos/phpserializer/adapter/ListAdapterTest.java +++ b/src/test/java/com/marcospassos/phpserializer/adapter/CollectionAdapterTest.java @@ -6,7 +6,7 @@ import com.marcospassos.phpserializer.Context; import com.marcospassos.phpserializer.Writer; import java.util.Arrays; -import java.util.List; +import java.util.Collection; import org.junit.Test; import org.mockito.InOrder; @@ -14,15 +14,15 @@ * @author Marcos Passos * @since 1.0 */ -public class ListAdapterTest +public class CollectionAdapterTest { @Test public void write() throws Exception { - ListAdapter adapter = new ListAdapter<>(); + CollectionAdapter adapter = new CollectionAdapter<>(); Writer writer = mock(Writer.class); Context context = mock(Context.class); - List array = Arrays.asList("a", "b", "c"); + Collection array = Arrays.asList("a", "b", "c"); adapter.write(array, writer, context);