/*
* Copyright (C) 2010-2012 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 com.gallatinsystems.survey.dao;
import java.util.List;
import java.util.TreeMap;
import javax.jdo.PersistenceManager;
import com.gallatinsystems.framework.dao.BaseDAO;
import com.gallatinsystems.framework.exceptions.IllegalDeletionException;
import com.gallatinsystems.framework.servlet.PersistenceFilter;
import com.gallatinsystems.survey.domain.QuestionGroup;
/**
* Dao for question groups
*/
public class QuestionGroupDao extends BaseDAO<QuestionGroup> {
public QuestionGroupDao() {
super(QuestionGroup.class);
}
/**
* saves a question group and associates it with the survey specified
*
* @param item
* @param surveyId
* @return
*/
public QuestionGroup save(QuestionGroup item, Long surveyId) {
if (item.getSurveyId() == null || item.getSurveyId() == 0) {
item.setSurveyId(surveyId);
}
item = save(item);
return item;
}
/**
* Deletes all question groups associated with a survey
*
* @param surveyId
* @throws IllegalDeletionException
*/
public void deleteGroupsForSurvey(Long surveyId) throws IllegalDeletionException {
for (QuestionGroup group : listQuestionGroupBySurvey(surveyId)) {
delete(group);
}
}
public List<QuestionGroup> listQuestionGroupsByName(String code) {
return listByProperty("name", code, "String");
}
/**
* lists all question groups within a survey
*
* @param surveyId
* @return
*/
public TreeMap<Integer, QuestionGroup> listQuestionGroupsBySurvey(
Long surveyId) {
List<QuestionGroup> groups = listByProperty("surveyId", surveyId,
"Long");
TreeMap<Integer, QuestionGroup> map = new TreeMap<Integer, QuestionGroup>();
if (groups != null) {
int i = 1;
for (QuestionGroup group : groups) {
// TODO: Hack because we seem to have quesitongroups with same
// order key so put an arbitrary value there for now since it
// isn't used.
if (map.containsKey(group.getOrder())) {
map.put(i, group);
group.setOrder(i);
} else {
map.put(group.getOrder() != null ? group.getOrder() : i,
group);
}
i++;
}
}
return map;
}
/**
* lists all question groups by survey, ordered by the order field
*
* @param surveyId
* @return
*/
public List<QuestionGroup> listQuestionGroupBySurvey(Long surveyId) {
return super.listByProperty("surveyId", surveyId, "Long", "order",
"asc");
}
/**
* gets a group by its code and survey id
*
* @param code
* @param surveyId
* @return
*/
@SuppressWarnings("unchecked")
public QuestionGroup getByParentIdandCode(String code, Long surveyId) {
PersistenceManager pm = PersistenceFilter.getManager();
javax.jdo.Query query = pm.newQuery(QuestionGroup.class);
query.setFilter(" code==codeParam && surveyId == surveyIdParam");
query.declareParameters("String codeParam, Long surveyIdParam");
List<QuestionGroup> results = (List<QuestionGroup>) query.execute(code,
surveyId);
if (results != null && results.size() > 0) {
return results.get(0);
} else {
return null;
}
}
/**
* finds a group by code and path. Path is "surveyGroupName/surveyName"
*
* @param code
* @param path
* @return
*/
@SuppressWarnings("unchecked")
public QuestionGroup getByPath(String code, String path) {
PersistenceManager pm = PersistenceFilter.getManager();
javax.jdo.Query query = pm.newQuery(QuestionGroup.class);
query.setFilter(" path == pathParam && code == codeParam");
query.declareParameters("String pathParam, String codeParam");
List<QuestionGroup> results = (List<QuestionGroup>) query.execute(path,
code);
if (results != null && results.size() > 0) {
return results.get(0);
} else {
return null;
}
}
/**
* Deletes a questionGroup
*
* @param group
* @throws IllegalDeletionException
*/
public void delete(QuestionGroup group) throws IllegalDeletionException {
QuestionDao qDao = new QuestionDao();
qDao.deleteQuestionsForGroup(group.getKey().getId());
super.delete(group);
}
}