/* * 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.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import com.gallatinsystems.framework.rest.RestError; import com.gallatinsystems.framework.rest.RestRequest; /** * Handles requests to the DataProcessing Rest Service * * @author Christopher Fagiani */ public class DataProcessorRequest extends RestRequest { private static final long serialVersionUID = -4553663867954174523L; public static final String PROJECT_FLAG_UPDATE_ACTION = "projectFlagUpdate"; public static final String REBUILD_QUESTION_SUMMARY_ACTION = "rebuildQuestionSummary"; public static final String IMPORT_REMOTE_SURVEY_ACTION = "importRemoteSurvey"; public static final String COPY_SURVEY = "copySurvey"; public static final String COPY_QUESTION_GROUP = "copyQuestionGroup"; public static final String FIX_OPTIONS2VALUES_ACTION = "fixOptions2Values"; public static final String FIX_DUPLICATE_OTHER_TEXT_ACTION = "fixDuplicateOtherText"; public static final String FIX_QUESTIONGROUP_DEPENDENCIES_ACTION = "fixQuestionGroupDepencencies"; public static final String ASSEMBLE_DATAPOINT_NAME = "assembleDatapointName"; public static final String DELETE_DUPLICATE_QAS = "deleteDuplicatedQAS"; public static final String RECOMPUTE_LOCALE_CLUSTERS = "recomputeLocaleClusters"; public static final String SURVEY_INSTANCE_SUMMARIZER = "surveyInstanceSummarizer"; public static final String SURVEY_RESPONSE_COUNT = "surveyResponseCount"; public static final String TRIM_OPTIONS = "trimOptions"; public static final String RESCORE_AP_ACTION = "rescoreAp"; public static final String SOURCE_PARAM = "source"; public static final String COUNTRY_PARAM = "country"; public static final String SURVEY_GROUP_PARAM = "surveyGroupId"; public static final String SURVEY_ID_PARAM = "surveyId"; public static final String QUESTION_GROUP_ID_PARAM = "questionGroupId"; public static final String COUNTER_ID_PARAM = "summaryCounterId"; public static final String SURVEY_INSTANCE_PARAM = "surveyInstanceId"; public static final String LOCALE_ID_PARAM = "surveyedLocaleId"; public static final String QAS_ID_PARAM = "qasId"; public static final String DELTA_PARAM = "delta"; public static final String API_KEY_PARAM = "apiKey"; public static final String OFFSET_PARAM = "offset"; public static final String DEPENDENT_QUESTION_PARAM = "depedentQuestionId"; public static final String RETRY_PARAM = "retry"; public static final String CHANGE_LOCALE_TYPE_ACTION = "changeLocaleType"; public static final String ADD_SURVEY_INSTANCE_TO_LOCALES_ACTION = "addSurveyInstanceToLocales"; public static final String ADD_CREATION_SURVEY_ID_TO_LOCALE = "addCreationSurveyIdToLocale"; public static final String ADD_TRANSLATION_FIELDS = "addTranslationFields"; public static final String RECREATE_LOCALES = "recreateLocales"; public static final String POP_QUESTION_ORDER_FIELDS_ACTION = "populateQuestionOrders"; public static final String POPULATE_MONITORING_FIELDS_LOCALE_ACTION = "populateMonitoringFieldsLocale"; public static final String CREATE_NEW_IDENTIFIERS_LOCALES_ACTION = "createNewIdentifiersLocales"; public static final String DELETE_SURVEY_INSTANCE_ACTION = "deleteSurveyInstance"; public static final String DELETE_CASCADE_NODES = "deleteCascadeNodes"; public static final String CASCADE_RESOURCE_ID = "cascadeResourceId"; public static final String PARENT_NODE_ID = "parentNodeId"; public static final int MAX_TASK_RETRIES = 3; private String country; private String source; private Long surveyGroupId; private Long surveyId; private Long surveyInstanceId; private Long questionGroupId; private Long qasId; private Long surveyedLocaleId; private Integer delta; private String apiKey; private Long offset = 0L; private Long summaryCounterId; private Long cascadeResourceId = 0L; private Long parentNodeId = null; private List<Long> dependentQuestionIds; private int retry = 0; @Override protected void populateFields(HttpServletRequest req) throws Exception { country = req.getParameter(COUNTRY_PARAM); source = req.getParameter(SOURCE_PARAM); if (req.getParameter(SURVEY_ID_PARAM) != null) { try { surveyId = new Long(req.getParameter(SURVEY_ID_PARAM).trim()); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, SURVEY_ID_PARAM + " must be an integer")); } } if (req.getParameter(QUESTION_GROUP_ID_PARAM) != null) { try { questionGroupId = new Long(req.getParameter(QUESTION_GROUP_ID_PARAM).trim()); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, QUESTION_GROUP_ID_PARAM + " must be a number")); } } if (req.getParameter(SURVEY_INSTANCE_PARAM) != null) { try { setSurveyInstanceId(new Long(req.getParameter(SURVEY_INSTANCE_PARAM).trim())); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, SURVEY_INSTANCE_PARAM + " must be an integer")); } } if (req.getParameter(QAS_ID_PARAM) != null) { try { setQasId(new Long(req.getParameter(QAS_ID_PARAM).trim())); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, QAS_ID_PARAM + " must be an integer")); } } if (req.getParameter(DELTA_PARAM) != null) { try { setDelta(new Integer(req.getParameter(DELTA_PARAM).trim())); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, DELTA_PARAM + " must be an integer")); } } if (req.getParameter(API_KEY_PARAM) != null) { setApiKey(req.getParameter(API_KEY_PARAM).trim()); } if (req.getParameter(OFFSET_PARAM) != null) { setOffset(Long.valueOf(req.getParameter(OFFSET_PARAM).trim())); } if (req.getParameter(COUNTER_ID_PARAM) != null) { try { setSummaryCounterId(new Long(req.getParameter(COUNTER_ID_PARAM))); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, COUNTER_ID_PARAM + " must be a number")); } } if (req.getParameter(DEPENDENT_QUESTION_PARAM) != null) { String[] idStrings = req.getParameterValues(DEPENDENT_QUESTION_PARAM); dependentQuestionIds = new ArrayList<Long>(); try { for (int i = 0; i < idStrings.length; i++) { if (StringUtils.isNotBlank(idStrings[i])) { dependentQuestionIds.add(Long.parseLong(idStrings[i])); } } } catch (NumberFormatException e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, DEPENDENT_QUESTION_PARAM + " must be a number")); } } if (req.getParameter(RETRY_PARAM) != null) { try { retry = Integer.valueOf(req.getParameter(RETRY_PARAM)); } catch (NumberFormatException e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, RETRY_PARAM + " must be a number")); } } if (req.getParameter(CASCADE_RESOURCE_ID) != null) { try { setCascadeResourceId(Long.valueOf(req.getParameter(CASCADE_RESOURCE_ID))); } catch (NumberFormatException e) { // no-op } } if (req.getParameter(PARENT_NODE_ID) != null) { try { setParentNodeId(Long.valueOf(req.getParameter(PARENT_NODE_ID))); } catch (NumberFormatException e) { // no-op } } if (req.getParameter(LOCALE_ID_PARAM) != null) { try { setSurveyedLocaleId(Long.valueOf(req.getParameter(LOCALE_ID_PARAM))); } catch (NumberFormatException e) { // no-op } } if (req.getParameter(SURVEY_GROUP_PARAM) != null) { try { setSurveyGroupId(Long.valueOf(req.getParameter(SURVEY_GROUP_PARAM))); } catch (NumberFormatException e) { // no-op } } } @Override protected void populateErrors() { // no-op } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public void setSource(String source) { this.source = source; } public String getSource() { return source; } public void setSurveyId(Long surveyId) { this.surveyId = surveyId; } public Long getSurveyId() { return surveyId; } public Long getSurveyInstanceId() { return surveyInstanceId; } public void setSurveyInstanceId(Long surveyInstanceId) { this.surveyInstanceId = surveyInstanceId; } public Long getQuestionGroupId() { return questionGroupId; } public void setQuestionGroupId(Long questionGroupId) { this.questionGroupId = questionGroupId; } public Long getQasId() { return qasId; } public void setQasId(Long qasId) { this.qasId = qasId; } public Integer getDelta() { return delta; } public void setDelta(Integer delta) { this.delta = delta; } @Override public String getApiKey() { return apiKey; } @Override public void setApiKey(String apiKey) { this.apiKey = apiKey; } public Long getOffset() { return offset; } public void setOffset(Long offset) { this.offset = offset; } public Long getSummaryCounterId() { return summaryCounterId; } public void setSummaryCounterId(Long summaryCounterId) { this.summaryCounterId = summaryCounterId; } public Long getCascadeResourceId() { return cascadeResourceId; } public void setCascadeResourceId(Long cascadeResourceId) { this.cascadeResourceId = cascadeResourceId; } public Long getParentNodeId() { return parentNodeId; } public void setParentNodeId(Long parentNodeId) { this.parentNodeId = parentNodeId; } public List<Long> getDependentQuestionIds() { return dependentQuestionIds; } public void setDependentQuestionIds(List<Long> dependentQuestionIds) { this.dependentQuestionIds = dependentQuestionIds; } public int getRetry() { return retry; } public void setRetry(int retry) { this.retry = retry; } public Long getSurveyedLocaleId() { return surveyedLocaleId; } public void setSurveyedLocaleId(Long surveyedLocaleId) { this.surveyedLocaleId = surveyedLocaleId; } public Long getSurveyGroupId() { return surveyGroupId; } public void setSurveyGroupId(Long surveyGroupId) { this.surveyGroupId = surveyGroupId; } }