1 package de.dhbwloe.campusapp.mensaplan;
3 import android.util.Log;
5 import java.io.UnsupportedEncodingException;
6 import java.net.URLEncoder;
7 import java.text.DateFormat;
8 import java.text.NumberFormat;
9 import java.text.ParseException;
10 import java.text.SimpleDateFormat;
11 import java.util.ArrayList;
12 import java.util.Date;
13 import java.util.List;
14 import java.util.Locale;
15 import java.util.regex.Matcher;
16 import java.util.regex.Pattern;
18 import de.dhbwloe.campusapp.CampusAppContext;
19 import de.dhbwloe.campusapp.network.XmlEntry;
20 import de.dhbwloe.campusapp.network.XmlRequestHelper;
21 import de.dhbwloe.campusapp.search.SearchIndices;
24 * Created by pk910 on 22.01.2016.
26 public class MensaplanManager extends XmlRequestHelper {
27 private CampusAppContext AppContext;
28 private boolean bRequestRunning = false;
29 private ArrayList<MensaplanManagerInterface> aCallbackInterfaces = new ArrayList<MensaplanManagerInterface>();
31 public MensaplanManager(CampusAppContext context) {
35 public void performSynchronisation(MensaplanManagerInterface callback) {
36 aCallbackInterfaces.add(callback);
40 bRequestRunning = true;
41 String mensaplanUrl = "http://www.swfr.de/index.php?id=1400&type=98&tx_swfrspeiseplan_pi1[apiKey]=c3841e89a2c8c301b890723ecdb786ad&tx_swfrspeiseplan_pi1[ort]=677";
42 requestXmlFromWeb(mensaplanUrl, "plan", "tagesplan");
45 private long getTimeFromDateString(String timestamp) {
49 DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH);
51 Date result = df.parse(timestamp);
52 return result.getTime()/1000;
53 } catch (ParseException e) {
58 private int getPriceFromString(String pricestr) {
62 Pattern r = Pattern.compile("^([0-9,]+)€( pro [0-9]+[a-z]+)$");
63 Matcher m = r.matcher(pricestr);
65 NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
67 Number result = nf.parse(m.group(1));
68 return (int)(result.doubleValue()*100);
69 } catch (ParseException e) {
77 protected void onXmlReceived(List<XmlEntry> entries) {
78 ArrayList<SearchIndices> newIndices = new ArrayList<SearchIndices>();
80 Log.i("MPMSync", "Received Mensaplan XML");
81 for(XmlEntry entry : entries) {
82 Log.i("MPMSync", "Parse Tagesplan: "+entry.getAttribute("datum"));
83 long plandate = getTimeFromDateString(entry.getAttribute("datum"));
87 XmlEntry[] menues = XmlEntry.FindXmlEntriesByName(entry, "menue");
88 for(XmlEntry menue : menues) {
90 String menuname = menue.getAttribute("art");
91 Log.i("MPMSync", "Parse menu "+menuname);
92 if(menuname == null) continue;
94 String additional = menue.getAttribute("zusatz");
96 centry = XmlEntry.FindXmlEntryByName(menue, "name");
97 String name = (centry == null ? null : centry.getValue());
99 centry = XmlEntry.FindXmlEntryByName(menue, "nameMitUmbruch");
100 String nameHtml = (centry == null ? null : centry.getValue());
102 centry = XmlEntry.FindXmlEntryByName(menue, "kennzeichnungen");
103 String notes = (centry == null ? null : centry.getValue());
105 int priceArray[] = new int[4];
107 centry = XmlEntry.FindXmlEntryByName(menue, "studierende");
108 priceArray[0] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
109 centry = XmlEntry.FindXmlEntryByName(menue, "angestellte");
110 priceArray[1] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
111 centry = XmlEntry.FindXmlEntryByName(menue, "gaeste");
112 priceArray[2] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
113 centry = XmlEntry.FindXmlEntryByName(menue, "schueler");
114 priceArray[3] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
116 MensaTagesplan tagesplan = new MensaTagesplan(plandate, menuname, 0, name, nameHtml, additional, notes, priceArray[0], priceArray[1], priceArray[2], priceArray[3]);
117 tagesplan.calculateChkSum();
119 AppContext.getDatabaseManager().updateMensaTagesplan(tagesplan);
121 if(tagesplan.getIsNew(true)) {
122 SearchIndices indices = new SearchIndices("MensaTagesplan#"+tagesplan.getPlanDate()+"|"+tagesplan.getMenuName(), false);
123 indices.setUpdateTime(tagesplan.getPlanDate());
125 indices.setTarget("#Mensa#showdate=" + tagesplan.getPlanDate()+"&showmenu=" + URLEncoder.encode(tagesplan.getMenuName(), "UTF-8"));
126 } catch (UnsupportedEncodingException e) {
127 indices.setTarget("#Mensa#showdate=" + tagesplan.getPlanDate());
129 indices.setTitle("Mensaplan " + tagesplan.getFormatedDate());
130 indices.setDescription(tagesplan.getMenuName() + ": " + tagesplan.getName());
131 indices.addKeyWord(tagesplan.getName());
132 indices.addKeyWord(tagesplan.getNotes());
133 newIndices.add(indices);
138 SearchIndices[] newIndicesArr = new SearchIndices[newIndices.size()];
139 newIndicesArr = newIndices.toArray(newIndicesArr);
140 AppContext.addSearchIndices(newIndicesArr);
142 for(MensaplanManagerInterface callback : aCallbackInterfaces) {
143 callback.onMensaplanUpdateDone();
145 aCallbackInterfaces.clear();
146 bRequestRunning = false;
150 protected void onXmlRequestFail(int statusCode, String errorMessage) {
151 for(MensaplanManagerInterface callback : aCallbackInterfaces) {
152 callback.onMensaplanUpdateFail("error " + statusCode + ": " + errorMessage);
154 aCallbackInterfaces.clear();
155 bRequestRunning = false;