diff --git a/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java b/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java index 6db526d..75a2708 100644 --- a/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java +++ b/src/main/java/ru/touchin/templates/googlejson/GoogleJsonPreferences.java @@ -27,16 +27,14 @@ import com.google.api.client.http.json.JsonHttpContent; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import ru.touchin.roboswag.components.utils.storables.PreferenceStore; -import ru.touchin.roboswag.core.observables.storable.SafeConverter; +import ru.touchin.roboswag.core.observables.storable.Converter; import ru.touchin.roboswag.core.observables.storable.Storable; -import ru.touchin.roboswag.core.observables.storable.concrete.NonNullSafeListStorable; -import ru.touchin.roboswag.core.observables.storable.concrete.NonNullSafeStorable; -import ru.touchin.roboswag.core.observables.storable.concrete.SafeListStorable; -import ru.touchin.roboswag.core.observables.storable.concrete.SafeStorable; +import ru.touchin.roboswag.core.observables.storable.concrete.NonNullStorable; import ru.touchin.roboswag.core.utils.ShouldNotHappenException; /** @@ -46,53 +44,53 @@ import ru.touchin.roboswag.core.utils.ShouldNotHappenException; public final class GoogleJsonPreferences { @NonNull - public static SafeStorable jsonStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences) { - return new Storable.Builder(name, jsonClass, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + public static Storable jsonStorable(@NonNull final String name, + @NonNull final Class jsonClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, jsonClass, String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) .build(); } @NonNull - public static NonNullSafeStorable jsonStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences, - @NonNull final T defaultValue) { - return new Storable.Builder(name, jsonClass, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + public static NonNullStorable jsonStorable(@NonNull final String name, + @NonNull final Class jsonClass, + @NonNull final SharedPreferences preferences, + @NonNull final T defaultValue) { + return new Storable.Builder(name, jsonClass, String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) .setDefaultValue(defaultValue) .build(); } @NonNull - public static SafeListStorable jsonListStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences) { - return new SafeListStorable<>(new Storable.Builder(name, List.class, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonClass)) - .build()); + public static Storable, String> jsonListStorable(@NonNull final String name, + @NonNull final Class jsonListItemClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder<>(name, List.class, String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonListItemClass)) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) + .build(); } @NonNull - public static NonNullSafeListStorable jsonListStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences, - @NonNull final List defaultValue) { - return new NonNullSafeListStorable<>(new Storable.Builder(name, List.class, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonClass)) + public static NonNullStorable, String> jsonListStorable(@NonNull final String name, + @NonNull final Class jsonListItemClass, + @NonNull final SharedPreferences preferences, + @NonNull final List defaultValue) { + return new Storable.Builder<>(name, List.class, String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonListItemClass)) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) .setDefaultValue(defaultValue) - .build()); + .build(); } private GoogleJsonPreferences() { } - public static class JsonConverter implements SafeConverter { + public static class JsonConverter implements Converter { @Nullable @Override - public String toStoreObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, + public String toStoreObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final TJsonObject object) { if (object == null) { return null; @@ -109,13 +107,13 @@ public final class GoogleJsonPreferences { @Nullable @Override - public TJsonObject toObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, - @Nullable final String storeValue) { + @SuppressWarnings("unchecked") + public TJsonObject toObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final String storeValue) { if (storeValue == null) { return null; } try { - return GoogleJsonModel.DEFAULT_JSON_FACTORY.createJsonParser(storeValue).parse(jsonObjectClass); + return (TJsonObject) GoogleJsonModel.DEFAULT_JSON_FACTORY.createJsonParser(storeValue).parse(jsonObjectType, true); } catch (final IOException exception) { throw new ShouldNotHappenException(exception); } @@ -123,7 +121,7 @@ public final class GoogleJsonPreferences { } - public static class JsonListConverter extends JsonConverter { + public static class JsonListConverter extends JsonConverter> { @NonNull private final Class itemClass; @@ -135,14 +133,12 @@ public final class GoogleJsonPreferences { @Nullable @Override - @SuppressWarnings("unchecked") - public List toObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, - @Nullable final String storeValue) { + public List toObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final String storeValue) { if (storeValue == null) { return null; } try { - return (List) GoogleJsonModel.DEFAULT_JSON_FACTORY.createJsonParser(storeValue).parseArray(ArrayList.class, itemClass); + return new ArrayList<>(GoogleJsonModel.DEFAULT_JSON_FACTORY.createJsonParser(storeValue).parseArray(ArrayList.class, itemClass)); } catch (final IOException exception) { throw new ShouldNotHappenException(exception); } diff --git a/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java b/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java index 8b7f778..1c872e0 100644 --- a/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java +++ b/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java @@ -26,15 +26,13 @@ import android.support.annotation.Nullable; import com.bluelinelabs.logansquare.LoganSquare; import java.io.IOException; +import java.lang.reflect.Type; import java.util.List; import ru.touchin.roboswag.components.utils.storables.PreferenceStore; -import ru.touchin.roboswag.core.observables.storable.SafeConverter; +import ru.touchin.roboswag.core.observables.storable.Converter; import ru.touchin.roboswag.core.observables.storable.Storable; -import ru.touchin.roboswag.core.observables.storable.concrete.NonNullSafeListStorable; -import ru.touchin.roboswag.core.observables.storable.concrete.NonNullSafeStorable; -import ru.touchin.roboswag.core.observables.storable.concrete.SafeListStorable; -import ru.touchin.roboswag.core.observables.storable.concrete.SafeStorable; +import ru.touchin.roboswag.core.observables.storable.concrete.NonNullStorable; import ru.touchin.roboswag.core.utils.ShouldNotHappenException; /** @@ -46,94 +44,53 @@ import ru.touchin.roboswag.core.utils.ShouldNotHappenException; public final class LoganSquarePreferences { @NonNull - public static SafeStorable jsonStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences) { - return new Storable.Builder(name, jsonClass, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + public static Storable jsonStorable(@NonNull final String name, + @NonNull final Class jsonClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, jsonClass, String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) .build(); } @NonNull - public static NonNullSafeStorable jsonStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences, - @NonNull final T defaultValue) { - return new Storable.Builder(name, jsonClass, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + public static NonNullStorable jsonStorable(@NonNull final String name, + @NonNull final Class jsonClass, + @NonNull final SharedPreferences preferences, + @NonNull final T defaultValue) { + return new Storable.Builder(name, jsonClass, String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) .setDefaultValue(defaultValue) .build(); } @NonNull - public static SafeListStorable jsonListStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences) { - return new SafeListStorable<>(new Storable.Builder(name, List.class, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonClass)) - .build()); + public static Storable, String> jsonListStorable(@NonNull final String name, + @NonNull final Class jsonListItemClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder<>(name, List.class, String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonListItemClass)) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) + .build(); } @NonNull - public static NonNullSafeListStorable jsonListStorable(@NonNull final String name, - @NonNull final Class jsonClass, - @NonNull final SharedPreferences preferences, - @NonNull final List defaultValue) { - return new NonNullSafeListStorable<>(new Storable.Builder(name, List.class, Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) - .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonClass)) + public static NonNullStorable, String> jsonListStorable(@NonNull final String name, + @NonNull final Class jsonListItemClass, + @NonNull final SharedPreferences preferences, + @NonNull final List defaultValue) { + return new Storable.Builder<>(name, List.class, String.class, new PreferenceStore<>(preferences), new JsonListConverter<>(jsonListItemClass)) + .setObserveStrategy(Storable.ObserveStrategy.CACHE_ACTUAL_VALUE) .setDefaultValue(defaultValue) - .build()); + .build(); } private LoganSquarePreferences() { } - public static class JsonListConverter implements SafeConverter { - - @NonNull - private final Class itemClass; - - public JsonListConverter(@NonNull final Class itemClass) { - this.itemClass = itemClass; - } + public static class JsonConverter implements Converter { @Nullable @Override - @SuppressWarnings("unchecked") - public String toStoreObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, - @Nullable final List object) { - if (object == null) { - return null; - } - try { - return LoganSquare.serialize(object, itemClass); - } catch (final IOException exception) { - throw new ShouldNotHappenException(exception); - } - } - - @Nullable - @Override - public List toObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, - @Nullable final String storeValue) { - if (storeValue == null) { - return null; - } - try { - return LoganSquare.parseList(storeValue, itemClass); - } catch (final IOException exception) { - throw new ShouldNotHappenException(exception); - } - } - - } - - public static class JsonConverter implements SafeConverter { - - @Nullable - @Override - public String toStoreObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, - @Nullable final TJsonObject object) { + public String toStoreObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final TJsonObject object) { if (object == null) { return null; } @@ -146,13 +103,51 @@ public final class LoganSquarePreferences { @Nullable @Override - public TJsonObject toObject(@NonNull final Class jsonObjectClass, @NonNull final Class stringClass, - @Nullable final String storeValue) { + @SuppressWarnings("unchecked") + public TJsonObject toObject(@NonNull final Type jsonObjectClass, @NonNull final Type stringClass, @Nullable final String storeValue) { if (storeValue == null) { return null; } try { - return LoganSquare.parse(storeValue, jsonObjectClass); + return LoganSquare.parse(storeValue, (Class) jsonObjectClass); + } catch (final IOException exception) { + throw new ShouldNotHappenException(exception); + } + } + + } + + public static class JsonListConverter implements Converter, String> { + + @NonNull + private final Class itemClass; + + public JsonListConverter(@NonNull final Class itemClass) { + this.itemClass = itemClass; + } + + @Nullable + @Override + @SuppressWarnings("unchecked") + public String toStoreObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final List object) { + if (object == null) { + return null; + } + try { + return LoganSquare.serialize(object, itemClass); + } catch (final IOException exception) { + throw new ShouldNotHappenException(exception); + } + } + + @Nullable + @Override + public List toObject(@NonNull final Type jsonObjectType, @NonNull final Type stringType, @Nullable final String storeValue) { + if (storeValue == null) { + return null; + } + try { + return LoganSquare.parseList(storeValue, itemClass); } catch (final IOException exception) { throw new ShouldNotHappenException(exception); }