Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>4.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/de/imi/mopat/config/RedisCacheConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package de.imi.mopat.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJacksonJsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

@Configuration
public class RedisCacheConfig {

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(5))
.serializeKeysWith(
RedisSerializationContext.SerializationPair
.fromSerializer(new StringRedisSerializer())
)
.serializeValuesWith(
RedisSerializationContext.SerializationPair
.fromSerializer(GenericJacksonJsonRedisSerializer.builder().build())
)
.disableCachingNullValues();
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.build();
}
}
15 changes: 3 additions & 12 deletions src/main/java/de/imi/mopat/controller/BundleController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,10 @@
import de.imi.mopat.dao.AnswerDao;
import de.imi.mopat.dao.BundleDao;
import de.imi.mopat.dao.ConditionDao;
import de.imi.mopat.dao.ExportTemplateDao;
import de.imi.mopat.dao.QuestionnaireDao;
import de.imi.mopat.dao.ScoreDao;
import de.imi.mopat.dao.user.AclClassDao;
import de.imi.mopat.dao.user.AclObjectIdentityDao;
import de.imi.mopat.helper.controller.AuthService;
import de.imi.mopat.helper.controller.BundleService;
import de.imi.mopat.helper.controller.LocaleHelper;
import de.imi.mopat.helper.controller.UserService;
import de.imi.mopat.helper.controller.ClinicService;
import de.imi.mopat.helper.model.BundleDTOMapper;
import de.imi.mopat.helper.model.QuestionnaireDTOMapper;
import de.imi.mopat.helper.controller.*;
import de.imi.mopat.model.Answer;
import de.imi.mopat.model.Bundle;
import de.imi.mopat.model.BundleClinic;
Expand All @@ -26,7 +18,6 @@
import de.imi.mopat.model.conditions.SelectAnswerCondition;
import de.imi.mopat.model.conditions.SliderAnswerThresholdCondition;
import de.imi.mopat.model.dto.BundleDTO;
import de.imi.mopat.model.dto.BundleQuestionnaireDTO;
import de.imi.mopat.model.dto.QuestionnaireDTO;
import de.imi.mopat.validator.BundleDTOValidator;

