package com.mindflakes.TeamRED.server; import com.google.appengine.api.datastore.Query.FilterOperator; import com.google.appengine.api.datastore.*; import org.joda.time.DateTime; import com.mindflakes.TeamRED.menuClasses.*; import java.util.Iterator; import java.util.ArrayList; import com.vercer.engine.persist.annotation.AnnotationObjectDatastore; public class MealMenuSearchQuery { private ArrayList<MealMenu> menus; public MealMenuSearchQuery(DateTime startDate, DateTime endDate){ DatastoreService service = DatastoreServiceFactory.getDatastoreService(); AnnotationObjectDatastore datastore = new AnnotationObjectDatastore(service); Iterator<MealMenu> it = datastore.find().type(MealMenu.class) .addFilter("startMillis", FilterOperator.GREATER_THAN_OR_EQUAL, startDate.getMillis()).returnResultsNow(); menus = new ArrayList<MealMenu>(); while(it.hasNext()){ MealMenu tmp = it.next(); if(tmp.getMealInterval().getEndMillis()<=endDate.getMillis()) menus.add(tmp); } } public MealMenuSearchQuery(ArrayList<MealMenu> menus){ this.menus = menus; } public MealMenuSearchQuery findCommons(String commonsName){ // System.out.println("searching for commons: "+commonsName); commonsName=commonsName.toLowerCase(); ArrayList<MealMenu> veganMenus = new ArrayList<MealMenu>(); for(MealMenu menu:menus){ if(menu.getCommonsName().toLowerCase().equals(commonsName)) veganMenus.add(menu); } return new MealMenuSearchQuery(veganMenus); } public MealMenuSearchQuery findVegan(){ // System.out.println("Searching for vegan"); ArrayList<MealMenu> veganMenus = new ArrayList<MealMenu>(); for(MealMenu menu:menus){ menu=menu.newMealMenuFromVegan(); if(menu.getVenues().size()>0) veganMenus.add(menu); } return new MealMenuSearchQuery(veganMenus); } public MealMenuSearchQuery findVegetarian(){ // System.out.println("Searching for vegetarian"); ArrayList<MealMenu> vgtMenus = new ArrayList<MealMenu>(); for(MealMenu menu:menus){ menu=menu.newMealMenuFromVegetarian(); if(menu.getVenues().size()>0) vgtMenus.add(menu); } return new MealMenuSearchQuery(vgtMenus); } public MealMenuSearchQuery findFoodItem(String search){ ArrayList<String> searchParts = splitSearch(search); ArrayList<MealMenu> searchMenus = new ArrayList<MealMenu>(); // System.out.print("Searchin for...: "); // for(String s: searchParts){ // System.out.println(s+" "); // } // System.out.println(); for(MealMenu menu:menus){ boolean foundFoodInThisMenu = false; try{ for(Venue venue:menu.getVenues()){ if(foundFoodInThisMenu) break; for(FoodItem food:venue.getFoodItems()){ // if(food.getName().contains("Focaccia")) System.out.println(food.getName()); if(foundFoodInThisMenu) break; for(String s: searchParts){ if(food.getName().toLowerCase().contains(s)){ foundFoodInThisMenu=true; break; } } } } }catch(NullPointerException e){ searchMenus.add(menu); } if(foundFoodInThisMenu) searchMenus.add(menu); } return new MealMenuSearchQuery(searchMenus); } private ArrayList<String> splitSearch(String search){ System.out.println("splitting: " + search); ArrayList<String> splitStrings = new ArrayList<String>(); search=search.toLowerCase(); while(search.indexOf('\"')!=-1){ if(search.indexOf('\"',search.indexOf('\"')+1)!=-1){ if(search.indexOf('\"')!=0){ // System.out.println("adding: "+search.substring(0,search.indexOf('\"')).trim()); splitStrings.add(search.substring(0,search.indexOf('\"')).trim()); } search=search.substring(search.indexOf('\"')+1); // System.out.println("adding:" +search.substring(0,search.indexOf('\"')).trim()); splitStrings.add(search.substring(0,search.indexOf('\"')).trim()); search=search.substring(search.indexOf('\"')+1); } else{ String tmp = search.substring(0,search.indexOf('\"')).trim(); if(tmp.length()!=0) splitStrings.add(tmp); search = search.substring(search.indexOf('\"')+1).trim(); break; } } for(String s:search.split(" ")){ if(s.length()!=0){ splitStrings.add(s); // System.out.println("adding: "+s); } } for(int i = 0; i<splitStrings.size();i++){ if(splitStrings.get(i).trim().compareTo("")==0){ splitStrings.remove(i); } } return splitStrings; } public ArrayList<MealMenu> returnResults(){ return menus; } }