Search in sources :

Example 1 with MergeContactIndexDto

use of de.symeda.sormas.api.contact.MergeContactIndexDto in project SORMAS-Project by hzi-braunschweig.

the class MergeContactsGrid method calculateCompletenessValues.

@Override
@SuppressWarnings("unchecked")
public void calculateCompletenessValues() {
    TreeDataProvider<MergeContactIndexDto> dataProvider = (TreeDataProvider<MergeContactIndexDto>) getDataProvider();
    TreeData<MergeContactIndexDto> data = dataProvider.getTreeData();
    for (MergeContactIndexDto parent : data.getRootItems()) {
        FacadeProvider.getContactFacade().updateCompleteness(parent.getUuid());
        FacadeProvider.getContactFacade().updateCompleteness(data.getChildren(parent).get(0).getUuid());
    }
    reload();
}
Also used : MergeContactIndexDto(de.symeda.sormas.api.contact.MergeContactIndexDto) TreeDataProvider(com.vaadin.data.provider.TreeDataProvider)

Example 2 with MergeContactIndexDto

use of de.symeda.sormas.api.contact.MergeContactIndexDto in project SORMAS-Project by hzi-braunschweig.

the class MergeContactsGrid method buildColumns.

@Override
protected void buildColumns() {
    Column<MergeContactIndexDto, String> diseaseColumn = addColumn(contact -> DiseaseHelper.toString(contact.getDisease(), contact.getDiseaseDetails()));
    diseaseColumn.setId(COLUMN_DISEASE);
    setColumns(COLUMN_UUID, MergeContactIndexDto.CAZE, COLUMN_DISEASE, MergeContactIndexDto.CONTACT_CLASSIFICATION, MergeContactIndexDto.PERSON_FIRST_NAME, MergeContactIndexDto.PERSON_LAST_NAME, MergeContactIndexDto.AGE_AND_BIRTH_DATE, MergeContactIndexDto.SEX, MergeContactIndexDto.DISTRICT_NAME, MergeContactIndexDto.REPORT_DATE_TIME, MergeContactIndexDto.CREATION_DATE, COLUMN_COMPLETENESS, COLUMN_ACTIONS);
    getColumn(COLUMN_ACTIONS).setMinimumWidth(280);
    Language userLanguage = I18nProperties.getUserLanguage();
    ((Column<MergeContactIndexDto, Date>) getColumn(MergeContactIndexDto.REPORT_DATE_TIME)).setRenderer(new DateRenderer(DateHelper.getLocalDateTimeFormat(userLanguage)));
    ((Column<MergeContactIndexDto, Date>) getColumn(MergeContactIndexDto.CREATION_DATE)).setRenderer(new DateRenderer(DateHelper.getLocalDateTimeFormat(userLanguage)));
    ((Column<MergeContactIndexDto, AgeAndBirthDateDto>) getColumn(MergeContactIndexDto.AGE_AND_BIRTH_DATE)).setRenderer(value -> value == null ? "" : PersonHelper.getAgeAndBirthdateString(value.getAge(), value.getAgeType(), value.getDateOfBirthDD(), value.getDateOfBirthMM(), value.getDateOfBirthYYYY()), new TextRenderer());
}
Also used : MergeContactIndexDto(de.symeda.sormas.api.contact.MergeContactIndexDto) Language(de.symeda.sormas.api.Language) DateRenderer(com.vaadin.ui.renderers.DateRenderer) TextRenderer(com.vaadin.ui.renderers.TextRenderer)

Example 3 with MergeContactIndexDto

use of de.symeda.sormas.api.contact.MergeContactIndexDto in project SORMAS-Project by hzi-braunschweig.

the class ContactFacadeEjb method getContactsForDuplicateMerging.

