From 3eb23578500e131b1df9b15ec085b55023e1533d Mon Sep 17 00:00:00 2001 From: sergiupacurariu <62688603+sergiupacurariu@users.noreply.github.com> Date: Tue, 15 Jun 2021 19:10:01 +0300 Subject: [PATCH] #4770 - Manually triggered calculation of case classification - additional changes --- .../ClassificationAllSymptomsCriteriaDto.java | 37 ++++--------------- .../FieldVisibilityCheckers.java | 5 ++- .../symeda/sormas/app/rest/RetroProvider.java | 7 +++- .../CaseClassificationFacadeEjb.java | 2 +- 4 files changed, 18 insertions(+), 33 deletions(-) diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationAllSymptomsCriteriaDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationAllSymptomsCriteriaDto.java index b951e7f5040..35e043e628e 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationAllSymptomsCriteriaDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/caze/classification/ClassificationAllSymptomsCriteriaDto.java @@ -3,6 +3,7 @@ import java.lang.reflect.Field; import java.util.List; +import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers; import org.apache.commons.lang3.ArrayUtils; import de.symeda.sormas.api.Disease; @@ -22,31 +23,22 @@ public class ClassificationAllSymptomsCriteriaDto extends ClassificationCriteriaDto { private SymptomState symptomState; - private Disease disease; + private FieldVisibilityCheckers fieldVisibilityCheckers; - public ClassificationAllSymptomsCriteriaDto(SymptomState symptomState, Disease disease) { + public ClassificationAllSymptomsCriteriaDto(SymptomState symptomState, Disease disease, String countryLocale) { this.symptomState = symptomState; - this.disease = disease; + fieldVisibilityCheckers = FieldVisibilityCheckers.withDisease(disease).andWithCountry(countryLocale); } @Override public boolean eval(CaseDataDto caze, PersonDto person, List pathogenTests, List events) { - Disease caseDisease = caze.getDisease(); - for (Field field : SymptomsDto.class.getDeclaredFields()) { - Diseases annotation = field.getAnnotation(Diseases.class); - HideForCountries hideForCountriesAnnotation = field.getAnnotation(HideForCountries.class); - HideForCountriesExcept hideForCountriesExceptAnnotation = field.getAnnotation(HideForCountriesExcept.class); SymptomsDto symptomsDto = caze.getSymptoms(); if (field.getType() == SymptomState.class - && annotation != null - && ArrayUtils.contains(annotation.value(), caseDisease) - && (hideForCountriesAnnotation == null || !ArrayUtils.contains(hideForCountriesAnnotation.countries(), getCountryLocale())) - && (hideForCountriesExceptAnnotation == null - || ArrayUtils.contains(hideForCountriesExceptAnnotation.countries(), getCountryLocale()))) { - + && fieldVisibilityCheckers.isVisible(SymptomsDto.class, field.getName())) + { field.setAccessible(true); try { boolean matchedFieldState = field.get(symptomsDto) == symptomState; @@ -76,24 +68,11 @@ public String buildDescription() { } for (Field field : SymptomsDto.class.getDeclaredFields()) { - Diseases annotation = field.getAnnotation(Diseases.class); - HideForCountries hideForCountriesAnnotation = field.getAnnotation(HideForCountries.class); - HideForCountriesExcept hideForCountriesExceptAnnotation = field.getAnnotation(HideForCountriesExcept.class); - if (field.getType() == SymptomState.class - && annotation != null - && ArrayUtils.contains(annotation.value(), disease) - && (hideForCountriesAnnotation == null || !ArrayUtils.contains(hideForCountriesAnnotation.countries(), getCountryLocale())) - && (hideForCountriesExceptAnnotation == null - || ArrayUtils.contains(hideForCountriesExceptAnnotation.countries(), getCountryLocale()))) { - - stringBuilder.append(field.getName()).append("; "); + && fieldVisibilityCheckers.isVisible(SymptomsDto.class, field.getName())) { + stringBuilder.append(I18nProperties.getPrefixCaption( SymptomsDto.I18N_PREFIX,field.getName())).append("; "); } } return stringBuilder.toString(); } - - private String getCountryLocale() { - return FacadeProvider.getConfigFacade().getCountryLocale(); - } } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/fieldvisibility/FieldVisibilityCheckers.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/fieldvisibility/FieldVisibilityCheckers.java index 0fea70a1cb4..845f1cf0621 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/fieldvisibility/FieldVisibilityCheckers.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/fieldvisibility/FieldVisibilityCheckers.java @@ -17,6 +17,7 @@ *******************************************************************************/ package de.symeda.sormas.api.utils.fieldvisibility; +import java.io.Serializable; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; import java.util.ArrayList; @@ -28,7 +29,7 @@ import de.symeda.sormas.api.utils.fieldvisibility.checkers.DiseaseFieldVisibilityChecker; import de.symeda.sormas.api.utils.fieldvisibility.checkers.FeatureTypeFieldVisibilityChecker; -public class FieldVisibilityCheckers { +public class FieldVisibilityCheckers implements Serializable { private List fieldNameBasedCheckers = new ArrayList<>(); private List fieldBasedCheckers = new ArrayList<>(); @@ -125,7 +126,7 @@ public static FieldVisibilityCheckers withCheckers(Checker... checkers) { return ret; } - interface Checker { + interface Checker extends Serializable { } diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/rest/RetroProvider.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/rest/RetroProvider.java index d52d37c373c..3fd117f2915 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/rest/RetroProvider.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/rest/RetroProvider.java @@ -35,9 +35,11 @@ import androidx.fragment.app.FragmentActivity; import de.symeda.sormas.api.caze.classification.ClassificationAllOfCriteriaDto; +import de.symeda.sormas.api.caze.classification.ClassificationAllSymptomsCriteriaDto; import de.symeda.sormas.api.caze.classification.ClassificationCaseCriteriaDto; import de.symeda.sormas.api.caze.classification.ClassificationCriteriaDto; import de.symeda.sormas.api.caze.classification.ClassificationEpiDataCriteriaDto; +import de.symeda.sormas.api.caze.classification.ClassificationEventClusterCriteriaDto; import de.symeda.sormas.api.caze.classification.ClassificationExposureCriteriaDto; import de.symeda.sormas.api.caze.classification.ClassificationNoneOfCriteriaDto; import de.symeda.sormas.api.caze.classification.ClassificationNotInStartDateRangeCriteriaDto; @@ -149,7 +151,10 @@ private RetroProvider(Context context) throws ServerConnectionException, ServerC .registerSubtype(ClassificationExposureCriteriaDto.class, "ClassificationExposureCriteriaDto") .registerSubtype(ClassificationXOfCriteriaDto.ClassificationXOfSubCriteriaDto.class, "ClassificationXOfSubCriteriaDto") .registerSubtype(ClassificationXOfCriteriaDto.ClassificationOneOfCompactCriteriaDto.class, "ClassificationOneOfCompactCriteriaDto") - .registerSubtype(ClassificationAllOfCriteriaDto.ClassificationAllOfCompactCriteriaDto.class, "ClassificationAllOfCompactCriteriaDto"); + .registerSubtype(ClassificationAllOfCriteriaDto.ClassificationAllOfCompactCriteriaDto.class, "ClassificationAllOfCompactCriteriaDto") + .registerSubtype(ClassificationEventClusterCriteriaDto.class, "ClassificationEventClusterCriteriaDto") + .registerSubtype(ClassificationAllSymptomsCriteriaDto.class, "ClassificationAllSymptomsCriteriaDto"); + Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, (JsonDeserializer) (json, typeOfT, context1) -> { if (json.isJsonNull()) { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/classification/CaseClassificationFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/classification/CaseClassificationFacadeEjb.java index 430a4dc5627..bd157e2494e 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/classification/CaseClassificationFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/classification/CaseClassificationFacadeEjb.java @@ -611,7 +611,7 @@ private ClassificationPersonAgeBetweenYearsCriteriaDto personAgeBetweenYears(Int } private ClassificationAllSymptomsCriteriaDto allOfSymptoms(SymptomState symptomState, Disease disease) { - return new ClassificationAllSymptomsCriteriaDto(symptomState, disease); + return new ClassificationAllSymptomsCriteriaDto(symptomState, disease, configFacade.getCountryLocale()); } private ClassificationEventClusterCriteriaDto partOfEventCluster() {