Skip to content

Commit

Permalink
#10208 - Remove unnecessary queries for embedded entities
Browse files Browse the repository at this point in the history
  • Loading branch information
razvancornita committed Oct 10, 2022
1 parent f0e7ab4 commit df25e25
Show file tree
Hide file tree
Showing 61 changed files with 348 additions and 330 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*******************************************************************************
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
* Copyright © 2016-2018 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*******************************************************************************/
package de.symeda.sormas.api.uuid;

import de.symeda.sormas.api.utils.ValidationRuntimeException;

@SuppressWarnings("serial")
public class MismatchUuidException extends ValidationRuntimeException {
public MismatchUuidException(String entityUuid, Class entityClass, String dtoUuid) {
super(
String.format(
"%s dto UUID (%s) does not match entity UUID (%s)",
entityClass.getSimpleName(),
dtoUuid,
entityUuid));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public static VisitDto build(PersonReferenceDto contactPerson, Disease disease,
visit.setPerson(contactPerson);
visit.setDisease(disease);

SymptomsDto symptoms = new SymptomsDto();
SymptomsDto symptoms = SymptomsDto.build();
visit.setSymptoms(symptoms);

visit.setVisitDateTime(new Date());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,12 @@ public class ActionFacadeEjb implements ActionFacade {
@EJB
private EventService eventService;

public Action fromDto(ActionDto source, boolean checkChangeDate) {

public Action fillOrBuildEntity(ActionDto source, Action target, boolean checkChangeDate) {
if (source == null) {
return null;
}

Action target = DtoHelper.fillOrBuildEntity(source, actionService.getByUuid(source.getUuid()), Action::new, checkChangeDate);
target = DtoHelper.fillOrBuildEntity(source, target, Action::new, checkChangeDate);

target.setLastModifiedBy(userService.getByReferenceDto(source.getLastModifiedBy()));
target.setReply(source.getReply());
Expand Down Expand Up @@ -134,7 +133,7 @@ public ActionDto saveAction(@Valid ActionDto dto) {

Action existingAction = actionService.getByUuid(dto.getUuid());
FacadeHelper.checkCreateAndEditRights(existingAction, userService, UserRight.ACTION_CREATE, UserRight.ACTION_EDIT);
Action ado = fromDto(dto, true);
Action ado = fillOrBuildEntity(dto, existingAction, true);
actionService.ensurePersisted(ado);
return toDto(ado);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ public long count(CampaignCriteria campaignCriteria) {
@RightsAllowed(UserRight._CAMPAIGN_EDIT)
public CampaignDto save(@Valid @NotNull CampaignDto dto) {
validate(dto);
Campaign campaign = fillOrBuildEntity(dto, service.getByUuid(dto.getUuid()), true);
Campaign existingCampaign = service.getByUuid(dto.getUuid());
Campaign campaign = fillOrBuildEntity(dto, existingCampaign, true);
if (!service.isEditAllowed(campaign)) {
throw new AccessDeniedException(I18nProperties.getString(Strings.errorEntityNotEditable));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,12 @@ public class CampaignFormDataFacadeEjb implements CampaignFormDataFacade {
@EJB
private DistrictFacadeEjb.DistrictFacadeEjbLocal districtFacadeEjb;

public CampaignFormData fromDto(@NotNull CampaignFormDataDto source, boolean checkChangeDate) {
CampaignFormData target =
DtoHelper.fillOrBuildEntity(source, campaignFormDataService.getByUuid(source.getUuid()), CampaignFormData::new, checkChangeDate);
public CampaignFormData fillOrBuildEntity(@NotNull CampaignFormDataDto source, CampaignFormData target, boolean checkChangeDate) {
if (source == null) {
return null;
}

target = DtoHelper.fillOrBuildEntity(source, target, CampaignFormData::new, checkChangeDate);

target.setFormValues(source.getFormValues());
target.setCampaign(campaignService.getByReferenceDto(source.getCampaign()));
Expand Down Expand Up @@ -170,8 +173,8 @@ public CampaignFormDataDto toDto(CampaignFormData source) {

@Override
public CampaignFormDataDto saveCampaignFormData(@Valid CampaignFormDataDto campaignFormDataDto) throws ValidationRuntimeException {

final CampaignFormData campaignFormData = fromDto(campaignFormDataDto, true);
CampaignFormData existingCampaignFormData = campaignFormDataService.getByUuid(campaignFormDataDto.getUuid());
final CampaignFormData campaignFormData = fillOrBuildEntity(campaignFormDataDto, existingCampaignFormData, true);
final List<CampaignFormDataEntry> entries = campaignFormData.getFormValues();
final ArrayList<CampaignFormDataEntry> removableEntries = new ArrayList<>(entries);
removableEntries.removeIf(entry -> entry.getValue() == null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ public class CampaignDiagramDefinitionFacadeEjb implements CampaignDiagramDefini

@Override
public CampaignDiagramDefinitionDto save(@Valid CampaignDiagramDefinitionDto campaignDiagramDefinitionDto) {

CampaignDiagramDefinition campaignDiagramDefinition = fromDto(campaignDiagramDefinitionDto, true);
CampaignDiagramDefinition existingCampaignDiagramDefinition = service.getByUuid(campaignDiagramDefinitionDto.getUuid());
CampaignDiagramDefinition campaignDiagramDefinition = fillOrBuildEntity(campaignDiagramDefinitionDto, existingCampaignDiagramDefinition, true);
service.ensurePersisted(campaignDiagramDefinition);
return toDto(campaignDiagramDefinition);
}
Expand All @@ -47,9 +47,12 @@ public CampaignDiagramDefinitionDto getByDiagramId(String diagramId) {
return toDto(service.getByDiagramId(diagramId));
}

public CampaignDiagramDefinition fromDto(@NotNull CampaignDiagramDefinitionDto source, boolean checkChangeDate) {
CampaignDiagramDefinition target =
DtoHelper.fillOrBuildEntity(source, service.getByUuid(source.getUuid()), CampaignDiagramDefinition::new, checkChangeDate);
public CampaignDiagramDefinition fillOrBuildEntity(@NotNull CampaignDiagramDefinitionDto source, CampaignDiagramDefinition target, boolean checkChangeDate) {
if (source == null) {
return null;
}

target = DtoHelper.fillOrBuildEntity(source, target, CampaignDiagramDefinition::new, checkChangeDate);

target.setDiagramId(source.getDiagramId());
target.setDiagramType(source.getDiagramType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,12 @@ public class CampaignFormMetaFacadeEjb implements CampaignFormMetaFacade {
@EJB
private UserService userService;

public CampaignFormMeta fromDto(@NotNull CampaignFormMetaDto source, boolean checkChangeDate) {
CampaignFormMeta target = DtoHelper.fillOrBuildEntity(source, service.getByUuid(source.getUuid()), CampaignFormMeta::new, checkChangeDate);
public CampaignFormMeta fillOrBuildEntity(@NotNull CampaignFormMetaDto source, CampaignFormMeta target, boolean checkChangeDate) {
if(source == null) {
return null;
}

target = DtoHelper.fillOrBuildEntity(source, source.getUuid() != null ? target : null, CampaignFormMeta::new, checkChangeDate);

target.setFormId(source.getFormId());
target.setFormName(source.getFormName());
Expand Down Expand Up @@ -83,7 +87,8 @@ public CampaignFormMetaDto toDto(CampaignFormMeta source) {
public CampaignFormMetaDto saveCampaignFormMeta(@Valid CampaignFormMetaDto campaignFormMetaDto) throws ValidationRuntimeException {
validateAndClean(campaignFormMetaDto);

CampaignFormMeta campaignFormMeta = fromDto(campaignFormMetaDto, true);
CampaignFormMeta existingCampaignFormMeta = service.getByUuid(campaignFormMetaDto.getUuid());
CampaignFormMeta campaignFormMeta = fillOrBuildEntity(campaignFormMetaDto, existingCampaignFormMeta, true);
service.ensurePersisted(campaignFormMeta);
return toDto(campaignFormMeta);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static de.symeda.sormas.backend.common.CriteriaBuilderHelper.and;
import static de.symeda.sormas.backend.common.CriteriaBuilderHelper.or;
import static de.symeda.sormas.backend.visit.VisitLogic.getVisitResult;
import static java.util.Objects.isNull;

import java.math.BigDecimal;
import java.sql.Timestamp;
Expand Down Expand Up @@ -2939,6 +2940,7 @@ protected CaseReferenceDto toRefDto(Case aCase) {
}

public Case fillOrBuildEntity(@NotNull CaseDataDto source, Case target, boolean checkChangeDate) {
boolean targetWasNull = isNull(target);

target = DtoHelper.fillOrBuildEntity(source, target, () -> {
Case newCase = new Case();
Expand All @@ -2947,6 +2949,12 @@ public Case fillOrBuildEntity(@NotNull CaseDataDto source, Case target, boolean
return newCase;
}, checkChangeDate);

if (targetWasNull) {
target.getHospitalization().setUuid(source.getHospitalization().getUuid());
target.getEpiData().setUuid(source.getEpiData().getUuid());
target.getSymptoms().setUuid(source.getSymptoms().getUuid());
}

target.setDisease(source.getDisease());
target.setDiseaseVariant(source.getDiseaseVariant());
target.setDiseaseDetails(source.getDiseaseDetails());
Expand Down Expand Up @@ -2976,28 +2984,28 @@ public Case fillOrBuildEntity(@NotNull CaseDataDto source, Case target, boolean
target.setEpidemiologicalConfirmation(source.getEpidemiologicalConfirmation());
target.setLaboratoryDiagnosticConfirmation(source.getLaboratoryDiagnosticConfirmation());
target.setInvestigationStatus(source.getInvestigationStatus());
target.setHospitalization(hospitalizationFacade.fromDto(source.getHospitalization(), checkChangeDate));
target.setEpiData(epiDataFacade.fromDto(source.getEpiData(), checkChangeDate));
target.setHospitalization(hospitalizationFacade.fillOrBuildEntity(source.getHospitalization(), target.getHospitalization(), checkChangeDate));
target.setEpiData(epiDataFacade.fillOrBuildEntity(source.getEpiData(), target.getEpiData(), checkChangeDate));
if (source.getTherapy() == null) {
source.setTherapy(TherapyDto.build());
}
target.setTherapy(therapyFacade.fromDto(source.getTherapy(), checkChangeDate));
target.setTherapy(therapyFacade.fillOrBuildEntity(source.getTherapy(), target.getTherapy(), checkChangeDate));
if (source.getHealthConditions() == null) {
source.setHealthConditions(HealthConditionsDto.build());
}
target.setHealthConditions(healthConditionsMapper.fromDto(source.getHealthConditions(), checkChangeDate));
target.setHealthConditions(healthConditionsMapper.fillOrBuildEntity(source.getHealthConditions(), target.getHealthConditions(), checkChangeDate));
if (source.getClinicalCourse() == null) {
source.setClinicalCourse(ClinicalCourseDto.build());
}
target.setClinicalCourse(clinicalCourseFacade.fromDto(source.getClinicalCourse(), checkChangeDate));
target.setClinicalCourse(clinicalCourseFacade.fillOrBuildEntity(source.getClinicalCourse(), target.getClinicalCourse(), checkChangeDate));
if (source.getMaternalHistory() == null) {
source.setMaternalHistory(MaternalHistoryDto.build());
}
target.setMaternalHistory(maternalHistoryFacade.fromDto(source.getMaternalHistory(), checkChangeDate));
target.setMaternalHistory(maternalHistoryFacade.fillOrBuildEntity(source.getMaternalHistory(), target.getMaternalHistory(), checkChangeDate));
if (source.getPortHealthInfo() == null) {
source.setPortHealthInfo(PortHealthInfoDto.build());
}
target.setPortHealthInfo(portHealthInfoFacade.fromDto(source.getPortHealthInfo(), checkChangeDate));
target.setPortHealthInfo(portHealthInfoFacade.fillOrBuildEntity(source.getPortHealthInfo(), target.getPortHealthInfo(), checkChangeDate));

target.setResponsibleRegion(regionService.getByReferenceDto(source.getResponsibleRegion()));
target.setResponsibleDistrict(districtService.getByReferenceDto(source.getResponsibleDistrict()));
Expand All @@ -3014,7 +3022,7 @@ public Case fillOrBuildEntity(@NotNull CaseDataDto source, Case target, boolean
target.setClinicianPhone(source.getClinicianPhone());
target.setClinicianEmail(source.getClinicianEmail());
target.setCaseOfficer(userService.getByReferenceDto(source.getCaseOfficer()));
target.setSymptoms(symptomsFacade.fromDto(source.getSymptoms(), checkChangeDate));
target.setSymptoms(symptomsFacade.fillOrBuildEntity(source.getSymptoms(), target.getSymptoms(), checkChangeDate));

target.setPregnant(source.getPregnant());
target.setVaccinationStatus(source.getVaccinationStatus());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
@Stateless(name = "MaternalHistoryFacade")
public class MaternalHistoryFacadeEjb implements MaternalHistoryFacade {

@EJB
private MaternalHistoryService service;
@EJB
private RegionService regionService;
@EJB
Expand Down Expand Up @@ -65,8 +63,8 @@ public static MaternalHistoryDto toDto(MaternalHistory source) {
return target;
}

public MaternalHistory fromDto(@NotNull MaternalHistoryDto source, boolean checkChangeDate) {
MaternalHistory target = DtoHelper.fillOrBuildEntity(source, service.getByUuid(source.getUuid()), MaternalHistory::new, checkChangeDate);
public MaternalHistory fillOrBuildEntity(@NotNull MaternalHistoryDto source, MaternalHistory target, boolean checkChangeDate) {
target = DtoHelper.fillOrBuildEntity(source, target, MaternalHistory::new, checkChangeDate);

target.setAgeAtBirth(source.getAgeAtBirth());
target.setArthralgiaArthritis(source.getArthralgiaArthritis());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
@Stateless(name = "PortHealthInfoFacade")
public class PortHealthInfoFacadeEjb implements PortHealthInfoFacade {

@EJB
private PortHealthInfoService service;

public static PortHealthInfoDto toDto(PortHealthInfo source) {
if (source == null) {
return null;
Expand Down Expand Up @@ -49,8 +46,8 @@ public static PortHealthInfoDto toDto(PortHealthInfo source) {
return target;
}

public PortHealthInfo fromDto(@NotNull PortHealthInfoDto source, boolean checkChangeDate) {
PortHealthInfo target = DtoHelper.fillOrBuildEntity(source, service.getByUuid(source.getUuid()), PortHealthInfo::new, checkChangeDate);
public PortHealthInfo fillOrBuildEntity(@NotNull PortHealthInfoDto source, PortHealthInfo target, boolean checkChangeDate) {
target = DtoHelper.fillOrBuildEntity(source, target, PortHealthInfo::new, checkChangeDate);

target.setAirlineName(source.getAirlineName());
target.setFlightNumber(source.getFlightNumber());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
@Stateless(name = "ClinicalCourseFacade")
public class ClinicalCourseFacadeEjb implements ClinicalCourseFacade {

@EJB
private ClinicalCourseService service;

public static ClinicalCourseReferenceDto toReferenceDto(ClinicalCourse entity) {

if (entity == null) {
Expand All @@ -38,10 +35,8 @@ public static ClinicalCourseDto toDto(ClinicalCourse source) {
return target;
}

public ClinicalCourse fromDto(@NotNull ClinicalCourseDto source, boolean checkChangeDate) {

ClinicalCourse target = DtoHelper.fillOrBuildEntity(source, service.getByUuid(source.getUuid()), ClinicalCourse::new, checkChangeDate);
return target;
public ClinicalCourse fillOrBuildEntity(@NotNull ClinicalCourseDto source, ClinicalCourse entity, boolean checkChangeDate) {
return DtoHelper.fillOrBuildEntity(source, entity, ClinicalCourse::new, checkChangeDate);
}

@LocalBean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package de.symeda.sormas.backend.clinicalcourse;

import static java.util.Objects.isNull;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -238,7 +240,7 @@ public ClinicalVisitDto saveClinicalVisit(ClinicalVisitDto clinicalVisit, String

restorePseudonymizedDto(clinicalVisit, existingClinicalVisit);

ClinicalVisit entity = fromDto(clinicalVisit, existingClinicalVisit, true);
ClinicalVisit entity = fillOrBuildEntity(clinicalVisit, existingClinicalVisit, true);

service.ensurePersisted(entity);

Expand Down Expand Up @@ -428,11 +430,17 @@ public static ClinicalVisitDto toDto(ClinicalVisit source) {
return target;
}

public ClinicalVisit fromDto(@NotNull ClinicalVisitDto source, ClinicalVisit target, boolean checkChangeDate) {
public ClinicalVisit fillOrBuildEntity(@NotNull ClinicalVisitDto source, ClinicalVisit target, boolean checkChangeDate) {
boolean targetWasNull = isNull(target);

target = DtoHelper.fillOrBuildEntity(source, target, ClinicalVisit::new, checkChangeDate);

if (targetWasNull) {
target.getSymptoms().setUuid(source.getSymptoms().getUuid());
}

target.setClinicalCourse(clinicalCourseService.getByReferenceDto(source.getClinicalCourse()));
target.setSymptoms(symptomsFacade.fromDto(source.getSymptoms(), checkChangeDate));
target.setSymptoms(symptomsFacade.fillOrBuildEntity(source.getSymptoms(), target.getSymptoms(), checkChangeDate));
target.setDisease(source.getDisease());
target.setVisitDateTime(source.getVisitDateTime());
target.setVisitRemarks(source.getVisitRemarks());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,7 @@
@Stateless(name = "HealthConditionsMapper")
public class HealthConditionsMapper {

@EJB
private HealthConditionsService healthConditionsService;

public static HealthConditionsDto toDto(HealthConditions source) {

if (source == null) {
return null;
}
Expand Down Expand Up @@ -68,41 +64,6 @@ public static HealthConditionsDto toDto(HealthConditions source) {
}

public HealthConditions fillOrBuildEntity(@NotNull HealthConditionsDto source, HealthConditions target, boolean checkChangeDate) {

target = DtoHelper.fillOrBuildEntity(source, target, HealthConditions::new, checkChangeDate);

target.setAsplenia(source.getAsplenia());
target.setChronicHeartFailure(source.getChronicHeartFailure());
target.setChronicKidneyDisease(source.getChronicKidneyDisease());
target.setChronicLiverDisease(source.getChronicLiverDisease());
target.setChronicNeurologicCondition(source.getChronicNeurologicCondition());
target.setChronicPulmonaryDisease(source.getChronicPulmonaryDisease());
target.setDiabetes(source.getDiabetes());
target.setHepatitis(source.getHepatitis());
target.setHiv(source.getHiv());
target.setHivArt(source.getHivArt());
target.setMalignancyChemotherapy(source.getMalignancyChemotherapy());
target.setTuberculosis(source.getTuberculosis());
target.setDownSyndrome(source.getDownSyndrome());
target.setCongenitalSyphilis(source.getCongenitalSyphilis());
target.setOtherConditions(source.getOtherConditions());
target.setImmunodeficiencyOtherThanHiv(source.getImmunodeficiencyOtherThanHiv());
target.setCardiovascularDiseaseIncludingHypertension(source.getCardiovascularDiseaseIncludingHypertension());
target.setObesity(source.getObesity());
target.setCurrentSmoker(source.getCurrentSmoker());
target.setFormerSmoker(source.getFormerSmoker());
target.setAsthma(source.getAsthma());
target.setSickleCellDisease(source.getSickleCellDisease());
target.setImmunodeficiencyIncludingHiv(source.getImmunodeficiencyIncludingHiv());

return target;
}

public HealthConditions fromDto(@NotNull HealthConditionsDto source, boolean checkChangeDate) {

HealthConditions target =
DtoHelper.fillOrBuildEntity(source, healthConditionsService.getByUuid(source.getUuid()), HealthConditions::new, checkChangeDate);

return fillOrBuildEntity(source, target, checkChangeDate);
return DtoHelper.fillOrBuildEntity(source, target, HealthConditions::new, checkChangeDate);
}
}
Loading

0 comments on commit df25e25

Please sign in to comment.