@Override
public List<MergeContactIndexDto[]> getContactsForDuplicateMerging(ContactCriteria criteria, boolean ignoreRegion) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
    Root<Contact> root = cq.from(Contact.class);
    final ContactQueryContext contactQueryContext = new ContactQueryContext(cb, cq, root);
    ContactJoins joins = contactQueryContext.getJoins();
    Root<Contact> root2 = cq.from(Contact.class);
    Join<Contact, Person> person = joins.getPerson();
    Join<Contact, Person> person2 = root2.join(Contact.PERSON, JoinType.LEFT);
    Join<Contact, Region> region = joins.getRegion();
    Join<Contact, Region> region2 = root2.join(Contact.REGION, JoinType.LEFT);
    Join<Contact, Case> sourceCase = joins.getCaze();
    Join<Contact, Case> sourceCase2 = root2.join(Contact.CAZE, JoinType.LEFT);
    cq.distinct(true);
    // similarity:
    // * first & last name concatenated with whitespace. Similarity function with default threshold of 0.65D
    // uses postgres pg_trgm: https://www.postgresql.org/docs/9.6/pgtrgm.html
    // * same source case
    // * same disease
    // * same region (optional)
    // * report date within 30 days of each other
    // * same sex or same birth date (when defined)
    // * same birth date (when fully defined)
    Predicate sourceCaseFilter = cb.equal(sourceCase, sourceCase2);
    Predicate userFilter = service.createUserFilter(contactQueryContext);
    Predicate criteriaFilter = criteria != null ? service.buildCriteriaFilter(criteria, contactQueryContext) : null;
    Expression<String> nameSimilarityExpr = cb.concat(person.get(Person.FIRST_NAME), " ");
    nameSimilarityExpr = cb.concat(nameSimilarityExpr, person.get(Person.LAST_NAME));
    Expression<String> nameSimilarityExpr2 = cb.concat(person2.get(Person.FIRST_NAME), " ");
    nameSimilarityExpr2 = cb.concat(nameSimilarityExpr2, person2.get(Person.LAST_NAME));
    Predicate nameSimilarityFilter = cb.gt(cb.function("similarity", double.class, nameSimilarityExpr, nameSimilarityExpr2), configFacade.getNameSimilarityThreshold());
    Predicate diseaseFilter = cb.equal(root.get(Contact.DISEASE), root2.get(Contact.DISEASE));
    Predicate regionFilter = cb.or(cb.or(cb.isNull(region.get(Region.ID)), cb.isNull(region2.get(Region.ID))), cb.equal(region.get(Region.ID), region2.get(Region.ID)));
    Predicate reportDateFilter = cb.lessThanOrEqualTo(cb.abs(cb.diff(cb.function("date_part", Long.class, cb.parameter(String.class, "date_type"), root.get(Contact.REPORT_DATE_TIME)), cb.function("date_part", Long.class, cb.parameter(String.class, "date_type"), root2.get(Contact.REPORT_DATE_TIME)))), SECONDS_30_DAYS);
    // Sex filter: only when sex is filled in for both cases
    Predicate sexFilter = cb.or(cb.or(cb.isNull(person.get(Person.SEX)), cb.isNull(person2.get(Person.SEX))), cb.equal(person.get(Person.SEX), person2.get(Person.SEX)));
    // Birth date filter: only when birth date is filled in for both cases
    Predicate birthDateFilter = cb.or(cb.or(cb.isNull(person.get(Person.BIRTHDATE_DD)), cb.isNull(person.get(Person.BIRTHDATE_MM)), cb.isNull(person.get(Person.BIRTHDATE_YYYY)), cb.isNull(person2.get(Person.BIRTHDATE_DD)), cb.isNull(person2.get(Person.BIRTHDATE_MM)), cb.isNull(person2.get(Person.BIRTHDATE_YYYY))), cb.and(cb.equal(person.get(Person.BIRTHDATE_DD), person2.get(Person.BIRTHDATE_DD)), cb.equal(person.get(Person.BIRTHDATE_MM), person2.get(Person.BIRTHDATE_MM)), cb.equal(person.get(Person.BIRTHDATE_YYYY), person2.get(Person.BIRTHDATE_YYYY))));
    Predicate creationDateFilter = cb.or(cb.lessThan(root.get(Contact.CREATION_DATE), root2.get(Contact.CREATION_DATE)), cb.or(cb.lessThanOrEqualTo(root2.get(Contact.CREATION_DATE), DateHelper.getStartOfDay(criteria.getCreationDateFrom())), cb.greaterThanOrEqualTo(root2.get(Contact.CREATION_DATE), DateHelper.getEndOfDay(criteria.getCreationDateTo()))));
    Predicate filter = cb.and(service.createDefaultFilter(cb, root), service.createDefaultFilter(cb, root2), sourceCaseFilter);
    if (userFilter != null) {
        filter = cb.and(filter, userFilter);
    }
    if (filter != null) {
        filter = cb.and(filter, criteriaFilter);
    } else {
        filter = criteriaFilter;
    }
    if (filter != null) {
        filter = cb.and(filter, nameSimilarityFilter);
    } else {
        filter = nameSimilarityFilter;
    }
    filter = cb.and(filter, diseaseFilter);
    if (!ignoreRegion) {
        filter = cb.and(filter, regionFilter);
    }
    filter = cb.and(filter, reportDateFilter);
    filter = cb.and(filter, cb.and(sexFilter, birthDateFilter));
    filter = cb.and(filter, creationDateFilter);
    filter = cb.and(filter, cb.notEqual(root.get(Contact.ID), root2.get(Contact.ID)));
    cq.where(filter);
    cq.multiselect(root.get(Contact.ID), root2.get(Contact.ID), root.get(Contact.CREATION_DATE));
    cq.orderBy(cb.desc(root.get(Contact.CREATION_DATE)));
    List<Object[]> foundIds = em.createQuery(cq).setParameter("date_type", "epoch").getResultList();
    List<MergeContactIndexDto[]> resultList = new ArrayList<>();
    if (!foundIds.isEmpty()) {
        CriteriaQuery<MergeContactIndexDto> indexContactsCq = cb.createQuery(MergeContactIndexDto.class);
        Root<Contact> indexRoot = indexContactsCq.from(Contact.class);
        selectMergeIndexDtoFields(cb, indexContactsCq, indexRoot);
        indexContactsCq.where(indexRoot.get(Contact.ID).in(foundIds.stream().map(a -> Arrays.copyOf(a, 2)).flatMap(Arrays::stream).collect(Collectors.toSet())));
        Map<Long, MergeContactIndexDto> indexContacts = em.createQuery(indexContactsCq).getResultStream().collect(Collectors.toMap(c -> c.getId(), Function.identity()));
        for (Object[] idPair : foundIds) {
            try {
                // Cloning is necessary here to allow us to add the same CaseIndexDto to the grid multiple times
                MergeContactIndexDto parent = (MergeContactIndexDto) indexContacts.get(idPair[0]).clone();
                MergeContactIndexDto child = (MergeContactIndexDto) indexContacts.get(idPair[1]).clone();
                if (parent.getCompleteness() == null && child.getCompleteness() == null || parent.getCompleteness() != null && (child.getCompleteness() == null || (parent.getCompleteness() >= child.getCompleteness()))) {
                    resultList.add(new MergeContactIndexDto[] { parent, child });
                } else {
                    resultList.add(new MergeContactIndexDto[] { child, parent });
                }
            } catch (CloneNotSupportedException e) {
                throw new RuntimeException(e);
            }
        }
    }
    return resultList;
}
Also used : FollowUpStatus(de.symeda.sormas.api.contact.FollowUpStatus) VisitService(de.symeda.sormas.backend.visit.VisitService) Arrays(java.util.Arrays) DtoHelper(de.symeda.sormas.backend.util.DtoHelper) RolesAllowed(javax.annotation.security.RolesAllowed) VisitStatus(de.symeda.sormas.api.visit.VisitStatus) Immunization(de.symeda.sormas.backend.immunization.entity.Immunization) CommunityFacadeEjb(de.symeda.sormas.backend.infrastructure.community.CommunityFacadeEjb) ExternalDataUpdateException(de.symeda.sormas.api.externaldata.ExternalDataUpdateException) MeansOfImmunization(de.symeda.sormas.api.immunization.MeansOfImmunization) DistrictService(de.symeda.sormas.backend.infrastructure.district.DistrictService) PersonDto(de.symeda.sormas.api.person.PersonDto) ContactEventSummaryDetails(de.symeda.sormas.backend.event.ContactEventSummaryDetails) Valid(javax.validation.Valid) AbstractCoreFacadeEjb(de.symeda.sormas.backend.common.AbstractCoreFacadeEjb) YesNoUnknown(de.symeda.sormas.api.utils.YesNoUnknown) Page(de.symeda.sormas.api.common.Page) FollowUpDto(de.symeda.sormas.api.followup.FollowUpDto) TransactionAttributeType(javax.ejb.TransactionAttributeType) Predicate(javax.persistence.criteria.Predicate) UserFacadeEjb(de.symeda.sormas.backend.user.UserFacadeEjb) Map(java.util.Map) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) JoinType(javax.persistence.criteria.JoinType) BigInteger(java.math.BigInteger) DocumentRelatedEntityType(de.symeda.sormas.api.document.DocumentRelatedEntityType) Visit(de.symeda.sormas.backend.visit.Visit) EpiData(de.symeda.sormas.backend.epidata.EpiData) SormasToSormasOriginInfoFacadeEjb(de.symeda.sormas.backend.sormastosormas.origin.SormasToSormasOriginInfoFacadeEjb) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) ContactExportDto(de.symeda.sormas.api.contact.ContactExportDto) CommunityService(de.symeda.sormas.backend.infrastructure.community.CommunityService) Resource(javax.annotation.Resource) Set(java.util.Set) SampleFacadeEjbLocal(de.symeda.sormas.backend.sample.SampleFacadeEjb.SampleFacadeEjbLocal) VaccinationService(de.symeda.sormas.backend.vaccination.VaccinationService) TaskPriority(de.symeda.sormas.api.task.TaskPriority) NotNull(javax.validation.constraints.NotNull) DashboardContactDto(de.symeda.sormas.api.dashboard.DashboardContactDto) UserService(de.symeda.sormas.backend.user.UserService) User(de.symeda.sormas.backend.user.User) EpiDataDto(de.symeda.sormas.api.epidata.EpiDataDto) ExternalDataDto(de.symeda.sormas.api.externaldata.ExternalDataDto) CaseFacadeEjbLocal(de.symeda.sormas.backend.caze.CaseFacadeEjb.CaseFacadeEjbLocal) JurisdictionHelper(de.symeda.sormas.backend.util.JurisdictionHelper) CoreEntityType(de.symeda.sormas.api.common.CoreEntityType) SimilarContactDto(de.symeda.sormas.api.contact.SimilarContactDto) SampleService(de.symeda.sormas.backend.sample.SampleService) RegionReferenceDto(de.symeda.sormas.api.infrastructure.region.RegionReferenceDto) Sample(de.symeda.sormas.backend.sample.Sample) ContactFacade(de.symeda.sormas.api.contact.ContactFacade) SampleCriteria(de.symeda.sormas.api.sample.SampleCriteria) Community(de.symeda.sormas.backend.infrastructure.community.Community) FollowUpPeriodDto(de.symeda.sormas.api.followup.FollowUpPeriodDto) QueryHelper(de.symeda.sormas.backend.util.QueryHelper) MapContactDto(de.symeda.sormas.api.contact.MapContactDto) LocalDateTime(java.time.LocalDateTime) PersonReferenceDto(de.symeda.sormas.api.person.PersonReferenceDto) Selection(javax.persistence.criteria.Selection) VisitFacadeEjbLocal(de.symeda.sormas.backend.visit.VisitFacadeEjb.VisitFacadeEjbLocal) ArrayList(java.util.ArrayList) CaseReferenceDto(de.symeda.sormas.api.caze.CaseReferenceDto) MergeContactIndexDto(de.symeda.sormas.api.contact.MergeContactIndexDto) Case(de.symeda.sormas.backend.caze.Case) EpiDataFacadeEjb(de.symeda.sormas.backend.epidata.EpiDataFacadeEjb) LocalBean(javax.ejb.LocalBean) ConfigFacadeEjbLocal(de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal) ExportHelper(de.symeda.sormas.backend.importexport.ExportHelper) EJB(javax.ejb.EJB) Root(javax.persistence.criteria.Root) ContactSimilarityCriteria(de.symeda.sormas.api.contact.ContactSimilarityCriteria) TaskCriteria(de.symeda.sormas.api.task.TaskCriteria) DataHelper(de.symeda.sormas.api.utils.DataHelper) Task(de.symeda.sormas.backend.task.Task) PersonFacadeEjb(de.symeda.sormas.backend.person.PersonFacadeEjb) DistrictReferenceDto(de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto) ContactLogic(de.symeda.sormas.api.contact.ContactLogic) PersonService(de.symeda.sormas.backend.person.PersonService) SymptomsHelper(de.symeda.sormas.api.symptoms.SymptomsHelper) SortProperty(de.symeda.sormas.api.utils.SortProperty) Captions(de.symeda.sormas.api.i18n.Captions) TaskCreationException(de.symeda.sormas.backend.common.TaskCreationException) Exposure(de.symeda.sormas.backend.exposure.Exposure) DAYS(java.time.temporal.ChronoUnit.DAYS) ExposureDto(de.symeda.sormas.api.exposure.ExposureDto) Disease(de.symeda.sormas.api.Disease) VisitDto(de.symeda.sormas.api.visit.VisitDto) DeletionReason(de.symeda.sormas.api.common.DeletionReason) DateHelper8(de.symeda.sormas.backend.util.DateHelper8) FeatureTypeProperty(de.symeda.sormas.api.feature.FeatureTypeProperty) SymptomsFacadeEjb(de.symeda.sormas.backend.symptoms.SymptomsFacadeEjb) FeatureType(de.symeda.sormas.api.feature.FeatureType) VisitFacadeEjb(de.symeda.sormas.backend.visit.VisitFacadeEjb) ContactCriteria(de.symeda.sormas.api.contact.ContactCriteria) EventService(de.symeda.sormas.backend.event.EventService) ImmunizationEntityHelper(de.symeda.sormas.backend.immunization.ImmunizationEntityHelper) Join(javax.persistence.criteria.Join) AbstractDomainObject(de.symeda.sormas.backend.common.AbstractDomainObject) Date(java.util.Date) I18nProperties(de.symeda.sormas.api.i18n.I18nProperties) LoggerFactory(org.slf4j.LoggerFactory) ExposureType(de.symeda.sormas.api.exposure.ExposureType) ContactIndexDetailedDto(de.symeda.sormas.api.contact.ContactIndexDetailedDto) HealthConditionsMapper(de.symeda.sormas.backend.clinicalcourse.HealthConditionsMapper) AccessDeniedException(de.symeda.sormas.api.utils.AccessDeniedException) SormasToSormasContactFacadeEjbLocal(de.symeda.sormas.backend.sormastosormas.entities.contact.SormasToSormasContactFacadeEjb.SormasToSormasContactFacadeEjbLocal) Facility(de.symeda.sormas.backend.infrastructure.facility.Facility) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ContactIndexDto(de.symeda.sormas.api.contact.ContactIndexDto) Vaccination(de.symeda.sormas.backend.vaccination.Vaccination) ManagedScheduledExecutorService(javax.enterprise.concurrent.ManagedScheduledExecutorService) ContactFollowUpDto(de.symeda.sormas.api.contact.ContactFollowUpDto) Stateless(javax.ejb.Stateless) DocumentService(de.symeda.sormas.backend.document.DocumentService) CaseService(de.symeda.sormas.backend.caze.CaseService) DiseaseConfigurationFacadeEjbLocal(de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal) Person(de.symeda.sormas.backend.person.Person) PermitAll(javax.annotation.security.PermitAll) Timestamp(java.sql.Timestamp) Collection(java.util.Collection) Region(de.symeda.sormas.backend.infrastructure.region.Region) District(de.symeda.sormas.backend.infrastructure.district.District) Pseudonymizer(de.symeda.sormas.backend.util.Pseudonymizer) Collectors(java.util.stream.Collectors) Language(de.symeda.sormas.api.Language) ContactClassification(de.symeda.sormas.api.contact.ContactClassification) SormasToSormasFacadeEjbLocal(de.symeda.sormas.backend.sormastosormas.SormasToSormasFacadeEjb.SormasToSormasFacadeEjbLocal) TaskType(de.symeda.sormas.api.task.TaskType) Objects(java.util.Objects) ExportConfigurationDto(de.symeda.sormas.api.importexport.ExportConfigurationDto) ShareTreeCriteria(de.symeda.sormas.api.sormastosormas.ShareTreeCriteria) List(java.util.List) Query(javax.persistence.Query) DistrictFacadeEjb(de.symeda.sormas.backend.infrastructure.district.DistrictFacadeEjb) EditPermissionType(de.symeda.sormas.api.EditPermissionType) ContactDto(de.symeda.sormas.api.contact.ContactDto) LocalDate(java.time.LocalDate) Order(javax.persistence.criteria.Order) Optional(java.util.Optional) EpiDataHelper(de.symeda.sormas.api.epidata.EpiDataHelper) Location(de.symeda.sormas.backend.location.Location) VisitSummaryExportDto(de.symeda.sormas.api.visit.VisitSummaryExportDto) FeatureConfigurationFacadeEjbLocal(de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal) ValidationRuntimeException(de.symeda.sormas.api.utils.ValidationRuntimeException) VaccinationFacadeEjb(de.symeda.sormas.backend.vaccination.VaccinationFacadeEjb) TaskService(de.symeda.sormas.backend.task.TaskService) DateHelper(de.symeda.sormas.api.utils.DateHelper) CaseFacadeEjb(de.symeda.sormas.backend.caze.CaseFacadeEjb) Function(java.util.function.Function) VisitOrigin(de.symeda.sormas.api.VisitOrigin) ContactBulkEditData(de.symeda.sormas.api.contact.ContactBulkEditData) Inject(javax.inject.Inject) DeletionDetails(de.symeda.sormas.api.common.DeletionDetails) CollectionUtils(org.apache.commons.collections.CollectionUtils) TransactionAttribute(javax.ejb.TransactionAttribute) TaskStatus(de.symeda.sormas.api.task.TaskStatus) IterableHelper(de.symeda.sormas.backend.util.IterableHelper) Symptoms(de.symeda.sormas.backend.symptoms.Symptoms) Expression(javax.persistence.criteria.Expression) SymptomsDto(de.symeda.sormas.api.symptoms.SymptomsDto) CriteriaBuilderHelper(de.symeda.sormas.backend.common.CriteriaBuilderHelper) SormasToSormasOriginInfoFacadeEjbLocal(de.symeda.sormas.backend.sormastosormas.origin.SormasToSormasOriginInfoFacadeEjb.SormasToSormasOriginInfoFacadeEjbLocal) ModelConstants(de.symeda.sormas.backend.util.ModelConstants) LocationDto(de.symeda.sormas.api.location.LocationDto) TaskContext(de.symeda.sormas.api.task.TaskContext) ContactListEntryDto(de.symeda.sormas.api.contact.ContactListEntryDto) EpiDataFacadeEjbLocal(de.symeda.sormas.backend.epidata.EpiDataFacadeEjb.EpiDataFacadeEjbLocal) Logger(org.slf4j.Logger) CoreAndPersonDto(de.symeda.sormas.api.caze.CoreAndPersonDto) Validations(de.symeda.sormas.api.i18n.Validations) ContactStatus(de.symeda.sormas.api.contact.ContactStatus) Document(de.symeda.sormas.backend.document.Document) VisitLogic.getVisitResult(de.symeda.sormas.backend.visit.VisitLogic.getVisitResult) UserReference(de.symeda.sormas.backend.user.UserReference) RegionFacadeEjb(de.symeda.sormas.backend.infrastructure.region.RegionFacadeEjb) RegionService(de.symeda.sormas.backend.infrastructure.region.RegionService) TimeUnit(java.util.concurrent.TimeUnit) UserRight(de.symeda.sormas.api.user.UserRight) VisitSummaryExportDetailsDto(de.symeda.sormas.api.visit.VisitSummaryExportDetailsDto) VisitResultDto(de.symeda.sormas.api.visit.VisitResultDto) Country(de.symeda.sormas.backend.infrastructure.country.Country) ExternalJournalService(de.symeda.sormas.backend.externaljournal.ExternalJournalService) ContactReferenceDto(de.symeda.sormas.api.contact.ContactReferenceDto) ShareInfoHelper(de.symeda.sormas.backend.sormastosormas.share.shareinfo.ShareInfoHelper) Comparator(java.util.Comparator) Strings(de.symeda.sormas.api.i18n.Strings) Collections(java.util.Collections) ArrayList(java.util.ArrayList) Case(de.symeda.sormas.backend.caze.Case) Predicate(javax.persistence.criteria.Predicate) ValidationRuntimeException(de.symeda.sormas.api.utils.ValidationRuntimeException) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) MergeContactIndexDto(de.symeda.sormas.api.contact.MergeContactIndexDto) Region(de.symeda.sormas.backend.infrastructure.region.Region) AbstractDomainObject(de.symeda.sormas.backend.common.AbstractDomainObject) Person(de.symeda.sormas.backend.person.Person)

