diff --git a/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/entities/ContiguousIdBlock.java b/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/entities/ContiguousIdBlock.java index cfdd8047..12ae9409 100644 --- a/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/entities/ContiguousIdBlock.java +++ b/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/entities/ContiguousIdBlock.java @@ -134,6 +134,10 @@ public long getId() { return id; } + public String getCategoryId() { + return categoryId; + } + public long getLastCommitted() { return lastCommitted; } diff --git a/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/repositories/ContiguousIdBlockRepository.java b/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/repositories/ContiguousIdBlockRepository.java index 660d9872..b21b15bc 100644 --- a/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/repositories/ContiguousIdBlockRepository.java +++ b/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/repositories/ContiguousIdBlockRepository.java @@ -24,17 +24,9 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.entities.ContiguousIdBlock; import java.util.List; -import java.util.stream.Stream; @Repository public interface ContiguousIdBlockRepository extends CrudRepository { - - ContiguousIdBlock findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(String categoryId, - String instanceId); - - Stream findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(String categoryId, - String instanceId); - @Query("SELECT cib FROM ContiguousIdBlock cib WHERE cib.categoryId = :categoryId AND cib.lastCommitted != cib.lastValue AND (cib.reserved IS NULL OR cib.reserved IS FALSE) ORDER BY cib.lastValue asc") List findUncompletedAndUnreservedBlocksOrderByLastValueAsc(@Param("categoryId") String categoryId); diff --git a/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockService.java b/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockService.java index 4350e64f..2b36104a 100644 --- a/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockService.java +++ b/accession-commons-monotonic-generator-jpa/src/main/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockService.java @@ -110,7 +110,4 @@ public List reserveUncompletedBlocksForCategoryIdAndApplicati return blockList; } - public ContiguousIdBlockRepository getRepository() { - return repository; - } } diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java index dbe400de..b8f876d1 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java @@ -46,7 +46,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; -import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc; +import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getAllBlocksForCategoryId; +import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getAllUncompletedBlocksForCategoryId; import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUnreservedContiguousIdBlock; @RunWith(SpringRunner.class) @@ -62,6 +63,9 @@ public class BasicMonotonicAccessioningWithAlternateRangesTest { @Autowired private ContiguousIdBlockService contiguousIdBlockService; + @Autowired + private ContiguousIdBlockRepository contiguousIdBlockRepository; + @Test(expected = BlockInitializationException.class) public void testUnknownCategory() throws AccessionCouldNotBeGeneratedException { List> evaAccessions = @@ -82,7 +86,7 @@ public void testRecoverState() { uncompletedBlocks.add(getUnreservedContiguousIdBlock(categoryId, instanceId2, 120, 10)); contiguousIdBlockService.save(uncompletedBlocks); - assertEquals(3, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, instanceId2).size()); + assertEquals(3, getAllUncompletedBlocksForCategoryId(contiguousIdBlockRepository, categoryId).size()); // create and save accessions in db (100 to 124) - save 2 sets of same accessions with different hashes List> accessionsSet1 = LongStream.range(100l, 125l) @@ -103,8 +107,8 @@ public void testRecoverState() { // block-1 (100 to 109) : fully complete // block-2 (110 to 119) : fully complete // block-3 (120 to 124) : partially complete - assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, instanceId2).size()); - ContiguousIdBlock uncompletedBlock = getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, instanceId2).get(0); + assertEquals(1, getAllUncompletedBlocksForCategoryId(contiguousIdBlockRepository, categoryId).size()); + ContiguousIdBlock uncompletedBlock = getAllUncompletedBlocksForCategoryId(contiguousIdBlockRepository, categoryId).get(0); assertEquals(120l, uncompletedBlock.getFirstValue()); assertEquals(129l, uncompletedBlock.getLastValue()); assertEquals(124l, uncompletedBlock.getLastCommitted()); @@ -119,7 +123,7 @@ public void testRecoverState() { public void testAlternateRangesWithDifferentGenerators() throws AccessionCouldNotBeGeneratedException { /* blockStartValue= 0, blockSize= 10 , nextBlockInterval= 20 the new blocks are interleaved or jumped for each 20 items accessioned - so the accesions will be in the range of 0-19,40-59,80-99 */ + so the accessions will be in the range of 0-19,40-59,80-99 */ String categoryId = "eva_2"; String instanceId2 = "test-instance_2"; BasicAccessioningService accService1 = getAccessioningService(categoryId, INSTANCE_ID); @@ -128,8 +132,7 @@ public void testAlternateRangesWithDifferentGenerators() throws AccessionCouldNo assertEquals(0, evaAccessions.get(0).getAccession().longValue()); assertEquals(8, evaAccessions.get(8).getAccession().longValue()); //BlockSize of 10 was reserved but only 9 elements have been accessioned - assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, INSTANCE_ID) - .size()); + assertEquals(1, getAllUncompletedBlocksForCategoryId(contiguousIdBlockRepository, categoryId).size()); accService1.shutDownAccessioning(); //Get another service for same category @@ -147,7 +150,7 @@ public void testAlternateRangesWithDifferentGenerators() throws AccessionCouldNo assertEquals(40, evaAccessions.get(11).getAccession().longValue()); assertEquals(48, evaAccessions.get(19).getAccession().longValue()); //BlockSize if 10 was reserved but only 9 elements have been accessioned - assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, INSTANCE_ID).size()); + assertEquals(1, getAllUncompletedBlocksForCategoryId(contiguousIdBlockRepository, categoryId).size()); accService2.shutDownAccessioning(); //Get another service for same category but different Instance @@ -156,33 +159,30 @@ public void testAlternateRangesWithDifferentGenerators() throws AccessionCouldNo assertEquals(9, evaAccessions.size()); //New Block from different instance have not jumped as still blocks are available before interleaving point assertNotEquals(80, evaAccessions.get(0).getAccession().longValue()); - assertEquals(50, evaAccessions.get(0).getAccession().longValue()); - assertEquals(58, evaAccessions.get(8).getAccession().longValue()); - assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, instanceId2).size()); + assertEquals(49, evaAccessions.get(0).getAccession().longValue()); + assertEquals(57, evaAccessions.get(8).getAccession().longValue()); + assertEquals(1, getAllUncompletedBlocksForCategoryId(contiguousIdBlockRepository, categoryId).size()); accService3.shutDownAccessioning(); //Get previous uncompleted service from instance1 and create accessions BasicAccessioningService accService4 = getAccessioningService(categoryId, INSTANCE_ID); - evaAccessions = accService4.getOrCreate(getObjectsForAccessionsInRange(40, 41)); - assertEquals(2, evaAccessions.size()); - assertEquals(49, evaAccessions.get(0).getAccession().longValue()); //Block ended here + evaAccessions = accService4.getOrCreate(getObjectsForAccessionsInRange(40, 42)); + assertEquals(3, evaAccessions.size()); + assertEquals(58, evaAccessions.get(0).getAccession().longValue()); //Block ended here //New Block with 20 interval from last block made in instanceId2 - assertEquals(80, evaAccessions.get(1).getAccession().longValue()); + assertEquals(80, evaAccessions.get(2).getAccession().longValue()); } @Test public void testInitializeBlockManagerInMonotonicAccessionGenerator() { String categoryId = "eva_2"; String instanceId2 = "test-instance_2"; - ContiguousIdBlockRepository repository = contiguousIdBlockService.getRepository(); ContiguousIdBlock block = getUnreservedContiguousIdBlock(categoryId, instanceId2, 0, 10); - repository.save(block); + contiguousIdBlockRepository.save(block); // assert block is not full and not reserved - List blockInDBList = repository - .findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(categoryId, instanceId2) - .collect(Collectors.toList()); + List blockInDBList = getAllBlocksForCategoryId(contiguousIdBlockRepository, categoryId); assertEquals(1, blockInDBList.size()); List unreservedAndNotFullBlocks = blockInDBList.stream() .filter(b -> b.isNotFull() && b.isNotReserved()) @@ -196,9 +196,7 @@ public void testInitializeBlockManagerInMonotonicAccessionGenerator() { BasicAccessioningService accService = getAccessioningService(categoryId, instanceId2); // assert block gets reserved after recover state - blockInDBList = repository - .findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(categoryId, instanceId2) - .collect(Collectors.toList()); + blockInDBList = getAllBlocksForCategoryId(contiguousIdBlockRepository, categoryId); assertEquals(1, blockInDBList.size()); unreservedAndNotFullBlocks = blockInDBList.stream() .filter(b -> b.isNotFull() && b.isNotReserved()) diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/generators/monotonic/MonotonicAccessionGeneratorTest.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/generators/monotonic/MonotonicAccessionGeneratorTest.java index d67dabe0..b0f2738f 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/generators/monotonic/MonotonicAccessionGeneratorTest.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/generators/monotonic/MonotonicAccessionGeneratorTest.java @@ -36,6 +36,7 @@ import uk.ac.ebi.ampt2d.commons.accession.utils.exceptions.ExponentialBackOffMaxRetriesRuntimeException; import uk.ac.ebi.ampt2d.test.configuration.MonotonicAccessionGeneratorTestConfiguration; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -51,6 +52,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; +import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getAllBlocksForCategoryId; import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUnreservedContiguousIdBlock; @RunWith(SpringRunner.class) @@ -112,14 +114,14 @@ public void assertNewBlockGeneratedInSecondInstance() throws Exception { generator1.generateAccessions(TENTH_BLOCK_SIZE); assertEquals(1, repository.count()); - block = repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(0, block.getFirstValue()); assertEquals(BLOCK_SIZE - 1, block.getLastValue()); assertEquals(-1, block.getLastCommitted()); generator2.generateAccessions(TENTH_BLOCK_SIZE); assertEquals(2, repository.count()); - block = repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_2_ID); + block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(BLOCK_SIZE, block.getFirstValue()); assertEquals(2 * BLOCK_SIZE - 1, block.getLastValue()); assertEquals(BLOCK_SIZE - 1, block.getLastCommitted()); @@ -162,8 +164,7 @@ public void assertCommitModifiesLastCommitted() throws Exception { generator.commit(accessions); - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(TENTH_BLOCK_SIZE - 1, block.getLastCommitted()); } @@ -172,8 +173,7 @@ public void assertNotCommittingDoesNotModifyLastCommitted() throws Exception { MonotonicAccessionGenerator generator = getMonotonicAccessionGenerator(); long[] accessions = generator.generateAccessions(TENTH_BLOCK_SIZE); - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(-1, block.getLastCommitted()); } @@ -185,13 +185,12 @@ public void assertCommitOutOfOrderDoesNotModifyLastCommittedUntilTheSequenceIsCo generator.commit(accessions2); - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(-1, block.getLastCommitted()); generator.commit(accessions1); - block = repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(2 * TENTH_BLOCK_SIZE - 1, block.getLastCommitted()); } @@ -204,14 +203,13 @@ public void assertCommitOutOfOrderDoesNotModifyLastCommittedUntilTheSequenceIsCo generator.commit(accessions2); - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(BLOCK_SIZE, block.getFirstValue()); assertEquals(BLOCK_SIZE - 1, block.getLastCommitted()); generator.commit(accessions1); - block = repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(BLOCK_SIZE, block.getFirstValue()); assertEquals(BLOCK_SIZE + 2 * TENTH_BLOCK_SIZE - 1, block.getLastCommitted()); } @@ -274,8 +272,7 @@ public void assertMultipleReleaseAndCommitsWorks() throws Exception { generator.release(8, 9, 10); generator.commit(getLongArray(12, 998)); //999 is waiting somewhere taking a big nap and no elements have been confirmed due to element 0 being released - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(-1, block.getLastCommitted()); long[] accessions2 = generator.generateAccessions(BLOCK_SIZE); @@ -297,7 +294,7 @@ public void assertMultipleReleaseAndCommitsWorks() throws Exception { assertEquals(998, blockResult.get().getLastCommitted()); // 999 is committed and then the remaining elements get confirmed generator.commit(999); - block = repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(1991, block.getLastCommitted()); } @@ -310,8 +307,7 @@ public void assertRecoverNoPendingCommit() throws Exception { MonotonicAccessionGenerator generatorRecovering = new MonotonicAccessionGenerator(CATEGORY_ID, INSTANCE_ID, service, new long[]{2, 3, 5}); - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(-1, block.getLastCommitted()); assertFalse(generatorRecovering.getAvailableRanges().isEmpty()); assertThat(generatorRecovering.getAvailableRanges(), @@ -328,8 +324,7 @@ public void assertRecoverPendingCommit() throws Exception { MonotonicAccessionGenerator generatorRecovering = new MonotonicAccessionGenerator( CATEGORY_ID, INSTANCE_ID, service, new long[]{2, 3, 5}); - ContiguousIdBlock block = - repository.findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID, INSTANCE_ID); + ContiguousIdBlock block = findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(CATEGORY_ID); assertEquals(3, block.getLastCommitted()); assertThat(generatorRecovering.getAvailableRanges(), contains(new MonotonicRange(4, 4), new MonotonicRange(6, BLOCK_SIZE - 1))); @@ -464,9 +459,7 @@ public void testInitializeBlockManager() { repository.save(block); // To start with Block is UnCompleted and UnReserved - List blockInDBList = repository - .findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(CATEGORY_ID_2, INSTANCE_ID) - .collect(Collectors.toList()); + List blockInDBList = findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(CATEGORY_ID_2); assertEquals(1, blockInDBList.size()); List unreservedBlocks = blockInDBList.stream() .filter(b -> b.isNotFull() && b.isNotReserved()) @@ -483,9 +476,7 @@ public void testInitializeBlockManager() { assertEquals(new MonotonicRange(0, 9), generator1.getAvailableRanges().peek()); // Block is currently reserved by Generator-1 - blockInDBList = repository - .findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(CATEGORY_ID_2, INSTANCE_ID) - .collect(Collectors.toList()); + blockInDBList = findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(CATEGORY_ID_2); assertEquals(1, blockInDBList.size()); List reservedBlocks = blockInDBList.stream() .filter(b -> b.isNotFull() && b.isReserved()) @@ -519,4 +510,17 @@ public void testShutDownAccessionGenerator() { assertThrows(AccessionGeneratorShutDownException.class, () -> generator.postSave(new SaveResponse<>())); assertThrows(AccessionGeneratorShutDownException.class, () -> generator.getAvailableRanges()); } + + private List findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(String categoryId) { + return getAllBlocksForCategoryId(repository, categoryId).stream() + .sorted(Comparator.comparing(ContiguousIdBlock::getLastValue)) + .collect(Collectors.toList()); + } + + private ContiguousIdBlock findFirstByCategoryIdAndApplicationInstanceIdOrderByLastValueDesc(String categoryId) { + return getAllBlocksForCategoryId(repository, categoryId).stream() + .sorted(Comparator.comparing(ContiguousIdBlock::getLastValue).reversed()) + .findFirst().get(); + } + } diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockServiceTest.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockServiceTest.java index 1ec55f0a..9872eab4 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockServiceTest.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/monotonic/service/ContiguousIdBlockServiceTest.java @@ -32,13 +32,12 @@ import javax.persistence.PersistenceContext; import javax.persistence.PersistenceException; import java.util.Arrays; -import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getAllBlocksForCategoryId; import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUnreservedContiguousIdBlock; @RunWith(SpringRunner.class) @@ -144,10 +143,7 @@ public void testBlockSizeAndIntervalForCategory() { assertEquals(2000, block2.getFirstValue()); assertEquals(2999, block2.getLastValue()); - List contiguousBlocks = service.getRepository() - .findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(CATEGORY_ID_2, INSTANCE_ID) - .sorted(Comparator.comparing(block->block.getFirstValue())) - .collect(Collectors.toList()); + List contiguousBlocks = getAllBlocksForCategoryId(repository, CATEGORY_ID_2); assertEquals(2, contiguousBlocks.size()); assertTrue(contiguousBlocks.get(0).isNotFull()); assertEquals(0, contiguousBlocks.get(0).getFirstValue()); diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/util/ContiguousIdBlockUtil.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/util/ContiguousIdBlockUtil.java index 5c84ea52..d4580553 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/util/ContiguousIdBlockUtil.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/util/ContiguousIdBlockUtil.java @@ -3,9 +3,10 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.entities.ContiguousIdBlock; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.repositories.ContiguousIdBlockRepository; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.stream.StreamSupport; public class ContiguousIdBlockUtil { @@ -20,15 +21,73 @@ public static ContiguousIdBlock getUnreservedContiguousIdBlock(String categoryId return block; } - public static List getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(ContiguousIdBlockRepository repository, - String categoryId, String applicationInstanceId) { - try (Stream allBlocksForTheCategoryIdAndInstanceId = repository - .findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(categoryId, applicationInstanceId)) { - List blocksList = allBlocksForTheCategoryIdAndInstanceId.filter(block -> block.isNotFull()) - .collect(Collectors.toList()); + public static List getAllBlocksInDB(ContiguousIdBlockRepository repository, String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } + + public static List getAllBlocksForCategoryId(ContiguousIdBlockRepository repository, String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } + + public static List getAllUncompletedAndUnReservedBlocksForCategoryId(ContiguousIdBlockRepository repository, + String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .filter(block -> block.isNotFull()) + .filter(block -> block.isNotReserved()) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } + + public static List getAllUncompletedBlocksForCategoryId(ContiguousIdBlockRepository repository, + String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .filter(block -> block.isNotFull()) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } + + public static List getAllCompletedBlocksForCategoryId(ContiguousIdBlockRepository repository, + String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .filter(block -> block.isFull()) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } + + public static List getAllUnreservedBlocksForCategoryId(ContiguousIdBlockRepository repository, + String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .filter(block -> block.isNotReserved()) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } + + public static List getAllReservedBlocksForCategoryId(ContiguousIdBlockRepository repository, + String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .filter(block -> block.isReserved()) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); + } - return blocksList; - } + public static List getAllCompletedAndReservedBlocksForCategoryId(ContiguousIdBlockRepository repository, + String categoryId) { + return StreamSupport.stream(repository.findAll().spliterator(), false) + .filter(block -> block.getCategoryId().equals(categoryId)) + .filter(block -> block.isFull()) + .filter(block -> block.isReserved()) + .sorted(Comparator.comparing(ContiguousIdBlock::getFirstValue)) + .collect(Collectors.toList()); } } diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java index 2ad15983..ea76d134 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java @@ -39,7 +39,7 @@ @Configuration @EnableSpringDataContiguousIdService @EntityScan("uk.ac.ebi.ampt2d.test.persistence") -@EnableJpaRepositories(basePackages = "uk.ac.ebi.ampt2d.test.persistence") +@EnableJpaRepositories(basePackages = {"uk.ac.ebi.ampt2d.test.persistence", "uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.repositories"}) public class TestMonotonicDatabaseServiceTestConfiguration { private static final String CATEGORY_ID = "category-id-monotonic-test";