Package com.agiletec.plugins.jpsurvey.apsadmin.survey

Source Code of com.agiletec.plugins.jpsurvey.apsadmin.survey.ChoiceAction

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpsurvey.apsadmin.survey;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.services.lang.Lang;
import com.agiletec.aps.util.ApsProperties;
import com.agiletec.apsadmin.system.ApsAdminSystemConstants;
import com.agiletec.plugins.jpsurvey.aps.system.services.collect.IResponseManager;
import com.agiletec.plugins.jpsurvey.aps.system.services.collect.model.SingleQuestionResponse;
import com.agiletec.plugins.jpsurvey.aps.system.services.survey.model.Choice;
import com.agiletec.plugins.jpsurvey.aps.system.services.survey.model.Question;

public class ChoiceAction extends AbstractSurveyAction implements IChoiceAction {
 
  @Override
  public void validate() {
    super.validate();
    this.checkExistingIds();
    this.fetchLocalizedFields();
  }
 
  /**
   * Check for the correct imports from chained actions
   */
  private void checkExistingIds() {
    if (null == this.getStrutsAction()) this.addActionError(this.getText("message.surveyAction.sysError", new String[]{"strutsAction"}));
    else {
      if (null == this.getQuestionId() && this.getStrutsAction()==ApsAdminSystemConstants.EDIT) {
        this.addActionError(this.getText("message.surveyAction.sysError", new String[]{"questionId"}));
      }
      if (null == this.getChoiceId() && this.getStrutsAction()==ApsAdminSystemConstants.EDIT) {
        this.addActionError(this.getText("message.surveyAction.sysError", new String[]{"choiceId"}));
      }
    }
  }

