/* * 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.analytics; import java.util.List; import org.waterforpeople.mapping.analytics.dao.SurveyQuestionSummaryDao; import org.waterforpeople.mapping.dao.SurveyInstanceDAO; import org.waterforpeople.mapping.domain.QuestionAnswerStore; import com.gallatinsystems.framework.analytics.summarization.DataSummarizer; import com.gallatinsystems.survey.dao.QuestionDao; import com.gallatinsystems.survey.domain.Question; /** * This class will summarize survey information by updating counts by response type by survey. The * key should be a key of a survey instance object * * @author Christopher Fagiani */ public class SurveyQuestionSummarizer implements DataSummarizer { @Override public boolean performSummarization(String key, String type, String value, Integer offset, String cursor) { if (key != null) { SurveyInstanceDAO instanceDao = new SurveyInstanceDAO(); List<QuestionAnswerStore> answers = instanceDao .listQuestionAnswerStoreByType(new Long(key), "VALUE"); if (answers != null && answers.size() > 0) { QuestionDao questionDao = new QuestionDao(); List<Question> qList = questionDao.listQuestionsInOrder( answers.get(0).getSurveyId(), Question.Type.OPTION); int i = 0; if (offset != null) { i = offset; } else { offset = 0; } // process BATCH_SIZE items while (i < answers.size() && i < offset + BATCH_SIZE) { if (isSummarizable(answers.get(i), qList)) { SurveyQuestionSummaryDao.incrementCount(answers.get(i), 1); } i++; } // if we still have more answers to process, return false if (i < answers.size()) { return false; } } } return true; } /** * returns true if the question type for the answer object is an OPTION type * * @param answer * @param questions * @return */ private boolean isSummarizable(QuestionAnswerStore answer, List<Question> questions) { if (questions != null && answer != null) { long id = Long.parseLong(answer.getQuestionID()); for (Question q : questions) { if (q.getKey().getId() == id) { return true; } } return false; } else { return false; } } @Override public String getCursor() { return null; } }