Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/development' into qu-auto/SORQA-462
Browse files Browse the repository at this point in the history
  • Loading branch information
hms-sgent committed Oct 14, 2022
2 parents 61058d9 + b16f99d commit 01d4763
Show file tree
Hide file tree
Showing 52 changed files with 400 additions and 163 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -263,7 +262,6 @@ public class CaseDataDto extends SormasToSormasShareableDto {
@Required
private Date reportDate;
@Outbreaks
@NotNull(message = Validations.validReportingUser)
private UserReferenceDto reportingUser;
@HideForCountries(countries = {
COUNTRY_CODE_FRANCE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import de.symeda.sormas.api.Disease;
Expand Down Expand Up @@ -162,7 +161,7 @@ public class ContactDto extends SormasToSormasShareableDto {

@Required
private Date reportDateTime;
@NotNull(message = Validations.validReportingUser)

private UserReferenceDto reportingUser;
@SensitiveData
@Pseudonymizer(LatitudePseudonymizer.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public class EventDto extends SormasToSormasShareableDto {
private Date endDate;
@NotNull(message = Validations.validReportDateTime)
private Date reportDateTime;
@NotNull(message = Validations.validReportingUser)

private UserReferenceDto reportingUser;
private Date evolutionDate;
@Size(max = FieldConstraints.CHARACTER_LIMIT_TEXT, message = Validations.textTooLong)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,22 @@
*/
package de.symeda.sormas.api.event;

import de.symeda.sormas.api.common.DeletionReason;
import de.symeda.sormas.api.feature.FeatureType;
import de.symeda.sormas.api.utils.DependingOnFeatureType;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.caze.CaseReferenceDto;
import de.symeda.sormas.api.caze.VaccinationStatus;
import de.symeda.sormas.api.common.DeletionReason;
import de.symeda.sormas.api.feature.FeatureType;
import de.symeda.sormas.api.i18n.Validations;
import de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto;
import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto;
import de.symeda.sormas.api.person.PersonDto;
import de.symeda.sormas.api.sormastosormas.SormasToSormasShareableDto;
import de.symeda.sormas.api.user.UserReferenceDto;
import de.symeda.sormas.api.utils.DataHelper;
import de.symeda.sormas.api.utils.DependingOnFeatureType;
import de.symeda.sormas.api.utils.Diseases;
import de.symeda.sormas.api.utils.EmbeddedPersonalData;
import de.symeda.sormas.api.utils.FieldConstraints;
Expand Down Expand Up @@ -58,7 +57,6 @@ public class EventParticipantDto extends SormasToSormasShareableDto {
public static final String DELETION_REASON = "deletionReason";
public static final String OTHER_DELETION_REASON = "otherDeletionReason";

@NotNull(message = Validations.validReportingUser)
private UserReferenceDto reportingUser;
@Required
private EventReferenceDto event;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,17 @@

package de.symeda.sormas.api.immunization;

import de.symeda.sormas.api.common.DeletionReason;
import de.symeda.sormas.api.feature.FeatureType;
import de.symeda.sormas.api.utils.DependingOnFeatureType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.caze.CaseReferenceDto;
import de.symeda.sormas.api.common.DeletionReason;
import de.symeda.sormas.api.feature.FeatureType;
import de.symeda.sormas.api.i18n.Validations;
import de.symeda.sormas.api.infrastructure.community.CommunityReferenceDto;
import de.symeda.sormas.api.infrastructure.country.CountryReferenceDto;
Expand All @@ -41,6 +39,7 @@
import de.symeda.sormas.api.sormastosormas.SormasToSormasShareableDto;
import de.symeda.sormas.api.user.UserReferenceDto;
import de.symeda.sormas.api.utils.DataHelper;
import de.symeda.sormas.api.utils.DependingOnFeatureType;
import de.symeda.sormas.api.utils.EmbeddedPersonalData;
import de.symeda.sormas.api.utils.FieldConstraints;
import de.symeda.sormas.api.utils.Outbreaks;
Expand Down Expand Up @@ -104,7 +103,6 @@ public class ImmunizationDto extends SormasToSormasShareableDto {
private PersonReferenceDto person;
@Required
private Date reportDate;
@NotNull(message = Validations.validReportingUser)
private UserReferenceDto reportingUser;
private boolean archived;
@Required
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public class SormasToSormasOriginInfoDto extends EntityDto {
private boolean withSamples;
private boolean withEventParticipants;
private boolean withImmunizations;
private boolean pseudonymizedData;

@NotEmpty(message = Validations.requiredField)
@Size(max = FieldConstraints.CHARACTER_LIMIT_BIG, message = Validations.textTooLong)
private String comment;
Expand Down Expand Up @@ -125,4 +127,12 @@ public String getComment() {
public void setComment(String comment) {
this.comment = comment;
}

public boolean isPseudonymizedData() {
return pseudonymizedData;
}

public void setPseudonymizedData(boolean pseudonymizedData) {
this.pseudonymizedData = pseudonymizedData;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@

package de.symeda.sormas.app.backend.customizableenum;

import com.j256.ormlite.dao.Dao;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import com.j256.ormlite.dao.Dao;

import de.symeda.sormas.api.Disease;
import de.symeda.sormas.api.Language;
import de.symeda.sormas.api.customizableenum.CustomizableEnum;
Expand Down Expand Up @@ -96,7 +96,8 @@ public <T extends CustomizableEnum> T getEnumValue(CustomizableEnumType type, St

@SuppressWarnings("unchecked")
public <T extends CustomizableEnum> List<T> getEnumValues(CustomizableEnumType type, Disease disease) {
if (customizableEnumsByType.isEmpty()) {

if (customizableEnumsByType.isEmpty() || (long) customizableEnumsByType.values().stream().mapToInt(i -> i.size()).sum() != countOf()) {
loadData();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ private void setUpFieldVisibilities(final FragmentCaseEditLayoutBinding contentB
contentBinding.caseDataDifferentPlaceOfStayJurisdiction.setVisibility(GONE);
}

contentBinding.caseDataDiseaseVariant.setVisibility(diseaseVariantList.isEmpty() ? GONE : VISIBLE);
contentBinding.caseDataDiseaseVariant.setVisibility(DataUtils.emptyOrWithOneNullItem(diseaseVariantList) ? GONE : VISIBLE);
}

private void updateCaseConfirmationBasis(FragmentCaseEditLayoutBinding contentBinding) {
Expand Down Expand Up @@ -341,7 +341,7 @@ record = getActivityRootData();
}
List<DiseaseVariant> diseaseVariants =
DatabaseHelper.getCustomizableEnumValueDao().getEnumValues(CustomizableEnumType.DISEASE_VARIANT, record.getDisease());
diseaseVariantList = DataUtils.toItems(diseaseVariants, false);
diseaseVariantList = DataUtils.toItems(diseaseVariants);
if (record.getDiseaseVariant() != null && !diseaseVariants.contains(record.getDiseaseVariant())) {
diseaseVariantList.add(DataUtils.toItem(record.getDiseaseVariant()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ record = getActivityRootData();
}
List<DiseaseVariant> diseaseVariants =
DatabaseHelper.getCustomizableEnumValueDao().getEnumValues(CustomizableEnumType.DISEASE_VARIANT, record.getDisease());
diseaseVariantList = DataUtils.toItems(diseaseVariants, false);
diseaseVariantList = DataUtils.toItems(diseaseVariants);
plagueTypeList = DataUtils.getEnumItems(PlagueType.class, true);
dengueFeverTypeList = DataUtils.getEnumItems(DengueFeverType.class, true);
rabiesTypeList = DataUtils.getEnumItems(RabiesType.class, true);
Expand Down Expand Up @@ -380,7 +380,7 @@ private void updateDiseaseVariantsField(FragmentCaseNewLayoutBinding contentBind
diseaseVariantList.addAll(DataUtils.toItems(diseaseVariants));
contentBinding.caseDataDiseaseVariant.setSpinnerData(diseaseVariantList);
contentBinding.caseDataDiseaseVariant.setValue(null);
contentBinding.caseDataDiseaseVariant.setVisibility(diseaseVariants.isEmpty() ? GONE : VISIBLE);
contentBinding.caseDataDiseaseVariant.setVisibility(DataUtils.emptyOrWithOneNullItem(diseaseVariantList) ? GONE : VISIBLE);
}

private void updatePresentConditionField(FragmentCaseNewLayoutBinding contentBinding) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ record = getActivityRootData();
}
List<DiseaseVariant> diseaseVariants =
DatabaseHelper.getCustomizableEnumValueDao().getEnumValues(CustomizableEnumType.DISEASE_VARIANT, record.getDisease());
diseaseVariantList = DataUtils.toItems(diseaseVariants, false);
diseaseVariantList = DataUtils.toItems(diseaseVariants);
if (record.getDiseaseVariant() != null && !diseaseVariants.contains(record.getDiseaseVariant())) {
diseaseVariantList.add(DataUtils.toItem(record.getDiseaseVariant()));
}
Expand Down Expand Up @@ -313,7 +313,7 @@ private void updateCustomizableEnumFields(FragmentEventEditLayoutBinding content
} else {
contentBinding.eventDiseaseVariant.setValue(null);
}
contentBinding.eventDiseaseVariant.setVisibility(diseaseVariants.isEmpty() ? GONE : VISIBLE);
contentBinding.eventDiseaseVariant.setVisibility(DataUtils.emptyOrWithOneNullItem(diseaseVariantList) ? GONE : VISIBLE);

// Specific risk
SpecificRisk selectedRisk = (SpecificRisk) contentBinding.eventSpecificRisk.getValue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ record = getActivityRootData();
List<DiseaseVariant> diseaseVariants = record.getTestedDisease() != null
? DatabaseHelper.getCustomizableEnumValueDao().getEnumValues(CustomizableEnumType.DISEASE_VARIANT, record.getTestedDisease())
: new ArrayList<>();
diseaseVariantList = DataUtils.toItems(diseaseVariants, false);
diseaseVariantList = DataUtils.toItems(diseaseVariants);
if (record.getTestedDiseaseVariant() != null && !diseaseVariants.contains(record.getTestedDiseaseVariant())) {
diseaseVariantList.add(DataUtils.toItem(record.getTestedDiseaseVariant()));
}
Expand Down Expand Up @@ -220,7 +220,7 @@ private void updateDiseaseVariantsField(FragmentPathogenTestEditLayoutBinding co
diseaseVariantList.addAll(DataUtils.toItems(diseaseVariants));
contentBinding.pathogenTestTestedDiseaseVariant.setSpinnerData(diseaseVariantList);
contentBinding.pathogenTestTestedDiseaseVariant.setValue(null);
contentBinding.pathogenTestTestedDiseaseVariant.setVisibility(diseaseVariants.isEmpty() ? GONE : VISIBLE);
contentBinding.pathogenTestTestedDiseaseVariant.setVisibility(DataUtils.emptyOrWithOneNullItem(diseaseVariantList) ? GONE : VISIBLE);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@

import static android.view.View.GONE;

import java.util.List;

import android.view.View;

import java.util.List;

import de.symeda.sormas.api.caze.CaseClassification;
import de.symeda.sormas.api.task.TaskPriority;
import de.symeda.sormas.api.task.TaskStatus;
import de.symeda.sormas.api.task.TaskType;
Expand Down Expand Up @@ -130,6 +131,8 @@ public void onLayoutBinding(final FragmentTaskEditLayoutBinding contentBinding)
contentBinding.taskSuggestedStart.initializeDateTimeField(getFragmentManager());
contentBinding.taskDueDate.initializeDateTimeField(getFragmentManager());

contentBinding.setDone.setEnabled(!(record.getCaze() != null && record.getCaze().getCaseClassification() == CaseClassification.NOT_CLASSIFIED));

//creatorComment should be required when task type is OTHER
contentBinding.taskTaskType.addValueChangedListener(new ValueChangeListener() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import android.view.View;

import de.symeda.sormas.api.caze.CaseClassification;
import de.symeda.sormas.api.task.TaskStatus;
import de.symeda.sormas.app.BaseEditFragment;
import de.symeda.sormas.app.R;
Expand Down Expand Up @@ -126,6 +127,8 @@ public void onLayoutBinding(FragmentTaskExecutionLayoutBinding contentBinding) {
setUpControlListeners(contentBinding);

contentBinding.setData(record);

contentBinding.setDone.setEnabled(!(record.getCaze() != null && record.getCaze().getCaseClassification() == CaseClassification.NOT_CLASSIFIED));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@

package de.symeda.sormas.app.util;

import org.apache.commons.collections4.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

import org.apache.commons.collections4.CollectionUtils;

import de.symeda.sormas.api.Month;
import de.symeda.sormas.api.i18n.I18nProperties;
import de.symeda.sormas.api.utils.DateHelper;
Expand Down Expand Up @@ -75,6 +75,11 @@ public static List<Item> getBooleanItems() {
return list;
}

public static boolean emptyOrWithOneNullItem(List<Item> listIn) {
return listIn.isEmpty() || (listIn.size() == 1 && (listIn.get(0) == null || listIn.get(0).getValue() == null));
}


public static <E> List<Item> toItems(List<E> listIn) {
return toItems(listIn, true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -658,8 +658,6 @@ public List<CaseIndexDetailedDto> getIndexDetailedList(CaseCriteria caseCriteria
pseudonymizer.pseudonymizeDto(CaseIndexDetailedDto.class, caze, isInJurisdiction, c -> {
pseudonymizer.pseudonymizeDto(AgeAndBirthDateDto.class, caze.getAgeAndBirthDate(), isInJurisdiction, null);
pseudonymizer.pseudonymizeUser(
CaseDataDto.class,
CaseDataDto.REPORTING_USER,
userService.getByUuid(caze.getReportingUser().getUuid()),
userService.getCurrentUser(),
caze::setReportingUser);
Expand Down Expand Up @@ -1762,6 +1760,10 @@ public void validate(@Valid CaseDataDto caze) throws ValidationRuntimeException

// Check whether any required field that does not have a not null constraint in
// the database is empty
if (caze.getReportingUser() == null && !caze.isPseudonymized()) {
throw new ValidationRuntimeException(I18nProperties.getValidationError(Validations.validReportingUser));
}

if (caze.getResponsibleRegion() == null) {
throw new ValidationRuntimeException(I18nProperties.getValidationError(Validations.validResponsibleRegion));
}
Expand Down Expand Up @@ -2672,10 +2674,8 @@ public void pseudonymizeDto(Case source, CaseDataDto dto, Pseudonymizer pseudony
pseudonymizer.pseudonymizeDto(CaseDataDto.class, dto, inJurisdiction, c -> {
User currentUser = userService.getCurrentUser();
pseudonymizer
.pseudonymizeUser(CaseDataDto.class, CaseDataDto.REPORTING_USER, source.getReportingUser(), currentUser, dto::setReportingUser);
.pseudonymizeUser(source.getReportingUser(), currentUser, dto::setReportingUser);
pseudonymizer.pseudonymizeUser(
CaseDataDto.class,
CaseDataDto.CLASSIFICATION_USER,
source.getClassificationUser(),
currentUser,
dto::setClassificationUser);
Expand Down Expand Up @@ -3971,7 +3971,7 @@ public long countCasesWithMissingContactInformation(List<String> caseUuids, Mess
IterableHelper.executeBatched(
caseUuids,
ModelConstants.PARAMETER_LIMIT,
e -> totalCount.addAndGet(countCasesWithMissingContactInfo(caseUuids, messageType)));
batchedUuids -> totalCount.addAndGet(countCasesWithMissingContactInfo(batchedUuids, messageType)));

return totalCount.get();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1618,8 +1618,7 @@ public Predicate inJurisdictionOrOwned(CaseQueryContext qc, User user) {
public Collection<Case> getByPersonUuids(List<String> personUuids) {

List<Case> cases = new ArrayList<>();
IterableHelper
.executeBatched(personUuids, ModelConstants.PARAMETER_LIMIT, batchedPersonUuids -> cases.addAll(getCasesByPersonUuids(personUuids)));
IterableHelper.executeBatched(personUuids, ModelConstants.PARAMETER_LIMIT, batchedUuids -> cases.addAll(getCasesByPersonUuids(batchedUuids)));
return cases;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,6 @@ public List<SurveillanceReportDto> getIndexList(SurveillanceReportCriteria crite
Optional<SurveillanceReport> report = resultList.stream().filter(r -> r.getUuid().equals(r.getUuid())).findFirst();
report.ifPresent(
surveillanceReport -> pseudonymizer.pseudonymizeUser(
SurveillanceReportDto.class,
SurveillanceReportDto.CREATING_USER,
surveillanceReport.getCreatingUser(),
currentUser,
reportDto::setCreatingUser));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1267,8 +1267,6 @@ public List<ContactIndexDetailedDto> getIndexDetailedList(
User currentUser = userService.getCurrentUser();
pseudonymizer.pseudonymizeDtoCollection(ContactIndexDetailedDto.class, dtos, c -> c.getInJurisdiction(), (c, isInJurisdiction) -> {
pseudonymizer.pseudonymizeUser(
ContactIndexDetailedDto.class,
ContactIndexDetailedDto.REPORTING_USER,
userService.getByUuid(c.getReportingUser().getUuid()),
currentUser,
c::setReportingUser);
Expand Down Expand Up @@ -1598,7 +1596,7 @@ protected void pseudonymizeDto(Contact source, ContactDto dto, Pseudonymizer pse

pseudonymizer.pseudonymizeDto(ContactDto.class, dto, inJurisdiction, (c) -> {
pseudonymizer
.pseudonymizeUser(ContactDto.class, ContactDto.REPORTING_USER, source.getReportingUser(), currentUser, dto::setReportingUser);
.pseudonymizeUser(source.getReportingUser(), currentUser, dto::setReportingUser);

if (c.getCaze() != null) {
pseudonymizer.pseudonymizeDto(CaseReferenceDto.class, c.getCaze(), jurisdictionFlags.getCaseInJurisdiction(), null);
Expand Down Expand Up @@ -1885,6 +1883,10 @@ private void validateUserRights(ContactDto contact, ContactDto existingContact)
public void validate(@Valid ContactDto contact) throws ValidationRuntimeException {

// Check whether any required field that does not have a not null constraint in the database is empty
if (contact.getReportingUser() == null && !contact.isPseudonymized()) {
throw new ValidationRuntimeException(I18nProperties.getValidationError(Validations.validReportingUser));
}

if (contact.getReportDateTime() == null) {
throw new ValidationRuntimeException(I18nProperties.getValidationError(Validations.validReportDateTime));
}
Expand Down
Loading

0 comments on commit 01d4763

Please sign in to comment.