/[projects]/android/TrainInfo/src/dk/thoerup/traininfo/provider/OfflineStationProvider.java
ViewVC logotype

Diff of /android/TrainInfo/src/dk/thoerup/traininfo/provider/OfflineStationProvider.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1553 by torben, Fri Jul 8 11:56:58 2011 UTC revision 1717 by torben, Wed Mar 7 11:34:56 2012 UTC
# Line 1  Line 1 
1  package dk.thoerup.traininfo.provider;  package dk.thoerup.traininfo.provider;
2    
 import java.io.EOFException;  
3  import java.io.File;  import java.io.File;
4  import java.io.FileInputStream;  import java.io.FileInputStream;
5  import java.io.FileOutputStream;  import java.io.FileOutputStream;
6    import java.io.IOException;
7  import java.io.ObjectInputStream;  import java.io.ObjectInputStream;
8  import java.io.ObjectOutputStream;  import java.io.ObjectOutputStream;
9    import java.net.URLEncoder;
10  import java.util.Collections;  import java.util.Collections;
11  import java.util.Comparator;  import java.util.Comparator;
12  import java.util.LinkedList;  import java.util.LinkedList;
# Line 19  import android.util.Log; Line 20  import android.util.Log;
20  import dk.thoerup.android.traininfo.common.StationBean;  import dk.thoerup.android.traininfo.common.StationBean;
21  import dk.thoerup.android.traininfo.common.StationEntry;  import dk.thoerup.android.traininfo.common.StationEntry;
22  import dk.thoerup.genericjavautils.HttpUtil;  import dk.thoerup.genericjavautils.HttpUtil;
23    import dk.thoerup.traininfo.util.DownloadUtil;
24  import dk.thoerup.traininfo.util.IntSet;  import dk.thoerup.traininfo.util.IntSet;
25  import dk.thoerup.traininfo.util.XmlUtil;  import dk.thoerup.traininfo.util.XmlUtil;
26    
# Line 26  public class OfflineStationProvider impl Line 28  public class OfflineStationProvider impl
28                    
29          StationBean stations = new StationBean();          StationBean stations = new StationBean();
30    
31            boolean statsByNameSend = false;
32    
33            public boolean hasStations() {
34                    return (stations != null && stations.entries.size() > 0);
35            }
36            
37    
38          public boolean loadStations(Context context) throws Exception {          public boolean loadStations(Context context) throws Exception {
39                  long start = System.currentTimeMillis();                  long start = System.currentTimeMillis();
40                                    
41                  stations.entries.clear(); //TODO: remove                  StationBean tmpStations = new StationBean();
42                                    
43                  File parent = context.getFilesDir();                  File parent = context.getFilesDir();
44                  File stationsFile = new File(parent, "stations.bin");                  File stationsFile = new File(parent, "stations.bin");
# Line 48  public class OfflineStationProvider impl Line 56  public class OfflineStationProvider impl
56                  stations = serializer.read(StationBean.class,  new String(data, "ISO-8859-1") );*/                  stations = serializer.read(StationBean.class,  new String(data, "ISO-8859-1") );*/
57                                    
58                                    
59                  try {  
60                          ObjectInputStream in = new ObjectInputStream( new FileInputStream(stationsFile) );                  ObjectInputStream in = new ObjectInputStream( new FileInputStream(stationsFile) );
61                          Object o;  
62                          StationEntry e = null;                  int length = in.readInt(); // first field is the length
63                          while ( (o=in.readObject()) != null ) {                  
64                                  e = (StationEntry) o;                  for (int i=0; i<length; i++) {                          
65                                  e.updateSearch();                          StationEntry entry = (StationEntry) in.readObject();
66                                  stations.entries.add( e );                          updateSearchStrings(entry);
67                          }                          tmpStations.entries.add( entry );
                         in.close();  
                 } catch (EOFException e) {  
                         //do nothing;  
68                  }                  }
69                                    
70                  Log.e("OFFLINE", "loaded" + stations.entries.size());                  in.close();
71    
72                    stations = tmpStations; // når indlæsningen er ok skifter vi over
73                    
74                    Log.e("OFFLINE", "loaded" + tmpStations.entries.size());
75                  logElapsedTime(start, "loadStations");                  logElapsedTime(start, "loadStations");
76                                    
77                  return true;                  return true;
78          }                }
79            
80            public void updateSearchStrings(StationEntry entry) {          
81                    entry.nameLower = entry.getName().toLowerCase();
82                    entry.nameInternational = entry.nameLower.replace("æ", "ae").replace("ø", "oe").replace("å", "aa");
83            }
84                    
85          public void downloadStations(Context context) throws Exception {          public void downloadStations(Context context) throws Exception {
86                  File parent = context.getFilesDir();                  File parent = context.getFilesDir();
87                  File stationsFile = new File(parent, "stations.bin");                  File stationsFile = new File(parent, "stations.bin");
88    
89                                    long start = System.currentTimeMillis();
90                  byte data[] = HttpUtil.getContent(XmlUtil.SERVICE_BASE + "/LocateStations?dump=1", 5000);                  byte data[] = HttpUtil.getContent(XmlUtil.SERVICE_BASE + "/LocateStations?dump=1", 5000);
91                  Serializer serializer = new Persister();                  logElapsedTime(start, "download XML");
92                  stations = serializer.read(StationBean.class,  new String(data, "ISO-8859-1") );                  
93                    
94                    Serializer serializer = new Persister();                
95                    
96                    start = System.currentTimeMillis();
97                    StationBean tmpStations = serializer.read(StationBean.class,  new String(data, "ISO-8859-1") );
98                    logElapsedTime(start, "parse XML");
99                                    
100                                    
101                  ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(stationsFile) );                  ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(stationsFile) );
102                  Log.e("OFFLINE", "data size" + data.length);                  Log.e("OFFLINE", "data size" + data.length);
103                                    
104                  for (StationEntry entry : stations.entries) {                  out.writeInt( tmpStations.entries.size() ); //start with writing the length of the dataset
105                    
106                    for (StationEntry entry : tmpStations.entries) {
107                            updateSearchStrings( entry ); //prepare name fields for byName search
108                          out.writeObject(entry);                          out.writeObject(entry);
109                  }                  }
110                                    
111                  out.close();                              out.close();
112                    
113                    stations = tmpStations; // når alt er ok skifter vi over til ny udgave
114          }          }
115                    
116                    
# Line 110  public class OfflineStationProvider impl Line 135  public class OfflineStationProvider impl
135          @Override          @Override
136          public StationBean lookupStationsByLocation(Location location) {          public StationBean lookupStationsByLocation(Location location) {
137                                    
138                    statsByLocation(location);
139                    
140                  long start = System.currentTimeMillis();                  long start = System.currentTimeMillis();
141                  Location tmpLoc = new Location("GPS");                  Location tmpLoc = new Location("GPS");
142                                    
# Line 138  public class OfflineStationProvider impl Line 165  public class OfflineStationProvider impl
165                  Collections.sort( entries, distanceComparator);                  Collections.sort( entries, distanceComparator);
166                                    
167                  StationBean tmpStations = new StationBean();                  StationBean tmpStations = new StationBean();
168                  for (int i = 0; i<8; i++) {                  for (int i = 0; i<8 && i<entries.size(); i++) {
169                          tmpStations.entries.add( entries.get(i) );                          tmpStations.entries.add( entries.get(i) );
170                  }                  }
171                                    
# Line 154  public class OfflineStationProvider impl Line 181  public class OfflineStationProvider impl
181    
182          @Override          @Override
183          public StationBean lookupStationsByName(String name) {          public StationBean lookupStationsByName(String name) {
184            
185                    statsByName(name);      
186                                    
187                  long start = System.currentTimeMillis();                  long start = System.currentTimeMillis();
188                                    
# Line 170  public class OfflineStationProvider impl Line 199  public class OfflineStationProvider impl
199    
200          @Override          @Override
201          public StationBean lookupStationsByIds(String ids) {          public StationBean lookupStationsByIds(String ids) {
202                    statsByIds(ids);
203                    
204                  IntSet idset = new IntSet();                  IntSet idset = new IntSet();
205                  idset.fromString(ids);                  idset.fromString(ids);
206                                    
# Line 182  public class OfflineStationProvider impl Line 213  public class OfflineStationProvider impl
213                                    
214                  return tmpStations;                  return tmpStations;
215          }          }
216            
217    
218            private void statsByLocation(Location location) {
219                    double lat = XmlStationProvider.roundToPlaces(location.getLatitude(), 4);
220                    double lng = XmlStationProvider.roundToPlaces(location.getLongitude(), 4);
221                    
222                    final String url = XmlUtil.SERVICE_BASE + "/LocateStations?latitude=" + lat + "&longitude=" + lng + "&dummy=1";
223                    Log.i("url", url);
224                    urlSender(url);
225            }
226            
227            private void statsByName(String name) {
228                    if (statsByNameSend == true) {
229                            return;
230                    }
231                    statsByNameSend = true;
232                    
233                    try {
234                            name = URLEncoder.encode(name, "ISO8859-1");    
235                    } catch (Exception e) {
236                            Log.e("lookupStations", "Encoding failed", e);//if encoding fails use original and hope for the best
237                    }
238                    
239                    String url = XmlUtil.SERVICE_BASE + "/LocateStations?name=" + name + "&dummy=1";
240                    Log.i("url", url);
241                    urlSender(url);
242            }
243            
244            private void statsByIds(String ids) {  
245                    final String url = XmlUtil.SERVICE_BASE + "/LocateStations?list=" + ids + "&dummy=1";
246                    Log.i("url", url);
247                    urlSender(url);
248            }
249            
250            private void urlSender(final String url) {
251                    Thread t = new Thread(new Runnable() {
252    
253                            @Override
254                            public void run() {
255                                    try {
256                                            DownloadUtil.getContentString(url, 15000, "ISO-8859-1");
257                                    } catch (IOException e) {
258                                            Log.e("TrainInfo", "stats failed");
259                                    }                              
260                            }                      
261                    });
262                    t.start();
263            }
264            
265    
266  }  }

Legend:
Removed from v.1553  
changed lines
  Added in v.1717

  ViewVC Help
Powered by ViewVC 1.1.20