Grundaufbau der App
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / mensaplan / MensaplanManager.java
1 package de.dhbwloe.campusapp.mensaplan;
2
3 import android.util.Log;
4
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
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;
21
22 /**
23  * Created by pk910 on 22.01.2016.
24  */
25 public class MensaplanManager extends XmlRequestHelper {
26     private CampusAppContext AppContext;
27     private boolean bRequestRunning = false;
28     private ArrayList<MensaplanManagerInterface> aCallbackInterfaces = new ArrayList<MensaplanManagerInterface>();
29
30     public MensaplanManager(CampusAppContext context) {
31         AppContext = context;
32     }
33
34     public void performSynchronisation(MensaplanManagerInterface callback) {
35         aCallbackInterfaces.add(callback);
36         if(bRequestRunning)
37             return;
38
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");
42     }
43
44     private long getTimeFromDateString(String timestamp) {
45         // 01.03.2016
46         if(timestamp == null)
47             return 0;
48         DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH);
49         try {
50             Date result =  df.parse(timestamp);
51             return result.getTime()/1000;
52         } catch (ParseException e) {
53             return 0;
54         }
55     }
56
57     private int getPriceFromString(String pricestr) {
58         // 2,90€
59         if(pricestr == null)
60             return 0;
61         NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
62         try {
63             Number result =  nf.parse(pricestr.replace("€", ""));
64             return (int)(result.doubleValue()*100);
65         } catch (ParseException e) {
66             return 0;
67         }
68     }
69
70     @Override
71     protected void onXmlReceived(List<XmlEntry> entries) {
72         ArrayList<SearchIndices> newIndices = new ArrayList<SearchIndices>();
73
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"));
78             if(plandate == 0)
79                 continue;
80
81             XmlEntry[] menues = XmlEntry.FindXmlEntriesByName(entry, "menue");
82             for(XmlEntry menue : menues) {
83                 XmlEntry centry;
84                 String menuname = menue.getAttribute("art");
85                 Log.i("MPMSync", "Parse menu "+menuname);
86                 if(menuname == null) continue;
87
88                 String additional = menue.getAttribute("zusatz");
89
90                 centry = XmlEntry.FindXmlEntryByName(menue, "name");
91                 String name = (centry == null ? null : centry.getValue());
92
93                 centry = XmlEntry.FindXmlEntryByName(menue, "nameMitUmbruch");
94                 String nameHtml = (centry == null ? null : centry.getValue());
95
96                 centry = XmlEntry.FindXmlEntryByName(menue, "kennzeichnungen");
97                 String notes = (centry == null ? null : centry.getValue());
98
99                 int priceArray[] = new int[4];
100
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()));
109
110                 MensaTagesplan tagesplan = new MensaTagesplan(plandate, menuname, 0, name, nameHtml, additional, notes, priceArray[0], priceArray[1], priceArray[2], priceArray[3]);
111                 tagesplan.calculateChkSum();
112
113                 AppContext.getDatabaseManager().updateMensaTagesplan(tagesplan);
114
115                 if(tagesplan.getIsNew(true)) {
116                     SearchIndices indices = new SearchIndices("MensaTagesplan#"+tagesplan.getPlanDate()+"|"+tagesplan.getMenuName(), false);
117                     indices.setUpdateTime(tagesplan.getPlanDate());
118                     try {
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());
122                     }
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);
128                 }
129             }
130         }
131
132         SearchIndices[] newIndicesArr = new SearchIndices[newIndices.size()];
133         newIndicesArr = newIndices.toArray(newIndicesArr);
134         AppContext.addSearchIndices(newIndicesArr);
135
136         for(MensaplanManagerInterface callback : aCallbackInterfaces) {
137             callback.onMensaplanUpdateDone();
138         }
139         aCallbackInterfaces.clear();
140         bRequestRunning = false;
141     }
142
143     @Override
144     protected void onXmlRequestFail(int statusCode, String errorMessage) {
145         for(MensaplanManagerInterface callback : aCallbackInterfaces) {
146             callback.onMensaplanUpdateFail("error " + statusCode + ": " + errorMessage);
147         }
148         aCallbackInterfaces.clear();
149         bRequestRunning = false;
150     }
151 }