From af3631d043feec42c37f1e954bc3de137cbce75e Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Wed, 4 May 2016 03:13:42 +0300 Subject: [PATCH] new store completed --- .../storables/BooleanPreferenceStorable.java | 23 -- .../storables/EnumPreferenceStorable.java | 42 --- .../storables/JsonPreferenceStorable.java | 105 -------- .../storables/PreferenceStorables.java | 241 ++++++++++++++++++ .../components/storables/PreferenceStore.java | 16 +- .../storables/StringPreferenceStorable.java | 23 -- 6 files changed, 249 insertions(+), 201 deletions(-) delete mode 100644 src/main/java/ru/touchin/roboswag/components/storables/BooleanPreferenceStorable.java delete mode 100644 src/main/java/ru/touchin/roboswag/components/storables/EnumPreferenceStorable.java delete mode 100644 src/main/java/ru/touchin/roboswag/components/storables/JsonPreferenceStorable.java create mode 100644 src/main/java/ru/touchin/roboswag/components/storables/PreferenceStorables.java delete mode 100644 src/main/java/ru/touchin/roboswag/components/storables/StringPreferenceStorable.java diff --git a/src/main/java/ru/touchin/roboswag/components/storables/BooleanPreferenceStorable.java b/src/main/java/ru/touchin/roboswag/components/storables/BooleanPreferenceStorable.java deleted file mode 100644 index e4c6cea..0000000 --- a/src/main/java/ru/touchin/roboswag/components/storables/BooleanPreferenceStorable.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.touchin.roboswag.components.storables; - -import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import ru.touchin.roboswag.core.data.storable.SameTypesConverter; -import ru.touchin.roboswag.core.data.storable.Storable; - -/** - * Created by Gavriil Sitnikov on 12/04/16. - * TODO: description - */ -public class BooleanPreferenceStorable extends Storable { - - public BooleanPreferenceStorable(@NonNull final String name, - @NonNull final SharedPreferences preferences, - @Nullable final Boolean defaultValue) { - super(name, Boolean.class, Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>(), - false, null, defaultValue); - } - -} \ No newline at end of file diff --git a/src/main/java/ru/touchin/roboswag/components/storables/EnumPreferenceStorable.java b/src/main/java/ru/touchin/roboswag/components/storables/EnumPreferenceStorable.java deleted file mode 100644 index d20370b..0000000 --- a/src/main/java/ru/touchin/roboswag/components/storables/EnumPreferenceStorable.java +++ /dev/null @@ -1,42 +0,0 @@ -package ru.touchin.roboswag.components.storables; - -import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import ru.touchin.roboswag.core.data.exceptions.ConversionException; -import ru.touchin.roboswag.core.data.storable.Converter; -import ru.touchin.roboswag.core.data.storable.Storable; - -/** - * Created by Gavriil Sitnikov on 12/04/16. - * TODO: description - */ -public class EnumPreferenceStorable> extends Storable { - - public EnumPreferenceStorable(@NonNull final String name, - @NonNull final Class enumClass, - @NonNull final SharedPreferences preferences, - @Nullable final T defaultValue) { - super(name, enumClass, String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>(), - false, null, defaultValue); - } - - private static class EnumToStringConverter> implements Converter { - - @Nullable - @Override - public String toStoreObject(@NonNull final Class objectClass, @NonNull final Class stringClass, - @Nullable final T object) throws ConversionException { - return object != null ? object.name() : null; - } - - @Nullable - @Override - public T toObject(@NonNull final Class objectClass, @NonNull final Class stringClass, - @Nullable final String stringObject) throws ConversionException { - return stringObject != null ? Enum.valueOf(objectClass, stringObject) : null; - } - } - -} \ No newline at end of file diff --git a/src/main/java/ru/touchin/roboswag/components/storables/JsonPreferenceStorable.java b/src/main/java/ru/touchin/roboswag/components/storables/JsonPreferenceStorable.java deleted file mode 100644 index 9f84f36..0000000 --- a/src/main/java/ru/touchin/roboswag/components/storables/JsonPreferenceStorable.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2015 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov) - * - * This file is part of RoboSwag library. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package ru.touchin.roboswag.components.storables; - -import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.google.api.client.json.JsonFactory; -import com.google.api.client.json.JsonGenerator; -import com.google.api.client.json.jackson2.JacksonFactory; -import com.google.api.client.util.Charsets; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.StringWriter; - -import ru.touchin.roboswag.core.data.exceptions.ConversionException; -import ru.touchin.roboswag.core.data.storable.Converter; -import ru.touchin.roboswag.core.data.storable.Storable; -import ru.touchin.roboswag.core.log.Lc; - -/** - * Created by Gavriil Sitnikov on 18/03/16. - * TODO: description - */ -public class JsonPreferenceStorable extends Storable { - - private static final JsonFactory DEFAULT_JSON_FACTORY = new JacksonFactory(); - - public JsonPreferenceStorable(@NonNull final String name, - @NonNull final Class objectClass, - @NonNull final SharedPreferences preferences, - @Nullable final T defaultValue) { - super(name, objectClass, String.class, new PreferenceStore<>(preferences), new JsonConverter<>(), - false, null, defaultValue); - } - - private static class JsonConverter implements Converter { - - @Nullable - @Override - public String toStoreObject(@NonNull final Class objectClass, - @NonNull final Class stringClass, - @Nullable final T object) - throws ConversionException { - if (object == null) { - return null; - } - - final StringWriter stringWriter = new StringWriter(); - JsonGenerator generator = null; - try { - generator = DEFAULT_JSON_FACTORY.createJsonGenerator(stringWriter); - generator.serialize(object); - generator.flush(); - return stringWriter.toString(); - } catch (final IOException exception) { - throw new ConversionException("Object generation error", exception); - } finally { - try { - if (generator != null) { - generator.close(); - } - } catch (final IOException exception) { - Lc.assertion(exception); - } - } - } - - @Nullable - @Override - public T toObject(@NonNull final Class objectClass, @NonNull final Class stringClass, @Nullable final String source) - throws ConversionException { - if (source == null) { - return null; - } - final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(source.getBytes(Charsets.UTF_8)); - try { - return DEFAULT_JSON_FACTORY.createJsonObjectParser().parseAndClose(byteArrayInputStream, Charsets.UTF_8, objectClass); - } catch (final Exception exception) { - throw new ConversionException("Parsing error", exception); - } - } - - } - -} diff --git a/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStorables.java b/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStorables.java new file mode 100644 index 0000000..d18a32f --- /dev/null +++ b/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStorables.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2015 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov) + * + * This file is part of RoboSwag library. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package ru.touchin.roboswag.components.storables; + +import android.content.SharedPreferences; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import com.google.api.client.json.JsonFactory; +import com.google.api.client.json.JsonGenerator; +import com.google.api.client.json.jackson2.JacksonFactory; +import com.google.api.client.util.Charsets; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringWriter; + +import ru.touchin.roboswag.core.data.storable.SafeConverter; +import ru.touchin.roboswag.core.data.storable.SameTypesConverter; +import ru.touchin.roboswag.core.data.storable.Storable; +import ru.touchin.roboswag.core.data.storable.concrete.NonNullSafeStorable; +import ru.touchin.roboswag.core.data.storable.concrete.SafeStorable; +import ru.touchin.roboswag.core.log.Lc; +import ru.touchin.roboswag.core.utils.ShouldNotHappenException; + +/** + * Created by Gavriil Sitnikov on 03/05/2016. + * TODO: fill description + */ +public final class PreferenceStorables { + + @NonNull + public static SafeStorable stringStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, String.class, false) + .setSafeStore(String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .build(); + } + + @NonNull + public static NonNullSafeStorable stringStorable(@NonNull final String name, + @NonNull final SharedPreferences preferences, + @NonNull final String defaultValue) { + return new Storable.Builder(name, String.class, false) + .setSafeStore(String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + @NonNull + public static SafeStorable longStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, Long.class, false) + .setSafeStore(Long.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .build(); + } + + @NonNull + public static NonNullSafeStorable longStorable(@NonNull final String name, + @NonNull final SharedPreferences preferences, + final long defaultValue) { + return new Storable.Builder(name, Long.class, false) + .setSafeStore(Long.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + @NonNull + public static SafeStorable booleanStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, Boolean.class, false) + .setSafeStore(Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .build(); + } + + @NonNull + public static NonNullSafeStorable booleanStorable(@NonNull final String name, + @NonNull final SharedPreferences preferences, + final boolean defaultValue) { + return new Storable.Builder(name, Boolean.class, false) + .setSafeStore(Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + @NonNull + public static SafeStorable integerStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, Integer.class, false) + .setSafeStore(Integer.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .build(); + } + + @NonNull + public static NonNullSafeStorable integerStorable(@NonNull final String name, + @NonNull final SharedPreferences preferences, + final int defaultValue) { + return new Storable.Builder(name, Integer.class, false) + .setSafeStore(Integer.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + @NonNull + public static SafeStorable floatStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, Float.class, false) + .setSafeStore(Float.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .build(); + } + + @NonNull + public static NonNullSafeStorable floatStorable(@NonNull final String name, + @NonNull final SharedPreferences preferences, + final float defaultValue) { + return new Storable.Builder(name, Float.class, false) + .setSafeStore(Float.class, new PreferenceStore<>(preferences), new SameTypesConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + @NonNull + public static > SafeStorable enumStorable(@NonNull final String name, + @NonNull final Class enumClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, enumClass, false) + .setSafeStore(String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>()) + .build(); + } + + @NonNull + public static > NonNullSafeStorable enumStorable(@NonNull final String name, + @NonNull final Class enumClass, + @NonNull final SharedPreferences preferences, + final T defaultValue) { + return new Storable.Builder(name, enumClass, false) + .setSafeStore(String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + @NonNull + public static SafeStorable jsonStorable(@NonNull final String name, + @NonNull final Class jsonClass, + @NonNull final SharedPreferences preferences) { + return new Storable.Builder(name, jsonClass, false) + .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + .build(); + } + + @NonNull + public static NonNullSafeStorable jsonStorable(@NonNull final String name, + @NonNull final Class jsonClass, + @NonNull final SharedPreferences preferences, + final T defaultValue) { + return new Storable.Builder(name, jsonClass, false) + .setSafeStore(String.class, new PreferenceStore<>(preferences), new JsonConverter<>()) + .setDefaultValue(defaultValue) + .build(); + } + + private static class EnumToStringConverter> implements SafeConverter { + + @Nullable + @Override + public String toStoreObject(@NonNull final Class objectClass, @NonNull final Class stringClass, @Nullable final T object) { + return object != null ? object.name() : null; + } + + @Nullable + @Override + public T toObject(@NonNull final Class objectClass, @NonNull final Class stringClass, @Nullable final String stringObject) { + return stringObject != null ? Enum.valueOf(objectClass, stringObject) : null; + } + } + + private static class JsonConverter implements SafeConverter { + + private static final JsonFactory DEFAULT_JSON_FACTORY = new JacksonFactory(); + + @Nullable + @Override + public String toStoreObject(@NonNull final Class objectClass, + @NonNull final Class stringClass, + @Nullable final T object) { + if (object == null) { + return null; + } + + final StringWriter stringWriter = new StringWriter(); + JsonGenerator generator = null; + try { + generator = DEFAULT_JSON_FACTORY.createJsonGenerator(stringWriter); + generator.serialize(object); + generator.flush(); + return stringWriter.toString(); + } catch (final IOException exception) { + throw new ShouldNotHappenException(exception); + } finally { + try { + if (generator != null) { + generator.close(); + } + } catch (final IOException exception) { + Lc.assertion(exception); + } + } + } + + @Nullable + @Override + public T toObject(@NonNull final Class objectClass, @NonNull final Class stringClass, @Nullable final String source) { + if (source == null) { + return null; + } + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(source.getBytes(Charsets.UTF_8)); + try { + return DEFAULT_JSON_FACTORY.createJsonObjectParser().parseAndClose(byteArrayInputStream, Charsets.UTF_8, objectClass); + } catch (final Exception exception) { + throw new ShouldNotHappenException(exception); + } + } + + } + + private PreferenceStorables() { + } + +} diff --git a/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStore.java b/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStore.java index bf9d190..e88afae 100644 --- a/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStore.java +++ b/src/main/java/ru/touchin/roboswag/components/storables/PreferenceStore.java @@ -23,14 +23,14 @@ import android.content.SharedPreferences; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import ru.touchin.roboswag.core.data.storable.Store; -import ru.touchin.roboswag.core.data.exceptions.StoreException; +import ru.touchin.roboswag.core.data.storable.SafeStore; +import ru.touchin.roboswag.core.log.Lc; /** * Created by Gavriil Sitnikov on 18/03/16. * TODO: description */ -public class PreferenceStore implements Store { +public class PreferenceStore implements SafeStore { @NonNull private final SharedPreferences preferences; @@ -45,8 +45,7 @@ public class PreferenceStore implements Store { } @Override - public void storeObject(@NonNull final Class storeObjectClass, @NonNull final String key, @Nullable final T storeObject) - throws StoreException { + public void storeObject(@NonNull final Class storeObjectClass, @NonNull final String key, @Nullable final T storeObject) { if (storeObject == null) { preferences.edit().remove(key).apply(); return; @@ -63,14 +62,14 @@ public class PreferenceStore implements Store { } else if (storeObjectClass.equals(Float.class)) { preferences.edit().putFloat(key, (Float) storeObject).apply(); } else { - throw new StoreException("Unsupported type of object " + storeObjectClass); + Lc.assertion("Unsupported type of object " + storeObjectClass); } } @Nullable @Override @SuppressWarnings("unchecked") - public T loadObject(@NonNull final Class storeObjectClass, @NonNull final String key) throws StoreException { + public T loadObject(@NonNull final Class storeObjectClass, @NonNull final String key) { if (!contains(key)) { return null; } @@ -86,7 +85,8 @@ public class PreferenceStore implements Store { } else if (storeObjectClass.equals(Float.class)) { return (T) ((Float) preferences.getFloat(key, 0f)); } - throw new StoreException("Unsupported type of object " + storeObjectClass); + Lc.assertion("Unsupported type of object " + storeObjectClass); + return null; } } diff --git a/src/main/java/ru/touchin/roboswag/components/storables/StringPreferenceStorable.java b/src/main/java/ru/touchin/roboswag/components/storables/StringPreferenceStorable.java deleted file mode 100644 index 4c91575..0000000 --- a/src/main/java/ru/touchin/roboswag/components/storables/StringPreferenceStorable.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.touchin.roboswag.components.storables; - -import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import ru.touchin.roboswag.core.data.storable.SameTypesConverter; -import ru.touchin.roboswag.core.data.storable.Storable; - -/** - * Created by Gavriil Sitnikov on 12/04/16. - * TODO: description - */ -public class StringPreferenceStorable extends Storable { - - public StringPreferenceStorable(@NonNull final String name, - @NonNull final SharedPreferences preferences, - @Nullable final String defaultValue) { - super(name, String.class, String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>(), - false, null, defaultValue); - } - -} \ No newline at end of file