package com.arcao.trackables.data.persistence; import android.content.Context; import com.arcao.trackables.data.persistence.jackson.mixin.MixinModule; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import javax.inject.Named; import javax.inject.Singleton; import au.com.gridstone.grex.converter.Converter; import au.com.gridstone.grex.converters.JacksonConverter; import dagger.Module; import dagger.Provides; import timber.log.Timber; @Module public class PersistenceModule { public static final String PERSISTENCE_MAIN = "base"; public static final String PERSISTENCE_TRACKABLE = "trackable"; public static final String PERSISTENCE_TRACKABLE_TRAVEL = "trackableTravel"; public static final String PERSISTENCE_GEOCACHE = "geocache"; @Provides @Singleton @Named(PersistenceModule.PERSISTENCE_MAIN) ClassPersister provideMainPersister(Context context, Converter converter) { File directory = context.getDir(PERSISTENCE_MAIN, Context.MODE_PRIVATE); return new ClassPersister(converter, directory); } @Provides @Singleton @Named(PersistenceModule.PERSISTENCE_TRACKABLE) ClassPersister provideTrackablePersister(Context context, Converter converter) { return new ClassPersister(converter, getCacheDir(context, PERSISTENCE_TRACKABLE)); } @Provides @Singleton @Named(PersistenceModule.PERSISTENCE_TRACKABLE_TRAVEL) ClassPersister provideTrackableTravelPersister(Context context, Converter converter) { return new ClassPersister(converter, getCacheDir(context, PERSISTENCE_TRACKABLE_TRAVEL)); } @Provides @Singleton @Named(PersistenceModule.PERSISTENCE_GEOCACHE) ClassPersister provideGeocachePersister(Context context, Converter converter) { return new ClassPersister(converter, getCacheDir(context, PERSISTENCE_GEOCACHE)); } @Provides @Singleton Converter provideConverter() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new MixinModule()); return new JacksonConverter(objectMapper); } private File getCacheDir(Context context, String dirName) { File directory = new File(context.getCacheDir(), dirName); if (!directory.exists()) { if (!directory.mkdirs()) { Timber.e("Unable to create " + directory); } } return directory; } }