Skip to content

Commit 7865ae3

Browse files
sergiupacurariuSergiuPacurariuLevente Gal
authored
#13204 - RSV disease variants - add support for similar Customizable … (#13219)
* #13204 - RSV disease variants - add support for similar Customizable disease values * #13204 RSV disease variants - fix values without disease * #13204 - RSV disease variants - add support for similar Customizable disease values * #13204 RSV disease variants - basic disease variant converter tests --------- Co-authored-by: SergiuPacurariu <sergiu.pacurariu@she.ro> Co-authored-by: Levente Gal <levente.gal.ext@vitagroup.ag>
1 parent bb67f2a commit 7865ae3

File tree

65 files changed

+490
-208
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+490
-208
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/bagexport/BAGExportCaseDto.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import de.symeda.sormas.api.contact.QuarantineType;
2525
import de.symeda.sormas.api.infrastructure.facility.FacilityType;
2626
import de.symeda.sormas.api.person.OccupationType;
27+
import de.symeda.sormas.api.person.OccupationTypeConverter;
2728
import de.symeda.sormas.api.person.Sex;
2829
import de.symeda.sormas.api.sample.PathogenTestResultType;
2930
import de.symeda.sormas.api.sample.PathogenTestType;
@@ -32,6 +33,7 @@
3233
import de.symeda.sormas.api.utils.YesNoUnknown;
3334