  /**
   * Inspect the request so find all references of strings in the form of 'titles-xy' and 'descriptions-xy' where 'xy' is the
   * language code
   */
  private void fetchLocalizedFields() {
    Iterator<Lang> itr = this.getLangManager().getLangs().iterator();
    while (itr.hasNext()) {
      Lang currentLang = itr.next();
      Lang defaultLanguage = this.getLangManager().getDefaultLang();
      String currentLangCode = currentLang.getCode();
      String choiceKey = "choice-" + currentLangCode;
      String choice = this.getRequest().getParameter(choiceKey);
      if (null != choice && choice.trim().length() > 0) {
        this.getChoices().put(currentLangCode, choice.trim());
      } else {
        if (currentLang.getCode().equals(defaultLanguage.getCode())) {
          this.addActionError(this.getText("message.jpsurvey.defaultLangRequired", new String[]{defaultLanguage.getDescr(),this.getText("choice")}));
        }
      }
    }
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#listChoice()
   */
  public String editSingleChoice() {
    Choice choice = null;
    try {
      if (null == this.getChoiceId()) {
        this.addActionError(this.getText("message.surveyAction.cannotProceed"));
        return INPUT;
      }
      choice = this.getSurveyManager().loadChoice(this.getChoiceId());
      this.setChoice(choice);
      if (null != choice) {
        this.setChoices(choice.getChoices());
      } else {
        this.addActionError(this.getText("message.surveyAction.cannotProceed"));
        return INPUT;
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "editSingleChoice");
      return FAILURE;
    }
    return SUCCESS;
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#saveChoice()
   */
  public String saveChoice() {
    Choice choice = null;
    try {
      if (this.getStrutsAction() == ApsAdminSystemConstants.EDIT) {
        choice = this.getSurveyManager().loadChoice(this.getChoiceId());
      }
      if (this.getStrutsAction() == ApsAdminSystemConstants.ADD) {
        choice = new Choice();
        choice.setQuestionId(this.getQuestionId());
        choice.setFreeText(false);
      }
      choice.setChoices(_choices);
      if (this.getStrutsAction() == ApsAdminSystemConstants.EDIT) {
        this.getSurveyManager().updateChoice(choice);
      }
      if (this.getStrutsAction() == ApsAdminSystemConstants.ADD) {
        this.getSurveyManager().saveChoiceInSortedPosition(choice);
        this.setChoiceId(choice.getId());
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "saveChoice");
      return FAILURE;
    }
    return SUCCESS;
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#addNewFreeText()
   */
  public String addNewFreeText() {
    Choice choice = null;
    // fake XML common for every free text option record
    String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><properties><property key=\"ERROR\">YOU SHOULD _NOT_ SEE THIS</property></properties>";   
    ApsProperties prop = new ApsProperties();
    this.setStrutsAction(ApsAdminSystemConstants.ADD);
    try {
      if (null == this.getQuestionId() || null == this.getStrutsAction()) {
        this.addActionError(this.getText("message.surveyAction.cannotProceed"));
        return INPUT;
      }
      prop.loadFromXml(xml);
      if (this.getStrutsAction() == ApsAdminSystemConstants.EDIT) {
        this.addActionError(this.getText("message.choiceAction.unexpextedAction", new String[]{this.getText("_choice"), this.getText("freeText")}));
        return INPUT;
      }
      choice = new Choice();
      choice.setChoices(prop);
      choice.setQuestionId(this.getQuestionId());
      choice.setFreeText(true);
      this.getSurveyManager().saveChoiceInSortedPosition(choice);
      this.setChoiceId(choice.getId());
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "addNewFreeText");
      return FAILURE;
    }
    return SUCCESS;
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#addNewChoice()
   */
  public String addNewChoice() {
    Question question = null;
    Choice fakeChoice = new Choice(); // this is a dummy used only to contain extra infos!
    try {
      question = this.getSurveyManager().loadQuestion(this.getQuestionId());
      if (null != question) {
        fakeChoice.setExtraInfo(question.getSurveyId(), question.isQuestionnaire(), question.getSurveyTitles(), question.getQuestions());
      }
      fakeChoice.setId(-1);
      fakeChoice.setQuestionId(this.getQuestionId());
      this.setChoice(fakeChoice);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "addNewChoice");
      return FAILURE;
    }
    return SUCCESS;
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#deleteChoice()
   */
  public String deleteChoice() {
    try {
      if (null == this.getChoiceId()) {
        this.addActionError(this.getText("message.surveyAction.cannotProceed"));
        return INPUT;
      }
      this.getResponseManager().deleteResponseByChoiceId(_choiceId);
      this.getSurveyManager().deleteChoice(_choiceId);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "deleteChoice");
      return FAILURE;
    }
    return SUCCESS;
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#moveChoiceUp()
   */
  public String moveChoiceUp() {
    return moveChoice(true);
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.apsadmin.survey.IChoiceAction#moveChoiceDown()
   */
  public String moveChoiceDown() {
    return moveChoice(false);
  }
 
  private String moveChoice(boolean up) {
    try {
      if (null == this.getChoiceId()) {
        this.addActionError(this.getText("message.surveyAction.cannotProceed"));
        return INPUT;
      }
      this.getSurveyManager().swapChoicePosition(this.getChoiceId(), up);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "moveChoice");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  public String getDefaultLangCode() {
    return this.getLangManager().getDefaultLang().getCode();
 

  public String trashChoice() throws Throwable {
    Choice choice = null;
    try {
      if (null != this.getChoiceId()) {
        choice = this.getSurveyManager().loadChoice(this.getChoiceId());
        if (null != choice) {
          if (choice.isFreeText()) {
            choice.getChoices().clear();
          }
        }
      } else {
        this.addActionError(this.getText("message.surveyAction.sysError", new String[]{"choiceId"}));
        return INPUT;
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "trashChoice");
      return FAILURE;
    }
    this.setChoice(choice);
    return SUCCESS;
  }
 
  /**
   * This look for free text answer trying to aggregate them whenever is possible.
   */
  public String freeTextList() {
    List<String> list = new ArrayList<String>();
    Map<String, Integer> aggregateResult = new HashMap<String, Integer>();
    List<SingleQuestionResponse> responses = null;
    Iterator<SingleQuestionResponse> itr = null;
    try {
      if (null == this.getQuestionId() || null == this.getChoiceId()) {
        this.addActionError(this.getText("message.surveyAction.sysError", new String[]{"questionId"}));
        return INPUT;
      }

      // collect all the answers
      responses = getResponseManager().aggregateResponseByIds(null, null, this.getChoiceId(), null);
      if (null != responses) {
        itr = responses.iterator();
        while (itr.hasNext()) {
          SingleQuestionResponse current = itr.next();
          list.add(current.getFreeText());
        }
        // aggregate them
        for (int scan = 0; scan < list.size(); scan++) {
          String currentFreeTextKey = list.get(scan).toLowerCase().trim();
          int currentFreeTextValue = 1;
          if (aggregateResult.containsKey(currentFreeTextKey)) {
            currentFreeTextValue = aggregateResult.get(currentFreeTextKey) + 1;
          }
          // add new voice in the map
          aggregateResult.put(currentFreeTextKey, currentFreeTextValue);
        }
      }
      this.setFreeTextMap(aggregateResult);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "getFreeTextOptions");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  public void setChoiceId(Integer choiceId) {
    this._choiceId = choiceId;
  }
  public Integer getChoiceId() {
    return _choiceId;
  }
 
  public void setQuestionId(Integer questionId) {
    this._questionId = questionId;
  }
  public Integer getQuestionId() {
    return _questionId;
  }
 
  public void setChoices(ApsProperties choices) {
    this._choices = choices;
  }
  public ApsProperties getChoices() {
    return _choices;
  }
 
  public void setStrutsAction(Integer strutsAction) {
    this._strutsAction = strutsAction;
  }
  public Integer getStrutsAction() {
    return _strutsAction;
  }
 
  public void setResponseManager(IResponseManager responseManager) {
    this._responseManager = responseManager;
  }
  public IResponseManager getResponseManager() {
    return _responseManager;
  }
 
  public void setFreeTextMap(Map<String, Integer> freeTextMap) {
    this._freeTextMap = freeTextMap;
  }
  public Map<String, Integer> getFreeTextMap() {
    return _freeTextMap;
  }
 
  public void setChoice(Choice choice) {
    this._choice = choice;
  }
  public Choice getChoice() {
    return _choice;
  }

  // management variables
  private Integer _strutsAction;
  private Choice _choice;

  // field variables
  private Integer _choiceId;
  private Integer _questionId;
  private ApsProperties _choices = new ApsProperties();
  private Map<String, Integer> _freeTextMap;

  // Managers
  private IResponseManager _responseManager;
}
TOP

Related Classes of com.agiletec.plugins.jpsurvey.apsadmin.survey.ChoiceAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.