/******************************************************************************* * Copyright (c) 2011 Michel DAVID mimah35-at-gmail.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package fr.gotorennes.remote; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.util.Log; import fr.gotorennes.domain.BikeStation; public class BikeStationService extends RemoteService<BikeStation> { private static BikeStationService instance; private BikeStationTopoService bikeTopoService; private BikeStationService(Context context) { super(); bikeTopoService = BikeStationTopoService.getInstance(context); } public static synchronized BikeStationService getInstance(Context context) { if (instance == null) { instance = new BikeStationService(context); } return instance; } private long lastUpdate = 0; private List<BikeStation> cache = null; public List<BikeStation> getBikeStations() { if (cache == null || System.currentTimeMillis() - lastUpdate > 60000) { cache = loadList(); if (cache != null && !cache.isEmpty()) { lastUpdate = System.currentTimeMillis(); } } return cache != null ? new ArrayList<BikeStation>(cache) : cache; } public List<BikeStation> getBikeStations(double latitudeMin, double latitudeMax, double longitudeMax, double longitudeMin) { List<BikeStation> stations = getBikeStations(); if (stations == null) { return null; } List<BikeStation> result = new ArrayList<BikeStation>(); for (BikeStation bikeStation : stations) { if (bikeStation.latitude >= latitudeMin && bikeStation.latitude <= latitudeMax && bikeStation.longitude >= longitudeMin && bikeStation.longitude <= longitudeMax) { result.add(bikeStation); } } return result; } public List<BikeStation> getProximityBikeStations(double latitude, double longitude) { return loadProximityList(latitude, longitude, 3); } public BikeStation getBikeStation(String id) { return loadObject("refine.idstation="+id); } @Override protected BikeStation populate(JSONObject jsonObject) throws JSONException { BikeStation bikeStation = bikeTopoService.getBikeStation(jsonObject.getInt("idstation")); if (bikeStation == null) { bikeStation = new BikeStation(); bikeStation.id = jsonObject.getInt("idstation"); bikeStation.name = jsonObject.getString("nom"); bikeStation.latitude = jsonObject.getJSONArray("coordonnees").getDouble(0); bikeStation.longitude = jsonObject.getJSONArray("coordonnees").getDouble(1); } if ("En fonctionnement".equals(jsonObject.getString("etat"))) { bikeStation.state = 1; } bikeStation.bikesAvailable = Integer.parseInt(jsonObject.getString("nombrevelosdisponibles")); bikeStation.slotsAvailable = Integer.parseInt(jsonObject.getString("nombreemplacementsdisponibles")); return bikeStation; } @Override protected String getDataSet() { return "vls-stations-etat-tr"; } }