package com.ese2013.mensaunibe.model.menu;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Calendar;
import java.util.HashMap;
import android.util.Log;
import com.ese2013.mensaunibe.model.api.ApiUrl;
import com.ese2013.mensaunibe.model.data.DataRequest;
/**
* @author group7
* @author Andreas Hohler
* @author Sandor Torok
*/
public class MenuData {
private static final String TAG = "MenuData";
private DataRequest rq;
public MenuData() {
rq = new DataRequest();
}
/**
* decides if this or next week should be loaded
* @param mensaId
*/
public void setWeekUrl(int mensaId){
Calendar calendar = Calendar.getInstance();
int weekend = calendar.get(Calendar.DAY_OF_WEEK);
if(weekend == Calendar.SATURDAY || weekend == Calendar.SUNDAY){
int weekNr =calendar.get(Calendar.WEEK_OF_YEAR);
int nextWeek = (weekNr < 52) ? weekNr+1 : 1;
rq.setUrl( String.format(ApiUrl.API_NEXT_WEEK_MENU, mensaId, nextWeek));
}else{
rq.setUrl( String.format(ApiUrl.API_WEEKLY_MENU, mensaId));
}
rq.setType( "MENU_ " + mensaId );
rq.execute();
}
/**
* returns a weekly menu of a specific mensa
* @param mensaId
* @return WeeklyMenu object
*/
public WeeklyMenu getWeeklyMenuList(int mensaId) {
setWeekUrl(mensaId);
try {
JSONObject content = rq.getJSONData().getJSONObject("content");
JSONArray menus = content.getJSONArray("menus");
HashMap<String, Menuplan> menuHashMap = new HashMap<String, Menuplan>();
for(int i = 0; i<menus.length(); i++) {
DailyMenuBuilder mb = new DailyMenuBuilder();
mb.parseJson( menus.getJSONObject(i) );
DailyMenu menu = mb.create();
MenuDate date = menu.getDate();
if(menuHashMap.containsKey(date.toString())) {
menuHashMap.get(date.toString()).add(menu);
} else {
Menuplan plan = new Menuplan();
plan.add(menu);
plan.setDate(date);
menuHashMap.put(date.toString(), plan);
}
}
WeeklyMenu wk = new WeeklyMenu(menuHashMap);
//Log.i(TAG, "oject weeklymenu: "+wk);
return wk;
} catch(Exception e) {
StackTraceElement[] a = e.getStackTrace();
for(StackTraceElement aa : a) {
Log.e(TAG, aa.toString());
}
Log.e(TAG, e.getMessage());
}
return null;
}
/**
* returns the daily menu of a specific mensa
* @param mensaId
* @return Menuplan of one day
*/
public Menuplan getMenuList(int mensaId) {
Menuplan plan = new Menuplan();
rq.setUrl( String.format(ApiUrl.API_DAILY_MENU, mensaId) );
rq.execute();
try {
JSONObject js = rq.getJSONData();
JSONObject content = js.getJSONObject("content");
String date = content.getString("date");
plan.parseDate(date);
JSONArray list = content.getJSONArray("menus");
for(int i = 0; i<list.length(); i++) {
DailyMenuBuilder mb = new DailyMenuBuilder();
mb.parseJson(list.getJSONObject(i));
DailyMenu menu = mb.create();
plan.add( menu );
plan.setDate(menu.getDate());
}
} catch(Exception e) {
Log.e(TAG, e.getMessage());
}
return plan;
}
}