/******************************************************************************* * Copyright (c) 2015 antoniomariasanchez at gmail.com. All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 which accompanies this distribution, and is * available at http://www.gnu.org/licenses/gpl.html * * Contributors: antoniomaria - initial API and implementation ******************************************************************************/ package net.sf.gazpachoquest.dbpopulator; import java.time.LocalDateTime; import java.util.HashSet; import java.util.Set; import net.sf.gazpachoquest.dbpopulator.samples.DemoSurveyCreator; import net.sf.gazpachoquest.dbpopulator.samples.FastFoodSurveyCreator; import net.sf.gazpachoquest.dbpopulator.samples.JavaPerformanceSurveyCreator; import net.sf.gazpachoquest.dbpopulator.samples.SampleQuizCreator; import net.sf.gazpachoquest.dto.GroupDTO; import net.sf.gazpachoquest.dto.LabelDTO; import net.sf.gazpachoquest.dto.LabelSetDTO; import net.sf.gazpachoquest.dto.MailMessageTemplateDTO; import net.sf.gazpachoquest.dto.QuestionnaireDefinitionDTO; import net.sf.gazpachoquest.dto.ResearchDTO; import net.sf.gazpachoquest.dto.SectionDTO; import net.sf.gazpachoquest.dto.UserDTO; import net.sf.gazpachoquest.dto.embeddables.MailMessageTemplateLanguageSettingsDTO; import net.sf.gazpachoquest.dto.support.TranslationDTO; import net.sf.gazpachoquest.facades.GroupFacade; import net.sf.gazpachoquest.facades.MailMessageFacade; import net.sf.gazpachoquest.facades.QuestionnaireDefinitionEditorFacade; import net.sf.gazpachoquest.facades.ResearchFacade; import net.sf.gazpachoquest.facades.UserFacade; import net.sf.gazpachoquest.types.EntityStatus; import net.sf.gazpachoquest.types.Gender; import net.sf.gazpachoquest.types.Language; import net.sf.gazpachoquest.types.MailMessageTemplateType; import net.sf.gazpachoquest.types.RandomizationStrategy; import net.sf.gazpachoquest.types.RenderingMode; import net.sf.gazpachoquest.types.ResearchAccessType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class DBPopulator { @Autowired private MailMessageFacade mailMessageFacade; @Autowired private UserFacade userFacade; @Autowired private GroupFacade groupFacade; @Autowired private QuestionnaireDefinitionEditorFacade questionnaireDefinitionEditorFacade; @Autowired private ResearchFacade researchFacade; @Autowired private FastFoodSurveyCreator fastFoodSurveyCreator; @Autowired private SampleQuizCreator sampleQuizCreator; @Autowired private DemoSurveyCreator demoSurveyCreator; @Autowired private JavaPerformanceSurveyCreator javaPerformanceSurveyCreator; // http://www.objectpartners.com/2012/05/17/creating-a-hierarchical-test-data-builder-using-generics/ public void populate() { // System account userFacade.save(UserDTO.with().givenNames("support").surname("support").email("support@gazpacho.net") .username("support").build()); GroupDTO groupDTO = GroupDTO.with().name("Respondents").description("Respondent group").build(); groupDTO = groupFacade.save(groupDTO); Set<UserDTO> respondents = addRespondents(); // populateForJUnitTest(respondents); // populateForDemo(respondents); populateForFullDemo(respondents); // populateJavaPerformanceSurvey(respondents); } public void populateJavaPerformanceSurvey(Set<UserDTO> respondents) { QuestionnaireDefinitionDTO questionnaireDefinition = javaPerformanceSurveyCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); ResearchDTO research = ResearchDTO .with() .type(ResearchAccessType.BY_INVITATION) .name("Tracked survey: " + questionnaireDefinition.getLanguageSettings().getTitle() + " started").startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); Integer researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO .with() .type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous Survey: " + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); } public void populateForJUnitTest(Set<UserDTO> respondents) { QuestionnaireDefinitionDTO questionnaireDefinition = demoSurveyCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); ResearchDTO research = ResearchDTO .with() .type(ResearchAccessType.BY_INVITATION) .name("New private Questionnaire " + questionnaireDefinition.getLanguageSettings().getTitle() + " started").startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); Integer researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO .with() .type(ResearchAccessType.OPEN_ACCESS) .name("New open Questionnaire " + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); } public void populateForFullDemo(Set<UserDTO> respondents) { // No Randomization enabled QuestionnaireDefinitionDTO questionnaireDefinition = sampleQuizCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); ResearchDTO research = ResearchDTO.with().type(ResearchAccessType.BY_INVITATION) .name("New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); Integer researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO.with().type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); questionnaireDefinition = sampleQuizCreator.create(); questionnaireDefinition.setRenderingMode(RenderingMode.ALL_IN_ONE); questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); research = ResearchDTO.with().type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); // Question Randomization Enabled questionnaireDefinition = sampleQuizCreator.create(); questionnaireDefinition.setQuestionsPerPage(1); questionnaireDefinition.setRandomizationStrategy(RandomizationStrategy.QUESTIONS_RANDOMIZATION); questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); research = ResearchDTO.with().type(ResearchAccessType.BY_INVITATION) .name("New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO.with().type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); // Groups Randomization Enabled questionnaireDefinition = sampleQuizCreator.create(); questionnaireDefinition.setRandomizationStrategy(RandomizationStrategy.SECTIONS_RANDOMIZATION); questionnaireDefinition = questionnaireDefinitionEditorFacade.save(questionnaireDefinition); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); research = ResearchDTO.with().type(ResearchAccessType.BY_INVITATION) .name("New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO.with().type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); researchFacade.save(research); // First Group Randomization Enabled questionnaireDefinition = sampleQuizCreator.create(); SectionDTO firstSection = questionnaireDefinition.getSections().get(0); firstSection.setRandomizationEnabled(true); questionnaireDefinitionEditorFacade.save(firstSection); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); research = ResearchDTO.with().type(ResearchAccessType.BY_INVITATION) .name("New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO.with().type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); researchFacade.save(research); questionnaireDefinition = fastFoodSurveyCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); research = ResearchDTO .with() .type(ResearchAccessType.OPEN_ACCESS) .name("New customer satisfation survey " + questionnaireDefinition.getLanguageSettings().getTitle() + " started").startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); researchFacade.save(research); questionnaireDefinition = javaPerformanceSurveyCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); research = ResearchDTO .with() .type(ResearchAccessType.OPEN_ACCESS) .name("Java Performance Survey " + questionnaireDefinition.getLanguageSettings().getTitle() + " started").startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); researchFacade.save(research); } public void populateForDemo(Set<UserDTO> respondents) { QuestionnaireDefinitionDTO questionnaireDefinition = sampleQuizCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); Set<QuestionnaireDefinitionDTO> questionnairDefinitions = new HashSet<>(); questionnairDefinitions.add(questionnaireDefinition); ResearchDTO research = ResearchDTO.with().type(ResearchAccessType.BY_INVITATION) .name("New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); Integer researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); research = ResearchDTO.with().type(ResearchAccessType.OPEN_ACCESS) .name("Anonymous New Quiz" + questionnaireDefinition.getLanguageSettings().getTitle() + " started") .startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); research = researchFacade.save(research); researchId = research.getId(); for (UserDTO respondent : respondents) { researchFacade.addRespondent(researchId, respondent); } researchFacade.changeStatus(researchId, EntityStatus.CONFIRMED); questionnaireDefinition = fastFoodSurveyCreator.create(); asignDefaultMailTemplate(questionnaireDefinition); questionnaireDefinitionEditorFacade.confirm(questionnaireDefinition); questionnairDefinitions = new HashSet<>(); questionnairDefinitions.add(questionnaireDefinition); research = ResearchDTO .with() .type(ResearchAccessType.OPEN_ACCESS) .name("New customer satisfation survey " + questionnaireDefinition.getLanguageSettings().getTitle() + " started").startDate(LocalDateTime.now()).expirationDate(LocalDateTime.of(2015,12,31,12,0,0)).build(); research.setQuestionnaireDefinition(questionnaireDefinition); researchFacade.save(research); } public MailMessageTemplateDTO asignDefaultMailTemplate(final QuestionnaireDefinitionDTO questionnair) { MailMessageTemplateDTO mailMessageTemplate = MailMessageTemplateDTO .with() .language(Language.EN) .questionnairDefinition(questionnair) .type(MailMessageTemplateType.INVITATION) .fromAddress("support@gazpacho.net") .replyTo("support@gazpacho.net") .mailMessageTemplateLanguageSettingsStart() .subject("Invitation to participate in a questionnaire") .body("Dear Mr. $lastname, <br> You have been invited to take this questionnaire. <br>" + "The questionnaire will take about 15 minutes to complete and if you get interrupted, you can return later and continue where you left off." + "<a href=\"$link\">Click here</a> to take the questionnaireDefinition") .mailMessageTemplateLanguageSettingsEnd().build(); mailMessageTemplate = mailMessageFacade.save(mailMessageTemplate); MailMessageTemplateLanguageSettingsDTO languageSettings = MailMessageTemplateLanguageSettingsDTO .with() .subject("Invitación para participar en un cuestionario") .body("Estimado Sr. $lastname, <br> Has sido invitado para participar en esta cuestionario <br>" + "Nos dedicas 15 minutos para completarlo?, puedes interrumpirlo y completarlo más tarde si es necesario" + "<a href=\"$link\">Click aqui</a> para empezar").build(); TranslationDTO<MailMessageTemplateDTO, MailMessageTemplateLanguageSettingsDTO> mailMessageTemplateTranslation = new TranslationDTO<>(); mailMessageTemplateTranslation.setLanguage(Language.ES); mailMessageTemplateTranslation.setLanguageSettings(languageSettings); mailMessageTemplateTranslation.setTranslatedEntity(mailMessageTemplate); mailMessageFacade.saveTranslation(mailMessageTemplateTranslation); return mailMessageTemplate; } public void populateLabelSet() { LabelSetDTO labelSet = LabelSetDTO.with().language(Language.EN).name("Feelings").build(); labelSet = questionnaireDefinitionEditorFacade.save(labelSet); LabelDTO label = LabelDTO.with().language(Language.EN).title("Agree strongly").build(); labelSet.addLabel(label); label = LabelDTO.with().language(Language.EN).title("Agree somewhat").build(); labelSet.addLabel(label); label = LabelDTO.with().language(Language.EN).title("Neither agree nor disagree").build(); labelSet.addLabel(label); label = LabelDTO.with().language(Language.EN).title("Disagree somewhat").build(); labelSet.addLabel(label); label = LabelDTO.with().language(Language.EN).title("Disagree strongly").build(); labelSet.addLabel(label); questionnaireDefinitionEditorFacade.save(labelSet); } protected Set<UserDTO> addRespondents() { UserDTO tyrion = UserDTO.with().givenNames("Tyrion").surname("Lannister") .email("tyrion.lannister@kingslanding.net").gender(Gender.MALE).build(); // tyrion.setAttribute("age", "25"); // tyrion.setAttribute("position", "Developer"); tyrion = userFacade.save(tyrion); UserDTO jon = UserDTO.with().preferredLanguage(Language.ES).givenNames("Jon").surname("Snow") .email("jon.snow@nightswatch.net").gender(Gender.MALE).build(); // jon.setAttribute("age", "25"); // jon.setAttribute("position", "Manager"); jon = userFacade.save(jon); UserDTO arya = UserDTO.with().preferredLanguage(Language.EN).givenNames("Arya").surname("Stark") .email("arya.stark@winterfell.net").gender(Gender.FEMALE).build(); // arya.setAttribute("age", "25"); // arya.setAttribute("position", "Manager"); arya = userFacade.save(arya); UserDTO catelyn = UserDTO.with().preferredLanguage(Language.FI).givenNames("Catelyn").surname("Stark") .email("catelyn.stark@winterfell.net").gender(Gender.FEMALE).build(); // catelyn.setAttribute("age", "21"); // catelyn.setAttribute("position", "Manager"); catelyn = userFacade.save(catelyn); Set<UserDTO> respondents = new HashSet<>(); respondents.add(tyrion); respondents.add(arya); respondents.add(catelyn); respondents.add(jon); return respondents; } }