From 12de015db4e638b8fee5a157b06f9571b142492d Mon Sep 17 00:00:00 2001 From: Denis Karmyshakov Date: Thu, 6 Jul 2017 19:50:30 +0300 Subject: [PATCH] Storable with Set --- .../googlejson/GoogleJsonPreferences.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java b/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java index 75a2708..cd1e6d6 100644 --- a/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java +++ b/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java @@ -29,7 +29,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import ru.touchin.roboswag.components.utils.storables.PreferenceStore; import ru.touchin.roboswag.core.observables.storable.Converter; @@ -83,6 +85,26 @@ public final class GoogleJsonPreferences { .build(); } + @NonNull + public static Storable, String> jsonSetStorable(@NonNull final String name, + @NonNull final Class jsonItemClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder<>(name, Set.class, String.class, new PreferenceStore<>(preferences), new JsonSetConverter<>(jsonItemClass)) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) + .build(); + } + + @NonNull + public static NonNullStorable, String> jsonSetStorable(@NonNull final String name, + @NonNull final Class jsonItemClass, + @NonNull final SharedPreferences preferences, + @NonNull final Set defaultValue) { + return new Storable.Builder<>(name, Set.class, String.class, new PreferenceStore<>(preferences), new JsonSetConverter<>(jsonItemClass)) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) + .setDefaultValue(defaultValue) + .build(); + } + private GoogleJsonPreferences() { } @@ -146,4 +168,29 @@ public final class GoogleJsonPreferences { } + public static class JsonSetConverter extends JsonConverter> { + + @NonNull + private final Class itemClass; + + public JsonSetConverter(@NonNull final Class itemClass) { + super(); + this.itemClass = itemClass; + } + + @Nullable + @Override + public Set toObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final String storeValue) { + if (storeValue == null) { + return null; + } + try { + return new HashSet<>(GoogleJsonModel.DEFAULT_JSON_FACTORY.createJsonParser(storeValue).parseArray(HashSet.class, itemClass)); + } catch (final IOException exception) { + throw new ShouldNotHappenException(exception); + } + } + + } + }