From 73fb6cf4435f9ac5768f1a0ac69c4e13af15b607 Mon Sep 17 00:00:00 2001 From: mseaton Date: Tue, 20 Mar 2018 13:45:13 -0400 Subject: [PATCH] TRUNK-5375: Fix to setMemberIds method to bypass time-consuming existence check within existing cohort membership --- api/src/main/java/org/openmrs/Cohort.java | 5 +++- api/src/test/java/org/openmrs/CohortTest.java | 24 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/openmrs/Cohort.java b/api/src/main/java/org/openmrs/Cohort.java index c102c05c08a7..41b7d31d7000 100644 --- a/api/src/main/java/org/openmrs/Cohort.java +++ b/api/src/main/java/org/openmrs/Cohort.java @@ -338,8 +338,11 @@ public Set getMemberIds() { @Deprecated public void setMemberIds(Set memberIds) { if (getMemberships().size() == 0) { + Date startDate = new Date(); for (Integer id : memberIds) { - addMembership(new CohortMembership(id)); + CohortMembership membership = new CohortMembership(id, startDate); + membership.setCohort(this); + getMemberships().add(membership); } } else { diff --git a/api/src/test/java/org/openmrs/CohortTest.java b/api/src/test/java/org/openmrs/CohortTest.java index 10361d0c7b95..48e295ed19be 100644 --- a/api/src/test/java/org/openmrs/CohortTest.java +++ b/api/src/test/java/org/openmrs/CohortTest.java @@ -9,17 +9,20 @@ */ package org.openmrs; -import static org.junit.Assert.assertTrue; +import org.apache.commons.lang3.StringUtils; +import org.junit.Assert; +import org.junit.Test; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; +import static org.junit.Assert.assertTrue; /** * Behavior-driven tests of the Cohort class. @@ -147,4 +150,19 @@ public void intersect_shouldContainVoidedAndExpiredMemberships() throws Exceptio assertTrue(m.getVoided() && m.getEndDate() != null); }); } + + @Test + public void setMemberIds_shouldSupportLargeCohorts() { + int cohortSize = 100000; + Cohort c = new Cohort(); + Set ids = new HashSet(); + for (int i=0; i