/* * Licensed Materials - Property of IBM * © Copyright IBM Corporation 2015. All Rights Reserved. */ package com.ibm.mil.readyapps.telco.hotspots; import android.location.Location; import com.google.android.gms.maps.model.LatLng; import com.google.gson.reflect.TypeToken; import com.ibm.mil.cafejava.CafeJava; import com.ibm.mil.cafejava.JavaProcedureInvoker; import com.ibm.mil.readyapps.telco.utils.MapUtils; import java.util.List; import rx.Observable; import rx.functions.Func1; public class HotSpotModelImpl implements HotSpotModel { private static final int HOTSPOT_RADIUS = 10000; @Override public Observable<HotSpot> getHotSpots(Location location) { TypeToken<List<HotSpot>> hotSpotsToken = new TypeToken<List<HotSpot>>() { }; return CafeJava.invokeProcedure(new JavaProcedureInvoker .Builder("CloudantGeoAdapter", "users/{user_id}/wifi") .pathParam("user_id", "user1") .queryParam("lat", Double.toString(location.getLatitude())) .queryParam("lon", Double.toString(location.getLongitude())) .build()) .compose(CafeJava.serializeTo(hotSpotsToken)) .flatMap(new Func1<List<HotSpot>, Observable<HotSpot>>() { @Override public Observable<HotSpot> call(List<HotSpot> hotSpots) { return Observable.from(hotSpots); } }); } @Override public Observable<HotSpot> getOfflineHotSpotLocations(Location location, List<HotSpot> hotSpots) { for (HotSpot hotSpot : hotSpots) { LatLng origin = new LatLng(location.getLatitude(), location.getLongitude()); LatLng position = MapUtils.getNearbyCoordinate(origin, HOTSPOT_RADIUS); hotSpot.setLatitude(position.latitude); hotSpot.setLongitude(position.longitude); } return Observable.from(hotSpots); } }