/*
* Copyright (C) 2010-2012 Stichting Akvo (Akvo Foundation)
*
* This file is part of Akvo FLOW.
*
* Akvo FLOW is free software: you can redistribute it and modify it under the terms of
* the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
* either version 3 of the License or any later version.
*
* Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License included below for more details.
*
* The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
*/
package org.waterforpeople.mapping.app.web.dto;
import javax.servlet.http.HttpServletRequest;
import com.gallatinsystems.framework.rest.RestError;
import com.gallatinsystems.framework.rest.RestRequest;
import com.gallatinsystems.framework.rest.exception.RestValidationException;
/**
* data structure to capture location beacon calls
*
* @author Christopher Fagiani
*/
public class LocationBeaconRequest extends RestRequest {
private static final String PHONE_PARAM = "phoneNumber";
private static final String LAT_PARAM = "lat";
private static final String IMEI_PARAM = "imei";
private static final String LON_PARAM = "lon";
private static final String ACC_PARAM = "acc";
private static final String VER_PARAM = "ver";
private static final String DEV_ID_PARAM = "devId";
private static final String OSVERSION_PARAM = "osVersion";
private static final String ANDROID_ID = "androidId";
private static final long serialVersionUID = 4549010911554976717L;
private String phoneNumber;
private String imei;
private Double lat;
private Double lon;
private Double accuracy;
private String appVersion;
private String deviceIdentifier;
private String osVersion;
private String androidId;
public String getDeviceIdentifier() {
return deviceIdentifier;
}
public void setDeviceIdentifier(String deviceIdentifier) {
this.deviceIdentifier = deviceIdentifier;
}
public String getAppVersion() {
return appVersion;
}
public void setAppVersion(String appVersion) {
this.appVersion = appVersion;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getImei() {
return imei;
}
public void setImei(String imei) {
this.imei = imei;
}
public String getOsVersion() {
return osVersion;
}
public void setOsVersion(String osVersion) {
this.osVersion = osVersion;
}
public Double getLat() {
return lat;
}
public void setLat(Double lat) {
this.lat = lat;
}
public Double getLon() {
return lon;
}
public void setLon(Double lon) {
this.lon = lon;
}
public Double getAccuracy() {
return accuracy;
}
public void setAccuracy(Double accuracy) {
this.accuracy = accuracy;
}
public String getAndroidId() {
return androidId;
}
public void setAndroidId(String androidId) {
this.androidId = androidId;
}
@Override
protected void populateErrors() {
if (lon != null && lat == null) {
addError(new RestError(RestError.MISSING_PARAM_ERROR_CODE,
RestError.MISSING_PARAM_ERROR_MESSAGE, LAT_PARAM
+ " cannot be null"));
}
if (lat != null && lon == null) {
addError(new RestError(RestError.MISSING_PARAM_ERROR_CODE,
RestError.MISSING_PARAM_ERROR_MESSAGE, LON_PARAM
+ " cannot be null"));
}
if (phoneNumber == null) {
addError(new RestError(RestError.MISSING_PARAM_ERROR_CODE,
RestError.MISSING_PARAM_ERROR_MESSAGE, PHONE_PARAM
+ " cannot be null"));
}
}
@Override
protected void populateFields(HttpServletRequest req) throws Exception {
phoneNumber = req.getParameter(PHONE_PARAM);
appVersion = req.getParameter(VER_PARAM);
deviceIdentifier = req.getParameter(DEV_ID_PARAM);
imei = req.getParameter(IMEI_PARAM);
osVersion = req.getParameter(OSVERSION_PARAM);
androidId = req.getParameter(ANDROID_ID);
try {
if (req.getParameter(LAT_PARAM) != null) {
lat = Double.parseDouble(req.getParameter(LAT_PARAM));
}
if (req.getParameter(LON_PARAM) != null) {
lon = Double.parseDouble(req.getParameter(LON_PARAM));
}
if (req.getParameter(ACC_PARAM) != null) {
accuracy = Double.parseDouble(req.getParameter(ACC_PARAM));
}
} catch (NumberFormatException e) {
throw new RestValidationException(new RestError(
RestError.BAD_DATATYPE_CODE,
RestError.BAD_DATATYPE_MESSAGE,
"lat, lon and acc must be doubles"),
"Lat/lon must be doubles", e);
}
}
}