package com.data.database;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.ContentValues;
import android.database.Cursor;
import com.biznow.ordernow.model.FoodMenuItem;
import com.data.menu.Dish;
import com.data.menu.MenuPropertyKey;
import com.data.menu.MenuPropertyValue;
import com.data.menu.Restaurant;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.util.Utilities;
public class RestaurantHelper extends SQLHelper {
private static final String KEY_CATEGORY = "category";
private static final String KEY_PRICE = "price";
private static final String KEY_IMG = "img";
private static final String KEY_DESCRIPTION = "description";
private static final String KEY_NAME = "name";
private static final String KEY_DISH_ID = "dishId";
private static final String KEY_DISH_DETAIL = "dishDetail";
private static final String KEY_REST_ID = "restId";
private static final String KEY_REST_MENU = "menu";
private static final String KEY_DISH_PROPERTIES = "dishProperties";
public RestaurantHelper(DatabaseManager dbManager) {
super(dbManager);
}
private static final String TABLE_NAME_FTS = "dishes";
private static final String REST_TABLE = "restaurantMenu";
@SuppressWarnings("unchecked")
public List<FoodMenuItem> searchDishes(String searchCriteria) {
List<FoodMenuItem> searchFoodList = new ArrayList<FoodMenuItem>();
// String GET_ALL_EVENTS = "SELECT * FROM " + TABLE_NAME_FTS +
// " WHERE name LIKE '%" + searchCriteria
// + "%' OR description LIKE '%" + searchCriteria + "%'";
String GET_ALL_EVENTS = "";
String[] searchStrings = searchCriteria.split(" ");
if (searchStrings == null) {
return searchFoodList;
}
// for one element normal matching
if (searchStrings.length == 1) {
GET_ALL_EVENTS = "SELECT * FROM " + TABLE_NAME_FTS + " WHERE "
+ TABLE_NAME_FTS + " MATCH '" + searchCriteria + "*'";
} else {
// for more elements do a near search between first two words
GET_ALL_EVENTS = "SELECT * FROM " + TABLE_NAME_FTS + " WHERE "
+ TABLE_NAME_FTS + " MATCH '" + searchStrings[0]
+ "* NEAR " + searchStrings[1] + "*'";
}
Cursor cursor = dbManager.rawQuery(GET_ALL_EVENTS, null);
Utilities.info(Integer.toString(cursor.getCount()));
String dishId = "";
String name = "";
String description = "";
String img = "";
String price = "";
String category = "";
String dishPropertiesString = "";
HashMap<MenuPropertyKey, MenuPropertyValue> dishProperties = new HashMap<MenuPropertyKey, MenuPropertyValue>();
Type mapType = new TypeToken<Map<MenuPropertyKey,MenuPropertyValue>>() {}.getType();
if (cursor.getCount() > 0) {
cursor.moveToFirst();
do {
dishId = cursor.getString(cursor.getColumnIndex(KEY_DISH_ID));
name = cursor.getString(cursor.getColumnIndex(KEY_NAME));
description = cursor.getString(cursor.getColumnIndex(KEY_DESCRIPTION));
img = cursor.getString(cursor.getColumnIndex(KEY_IMG));
price = cursor.getString(cursor.getColumnIndex(KEY_PRICE));
category = cursor.getString(cursor.getColumnIndex(KEY_CATEGORY));
dishPropertiesString = cursor.getString(cursor.getColumnIndex(KEY_DISH_PROPERTIES));
Gson gs = new Gson();
dishProperties = (HashMap<MenuPropertyKey, MenuPropertyValue>) gs.fromJson(dishPropertiesString, mapType);
Dish dish = new Dish(dishId, name, description, img, Float.valueOf(price), true);
dish.setDishProperties(dishProperties);
FoodMenuItem foodMenuItem = new FoodMenuItem(dish);
foodMenuItem.setCategory(category);
searchFoodList.add(foodMenuItem);
} while (cursor.moveToNext());
}
Utilities.info(searchFoodList.toString());
return searchFoodList;
}
public void addDish(Dish dish, String category) {
try {
if (dish != null) {
ContentValues values = new ContentValues();
values.put(KEY_DISH_ID, dish.getDishId());
values.put(KEY_NAME, dish.getName());
values.put(KEY_DESCRIPTION, dish.getDescription());
values.put(KEY_IMG, (dish.getImg() != null) ? dish.getImg() : "");
values.put(KEY_PRICE, Float.toString(dish.getPrice()));
values.put(KEY_CATEGORY, category);
values.put(KEY_DISH_DETAIL, category + " " + dish.getName() + " " + dish.getDescription());
Type mapType = new TypeToken<Map<MenuPropertyKey, MenuPropertyValue>>() {
}.getType();
Gson gs = new Gson();
values.put(KEY_DISH_PROPERTIES, gs.toJson(dish.getDishProperties(), mapType));
dbManager.insert(TABLE_NAME_FTS, null, values);
Utilities.info("insert " + values);
}
} catch (Exception e) {
Utilities.error("Exception in adding dish " + e);
}
}
public FoodMenuItem getDishById(String dishId) {
String GET_DISH_MATCH = "SELECT * FROM " + TABLE_NAME_FTS + " WHERE " + KEY_DISH_ID + " MATCH '" + dishId + "'";
Cursor cursor = dbManager.rawQuery(GET_DISH_MATCH, null);
Utilities.info(Integer.toString(cursor.getCount()));
String founddishId = "";
String name = "";
String description = "";
String img = "";
String price = "";
Type mapType = new TypeToken<Map<MenuPropertyKey, MenuPropertyValue>>() {
}.getType();
Map<MenuPropertyKey, MenuPropertyValue> dishProperties = new HashMap<MenuPropertyKey, MenuPropertyValue>();
if (cursor.getCount() > 0) {
cursor.moveToFirst();
founddishId = cursor.getString(cursor.getColumnIndex(KEY_DISH_ID));
name = cursor.getString(cursor.getColumnIndex(KEY_NAME));
description = cursor.getString(cursor.getColumnIndex(KEY_DESCRIPTION));
img = cursor.getString(cursor.getColumnIndex(KEY_IMG));
price = cursor.getString(cursor.getColumnIndex(KEY_PRICE));
String dishPropertiesString = cursor.getString(cursor.getColumnIndex(KEY_DISH_PROPERTIES));
Gson gs = new Gson();
dishProperties = (HashMap<MenuPropertyKey, MenuPropertyValue>) gs.fromJson(dishPropertiesString, mapType);
Dish dish = new Dish(founddishId, name, description, img, Float.valueOf(price), true);
dish.setDishProperties(dishProperties);
FoodMenuItem foodMenuItem = new FoodMenuItem(dish);
return foodMenuItem;
}
return null;
}
public void addRestaurant(Restaurant rest) {
try {
if (rest != null) {
Gson gs = new Gson();
String resMenu = gs.toJson(rest);
ContentValues values = new ContentValues();
values.put(KEY_REST_ID, rest.getrId());
values.put(KEY_REST_MENU, resMenu);
dbManager.insert(REST_TABLE, null, values);
Utilities.info("insert " + values);
}
} catch (Exception e) {
Utilities.error("Exception in adding restaurant " + e);
}
}
public void deleteRestaurant(String restId) {
if (restId != null && !restId.isEmpty()) {
String whereClause = KEY_REST_ID + "=" + "?";
String[] whereArgs = {restId};
dbManager.delete(REST_TABLE, KEY_REST_ID + "=" + "?", whereArgs);
}
}
public void addAndDeleteRestaurant(Restaurant rest) {
deleteRestaurant(rest.getrId());
addRestaurant(rest);
}
public Restaurant getRestaurant(String restId) {
Restaurant rest = null;
if (restId != null && !restId.isEmpty()) {
String GET_REST_MENU = "SELECT * FROM " + REST_TABLE + " WHERE "
+ KEY_REST_ID + "='" + restId + "'";
Cursor cursor = dbManager.rawQuery(GET_REST_MENU, null);
Utilities.info(Integer.toString(cursor.getCount()));
if (cursor.getCount() > 0) {
cursor.moveToFirst();
String menu = cursor.getString(cursor
.getColumnIndex(KEY_REST_MENU));
Gson gs = new Gson();
rest = gs.fromJson(menu, Restaurant.class);
}
}
return rest;
}
}