package data; import java.util.ArrayList; import java.util.Iterator; /** * Loads and processes on per-page basis */ public class Page { ArrayList<String> document; int currentLine, totalResults; ArrayList<Offer> offers; final String TOTAL_RESULTS_STR = "<strong>Leitud"; final String OFFERING_BEGINNING_STR = "<td colspan=\"2\" align=\"left\" valign=\"top\" class=\"txt2\">"; public Page(String url) { DataReader dataReader = new DataReader(); document = dataReader.read(url); offers = new ArrayList<Offer>(); parse(); } public String findLine(String contains) { for (; currentLine < document.size(); currentLine++) { String line = document.get(currentLine); if (line.contains(contains)) { return line; } } return null; } public int getTotalResults(String line) { if (line == null || line.length() < 20) { return 0; } String tmp = line.substring(16);// Beginning of numbers is always @ position 16. String result = ""; int nonDigit = 0, digit = 0; for (int i = 0; i < tmp.length(); i++) { char c = tmp.charAt(i); if (Character.isDigit(c)) { digit++; result += c; } else if (c != ' ') { nonDigit++; } // System.out.print("'" + (int) c + "'" + c + '-'); } return Integer.parseInt(result); } void parse() { currentLine = 0; totalResults = getTotalResults(findLine(TOTAL_RESULTS_STR)); while (findLine(OFFERING_BEGINNING_STR) != null) { offers.add(new Offer(document.get(++currentLine))); } } public String toString() { String tmp = "Page. Total results: " + totalResults + " numOfferings: " + offers.size(); for (Iterator<Offer> iter = offers.iterator(); iter.hasNext();) { Offer o = iter.next(); tmp += o.toString() + "\n"; } return tmp; } public ArrayList<Offer> getOffers() { return offers; } }