package com.biznow.ordernow.adapter;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import android.support.v4.util.LruCache;
import android.util.Log;
import com.data.database.RestaurantHelper;
import com.data.menu.Restaurant;
import com.data.menu.RestaurantWrapper;
import com.google.gson.Gson;
import com.util.URLBuilder;
import com.util.URLBuilder.URLParam;
import com.util.Utilities;
public class DownloadResturantMenu {
private LruCache<String, Restaurant> lruResturant = new LruCache<String, Restaurant>(
2048);
private static DownloadResturantMenu downloadResturantMenu = new DownloadResturantMenu();
public static DownloadResturantMenu getInstance() {
return downloadResturantMenu;
}
private DownloadResturantMenu() {
}
public Restaurant getResturant(String tableId, String restaurantId,
RestaurantHelper restHelper) {
Utilities.info("getResturant " + tableId+restaurantId);
Restaurant restaurant = null;
RestaurantWrapper restWrapper = null;
Restaurant restaurantFromDB = null;
if (lruResturant.get(tableId) == null) {
String lastUpdatedAt = "-1";
// get details from db if present and pass that
if (restHelper != null) {
restaurantFromDB = restHelper.getRestaurant(restaurantId);
if (restaurantFromDB != null) {
lastUpdatedAt = Long.toString(restaurantFromDB
.getLastUpdatedAt());
}
}
final String urlString = new URLBuilder()
.addPath(URLBuilder.Path.serveTable)
.addParam(URLBuilder.URLParam.tableId, tableId)
.addParam(URLParam.lastUpdatedAt, lastUpdatedAt).build();
try {
URL url = new URL(urlString);
Utilities.info("DownloadResturantMenu " + urlString);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
InputStream in = connection.getInputStream();
BufferedReader res = new BufferedReader(new InputStreamReader(
in, "UTF-8"));
String inputLine;
StringBuffer sBuffer = new StringBuffer();
while ((inputLine = res.readLine()) != null)
sBuffer.append(inputLine);
res.close();
Gson gs = new Gson();
restWrapper = gs.fromJson(sBuffer.toString(), RestaurantWrapper.class);
//pull from DB/update DB if needed
if (restWrapper.isUpdated()) {
Utilities.info("DBRestaurant restWrapper updated " + restWrapper.getRestaurant());
restaurant = restWrapper.getRestaurant();
if (!lastUpdatedAt.isEmpty()) {
Utilities.info("DBRestaurant add and delete " + restaurant.getrId() + " "
+ restaurant.getName() + "lastupdatedtime " + restaurant.getLastUpdatedAt());
restHelper.addAndDeleteRestaurant(restaurant);
} else {
Utilities.info("DBRestaurant add " + restaurant.getrId() + " " + restaurant.getName());
restHelper.addRestaurant(restaurant);
}
} else if (!restWrapper.isUpdated()) {
Utilities.info("DBRestaurant restWrapper notupdated");
restaurant = restaurantFromDB;
}
lruResturant.put(tableId, restaurant);
} catch (Exception ex) {
ex.printStackTrace();
Utilities.error("DownloadResturantMenu" + ex.getMessage()
+ "got exception");
}
} else {
Log.i("DownloadResturantMenu from cache", tableId);
}
return lruResturant.get(tableId);
}
}