diff --git a/app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/serializer/JsonSerializer.java b/app/src/main/java/com/fernandocejas/android10/sample/app/data/Serializer.java similarity index 59% rename from app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/serializer/JsonSerializer.java rename to app/src/main/java/com/fernandocejas/android10/sample/app/data/Serializer.java index 070d65f..f72116b 100644 --- a/app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/serializer/JsonSerializer.java +++ b/app/src/main/java/com/fernandocejas/android10/sample/app/data/Serializer.java @@ -13,40 +13,35 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.fernandocejas.android10.sample.app.users.cache.serializer; +package com.fernandocejas.android10.sample.app.data; -import com.fernandocejas.android10.sample.app.users.UserEntity; import com.google.gson.Gson; import javax.inject.Inject; import javax.inject.Singleton; /** - * Class user as Serializer/Deserializer for user entities. + * Json Serializer/Deserializer. */ @Singleton -public class JsonSerializer { +public class Serializer { private final Gson gson = new Gson(); - @Inject - JsonSerializer() {} + @Inject Serializer() {} /** * Serialize an object to Json. - * - * @param userEntity {@link UserEntity} to serialize. + * @param object to serialize. */ - public String serialize(UserEntity userEntity) { - return gson.toJson(userEntity, UserEntity.class); + public String serialize(Object object, Class clazz) { + return gson.toJson(object, clazz); } /** * Deserialize a json representation of an object. - * - * @param jsonString A json string to deserialize. - * @return {@link UserEntity} + * @param string A json string to deserialize. */ - public UserEntity deserialize(String jsonString) { - return gson.fromJson(jsonString, UserEntity.class); + public T deserialize(String string, Class clazz) { + return gson.fromJson(string, clazz); } } diff --git a/app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/UserCacheImpl.java b/app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/UserCacheImpl.java index 4b166f6..5ab8140 100644 --- a/app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/UserCacheImpl.java +++ b/app/src/main/java/com/fernandocejas/android10/sample/app/users/cache/UserCacheImpl.java @@ -16,11 +16,11 @@ package com.fernandocejas.android10.sample.app.users.cache; import android.content.Context; +import com.fernandocejas.android10.sample.app.core.executor.ThreadExecutor; import com.fernandocejas.android10.sample.app.data.FileManager; -import com.fernandocejas.android10.sample.app.users.cache.serializer.JsonSerializer; +import com.fernandocejas.android10.sample.app.data.Serializer; import com.fernandocejas.android10.sample.app.users.UserEntity; import com.fernandocejas.android10.sample.app.users.UserNotFoundException; -import com.fernandocejas.android10.sample.app.core.executor.ThreadExecutor; import java.io.File; import javax.inject.Inject; import javax.inject.Singleton; @@ -40,7 +40,7 @@ public class UserCacheImpl implements UserCache { private final Context context; private final File cacheDir; - private final JsonSerializer serializer; + private final Serializer serializer; private final FileManager fileManager; private final ThreadExecutor threadExecutor; @@ -48,27 +48,27 @@ public class UserCacheImpl implements UserCache { * Constructor of the class {@link UserCacheImpl}. * * @param context A - * @param userCacheSerializer {@link JsonSerializer} for object serialization. + * @param serializer {@link Serializer} for object serialization. * @param fileManager {@link FileManager} for saving serialized objects to the file system. */ - @Inject - public UserCacheImpl(Context context, JsonSerializer userCacheSerializer, - FileManager fileManager, ThreadExecutor executor) { - if (context == null || userCacheSerializer == null || fileManager == null || executor == null) { + @Inject UserCacheImpl(Context context, Serializer serializer, FileManager fileManager, + ThreadExecutor executor) { + if (context == null || serializer == null || fileManager == null || executor == null) { throw new IllegalArgumentException("Invalid null parameter"); } this.context = context.getApplicationContext(); this.cacheDir = this.context.getCacheDir(); - this.serializer = userCacheSerializer; + this.serializer = serializer; this.fileManager = fileManager; this.threadExecutor = executor; } @Override public Observable get(final int userId) { return Observable.create(subscriber -> { - File userEntityFile = UserCacheImpl.this.buildFile(userId); - String fileContent = UserCacheImpl.this.fileManager.readFileContent(userEntityFile); - UserEntity userEntity = UserCacheImpl.this.serializer.deserialize(fileContent); + final File userEntityFile = UserCacheImpl.this.buildFile(userId); + final String fileContent = UserCacheImpl.this.fileManager.readFileContent(userEntityFile); + final UserEntity userEntity = + UserCacheImpl.this.serializer.deserialize(fileContent, UserEntity.class); if (userEntity != null) { subscriber.onNext(userEntity); @@ -81,18 +81,17 @@ public class UserCacheImpl implements UserCache { @Override public void put(UserEntity userEntity) { if (userEntity != null) { - File userEntityFile = this.buildFile(userEntity.getUserId()); + final File userEntityFile = this.buildFile(userEntity.getUserId()); if (!isCached(userEntity.getUserId())) { - String jsonString = this.serializer.serialize(userEntity); - this.executeAsynchronously(new CacheWriter(this.fileManager, userEntityFile, - jsonString)); + final String jsonString = this.serializer.serialize(userEntity, UserEntity.class); + this.executeAsynchronously(new CacheWriter(this.fileManager, userEntityFile, jsonString)); setLastCacheUpdateTimeMillis(); } } } @Override public boolean isCached(int userId) { - File userEntityFile = this.buildFile(userId); + final File userEntityFile = this.buildFile(userId); return this.fileManager.exists(userEntityFile); } @@ -133,7 +132,7 @@ public class UserCacheImpl implements UserCache { * Set in millis, the last time the cache was accessed. */ private void setLastCacheUpdateTimeMillis() { - long currentMillis = System.currentTimeMillis(); + final long currentMillis = System.currentTimeMillis(); this.fileManager.writeToPreferences(this.context, SETTINGS_FILE_NAME, SETTINGS_KEY_LAST_CACHE_UPDATE, currentMillis); } diff --git a/app/src/test/java/com/fernandocejas/android10/sample/app/users/cache/serializer/JsonSerializerTest.java b/app/src/test/java/com/fernandocejas/android10/sample/app/data/SerializerTest.java similarity index 78% rename from app/src/test/java/com/fernandocejas/android10/sample/app/users/cache/serializer/JsonSerializerTest.java rename to app/src/test/java/com/fernandocejas/android10/sample/app/data/SerializerTest.java index 25e2daa..d16c52f 100644 --- a/app/src/test/java/com/fernandocejas/android10/sample/app/users/cache/serializer/JsonSerializerTest.java +++ b/app/src/test/java/com/fernandocejas/android10/sample/app/data/SerializerTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.fernandocejas.android10.sample.app.users.cache.serializer; +package com.fernandocejas.android10.sample.app.data; import com.fernandocejas.android10.sample.app.ApplicationTestCase; import com.fernandocejas.android10.sample.app.users.UserEntity; @@ -24,7 +24,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; -public class JsonSerializerTest extends ApplicationTestCase { +public class SerializerTest extends ApplicationTestCase { private static final String JSON_RESPONSE = "{\n" + " \"id\": 1,\n" @@ -35,18 +35,18 @@ public class JsonSerializerTest extends ApplicationTestCase { + " \"email\": \"jcooper@babbleset.edu\"\n" + "}"; - private JsonSerializer jsonSerializer; + private Serializer serializer; @Before public void setUp() { - jsonSerializer = new JsonSerializer(); + serializer = new Serializer(); } @Test public void testSerializeHappyCase() { - UserEntity userEntityOne = jsonSerializer.deserialize(JSON_RESPONSE); - String jsonString = jsonSerializer.serialize(userEntityOne); - UserEntity userEntityTwo = jsonSerializer.deserialize(jsonString); + final UserEntity userEntityOne = serializer.deserialize(JSON_RESPONSE, UserEntity.class); + final String jsonString = serializer.serialize(userEntityOne, UserEntity.class); + final UserEntity userEntityTwo = serializer.deserialize(jsonString, UserEntity.class); assertThat(userEntityOne.getUserId(), is(userEntityTwo.getUserId())); assertThat(userEntityOne.getFullname(), is(equalTo(userEntityTwo.getFullname()))); @@ -54,8 +54,8 @@ public class JsonSerializerTest extends ApplicationTestCase { } @Test - public void testDesearializeHappyCase() { - UserEntity userEntity = jsonSerializer.deserialize(JSON_RESPONSE); + public void testDeserializeHappyCase() { + final UserEntity userEntity = serializer.deserialize(JSON_RESPONSE, UserEntity.class); assertThat(userEntity.getUserId(), is(1)); assertThat(userEntity.getFullname(), is("Simon Hill"));