package org.androad.sys.ors.ds.google;
import java.util.ArrayList;
import org.osmdroid.util.GeoPoint;
import org.androad.sys.ors.adt.Error;
import org.androad.sys.ors.adt.ds.ORSPOI;
import org.androad.sys.ors.adt.ds.POIType;
import org.androad.sys.ors.exceptions.ORSException;
import org.androad.util.constants.Constants;
import org.androad.util.constants.TimeConstants;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class GoogleDSParser implements TimeConstants, Constants{
// ====================================
// Constants
// ====================================
// ====================================
// Fields
// ====================================
private final ArrayList<Error> mErrors = new ArrayList<Error>();
private ArrayList<ORSPOI> mPOIs = new ArrayList<ORSPOI>();
// ===========================================================
// Getter & Setter
// ===========================================================
public ArrayList<Error> getErrors(){
return this.mErrors;
}
public ArrayList<ORSPOI> getDSResponse(final String page, final GeoPoint aGeoPoint, final POIType aPOIType) throws ORSException{
final int spacerStartJS1 = page.indexOf("//<![CDATA[");
final int spacerStartJS2 = page.indexOf('{', spacerStartJS1);
final int spacerStartJS3 = page.indexOf('{', spacerStartJS2 + 1);
final int spacerStartJS4 = page.indexOf("overlays:", spacerStartJS3);
final int spacerEndJS1 = page.lastIndexOf("//]]>");
final int spacerEndJS2 = page.lastIndexOf('}', spacerEndJS1);
final int spacerEndJS3 = page.lastIndexOf('}', spacerEndJS2 - 1);
final int spacerEndJS4 = page.lastIndexOf("]}]}", spacerEndJS3);
final String json = page.substring(spacerStartJS4 + 9, spacerEndJS4 + 4);
try {
JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
JSONArray markers = object.getJSONArray("markers");
for(int i = 0; i < markers.length(); i++) {
final JSONObject poi = markers.getJSONObject(i);
final ORSPOI mCurPOI = new ORSPOI();
final String poiname = poi.getString("name");
mCurPOI.setName(poiname);
mCurPOI.setPOIType(aPOIType);
final JSONObject latlng = poi.getJSONObject("latlng");
final String lat = latlng.getString("lat");
final String lon = latlng.getString("lng");
final GeoPoint gp = GeoPoint.fromDoubleString(lat + "," + lon, ',');
final int distance = aGeoPoint.distanceTo(gp);
mCurPOI.setGeoPoint(gp);
mCurPOI.setDistance(distance);
this.mPOIs.add(mCurPOI);
}
} catch (Exception e) {
this.mErrors.add(new Error("err", "sev", "", e.toString()));
}
if(this.mErrors != null && this.mErrors.size() > 0) {
throw new ORSException(this.mErrors);
}
return this.mPOIs;
}
// ====================================
// Methods from Superclasses
// ====================================
// ====================================
// Helper-Methods
// ====================================
}