package com.arcao.trackables.data.persistence; import com.arcao.geocaching.api.data.Trackable; import com.arcao.geocaching.api.data.TrackableTravel; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import rx.Observable; @Singleton public class TrackablePersistenceService { private final ClassPersister mainPersister; private final ClassPersister trackablePersister; private final ClassPersister trackableTravelListPersister; @Inject public TrackablePersistenceService( @Named(PersistenceModule.PERSISTENCE_MAIN) ClassPersister mainPersister, @Named(PersistenceModule.PERSISTENCE_TRACKABLE) ClassPersister trackablePersister, @Named(PersistenceModule.PERSISTENCE_TRACKABLE_TRAVEL) ClassPersister trackableTravelListPersister) { this.mainPersister = mainPersister; this.trackablePersister = trackablePersister; this.trackableTravelListPersister = trackableTravelListPersister; } public Observable<List<Trackable>> getUserTrackables() { return getTrackables("userTrackables"); } public Observable<List<Trackable>> putUserTrackables(List<Trackable> userTrackableList) { return putTrackables("userTrackables", userTrackableList); } public Observable<List<Trackable>> getTrackables(String category) { return mainPersister.getList(category, Trackable.class); } public Observable<List<Trackable>> putTrackables(String category, List<Trackable> trackableList) { return mainPersister.putList(category, trackableList, Trackable.class) .flatMap(Observable::from) .flatMap(trackable -> trackablePersister.put(trackable.getTrackingNumber(), trackable)) .toList(); } public Observable<Trackable> getTrackable(String trackingCode) { return trackablePersister.get(trackingCode, Trackable.class); } public Observable<Trackable> putTrackable(String trackingCode, Trackable trackable) { return trackablePersister.put(trackingCode, trackable); } public Observable<List<TrackableTravel>> getTrackableTravelList(String trackingCode) { return trackableTravelListPersister.getList(trackingCode, TrackableTravel.class); } public Observable<List<TrackableTravel>> putTrackableTravelList(String trackingCode, List<TrackableTravel> trackableTravelList) { return trackableTravelListPersister.putList(trackingCode, trackableTravelList, TrackableTravel.class); } }