From 2affaba692346ca6e72698d4021684558d91db8b Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 22 Jun 2016 11:32:38 +0200 Subject: [PATCH] OO-2070: add method to check existing external identifiers of repository entries --- .../olat/repository/RepositoryManager.java | 22 +++++++++++++++++++ .../repository/RepositoryManagerTest.java | 20 +++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 3d86347e3a1..4ffeedead0b 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -445,6 +445,28 @@ public class RepositoryManager { return displaynames.get(0); } + /** + * Check if (and which) external IDs already exist. + * @param a collection of external IDs to check if already existing + * @return a list of already existing external IDs (or an emtpy list). + */ + public List<String> lookupExistingExternalIds(Collection<String> externalIds) { + if (externalIds == null || externalIds.isEmpty()) { + return Collections.emptyList(); + } + + StringBuilder query = new StringBuilder(); + query.append("select v.externalId from ").append(RepositoryEntry.class.getName()).append(" as v ") + .append("where v.externalId in (:externalIds)"); + + List<String> existingExternalIds = + dbInstance.getCurrentEntityManager().createQuery(query.toString(), String.class) + .setParameter("externalIds", externalIds) + .getResultList(); + + return existingExternalIds; + } + /** * Load a list of repository entry without all the security groups ... * @param resources diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java index 6e39d530c89..3f97a66e0a0 100644 --- a/src/test/java/org/olat/repository/RepositoryManagerTest.java +++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java @@ -30,6 +30,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -205,6 +206,25 @@ public class RepositoryManagerTest extends OlatTestCase { Assert.assertEquals(re.getOlatResource(), resource); } + @Test + public void lookupExistingExternalIds() { + RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry(); + String externalId = UUID.randomUUID().toString(); + re.setExternalId(externalId); + repositoryService.update(re); + dbInstance.commitAndCloseSession(); + + //load + String nonExistentExternalId = UUID.randomUUID().toString(); + List<String> externalIds = new ArrayList<>(); + externalIds.add(externalId); + externalIds.add(nonExistentExternalId); + List<String> existentExternalIds = repositoryManager.lookupExistingExternalIds(externalIds); + Assert.assertNotNull(existentExternalIds); + Assert.assertTrue(existentExternalIds.contains(externalId)); + Assert.assertFalse(existentExternalIds.contains(nonExistentExternalId)); + } + @Test public void queryByOwner_replaceQueryByEditor() { //create a repository entry with an owner -- GitLab