content: /*
   *  Copyright (C) 2010-2017 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.RestRequest;
  
  public class SurveyRestRequest extends RestRequest {
  
      private static final long serialVersionUID = 6876384283589440175L;
  
      public static final String SAVE_SURVEY_GROUP_ACTION = "saveSurveyGroup";
      public static final String SAVE_SURVEY_ACTION = "saveSurvey";
      public static final String SAVE_QUESTION_GROUP_ACTION = "saveQuestionGroup";
      public static final String SAVE_QUESTION_ACTION = "saveQuestion";
      public static final String LIST_SURVEY_GROUPS_ACTION = "listSurveyGroups";
      public static final String GET_SURVEY_GROUP_ACTION = "getSurveyGroup";
      public static final String LIST_SURVEYS_ACTION = "listSurveys";
      public static final String GET_SURVEY_ACTION = "getSurvey";
      public static final String LIST_GROUP_ACTION = "listGroups";
      public static final String LIST_QUESTION_GROUP_ACTION = "listQuestionGroups";
      public static final String LIST_QUESTION_ACTION = "listQuestions";
      public static final String LIST_SURVEY_QUESTIONS_ACTION = "listSurveyQuestions";
      public static final String LIST_QUESTION_OPTIONS_ACTION = "listQuestionOptions";
      public static final String LIST_SURVEY_QUESTION_OPTIONS_ACTION = "listSurveyQuestionOptions";
      public static final String GET_SUMMARY_ACTION = "getSummary";
      public static final String GET_QUESTION_DETAILS_ACTION = "getQuestionDetails";
      /**
       * This one includes also the translations of the tip
       */
      public static final String GET_QUESTION_ALL_DETAILS_ACTION = "getQuestionAllDetails";
      public static final String GET_SURVEY_INSTANCE_ACTION = "getSurveyInstance";
      public static final String GET_GRAPH_ACTION = "getGraph";
      public static final String UPDATE_QUESTION_ORDER_ACTION = "updateQuestionOrder";
  
      public static final String SURVEY_GROUP_NAME_PARAM = "surveyGroupName";
      public static final String SURVEY_NAME_PARAM = "surveyName";
      public static final String QUESTION_GROUP_NAME_PARAM = "questionGroupName";
      public static final String QUESTION_TEXT_PARAM = "questionText";
      public static final String QUESTION_TYPE_PARAM = "questionType";
      public static final String OPTIONS_PARAM = "options";
      public static final String DEPEND_QUESTION_PARAM = "dependQuestion";
      public static final String ALLOW_OTHER_PARAM = "allowOther";
      public static final String ALLOW_MULTIPLE_PARAM = "allowMultiple";
      public static final String MANDATORY_PARAM = "mandatory";
      public static final String QUESTION_GROUP_ORDER_PARAM = "questionGroupOrder";
      public static final String QUESTION_ORDER_PARAM = "questionOrder";
      public static final String SURVEY_GROUP_ID_PARAM = "surveyGroupId";
      public static final String SURVEY_ID_PARAM = "surveyId";
      public static final String QUESTION_GROUP_ID_PARAM = "questionGroupId";
      public static final String QUESTION_ID_PARAM = "questionID";
      public static final String QUESTION_ID_PARAM_ALT = "questionId";
      public static final String SCORING_PARAM = "scoring";
      public static final String VALIDATION_MIN_PARAM = "minVal";
      public static final String VALIDATION_MAX_PARAM = "maxVal";
      public static final String VALIDATION_ALLOW_SIGN_PARAM = "allowSign";
      public static final String VALIDATION_ALLOW_DECIMAL_PARAM = "allowDecimal";
      public static final String VALIDATION_IS_NAME_PARAM = "isName";
      public static final String INSTANCE_PARAM = "instanceId";
      public static final String GRAPH_TYPE_PARAM = "graphType";
      public static final String METRIC_NAME_PARAM = "metricName";
      public static final String METRIC_GROUP_PARAM = "metricGroup";
  
      private String surveyGroupName;
      private String surveyName;
      private Long surveyGroupId;
      private String questionGroupName;
      private Long questionId;
      private String questionText;
      private String questionType;
      private String options;
      private String dependQuestion;
      private Boolean allowOtherFlag;
      private Boolean allowMultipleFlag;
      private Boolean mandatoryFlag;
      private Integer questionGroupOrder;
      private Long surveyId;
      private Long questionGroupId;
      private String scoring;
      private Long instanceId;
      private String graphType;
      private Integer questionOrder;
      private Boolean isName;
      private Boolean allowSign;
      private Boolean allowDecimal;
      private Double minVal;
      private Double maxVal;
  
      public Boolean getIsName() {
          return isName;
      }
  
      public void setIsName(Boolean isName) {
          this.isName = isName;
      }
  
      public Boolean getAllowSign() {
          return allowSign;
      }
  
      public void setAllowSign(Boolean allowSign) {
          this.allowSign = allowSign;
      }
  
      public Boolean getAllowDecimal() {
          return allowDecimal;
      }
  
      public void setAllowDecimal(Boolean allowDecimal) {
          this.allowDecimal = allowDecimal;
      }
  
      public Double getMinVal() {
          return minVal;
      }
  
      public void setMinVal(Double minVal) {
          this.minVal = minVal;
      }
  
      public Double getMaxVal() {
          return maxVal;
      }
  
      public void setMaxVal(Double maxVal) {
          this.maxVal = maxVal;
      }
  
      public String getGraphType() {
          return graphType;
      }
  
      public void setGraphType(String graphType) {
          this.graphType = graphType;
      }
  
      public Long getInstanceId() {
          return instanceId;
      }
  
      public void setInstanceId(Long instanceId) {
          this.instanceId = instanceId;
      }
  
      public String getScoring() {
          return scoring;
      }
  
      public void setScoring(String scoring) {
          this.scoring = scoring;
      }
  
      public Long getSurveyId() {
          return surveyId;
      }
  
      public void setSurveyId(Long surveyId) {
          this.surveyId = surveyId;
      }
  
      public Long getQuestionGroupId() {
          return questionGroupId;
      }
  
      public void setQuestionGroupId(Long questionGruopId) {
          this.questionGroupId = questionGruopId;
      }
  
      public String getSurveyGroupName() {
          return surveyGroupName;
      }
  
      public void setSurveyGroupName(String surveyGroupName) {
          this.surveyGroupName = surveyGroupName;
      }
  
      public String getSurveyName() {
          return surveyName;
      }
  
      public void setSurveyName(String surveyName) {
          this.surveyName = surveyName;
      }
  
      public String getQuestionGroupName() {
          return questionGroupName;
      }
  
      public void setQuestionGroupName(String questionGroupName) {
          this.questionGroupName = questionGroupName;
      }
  
      public Long getQuestionId() {
          return questionId;
      }
  
      public void setQuestionId(Long questionId) {
          this.questionId = questionId;
      }
  
      public String getQuestionText() {
          return questionText;
      }
  
      public void setQuestionText(String questionText) {
          this.questionText = questionText;
      }
  
      public String getQuestionType() {
          return questionType;
      }
  
      public void setQuestionType(String questionType) {
          this.questionType = questionType;
      }
  
      public String getOptions() {
          return options;
      }
  
      public void setOptions(String options) {
          this.options = options;
      }
  
      public String getDependQuestion() {
          return dependQuestion;
      }
  
      public void setDependQuestion(String dependQuestion) {
          this.dependQuestion = dependQuestion;
      }
  
      public Boolean getAllowOtherFlag() {
          return allowOtherFlag;
      }
  
      public void setAllowOtherFlag(Boolean allowOtherFlag) {
          this.allowOtherFlag = allowOtherFlag;
      }
  
      public Boolean getAllowMultipleFlag() {
          return allowMultipleFlag;
      }
  
      public void setAllowMultipleFlag(Boolean allowMultipleFlag) {
          this.allowMultipleFlag = allowMultipleFlag;
      }
  
      public Boolean getMandatoryFlag() {
          return mandatoryFlag;
      }
  
      public void setMandatoryFlag(Boolean mandatoryFlag) {
          this.mandatoryFlag = mandatoryFlag;
      }
  
      @Override
      protected void populateFields(HttpServletRequest req) throws Exception {
          if (req.getParameter(SURVEY_GROUP_ID_PARAM) != null) {
              setSurveyGroupId(Long.parseLong(req
                      .getParameter(SURVEY_GROUP_ID_PARAM)));
          }
          if (req.getParameter(SURVEY_GROUP_NAME_PARAM) != null) {
              surveyGroupName = req.getParameter(SURVEY_GROUP_NAME_PARAM).trim();
          }
          if (req.getParameter(SURVEY_NAME_PARAM) != null) {
              surveyName = req.getParameter(SURVEY_NAME_PARAM).trim();
          }
          if (req.getParameter(QUESTION_GROUP_NAME_PARAM) != null) {
              questionGroupName = req.getParameter(QUESTION_GROUP_NAME_PARAM)
                      .trim();
          }
          if (req.getParameter(QUESTION_ID_PARAM) != null) {
              questionId = Long.parseLong(req.getParameter(QUESTION_ID_PARAM)
                      .trim());
          }
          if (req.getParameter(QUESTION_ID_PARAM_ALT) != null) {
              questionId = Long.parseLong(req.getParameter(
                      QUESTION_ID_PARAM_ALT).trim());
          }
          if (req.getParameter(QUESTION_TEXT_PARAM) != null) {
              questionText = req.getParameter(QUESTION_TEXT_PARAM).trim();
          }
          if (req.getParameter(QUESTION_TYPE_PARAM) != null) {
              questionType = req.getParameter(QUESTION_TYPE_PARAM).trim();
          }
          if (req.getParameter(OPTIONS_PARAM) != null) {
              options = req.getParameter(OPTIONS_PARAM).trim();
          }
          if (req.getParameter(DEPEND_QUESTION_PARAM) != null) {
              dependQuestion = req.getParameter(DEPEND_QUESTION_PARAM).trim();
          }
          if (req.getParameter(ALLOW_MULTIPLE_PARAM) != null) {
              allowMultipleFlag = Boolean.parseBoolean(req.getParameter(
                      ALLOW_MULTIPLE_PARAM).trim());
          }
          if (req.getParameter(ALLOW_OTHER_PARAM) != null) {
              allowOtherFlag = Boolean.parseBoolean(req.getParameter(
                      ALLOW_OTHER_PARAM).trim());
          }
          mandatoryFlag = parseBooleanValue(req.getParameter(MANDATORY_PARAM),
                  false);
  
          if (req.getParameter(QUESTION_GROUP_ORDER_PARAM) != null) {
              questionGroupOrder = Integer.parseInt(req.getParameter(
                      QUESTION_GROUP_ORDER_PARAM).trim());
          }
          if (req.getParameter(QUESTION_ORDER_PARAM) != null) {
              setQuestionOrder(Integer.parseInt(req.getParameter(
                      QUESTION_ORDER_PARAM).trim()));
          }
          if (req.getParameter(SURVEY_ID_PARAM) != null) {
              surveyId = Long.parseLong(req.getParameter(SURVEY_ID_PARAM)
                      .trim());
          }
          if (req.getParameter(QUESTION_GROUP_ID_PARAM) != null) {
              questionGroupId = Long.parseLong(req.getParameter(
                      QUESTION_GROUP_ID_PARAM).trim());
          }
          if (req.getParameter(DEPEND_QUESTION_PARAM) != null) {
              dependQuestion = req.getParameter(DEPEND_QUESTION_PARAM).trim();
          }
          if (req.getParameter(SCORING_PARAM) != null) {
              scoring = req.getParameter(SCORING_PARAM).trim();
              if (scoring != null && scoring.length() == 0) {
                  scoring = null;
              }
          }
          if (req.getParameter(INSTANCE_PARAM) != null) {
              instanceId = Long
                      .parseLong(req.getParameter(INSTANCE_PARAM).trim());
          }
          if (req.getParameter(GRAPH_TYPE_PARAM) != null) {
              graphType = req.getParameter(GRAPH_TYPE_PARAM).trim();
          }
  
          allowDecimal = parseBooleanValue(
                  req.getParameter(VALIDATION_ALLOW_DECIMAL_PARAM), null);
          allowSign = parseBooleanValue(
                  req.getParameter(VALIDATION_ALLOW_SIGN_PARAM), null);
          isName = parseBooleanValue(req.getParameter(VALIDATION_IS_NAME_PARAM),
                  null);
          minVal = parseDoubleVal(req.getParameter(VALIDATION_MIN_PARAM));
          maxVal = parseDoubleVal(req.getParameter(VALIDATION_MAX_PARAM));
  
      }
  
      private Double parseDoubleVal(String val) {
          if (val != null && val.trim().length() > 0) {
              return new Double(val.trim());
          } else {
              return null;
          }
      }
  
      private Boolean parseBooleanValue(String val, Boolean defaultVal) {
          if (val != null && val.trim().length() > 0) {
              return new Boolean(val.trim());
          } else {
              return defaultVal;
          }
      }
  
      @Override
      public void populateErrors() {
          // no-op right now?
      }
  
      public void setQuestionGroupOrder(Integer questionGroupOrder) {
          this.questionGroupOrder = questionGroupOrder;
      }
  
      public Integer getQuestionGroupOrder() {
          return questionGroupOrder;
      }
  
      public void setSurveyGroupId(Long surveyGroupId) {
          this.surveyGroupId = surveyGroupId;
      }
  
      public Long getSurveyGroupId() {
          return surveyGroupId;
      }
  
      public void setQuestionOrder(Integer questionOrder) {
          this.questionOrder = questionOrder;
      }
  
      public Integer getQuestionOrder() {
          return questionOrder;
      }
  
  }
  