package data; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; public class Search { ArrayList<Page> pages; ArrayList<Offer> offers; public static final int AREA = 0, PRICE = 1, AREA_PRICE = 2; float averageValue; public Search(String baseUrl) { pages = new ArrayList<Page>(); pages.add(new Page(baseUrl)); int totalPages = pages.get(0).totalResults / 25+1; // FIXME remove limit of 1 for (int i = 2; i <= totalPages/* && i <= 1 */; i++) { System.out.println("Loading page " + i + " of " + totalPages); pages.add(new Page(baseUrl + "&start=" + i)); } offers = new ArrayList<Offer>(); for (Iterator<Page> iter = pages.iterator(); iter.hasNext();) { Page p = iter.next(); offers.addAll(p.getOffers()); } System.out.println("Total offers: " + offers.size()); } public ArrayList<Offer> getOffers() { return offers; } public void sort(int order) { averageValue = 0; switch (order) { case AREA: Collections.sort(offers, new AreaCmp()); for (Iterator<Offer> iter = offers.iterator(); iter.hasNext();) { Offer o = iter.next(); averageValue += o.area; } break; case AREA_PRICE: Collections.sort(offers, new AreaPriceCmp()); for (Iterator<Offer> iter = offers.iterator(); iter.hasNext();) { Offer o = iter.next(); averageValue += o.areaPrice; } break; default: Collections.sort(offers, new PriceCmp()); for (Iterator<Offer> iter = offers.iterator(); iter.hasNext();) { Offer o = iter.next(); averageValue += o.price; } } averageValue /= offers.size(); System.out.println("Average: " + averageValue); } class AreaCmp implements Comparator<Offer> { public int compare(Offer o1, Offer o2) { return o1.area < o2.area ? -1 : 1; } } class PriceCmp implements Comparator<Offer> { public int compare(Offer o1, Offer o2) { return o1.price < o2.price ? -1 : 1; } } class AreaPriceCmp implements Comparator<Offer> { public int compare(Offer o1, Offer o2) { return o1.areaPrice < o2.areaPrice ? -1 : 1; } } public float getAverageValue() { return averageValue; } }