package de.lukasniemeier.mensa.parser;
import android.content.Context;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.lukasniemeier.mensa.model.Mensa;
import de.lukasniemeier.mensa.model.Menu;
import de.lukasniemeier.mensa.model.WeeklyMenu;
import de.lukasniemeier.mensa.utils.SerializableTime;
/**
* Created on 17.09.13.
*/
public class PreviewMenuParser extends WeeklyMenuParser {
private static final DateFormat menuDateFormat = new SimpleDateFormat("d. MMMM yyyy",
Locale.GERMANY);
private static final Pattern menuDatePattern = Pattern.compile("[a-zA-Z]{2},\\s(.*)$");
public PreviewMenuParser(Context context, Document page, Mensa mensa) {
super(context, page, mensa);
}
@Override
protected Menu parseMenu(WeeklyMenu weeklyMenu, Element menuTable) {
Menu menu = new Menu(weeklyMenu);
Elements rows = menuTable.select("tr");
for (int i = 0; i < 4; i++) {
String name = rows.get(1).children().get(i).text();
addMeal(menu,
name,
rows.get(2).children().get(i).text(),
parseMealTypes(rows.get(3).children().get(i)),
getDefaultPrice(name));
}
return menu;
}
@Override
protected SerializableTime parseDate(Element menuTable) throws WeeklyMenuParseException {
Elements elements = menuTable.select(".date");
if (elements.size() != 1) {
throw new WeeklyMenuParseException("No date field found");
}
Element dateElement = elements.first();
try {
String dateText = dateElement.text();
Matcher match = menuDatePattern.matcher(dateText);
if (match.matches()) {
return new SerializableTime(menuDateFormat.parse(match.group(1)));
}
throw new WeeklyMenuParseException("Error finding date in date field");
} catch (ParseException e) {
throw new WeeklyMenuParseException("Error parsing date field", e);
}
}
}