package org.androad.sys.ors.ds.yahoo;
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 YahooDSParser 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(String json, final POIType aPOIType) throws ORSException{
try {
JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
JSONArray listing = object.getJSONArray("listing");
for(int i = 0; i < listing.length(); i++) {
final JSONObject poi = listing.getJSONObject(i);
final ORSPOI mCurPOI = new ORSPOI();
final String poiname = poi.getString("title");
final JSONObject ycats = poi.getJSONObject("ycatsprimary");
final JSONObject data1 = ycats.optJSONObject("data");
final JSONArray data2 = ycats.optJSONArray("data");
String poitype = "";
if (data1 != null) {
poitype = data1.getString("name");
} else if (data2 != null) {
poitype = data2.getJSONObject(0).getString("name");
}
mCurPOI.setName(poiname);
try {
mCurPOI.setPOIType(POIType.fromRawName(poitype));
} catch (Exception e) {
mCurPOI.setPOIType(aPOIType);
}
final String distance = poi.getString("distance");
mCurPOI.setDistance((int) (1609.344 * Float.parseFloat(distance)));
final String lat = poi.getString("lat");
final String lon = poi.getString("lon");
mCurPOI.setGeoPoint(GeoPoint.fromDoubleString(lat + "," + lon, ','));
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
// ====================================
}