3435
public class BAGExportCaseDto implements Serializable {
36+
3537
private Integer caseIdIsm;
3638
private Long caseId;
3739
private Long personId;
@@ -124,7 +126,7 @@ public BAGExportCaseDto(Integer caseIdIsm, Long caseId, Long personId,
124126
String homeAddressStreet, String homeAddressHouseNumber, String homeAddressCity, String homeAddressPostalCode, String homeAddressCountry,
125127
String phoneNumber, String mobileNumber, String emailAddress,
126128
Sex sex, Integer birthdateDD, Integer birthdateMM, Integer birthdateYYYY,
127-
OccupationType occupationType,
129+
String occupationType,
128130
boolean symptomatic, Date symptomOnsetDate,
129131
String activityMappingYn,
130132
Date contactTracingContactDate,
@@ -148,7 +150,7 @@ public BAGExportCaseDto(Integer caseIdIsm, Long caseId, Long personId,
148150
this.emailAddress = emailAddress;
149151
this.sex = sex;
150152
this.birthDate = new BirthDateDto(birthdateDD, birthdateMM, birthdateYYYY);
151-
this.occupationType = occupationType;
153+
this.occupationType = new OccupationTypeConverter().convertToEntityAttribute(null, occupationType);
152154
this.symptomatic = symptomatic ? YesNoUnknown.YES : YesNoUnknown.NO;
153155
this.symptomOnsetDate = symptomOnsetDate;
154156
this.activityMappingYn = activityMappingYn;

sormas-api/src/main/java/de/symeda/sormas/api/bagexport/BAGExportContactDto.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import de.symeda.sormas.api.contact.QuarantineType;
2424
import de.symeda.sormas.api.infrastructure.facility.FacilityType;
2525
import de.symeda.sormas.api.person.OccupationType;
26+
import de.symeda.sormas.api.person.OccupationTypeConverter;
2627
import de.symeda.sormas.api.person.Sex;
2728
import de.symeda.sormas.api.sample.PathogenTestResultType;
2829
import de.symeda.sormas.api.sample.PathogenTestType;
@@ -91,7 +92,7 @@ public BAGExportContactDto(Long contactId, Long personId, String lastName, Strin
9192
String homeAddressStreet, String homeAddressHouseNumber, String homeAddressCity, String homeAddressPostalCode,
9293
String phoneNumber, String mobileNumber, Sex sex,
9394
Integer birthdateDD, Integer birthdateMM, Integer birthdateYYYY,
94-
OccupationType occupationType,
95+
String occupationType,
9596
QuarantineType quarantineType, String quarantineDetails,
9697
Integer caseLinkCaseIdIsm, Long caseLinkCaseId, Date caseLinkContactDate,
9798
Date startOfQuarantineDate, Date endOfQuarantineDate, EndOfQuarantineReason endOfQuarantineReason, String endOfQuarantineReasonDetails
@@ -112,7 +113,7 @@ public BAGExportContactDto(Long contactId, Long personId, String lastName, Strin
112113
this.mobileNumber = mobileNumber;
113114
this.sex = sex;
114115
this.birthDate = new BirthDateDto(birthdateDD, birthdateMM, birthdateYYYY);
115-
this.occupationType = occupationType;
116+
this.occupationType = new OccupationTypeConverter().convertToEntityAttribute(null, occupationType);
116117

117118
this.quarantineType = quarantineType;
118119
this.quarantineDetails = quarantineDetails;

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseExportDto.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import de.symeda.sormas.api.contact.FollowUpStatus;
2929
import de.symeda.sormas.api.contact.QuarantineType;
3030
import de.symeda.sormas.api.disease.DiseaseVariant;
31+
import de.symeda.sormas.api.disease.DiseaseVariantConverter;
3132
import de.symeda.sormas.api.epidata.EpiDataDto;
3233
import de.symeda.sormas.api.event.EventStatus;
3334
import de.symeda.sormas.api.feature.FeatureType;
@@ -49,6 +50,7 @@
4950
import de.symeda.sormas.api.person.BurialConductor;
5051
import de.symeda.sormas.api.person.EducationType;
5152
import de.symeda.sormas.api.person.OccupationType;
53+
import de.symeda.sormas.api.person.OccupationTypeConverter;
5254
import de.symeda.sormas.api.person.PersonDto;
5355
import de.symeda.sormas.api.person.PresentCondition;
5456
import de.symeda.sormas.api.person.Salutation;
@@ -362,7 +364,7 @@ public class CaseExportDto extends AbstractUuidDto implements IsCase {
362364
@SuppressWarnings("unchecked")
363365
public CaseExportDto(long id, long personId, Double personAddressLatitude, Double personAddressLongitude, Float personAddressLatLonAcc, long epiDataId, long symptomsId,
364366
long hospitalizationId, long healthConditionsId, String uuid, String epidNumber,
365-
Disease disease, DiseaseVariant diseaseVariant, String diseaseDetails, String diseaseVariantDetails,
367+
Disease disease, String diseaseVariant, String diseaseDetails, String diseaseVariantDetails,
366368
String personUuid, String firstName, String lastName, Salutation salutation, String otherSalutation, Sex sex, YesNoUnknown pregnant,
367369
Integer approximateAge, ApproximateAgeType approximateAgeType, Integer birthdateDD, Integer birthdateMM,
368370
Integer birthdateYYYY, Date reportDate, String region, String district, String community,
@@ -389,7 +391,7 @@ public CaseExportDto(long id, long personId, Double personAddressLatitude, Doubl
389391
String addressRegion, String addressDistrict, String addressCommunity, String city, String street, String houseNumber, String additionalInformation, String postalCode,
390392
String facility, String facilityUuid, String facilityDetails,
391393
String phone, String phoneOwner, String emailAddress, String otherContactDetails, EducationType educationType, String educationDetails,
392-
OccupationType occupationType, String occupationDetails, ArmedForcesRelationType ArmedForcesRelationType, YesNoUnknown contactWithSourceCaseKnown,
394+
String occupationType, String occupationDetails, ArmedForcesRelationType ArmedForcesRelationType, YesNoUnknown contactWithSourceCaseKnown,
393395
//Date onsetDate,
394396
VaccinationStatus vaccinationStatus, YesNoUnknown postpartum, Trimester trimester,
395397
long eventCount, Long prescriptionCount, Long treatmentCount, Long clinicalVisitCount,
@@ -419,7 +421,7 @@ public CaseExportDto(long id, long personId, Double personAddressLatitude, Doubl
419421
this.armedForcesRelationType = ArmedForcesRelationType;
420422
this.disease = disease;
421423
this.diseaseDetails = diseaseDetails;
422-
this.diseaseVariant = diseaseVariant;
424+
this.diseaseVariant = new DiseaseVariantConverter().convertToEntityAttribute(disease, diseaseVariant);
423425
this.diseaseVariantDetails = diseaseVariantDetails;
424426
this.personUuid = personUuid;
425427
this.firstName = firstName;
@@ -501,7 +503,7 @@ public CaseExportDto(long id, long personId, Double personAddressLatitude, Doubl
501503
this.otherContactDetails = otherContactDetails;
502504
this.educationType = educationType;
503505
this.educationDetails = educationDetails;
504-
this.occupationType = occupationType;
506+
this.occupationType = new OccupationTypeConverter().convertToEntityAttribute(null, occupationType);
505507
this.occupationDetails = occupationDetails;
506508
this.contactWithSourceCaseKnown = contactWithSourceCaseKnown;
507509
// this.onsetDate = onsetDate;

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDetailedDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public class CaseIndexDetailedDto extends CaseIndexDto {
7575

7676
//@formatter:off
7777
public CaseIndexDetailedDto(long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken,String caseReferenceNumber, String personUuid, String personFirstName, String personLastName,
78-
Disease disease, DiseaseVariant diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus,
78+
Disease disease, String diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus,
7979
PresentCondition presentCondition, Date reportDate, Date creationDate,
8080
String regionUuid, String districtUuid,
8181
String healthFacilityUuid, String healthFacilityName, String healthFacilityDetails,

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseIndexDto.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import de.symeda.sormas.api.common.DeletionReason;
2626
import de.symeda.sormas.api.contact.FollowUpStatus;
2727
import de.symeda.sormas.api.disease.DiseaseVariant;
28+
import de.symeda.sormas.api.disease.DiseaseVariantConverter;
2829
import de.symeda.sormas.api.infrastructure.InfrastructureHelper;
2930
import de.symeda.sormas.api.infrastructure.facility.FacilityHelper;
3031
import de.symeda.sormas.api.person.ApproximateAgeType;
@@ -141,7 +142,7 @@ public class CaseIndexDto extends PseudonymizableIndexDto implements MergeableIn
141142

142143
//@formatter:off
143144
public CaseIndexDto(long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String caseReferenceNumber, String personUuid, String personFirstName, String personLastName, Disease disease,
144-
DiseaseVariant diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus,
145+
String diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus,
145146
PresentCondition presentCondition, Date reportDate, Date creationDate, String regionUuid,
146147
String districtUuid, String healthFacilityUuid, String healthFacilityName, String healthFacilityDetails,
147148
String pointOfEntryUuid, String pointOfEntryName, String pointOfEntryDetails, String surveillanceOfficerUuid, CaseOutcome outcome,
@@ -166,7 +167,7 @@ public CaseIndexDto(long id, String uuid, String epidNumber, String externalID,
166167
this.personFirstName = personFirstName;
167168
this.personLastName = personLastName;
168169
this.disease = disease;
169-
this.diseaseVariant = diseaseVariant;
170+
this.diseaseVariant = new DiseaseVariantConverter().convertToEntityAttribute(disease, diseaseVariant);
170171
this.diseaseDetails = diseaseDetails;
171172
this.caseClassification = caseClassification;
172173
this.investigationStatus = investigationStatus;

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseMergeIndexDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class CaseMergeIndexDto extends CaseIndexDto {
2121
//@formatter:off
2222
public CaseMergeIndexDto(
2323
long id, String uuid, String epidNumber, String externalID, String externalToken, String internalToken, String caseReferenceNumber, String personUuid, String personFirstName, String personLastName, Disease disease,
24-
DiseaseVariant diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus,
24+
String diseaseVariant, String diseaseDetails, CaseClassification caseClassification, InvestigationStatus investigationStatus,
2525
PresentCondition presentCondition, Date reportDate, Date creationDate, String regionUuid,
2626
String districtUuid, String healthFacilityUuid, String healthFacilityName, String healthFacilityDetails,
2727
String pointOfEntryUuid, String pointOfEntryName, String pointOfEntryDetails, String surveillanceOfficerUuid, CaseOutcome outcome,

sormas-api/src/main/java/de/symeda/sormas/api/caze/PreviousCaseDto.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
import java.util.Date;
1919

20+
import de.symeda.sormas.api.Disease;
2021
import de.symeda.sormas.api.disease.DiseaseVariant;
22+
import de.symeda.sormas.api.disease.DiseaseVariantConverter;
2123
import de.symeda.sormas.api.uuid.AbstractUuidDto;
2224

2325
public class PreviousCaseDto extends AbstractUuidDto {
@@ -29,11 +31,11 @@ public class PreviousCaseDto extends AbstractUuidDto {
2931
private final DiseaseVariant diseaseVariant;
3032
private final Date onsetDate;
3133

32-
public PreviousCaseDto(String uuid, Date reportDate, String externalToken, DiseaseVariant diseaseVariant, Date onsetDate) {
34+
public PreviousCaseDto(String uuid, Date reportDate, String externalToken, Disease disease, String diseaseVariant, Date onsetDate) {
3335
super(uuid);
3436
this.reportDate = reportDate;
3537
this.externalToken = externalToken;
36-
this.diseaseVariant = diseaseVariant;
38+
this.diseaseVariant = new DiseaseVariantConverter().convertToEntityAttribute(disease, diseaseVariant);
3739
this.onsetDate = onsetDate;
3840
}
3941

sormas-api/src/main/java/de/symeda/sormas/api/contact/ContactExportDto.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import de.symeda.sormas.api.person.ApproximateAgeType.ApproximateAgeHelper;
4747
import de.symeda.sormas.api.person.ArmedForcesRelationType;
4848
import de.symeda.sormas.api.person.OccupationType;
49+
import de.symeda.sormas.api.person.OccupationTypeConverter;
4950
import de.symeda.sormas.api.person.PersonDto;
5051
import de.symeda.sormas.api.person.PresentCondition;
5152
import de.symeda.sormas.api.person.Salutation;
@@ -259,7 +260,7 @@ public ContactExportDto(long id, long personId, String uuid, String sourceCaseUu
259260
PresentCondition presentCondition, Date deathDate,
260261
String addressRegion, String addressDistrict, String addressCommunity, String city, String street, String houseNumber, String additionalInformation, String postalCode,
261262
String facility, String facilityUuid, String facilityDetails,
262-
String phone, String phoneOwner, String emailAddress, String otherContactDetails, OccupationType occupationType, String occupationDetails, ArmedForcesRelationType armedForcesRelationType,
263+
String phone, String phoneOwner, String emailAddress, String otherContactDetails, String occupationType, String occupationDetails, ArmedForcesRelationType armedForcesRelationType,
263264
String region, String district, String community,
264265
long epiDataId, YesNoUnknown contactWithSourceCaseKnown, YesNoUnknown returningTraveler,
265266
VaccinationStatus vaccinationStatus, String externalID, String externalToken, String internalToken, String caseReferenceNumber,
@@ -337,7 +338,7 @@ public ContactExportDto(long id, long personId, String uuid, String sourceCaseUu
337338
// this.otherContactDetails += this.otherContactDetails.equals("") ? otherContactDetail : ", " + otherContactDetail;
338339
// }
339340
this.otherContactDetails = otherContactDetails;
340-
this.occupationType = occupationType;
341+
this.occupationType = new OccupationTypeConverter().convertToEntityAttribute(null, occupationType);
341342
this.occupationDetails = occupationDetails;
342343
this.armedForcesRelationType = armedForcesRelationType;
343344
this.region = region;
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,14 @@
1313
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1414
*/
1515

16-
package de.symeda.sormas.backend.customizableenum;
16+
package de.symeda.sormas.api.customizableenum;
1717

1818
import javax.naming.InitialContext;
1919
import javax.naming.NamingException;
20-
import javax.persistence.AttributeConverter;
2120

2221
import org.apache.commons.lang3.StringUtils;
2322

24-
import de.symeda.sormas.api.customizableenum.CustomizableEnum;
25-
import de.symeda.sormas.api.customizableenum.CustomizableEnumFacade;
26-
import de.symeda.sormas.api.customizableenum.CustomizableEnumType;
23+
import de.symeda.sormas.api.Disease;
2724

2825
/**
2926
* JPA Converter that converts a JSON String stored in the database to an instance of {@link CustomizableEnum} and vice versa.
@@ -36,7 +33,7 @@
3633
* @param <T>
3734
* The specific extension of {@link CustomizableEnum} for type safety
3835
*/
39-
public abstract class CustomizableEnumConverter<T extends CustomizableEnum> implements AttributeConverter<T, String> {
36+
public abstract class CustomizableEnumConverter<T extends CustomizableEnum> {
4037

4138
private final Class<T> enumClass;
4239
private CustomizableEnumFacade customizableEnumFacade;
@@ -45,13 +42,11 @@ public CustomizableEnumConverter(Class<T> enumClass) {
4542
this.enumClass = enumClass;
4643
}
4744

48-
@Override
4945
public String convertToDatabaseColumn(T enumValue) {
5046
return enumValue != null ? enumValue.getValue() : null;
5147
}
5248

53-
@Override
54-
public T convertToEntityAttribute(String enumString) {
49+
public T convertToEntityAttribute(Disease disease, String enumString) {
5550
if (StringUtils.isBlank(enumString)) {
5651
return null;
5752
}
@@ -66,7 +61,11 @@ public T convertToEntityAttribute(String enumString) {
6661
throw new RuntimeException("No CustomizableEnumType for given enumClass " + enumClass + "found");
6762
}
6863

69-
return customizableEnumFacade.getEnumValue(CustomizableEnumType.getByEnumClass(enumClass), enumString);
64+
T enumValue = customizableEnumFacade.getEnumValue(enumType, disease, enumString);
65+
if (enumValue == null && disease != null) {
66+
enumValue = customizableEnumFacade.getEnumValue(enumType, null, enumString);
67+
}
68+
return enumValue;
7069
} catch (NamingException e) {
7170
throw new RuntimeException(e);
7271
}

sormas-api/src/main/java/de/symeda/sormas/api/customizableenum/CustomizableEnumFacade.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ public interface CustomizableEnumFacade
4646
* The specific extension of {@link CustomizableEnum} for type safety
4747
* @return The enum instance containing its value, internationalized caption, and optional properties
4848
*/
49-
<T extends CustomizableEnum> T getEnumValue(CustomizableEnumType type, String value);
49+
<T extends CustomizableEnum> T getEnumValue(CustomizableEnumType type, Disease disease, String value);
5050

5151
/**
5252
* Works similar to the {@link CustomizableEnumFacade#getEnumValues(CustomizableEnumType, Disease)}, but looks up a specific value.
53-
* Unlike the {@link CustomizableEnumFacade#getEnumValue(CustomizableEnumType, String)}, this method does not throw a RuntimeException
53+
* Unlike the {@link CustomizableEnumFacade#getEnumValue(CustomizableEnumType, Disease, String)}, this method does not throw a RuntimeException
5454
* when an enum can not be found.
5555
*
5656
* @param type
@@ -106,7 +106,7 @@ public interface CustomizableEnumFacade
106106

107107
/**
108108
* Clears the caches and reloads the customizable enum values from the database. Does not load enum values by language
109-
* or disease as those are retrieved on demand by using {@link #getEnumValue(CustomizableEnumType, String)} and
109+
* or disease as those are retrieved on demand by using {@link #getEnumValue(CustomizableEnumType, Disease, String)} and
110110
* {@link #getEnumValues(CustomizableEnumType, Disease)}. Exposed to this facade to allow reloading the caches without
111111
* having to restart the server.
112112
*/

0 commit comments

Comments
 (0)