/*
* Copyright (C) 2010-2015 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 java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import com.gallatinsystems.framework.rest.RestRequest;
/**
* request dto for data backout utility
*
* @author Christopher Fagiani
*/
public class DataBackoutRequest extends RestRequest {
private static final long serialVersionUID = -1311252813916737262L;
public static final String GET_QUESTION_ACTION = "getQuestions";
public static final String GET_SURVEY_INSTANCE_ACTION = "getSurveyInstances";
public static final String DELETE_SURVEY_INSTANCE_ACTION = "deleteQuestionAnswer";
public static final String DELETE_QUESTION_SUMMARY_ACTION = "deleteQuestionSummary";
public static final String LIST_INSTANCE_ACTION = "listInstance";
public static final String DELETE_ACCESS_POINT_ACTION = "deleteAccessPoint";
public static final String DELETE_AP_SUMMARY_ACTION = "deleteAPSummary";
public static final String LIST_INSTANCE_RESPONSE_ACTION = "listInstanceResponse";
public static final String LIST_QUESTION_RESPONSE_ACTION = "listQuestionResponse";
public static final String SURVEY_ID_PARAM = "surveyId";
public static final String SURVEY_INSTANCE_ID_PARAM = "surveyInstanceId";
public static final String QUESTION_ID_PARAM = "questionId";
public static final String COUNTRY_PARAM = "countryCode";
public static final String DATE_PARAM = "date";
public static final String INCLUDE_DATE_PARAM = "includeDate";
public static final String LAST_COLLECTION_PARAM = "lastCollection";
public static final String FROM_DATE_PARAM = "fromDate";
public static final String TO_DATE_PARAM = "toDate";
public static final String LIMIT_PARAM = "limit";
private static final ThreadLocal<DateFormat> inFmt = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
};
};
private Long surveyId;
private Long surveyInstanceId;
private Long questionId;
private String countryCode;
private boolean includeDate;
private boolean lastCollection = false;
private Date fromDate;
private Date toDate;
private Integer limit;
public Long getSurveyId() {
return surveyId;
}
public void setSurveyId(Long surveyId) {
this.surveyId = surveyId;
}
public Long getSurveyInstanceId() {
return surveyInstanceId;
}
public void setSurveyInstanceId(Long surveyInstanceId) {
this.surveyInstanceId = surveyInstanceId;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
public Long getQuestionId() {
return questionId;
}
public void setQuestionId(Long questionId) {
this.questionId = questionId;
}
public boolean includeDate() {
return includeDate;
}
public void setLastCollection(boolean lastCollection) {
this.lastCollection = lastCollection;
}
public boolean getLastCollection() {
return lastCollection;
}
public Date getFromDate() {
return fromDate;
}
public void setFromDate(Date fromDate) {
this.fromDate = fromDate;
}
public Date getToDate() {
return toDate;
}
public void setToDate(Date toDate) {
this.toDate = toDate;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
@Override
protected void populateErrors() {
// TODO: add error checking
}
@Override
protected void populateFields(HttpServletRequest req) throws Exception {
if (req.getParameter(SURVEY_ID_PARAM) != null) {
surveyId = Long.parseLong(req.getParameter(SURVEY_ID_PARAM).trim());
}
if (req.getParameter(QUESTION_ID_PARAM) != null) {
questionId = Long.parseLong(req.getParameter(QUESTION_ID_PARAM)
.trim());
}
String instanceId = req.getParameter(SURVEY_INSTANCE_ID_PARAM);
if (instanceId != null && instanceId.trim().length() > 0) {
surveyInstanceId = Long.parseLong(instanceId.trim());
}
if (req.getParameter(DATE_PARAM) != null) {
toDate = inFmt.get().parse(req.getParameter(DATE_PARAM));
}
if (req.getParameter(INCLUDE_DATE_PARAM) != null) {
includeDate = Boolean.parseBoolean(req
.getParameter(INCLUDE_DATE_PARAM));
} else {
includeDate = false;
}
if (req.getParameter(FROM_DATE_PARAM) != null) {
fromDate = parseDate(req.getParameter(FROM_DATE_PARAM));
}
if (req.getParameter(TO_DATE_PARAM) != null) {
Date exclusiveDate = parseDate(req.getParameter(TO_DATE_PARAM));
toDate = exclusiveDate == null ? null : new Date(
exclusiveDate.getTime() + TimeUnit.DAYS.toMillis(1));
}
if (req.getParameter(LIMIT_PARAM) != null) {
try {
limit = Integer.parseInt(req.getParameter(LIMIT_PARAM));
} catch (Exception e) {
limit = null;
}
}
lastCollection = req.getParameter(LAST_COLLECTION_PARAM) != null
&& "true".equals(req.getParameter(LAST_COLLECTION_PARAM));
countryCode = req.getParameter(COUNTRY_PARAM);
}
private static Date parseDate(String s) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pp = new ParsePosition(0);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
return sdf.parse(s, pp);
} catch (Exception e) {
return null;
}
}
}