Expand Down Expand Up @@ -62,7 +53,7 @@ public class BundleController {
@Autowired
private ScoreDao scoreDao;
@Autowired
private QuestionnaireDao questionnaireDao;
private QuestionnaireService questionnaireService;
@Autowired
private BundleDTOValidator bundleDTOValidator;
@Autowired
Expand Down Expand Up @@ -188,7 +179,7 @@ public String removeBundle(@RequestParam(value = "id", required = true) final Lo
for (BundleQuestionnaire bundleQuestionnaire : bundle.getBundleQuestionnaires()) {
Questionnaire questionnaire = bundleQuestionnaire.getQuestionnaire();
questionnaire.removeBundleQuestionnaire(bundleQuestionnaire);
questionnaireDao.merge(questionnaire);
questionnaireService.merge(questionnaire);
}

// Delete the corresponding conditions
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package de.imi.mopat.controller;

import ca.uhn.fhir.context.ConfigurationException;
import ca.uhn.fhir.parser.DataFormatException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Sets;
Expand All @@ -13,13 +11,12 @@
import de.imi.mopat.dao.ExportRuleFormatDao;
import de.imi.mopat.dao.ExportTemplateDao;
import de.imi.mopat.dao.QuestionDao;
import de.imi.mopat.dao.QuestionnaireDao;
import de.imi.mopat.dao.ScoreDao;
import de.imi.mopat.helper.controller.Constants;
import de.imi.mopat.helper.controller.FhirVersionHelper;
import de.imi.mopat.io.importer.ImportQuestionnaireError;
import de.imi.mopat.io.importer.ImportQuestionnaireValidation;
import de.imi.mopat.io.importer.fhir.FhirDstu3Helper;
import de.imi.mopat.helper.controller.QuestionnaireService;
import de.imi.mopat.helper.controller.StringUtilities;
import de.imi.mopat.io.ExportTemplateImporter;
import de.imi.mopat.io.importer.fhir.FhirImporter;
Expand Down Expand Up @@ -55,15 +52,8 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.*;

import jakarta.servlet.http.HttpServletRequest;
import javax.xml.parsers.ParserConfigurationException;

Expand Down Expand Up @@ -108,7 +98,7 @@ public class ExportMappingController {
@Autowired
private ExportTemplateDao exportTemplateDao;
@Autowired
private QuestionnaireDao questionnaireDao;
private QuestionnaireService questionnaireService;
@Autowired
private ScoreDao scoreDao;
@Autowired
Expand Down Expand Up @@ -143,9 +133,8 @@ public void initListBinder(final WebDataBinder binder) {
* object.
*/
public List<ExportTemplate> getAllMappings(final Long id) {
Questionnaire questionnaire = questionnaireDao.getElementById(id);
List<ExportTemplate> exportTemplates = new ArrayList<>(questionnaire.getExportTemplates());
return exportTemplates;
Optional<Questionnaire> questionnaire = questionnaireService.getQuestionnaireById(id);
return new ArrayList<>(questionnaire.get().getExportTemplates());
}

/**
Expand All @@ -170,14 +159,14 @@ public ArrayList<ExportTemplateType> getExportTemplateTypeList() {
@PreAuthorize("hasRole('ROLE_EDITOR')")
public String showMapping(@RequestParam(value = "id", required = true) final Long id,
final Model model) {
Questionnaire questionnaire = questionnaireDao.getElementById(id);
if (questionnaire == null) {
Optional<Questionnaire> questionnaire = questionnaireService.getQuestionnaireById(id);
if (questionnaire.isEmpty()) {
//clear the models attributes that are set in the @ModelAttribute
// methods
model.addAttribute("exportTemplateTypeList", null);
return "redirect:/questionnaire/list";
}
model.addAttribute("questionnaire", questionnaire);
model.addAttribute("questionnaire", questionnaire.get());
model.addAttribute("allMappings", this.getAllMappings(id));
return "mapping/list";
}
Expand All @@ -195,9 +184,9 @@ public String showMapping(@RequestParam(value = "id", required = true) final Lon
@PreAuthorize("hasRole('ROLE_EDITOR')")
public String showUploadForm(@RequestParam(value = "id", required = true) final Long id,
final Model model) {
Questionnaire questionnaire = questionnaireDao.getElementById(id);
Optional<Questionnaire> questionnaire = questionnaireService.getQuestionnaireById(id);
model.addAttribute("export", new ExportTemplate());
model.addAttribute("questionnaire", questionnaire);
model.addAttribute("questionnaire", questionnaire.orElse(null));
return "mapping/uploadtemplate";
}

Expand Down Expand Up @@ -288,7 +277,7 @@ public String handleUpload(
return showUploadForm(questionnaireId, model);
}

Questionnaire questionnaire = questionnaireDao.getElementById(questionnaireId);
Questionnaire questionnaire = questionnaireService.getQuestionnaireById(questionnaireId).orElse(null);

List<ExportTemplate> exportTemplates = ExportTemplate.createExportTemplates(name,
exportTemplateType, file, configurationGroupDao, exportTemplateDao);
Expand All @@ -311,7 +300,7 @@ public String handleUpload(
}
File uploadFile = new File(contextPath, uploadFilename);
uploadFile.createNewFile();

//Do the upload for FHIR resource.
if (ExportTemplateType.isExportTemplateTypeAFhirType(exportTemplateType)) {
try {
Expand Down Expand Up @@ -353,7 +342,7 @@ public String handleUpload(
}

// maybe not necessary
questionnaireDao.merge(questionnaire);
questionnaireService.merge(questionnaire);

model.addAttribute("questionnaire", questionnaire);
model.addAttribute("allMappings", this.getAllMappings(questionnaireId));
Expand Down Expand Up @@ -398,7 +387,7 @@ public String removeExportTemplate(@RequestParam(value = "id", required = true)
}
questionnaire.removeExportTemplate(exportTemplate);
exportTemplateDao.remove(exportTemplate);
questionnaireDao.merge(questionnaire);
questionnaireService.merge(questionnaire);
}

return showMapping(questionnaire.getId(), model);
Expand All @@ -423,7 +412,7 @@ public String assignTemplate(@RequestParam(value = "id", required = true) final
// reasons
// using the questionnaireDao is a workaround to also get all recently
// added questions of the questionnaire
questionnaire = questionnaireDao.getElementById(questionnaire.getId());
questionnaire = questionnaireService.getQuestionnaireById(questionnaire.getId()).get();

// Sort the scores
List<Score> scores = new ArrayList<>();
Expand Down
23 changes: 12 additions & 11 deletions src/main/java/de/imi/mopat/controller/QuestionController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import de.imi.mopat.dao.*;
import de.imi.mopat.helper.controller.Constants;
import de.imi.mopat.helper.controller.LocaleHelper;
import de.imi.mopat.helper.controller.QuestionnaireService;
import de.imi.mopat.helper.model.QuestionDTOMapper;
import de.imi.mopat.helper.controller.StringUtilities;
import de.imi.mopat.model.*;
Expand Down Expand Up @@ -56,7 +57,7 @@ public class QuestionController {
@Autowired
private SliderAnswerValidator sliderAnswerValidator;
@Autowired
private QuestionnaireDao questionnaireDao;
private QuestionnaireService questionnaireService;

@Autowired
private SliderIconDao sliderIconDao;
Expand Down Expand Up @@ -135,9 +136,9 @@ public ArrayList<QuestionType> getQuestionTypeList() {
@PreAuthorize("hasRole('ROLE_EDITOR')")
public String showQuestions(@RequestParam(value = "id", required = true) final Long id,
final Model model) {
Questionnaire questionnaire = questionnaireDao.getElementById(id);
Optional<Questionnaire> questionnaire = questionnaireService.getQuestionnaireById(id);

if (questionnaire == null) {
if (questionnaire.isEmpty()) {
//clear the models attributes that are set in the @ModelAttribute
// methods
model.addAttribute("question", null);
Expand All @@ -149,7 +150,7 @@ public String showQuestions(@RequestParam(value = "id", required = true) final L
// map, which
// contains the question texts grouped by the country and languages.
Map<Long, SortedMap<String, Map<String, String>>> localizedQuestionTextsForQuestion = new HashMap<>();
for (Question question : questionnaire.getQuestions()) {
for (Question question : questionnaire.get().getQuestions()) {
// Get the question texts grouped by country from the current
// question
SortedMap<String, Map<String, String>> groupedLocalizedQuestionTextByCountry = question.getLocalizedQuestionTextGroupedByCountry();
Expand All @@ -163,7 +164,7 @@ public String showQuestions(@RequestParam(value = "id", required = true) final L
question.setHasScores(scoreDao.hasScore(question));
}
model.addAttribute("localizedQuestionTextsForQuestion", localizedQuestionTextsForQuestion);
model.addAttribute("questionnaire", questionnaire);
model.addAttribute("questionnaire", questionnaire.get());
return "question/list";
}

Expand Down Expand Up @@ -330,8 +331,8 @@ public String editQuestion(@RequestParam final String action,
return "question/edit";
}

Questionnaire questionnaire = questionnaireDao.getElementById(
questionDTO.getQuestionnaireId());
Questionnaire questionnaire = questionnaireService.getQuestionnaireById(
questionDTO.getQuestionnaireId()).orElse(null);
Integer minNumberAnswers = questionDTO.getMinNumberAnswers();
Integer maxNumberAnswers = questionDTO.getMaxNumberAnswers();
Map<String, String> localizedQuestionText = removePTags(questionDTO);
Expand Down Expand Up @@ -359,7 +360,7 @@ public String editQuestion(@RequestParam final String action,
}
// Merge in any case, because the questionnaire is already persisted
questionDao.merge(question);
questionnaireDao.merge(questionnaire);
questionnaireService.merge(questionnaire);

// Since the next step is a redirect to a controller which loads a
// new model,
Expand Down Expand Up @@ -604,7 +605,7 @@ public String removeQuestion(@RequestParam(value = "id", required = true) final
deleteFile.delete();
}

questionnaireDao.merge(questionnaire);
questionnaireService.merge(questionnaire);

// Since the next step is a redirect to a controller which loads a
// new model,
Expand All @@ -628,7 +629,7 @@ public String removeQuestion(@RequestParam(value = "id", required = true) final
public @ResponseBody String repositionQuestion(
@RequestParam(value = "questionIds", required = true) final List<Long> questionIds,
@RequestParam(value = "questionnaireId", required = true) final Long questionnaireId) {
Questionnaire questionnaire = questionnaireDao.getElementById(questionnaireId);
Questionnaire questionnaire = questionnaireService.getQuestionnaireById(questionnaireId).get();

// Check if any condition trigger is after its target
for (int i = 0; i < questionIds.size(); i++) {
Expand Down Expand Up @@ -661,7 +662,7 @@ public String removeQuestion(@RequestParam(value = "id", required = true) final
for (Question question : questionnaire.getQuestions()) {
question.setPosition((questionIds.indexOf(question.getId()) + 1));
}
questionnaireDao.merge(questionnaire);
questionnaireService.merge(questionnaire);

return "";
}
Expand Down
Loading
Loading