package com.bootstrap.storage.di; import android.content.Context; import com.bootstrap.di.AppScope; import com.couchbase.lite.CouchbaseLiteException; import com.couchbase.lite.Database; import com.couchbase.lite.Manager; import com.couchbase.lite.android.AndroidContext; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import dagger.Module; import dagger.Provides; @Module public final class StorageModule { @Provides @AppScope public Manager provideManager(final Context context) { try { return new Manager(new AndroidContext(context), Manager.DEFAULT_OPTIONS); } catch (IOException e) { throw new RuntimeException(e); } } @Provides @AppScope public Database provideDatabase(final Manager manager) { try { manager.setStorageType(Manager.SQLITE_STORAGE); return manager.getDatabase("app-db"); } catch (CouchbaseLiteException e) { throw new RuntimeException(e); } } @Provides @AppScope public ObjectMapper provideObjectMapper() { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE); objectMapper.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE); objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE); return objectMapper; } }