package com.ese2013.mensaunibe.model; import java.util.ArrayList; import java.util.Calendar; import android.content.Context; import com.ese2013.mensaunibe.menu.RatingListAdapter; import com.ese2013.mensaunibe.model.data.PreferenceRequest; import com.ese2013.mensaunibe.model.mensa.Mensa; import com.ese2013.mensaunibe.model.mensa.MensaData; import com.ese2013.mensaunibe.model.menu.MenuDate; import com.ese2013.mensaunibe.model.menu.Menuplan; import com.ese2013.mensaunibe.model.menu.RatingData; /** * @author group7 * @author Andreas Hohler * @author Sandor Torok */ public class Model { private static Model instance = null; private ArrayList<Mensa> mensas; public Model() { instance = this; mensas = createMensas(); } /** * only called by instance creation, creates all the data * @return an array with all mensas and it's data */ private ArrayList<Mensa> createMensas() { MensaData md = new MensaData(); ArrayList<Mensa> mensas = md.getMensaList(); return mensas; } /** * returns a list of all mensas * @return ArrayList of Mensa */ public ArrayList<Mensa> getMensaList() { return mensas; } /** * Singleton pattern, returns the instance of this class * @return Model instance */ public static Model getInstance() { if(instance == null) instance = new Model(); return instance; } /** * forces a reload of all mens data * @return true if okay, other else false */ public boolean forceReload() { MensaData md = new MensaData(); ArrayList<Mensa> m = md.getMensaList(true); if(m.size() == 0) return false; mensas = m; return true; } /** * returns a Mensa object by the mensa id * @param mensaId * @return Mensa object */ public Mensa getMensaById(int mensaId) { assert mensaId != 0; for(Mensa m : mensas) { if(m.getId() == mensaId) return m; } return null; } public int getMensaIdByName(String name) { assert name != ""; for(Mensa m : mensas) { if(m.getName().contentEquals(name)) return m.getId(); } return (Integer) null; } /** * load the rating of a specific menu * @param context * @param adapter RatingListAdapter * @param menu menu string * @param mensaId * @param type: LOAD or SAVE */ public void loadMenuRating(Context context, RatingListAdapter adapter, String menu, int mensaId, int type) { assert context != null && adapter != null && menu.length() > 2 && type != 0; RatingData rd = new RatingData(context, menu, mensaId, type); rd.setAdapter(adapter); rd.execute(); } /** * checks if there are menus for the actual week * @param mensaId * @return ArrayList of Menuplans (one plan = one day) */ //check for one week public ArrayList<Menuplan> getComingDaysMenu(int mensaId) { assert mensaId != 0; ArrayList <Menuplan> menuPlan = new ArrayList<Menuplan>(); for(Mensa m : mensas) { if(m.getId() == mensaId) { Calendar calendar = Calendar.getInstance(); Menuplan menu; int checkForOneWeek = 1; do{ menu = m.getDailyMenu( new MenuDate( calendar.getTime() ) ); calendar.add(Calendar.DATE, 1);//increment Date always with one day checkForOneWeek++; if(menu != null) menuPlan.add(menu); }while (checkForOneWeek <= 8); return menuPlan; } } return null; } /** * saves the inputted rating of a menu * @param context * @param menu menu string * @param mensaId * @param username Nickname (Google-Email as Hash) * @param comment Comment of user * @param rating Rating (1-5) */ public void saveRating(Context context, String menu, int mensaId, String username, String comment, int rating) { assert context != null && rating != 0 && username.length() > 0; RatingData rd = new RatingData(context, menu, mensaId, RatingData.TYPE_SAVE); rd.setPostData(username, comment, rating); rd.execute(); } public void saveNotificationSettings(boolean notify, ArrayList<String> keywords) { PreferenceRequest pr = new PreferenceRequest(); pr.writeNotification(notify); pr.writeNotificationKeywords(keywords); } public ArrayList<String> loadNotificationKeywords() { PreferenceRequest pr = new PreferenceRequest(); return pr.readNotificationKeywords(); } public boolean loadNotificationStatus() { PreferenceRequest pr = new PreferenceRequest(); return pr.readNotification(); } }