From f0fbf76dc45cd91c0cffeec1f03df354c553347c Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Wed, 1 Mar 2017 22:03:15 +0300 Subject: [PATCH 1/3] Changes related to new storable logic applied --- .../googlejson/GoogleJsonPreferences.java | 74 +++++---- .../logansquare/LoganSquarePreferences.java | 145 +++++++++--------- 2 files changed, 105 insertions(+), 114 deletions(-) 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); } From afd0ff1998da6a31b3d33a84ea5d8308c0e7ef54 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Thu, 9 Mar 2017 01:57:21 +0300 Subject: [PATCH 2/3] static fixes --- build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 12362f6..9280272 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ android { defaultConfig { minSdkVersion 10 - targetSdkVersion 24 + targetSdkVersion 25 } } @@ -23,14 +23,14 @@ repositories { dependencies { compile project(path: ':libraries:components') - compile 'net.danlew:android.joda:2.9.4.1' + compile 'net.danlew:android.joda:2.9.7' compile 'com.android.support:multidex:1.0.1' compile 'io.reactivex:rxandroid:1.2.1' - provided 'com.android.support:appcompat-v7:25.1.0' - provided 'com.android.support:recyclerview-v7:25.1.0' + provided 'com.android.support:appcompat-v7:25.2.0' + provided 'com.android.support:recyclerview-v7:25.2.0' - provided 'com.squareup.retrofit2:retrofit:2.1.0' + provided 'com.squareup.retrofit2:retrofit:2.2.0' provided('com.google.http-client:google-http-client-jackson2:1.22.0') { exclude(group: 'org.apache.httpcomponents', module: 'httpclient') } From 5cb54b1e028eabcd9dc354fd5f10efb84983e18d Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Thu, 9 Mar 2017 17:24:41 +0300 Subject: [PATCH 3/3] naming fixes --- .../touchin/templates/logansquare/LoganSquarePreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java b/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java index 1c872e0..2d50409 100644 --- a/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java +++ b/src/main/java/ru/touchin/templates/logansquare/LoganSquarePreferences.java @@ -104,7 +104,7 @@ public final class LoganSquarePreferences { @Nullable @Override @SuppressWarnings("unchecked") - public TJsonObject toObject(@NonNull final Type jsonObjectClass, @NonNull final Type stringClass, @Nullable final String storeValue) { + public TJsonObject toObject(@NonNull final Type jsonObjectClass, @NonNull final Type storeObjectType, @Nullable final String storeValue) { if (storeValue == null) { return null; }