/* * 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 com.gallatinsystems.survey.domain; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import javax.jdo.annotations.NotPersistent; import javax.jdo.annotations.PersistenceCapable; import org.akvo.flow.domain.RootFolder; import org.akvo.flow.domain.SecuredObject; import com.gallatinsystems.common.Constants; import com.gallatinsystems.framework.domain.BaseDomain; import com.gallatinsystems.survey.dao.SurveyGroupDAO; import com.gallatinsystems.survey.dao.SurveyUtils; /** * a grouping of surveys. */ @PersistenceCapable public class SurveyGroup extends BaseDomain implements SecuredObject { private static final long serialVersionUID = 8941584684617286776L; private String name = null; private String code = null; private Boolean monitoringGroup = false; private Long newLocaleSurveyId; private Long parentId; private String description = null; private String path = null; private ProjectType projectType; private String defaultLanguageCode; private PrivacyLevel privacyLevel; private Boolean published; private Boolean requireDataApproval = false; private Long dataApprovalGroupId; @NotPersistent private HashMap<String, Translation> altTextMap; @NotPersistent private List<Survey> surveyList = null; @NotPersistent private List<SurveyGroup> childFolders; @NotPersistent private List<Survey> childForms; public enum ProjectType { PROJECT_FOLDER, PROJECT } public enum PrivacyLevel { PRIVATE, PUBLIC } public HashMap<String, Translation> getAltTextMap() { return altTextMap; } public void setAltTextMap(HashMap<String, Translation> altTextMap) { this.altTextMap = altTextMap; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public void setSurveyList(List<Survey> surveyList) { this.surveyList = surveyList; } public List<Survey> getSurveyList() { return surveyList; } public void addSurvey(Survey survey) { if (surveyList == null) surveyList = new ArrayList<Survey>(); surveyList.add(survey); } public void setDescription(String description) { this.description = description; } public String getDescription() { return description; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public Boolean getMonitoringGroup() { return monitoringGroup; } public void setMonitoringGroup(Boolean monitoringGroup) { this.monitoringGroup = monitoringGroup; } public Long getNewLocaleSurveyId() { return newLocaleSurveyId; } public void setNewLocaleSurveyId(Long newLocaleSurveyId) { this.newLocaleSurveyId = newLocaleSurveyId; } public Long getParentId() { return parentId; } public void setParentId(Long parent) { this.parentId = parent; } public ProjectType getProjectType() { return projectType; } public void setProjectType(ProjectType projectType) { this.projectType = projectType; } public String getDefaultLanguageCode() { return defaultLanguageCode; } public void setDefaultLanguageCode(String defaultLanuageCode) { this.defaultLanguageCode = defaultLanuageCode; } public PrivacyLevel getPrivacyLevel() { return privacyLevel; } public void setPrivacyLevel(PrivacyLevel privacyLevel) { this.privacyLevel = privacyLevel; } public Boolean getPublished() { return published; } public void setPublished(Boolean published) { this.published = published; } public Boolean getRequireDataApproval() { return requireDataApproval; } public void setRequireDataApproval(Boolean requireDataApproval) { this.requireDataApproval = requireDataApproval; } public Long getDataApprovalGroupId() { return dataApprovalGroupId; } public void setDataApprovalGroupId(Long dataApprovalGroupId) { this.dataApprovalGroupId = dataApprovalGroupId; } @Override public SecuredObject getParentObject() { if (parentId == null) { return null; } else if (Constants.ROOT_FOLDER_ID.equals(parentId)) { return new RootFolder(); } return new SurveyGroupDAO().getByKey(parentId); } @Override public Long getObjectId() { if (key == null) { return null; } return key.getId(); } @Override public List<Long> listAncestorIds() { return ancestorIds; } @Override public List<BaseDomain> updateAncestorIds(boolean cascade) { if (ancestorIds == null || key == null) { return Collections.emptyList(); } List<BaseDomain> updatedEntities = new ArrayList<BaseDomain>(); List<Long> childAncestorIds = new ArrayList<Long>(ancestorIds); childAncestorIds.add(key.getId()); if (childFolders != null) { for (SurveyGroup sg : childFolders) { sg.setAncestorIds(childAncestorIds); if (cascade) { SurveyUtils.setChildObjects(sg); updatedEntities.addAll(sg.updateAncestorIds(cascade)); } } updatedEntities.addAll(childFolders); } if (childForms != null) { for (Survey s : childForms) { s.setAncestorIds(childAncestorIds); } updatedEntities.addAll(childForms); } return updatedEntities; } public List<SurveyGroup> getChildFolders() { return childFolders; } public void setChildFolders(List<SurveyGroup> childFolders) { this.childFolders = childFolders; } public List<Survey> getChildForms() { return childForms; } public void setChildForms(List<Survey> childForms) { this.childForms = childForms; } }