Aggregations

MergeContactIndexDto (de.symeda.sormas.api.contact.MergeContactIndexDto)3 Language (de.symeda.sormas.api.Language)2 TreeDataProvider (com.vaadin.data.provider.TreeDataProvider)1 DateRenderer (com.vaadin.ui.renderers.DateRenderer)1 TextRenderer (com.vaadin.ui.renderers.TextRenderer)1 Disease (de.symeda.sormas.api.Disease)1 EditPermissionType (de.symeda.sormas.api.EditPermissionType)1 VisitOrigin (de.symeda.sormas.api.VisitOrigin)1 CaseReferenceDto (de.symeda.sormas.api.caze.CaseReferenceDto)1 CoreAndPersonDto (de.symeda.sormas.api.caze.CoreAndPersonDto)1 CoreEntityType (de.symeda.sormas.api.common.CoreEntityType)1 DeletionDetails (de.symeda.sormas.api.common.DeletionDetails)1 DeletionReason (de.symeda.sormas.api.common.DeletionReason)1 Page (de.symeda.sormas.api.common.Page)1 ContactBulkEditData (de.symeda.sormas.api.contact.ContactBulkEditData)1 ContactClassification (de.symeda.sormas.api.contact.ContactClassification)1 ContactCriteria (de.symeda.sormas.api.contact.ContactCriteria)1 ContactDto (de.symeda.sormas.api.contact.ContactDto)1 ContactExportDto (de.symeda.sormas.api.contact.ContactExportDto)1 ContactFacade (de.symeda.sormas.api.contact.ContactFacade)1