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;
16 import de.dhbwloe.campusapp.CampusAppContext;
17 import de.dhbwloe.campusapp.network.XmlEntry;
18 import de.dhbwloe.campusapp.network.XmlRequestHelper;
19 import de.dhbwloe.campusapp.search.SearchIndices;
20 import de.dhbwloe.campusapp.vorlesungen.VorlesungsplanManagerInterface;
23 * Created by pk910 on 22.01.2016.
25 public class MensaplanManager extends XmlRequestHelper {
26 private CampusAppContext AppContext;
27 private boolean bRequestRunning = false;
28 private ArrayList<MensaplanManagerInterface> aCallbackInterfaces = new ArrayList<MensaplanManagerInterface>();
30 public MensaplanManager(CampusAppContext context) {
34 public void performSynchronisation(MensaplanManagerInterface callback) {
35 aCallbackInterfaces.add(callback);
39 bRequestRunning = true;
40 String mensaplanUrl = "http://www.swfr.de/index.php?id=1400&type=98&tx_swfrspeiseplan_pi1[apiKey]=c3841e89a2c8c301b890723ecdb786ad&tx_swfrspeiseplan_pi1[ort]=677";
41 requestXmlFromWeb(mensaplanUrl, "plan", "tagesplan");
44 private long getTimeFromDateString(String timestamp) {
48 DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH);
50 Date result = df.parse(timestamp);
51 return result.getTime()/1000;
52 } catch (ParseException e) {
57 private int getPriceFromString(String pricestr) {
61 NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
63 Number result = nf.parse(pricestr.replace("€", ""));
64 return (int)(result.doubleValue()*100);
65 } catch (ParseException e) {
71 protected void onXmlReceived(List<XmlEntry> entries) {
72 ArrayList<SearchIndices> newIndices = new ArrayList<SearchIndices>();
74 Log.i("MPMSync", "Received Mensaplan XML");
75 for(XmlEntry entry : entries) {
76 Log.i("MPMSync", "Parse Tagesplan: "+entry.getAttribute("datum"));
77 long plandate = getTimeFromDateString(entry.getAttribute("datum"));
81 XmlEntry[] menues = XmlEntry.FindXmlEntriesByName(entry, "menue");
82 for(XmlEntry menue : menues) {
84 String menuname = menue.getAttribute("art");
85 Log.i("MPMSync", "Parse menu "+menuname);
86 if(menuname == null) continue;
88 String additional = menue.getAttribute("zusatz");
90 centry = XmlEntry.FindXmlEntryByName(menue, "name");
91 String name = (centry == null ? null : centry.getValue());
93 centry = XmlEntry.FindXmlEntryByName(menue, "nameMitUmbruch");
94 String nameHtml = (centry == null ? null : centry.getValue());
96 centry = XmlEntry.FindXmlEntryByName(menue, "kennzeichnungen");
97 String notes = (centry == null ? null : centry.getValue());
99 int priceArray[] = new int[4];
101 centry = XmlEntry.FindXmlEntryByName(menue, "studierende");
102 priceArray[0] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
103 centry = XmlEntry.FindXmlEntryByName(menue, "angestellte");
104 priceArray[1] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
105 centry = XmlEntry.FindXmlEntryByName(menue, "gaeste");
106 priceArray[2] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
107 centry = XmlEntry.FindXmlEntryByName(menue, "schueler");
108 priceArray[3] = (centry == null ? 0 : getPriceFromString(centry.getValue()));
110 MensaTagesplan tagesplan = new MensaTagesplan(plandate, menuname, 0, name, nameHtml, additional, notes, priceArray[0], priceArray[1], priceArray[2], priceArray[3]);
111 tagesplan.calculateChkSum();
113 AppContext.getDatabaseManager().updateMensaTagesplan(tagesplan);
115 if(tagesplan.getIsNew(true)) {
116 SearchIndices indices = new SearchIndices("MensaTagesplan#"+tagesplan.getPlanDate()+"|"+tagesplan.getMenuName(), false);
117 indices.setUpdateTime(tagesplan.getPlanDate());
119 indices.setTarget("#Mensa#showdate=" + tagesplan.getPlanDate()+"&showmenu=" + URLEncoder.encode(tagesplan.getMenuName(), "UTF-8"));
120 } catch (UnsupportedEncodingException e) {
121 indices.setTarget("#Mensa#showdate=" + tagesplan.getPlanDate());
123 indices.setTitle("Mensaplan " + tagesplan.getFormatedDate());
124 indices.setDescription(tagesplan.getMenuName() + ": " + tagesplan.getName());
125 indices.addKeyWord(tagesplan.getName());
126 indices.addKeyWord(tagesplan.getNotes());
127 newIndices.add(indices);
132 SearchIndices[] newIndicesArr = new SearchIndices[newIndices.size()];
133 newIndicesArr = newIndices.toArray(newIndicesArr);
134 AppContext.addSearchIndices(newIndicesArr);
136 for(MensaplanManagerInterface callback : aCallbackInterfaces) {
137 callback.onMensaplanUpdateDone();
139 aCallbackInterfaces.clear();
140 bRequestRunning = false;
144 protected void onXmlRequestFail(int statusCode, String errorMessage) {
145 for(MensaplanManagerInterface callback : aCallbackInterfaces) {
146 callback.onMensaplanUpdateFail("error " + statusCode + ": " + errorMessage);
148 aCallbackInterfaces.clear();
149 bRequestRunning = false;