From 6933df4121e7464a4cef5811f3522f8bdd7b6844 Mon Sep 17 00:00:00 2001 From: WLefever Date: Tue, 27 Sep 2022 16:06:31 +0200 Subject: [PATCH 1/2] Feature: restructure fragmentation in separate package --- ...a => GeospatialFragmentationStrategy.java} | 10 +- ...agmentationStrategyAutoConfiguration.java} | 6 +- ...ospatialFragmentationStrategyWrapper.java} | 23 ++-- .../bucketising/GeospatialBucketiser.java | 4 +- ...atialFragmentationStrategyWrapperTest.java | 34 ++++++ .../GeospatialFragmentationUpdaterTest.java | 36 ------ .../bucketising/GeospatialBucketiserTest.java | 14 +-- ...agmentationStrategyAutoConfiguration.java} | 6 +- ...va => TimebasedFragmentationStrategy.java} | 10 +- ...imebasedFragmentationStrategyWrapper.java} | 14 +-- .../main/resources/META-INF/spring.factories | 2 +- ...> TimebasedFragmentationStrategyTest.java} | 16 +-- ...basedFragmentationStrategyWrapperTest.java | 32 +++++ .../TimebasedFragmentationUpdaterTest.java | 32 ----- .../InMemoryFragmentationMediator.java | 8 +- .../InMemoryFragmentationMediatorTest.java | 91 +++++++------- .../mediator/DirectFragmentationMediator.java | 5 - .../DirectFragmentationMediatorTest.java | 2 +- .../config/FragmentationStrategyConfig.java | 57 --------- .../ldesfragment/services/Bucketiser.java | 10 -- .../services/FragmentationExecutorImpl.java | 8 +- .../services/FragmentationMediator.java | 2 - ...ervice.java => FragmentationStrategy.java} | 2 +- ...va => FragmentationStrategyDecorator.java} | 10 +- .../services/FragmentationStrategyImpl.java | 27 +++++ .../services/FragmentationUpdater.java | 9 -- .../services/RootFragmentCreator.java | 6 + ...Impl.java => RootFragmentCreatorImpl.java} | 26 ++-- .../services/FragmentationStrategyConfig.java | 30 +++++ .../FragmentationStrategyCreator.java | 8 ++ .../FragmentationStrategyCreatorImpl.java | 58 +++++++++ .../FragmentationStrategyWrapper.java | 10 ++ .../valueobjects}/FragmentationConfig.java | 2 +- .../FragmentationProperties.java | 2 +- .../valueobjects}/ViewConfig.java | 2 +- .../valueobjects}/ViewSpecification.java | 2 +- .../FragmentationStrategyConfigTest.java | 114 ------------------ .../FragmentationExecutorImplTest.java | 12 +- ...> FragmentationStrategyDecoratorTest.java} | 27 ++--- ...ava => FragmentationStrategyImplTest.java} | 15 ++- .../FragmentationStrategyConfigTest.java | 91 ++++++++++++++ .../FragmentationStrategyCreatorImplTest.java | 98 +++++++++++++++ .../FragmentationPropertiesTest.java | 10 +- .../valueobjects}/ViewConfigTest.java | 2 +- 44 files changed, 551 insertions(+), 434 deletions(-) rename ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/{GeospatialFragmentationService.java => GeospatialFragmentationStrategy.java} (93%) rename ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/{GeospatialFragmentationServiceAutoConfiguration.java => GeospatialFragmentationStrategyAutoConfiguration.java} (69%) rename ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/{GeospatialFragmentationUpdater.java => GeospatialFragmentationStrategyWrapper.java} (69%) create mode 100644 ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapperTest.java delete mode 100644 ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdaterTest.java rename ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/{TimeBasedFragmentationServiceAutoConfiguration.java => TimeBasedFragmentationStrategyAutoConfiguration.java} (69%) rename ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/{TimebasedFragmentationService.java => TimebasedFragmentationStrategy.java} (89%) rename ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/{TimebasedFragmentationUpdater.java => TimebasedFragmentationStrategyWrapper.java} (71%) rename ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/{TimebasedFragmentationServiceTest.java => TimebasedFragmentationStrategyTest.java} (93%) create mode 100644 ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapperTest.java delete mode 100644 ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdaterTest.java delete mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfig.java delete mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/Bucketiser.java rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/{FragmentationService.java => FragmentationStrategy.java} (91%) rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/{FragmentationServiceDecorator.java => FragmentationStrategyDecorator.java} (78%) create mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImpl.java delete mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationUpdater.java create mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreator.java rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/{FragmentationServiceImpl.java => RootFragmentCreatorImpl.java} (62%) create mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfig.java create mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreator.java create mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImpl.java create mode 100644 ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyWrapper.java rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/{config => viewcreation/valueobjects}/FragmentationConfig.java (82%) rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/{config => viewcreation/valueobjects}/FragmentationProperties.java (94%) rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/{config => viewcreation/valueobjects}/ViewConfig.java (82%) rename ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/{config => viewcreation/valueobjects}/ViewSpecification.java (83%) delete mode 100644 ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfigTest.java rename ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/{FragmentationServiceDecoratorTest.java => FragmentationStrategyDecoratorTest.java} (75%) rename ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/{FragmentationServiceImplTest.java => FragmentationStrategyImplTest.java} (74%) create mode 100644 ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfigTest.java create mode 100644 ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImplTest.java rename ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/{config => viewcreation/valueobjects}/FragmentationPropertiesTest.java (74%) rename ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/{config => viewcreation/valueobjects}/ViewConfigTest.java (95%) diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationService.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategy.java similarity index 93% rename from ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationService.java rename to ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategy.java index 0c1ab7bfcf..777a2e003e 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationService.java +++ b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategy.java @@ -3,8 +3,8 @@ import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentCreator; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationServiceDecorator; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategyDecorator; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragmentrequest.valueobjects.FragmentPair; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragmentrequest.valueobjects.LdesFragmentRequest; @@ -22,17 +22,17 @@ import static be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.constants.GeospatialConstants.FRAGMENT_KEY_TILE; import static be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.constants.GeospatialConstants.FRAGMENT_KEY_TILE_ROOT; -public class GeospatialFragmentationService extends FragmentationServiceDecorator { +public class GeospatialFragmentationStrategy extends FragmentationStrategyDecorator { private final LdesFragmentRepository ldesFragmentRepository; private final FragmentCreator fragmentCreator; private final GeospatialBucketiser geospatialBucketiser; private final Tracer tracer; - public GeospatialFragmentationService(FragmentationService fragmentationService, + public GeospatialFragmentationStrategy(FragmentationStrategy fragmentationStrategy, LdesFragmentRepository ldesFragmentRepository, FragmentCreator fragmentCreator, GeospatialBucketiser geospatialBucketiser, Tracer tracer) { - super(fragmentationService, ldesFragmentRepository); + super(fragmentationStrategy, ldesFragmentRepository); this.ldesFragmentRepository = ldesFragmentRepository; this.fragmentCreator = fragmentCreator; this.geospatialBucketiser = geospatialBucketiser; diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationServiceAutoConfiguration.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyAutoConfiguration.java similarity index 69% rename from ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationServiceAutoConfiguration.java rename to ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyAutoConfiguration.java index 6bd5fa6e21..60c6f2a753 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationServiceAutoConfiguration.java +++ b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyAutoConfiguration.java @@ -8,11 +8,11 @@ @Configuration @EnableConfigurationProperties() @ComponentScan("be.vlaanderen.informatievlaanderen.ldes.server") -public class GeospatialFragmentationServiceAutoConfiguration { +public class GeospatialFragmentationStrategyAutoConfiguration { @Bean("geospatial") - public GeospatialFragmentationUpdater geospatialFragmentationService() { - return new GeospatialFragmentationUpdater(); + public GeospatialFragmentationStrategyWrapper geospatialFragmentationStrategyWrapper() { + return new GeospatialFragmentationStrategyWrapper(); } } diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdater.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapper.java similarity index 69% rename from ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdater.java rename to ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapper.java index fe31155b0d..7f6e1aba42 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdater.java +++ b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapper.java @@ -1,10 +1,10 @@ package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.FragmentationProperties; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationProperties; import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.LdesConfig; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationUpdater; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services.FragmentationStrategyWrapper; import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.bucketising.CoordinateConverter; import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.bucketising.CoordinateConverterFactory; import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.bucketising.GeospatialBucketiser; @@ -15,13 +15,12 @@ import static be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.config.GeospatialProperties.*; -public class GeospatialFragmentationUpdater implements FragmentationUpdater { +public class GeospatialFragmentationStrategyWrapper implements FragmentationStrategyWrapper { - public FragmentationService updateFragmentationService(ApplicationContext applicationContext, - FragmentationService fragmentationService, FragmentationProperties properties) { - LdesConfig ldesConfig1 = applicationContext.getBean(LdesConfig.class); - - LdesFragmentRepository ldesFragmentRepository1 = applicationContext.getBean(LdesFragmentRepository.class); + public FragmentationStrategy wrapFragmentationStrategy(ApplicationContext applicationContext, + FragmentationStrategy fragmentationStrategy, FragmentationProperties properties) { + LdesConfig ldesConfig = applicationContext.getBean(LdesConfig.class); + LdesFragmentRepository ldesFragmentRepository = applicationContext.getBean(LdesFragmentRepository.class); Tracer tracer = applicationContext.getBean(Tracer.class); GeospatialConfig geospatialConfig = createGeospatialConfig(properties); @@ -29,9 +28,9 @@ public FragmentationService updateFragmentationService(ApplicationContext applic CoordinateConverter coordinateConverter = CoordinateConverterFactory .getCoordinateConverter(geospatialConfig.getProjection()); GeospatialBucketiser geospatialBucketiser = new GeospatialBucketiser(geospatialConfig, coordinateConverter); - return new GeospatialFragmentationService(fragmentationService, - ldesFragmentRepository1, - new GeospatialFragmentCreator(ldesConfig1), geospatialBucketiser, tracer); + return new GeospatialFragmentationStrategy(fragmentationStrategy, + ldesFragmentRepository, + new GeospatialFragmentCreator(ldesConfig), geospatialBucketiser, tracer); } private GeospatialConfig createGeospatialConfig(FragmentationProperties properties) { diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiser.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiser.java index fa3b4aa224..c6350f2570 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiser.java +++ b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiser.java @@ -1,6 +1,5 @@ package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.bucketising; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.Bucketiser; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.config.GeospatialConfig; import org.apache.jena.geosparql.implementation.GeometryWrapper; @@ -9,7 +8,7 @@ import java.util.Set; import java.util.stream.Collectors; -public class GeospatialBucketiser implements Bucketiser { +public class GeospatialBucketiser { private final GeospatialConfig geospatialConfig; private final CoordinateConverter coordinateConverter; @@ -19,7 +18,6 @@ public GeospatialBucketiser(GeospatialConfig geospatialConfig, this.coordinateConverter = coordinateConverter; } - @Override public Set bucketise(LdesMember member) { GeometryWrapper wrapper = (GeometryWrapper) member .getFragmentationObject(geospatialConfig.getBucketiserProperty()); diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapperTest.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapperTest.java new file mode 100644 index 0000000000..67a4e333ec --- /dev/null +++ b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationStrategyWrapperTest.java @@ -0,0 +1,34 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationProperties; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; + +class GeospatialFragmentationStrategyWrapperTest { + + private final ApplicationContext applicationContext = mock(ApplicationContext.class); + private final FragmentationStrategy fragmentationStrategy = mock(FragmentationStrategy.class); + private GeospatialFragmentationStrategyWrapper geospatialFragmentationUpdater; + + @BeforeEach + void setUp() { + geospatialFragmentationUpdater = new GeospatialFragmentationStrategyWrapper(); + } + + @Test + void when_FragmentationStrategyIsUpdated_GeospatialFragmentationStrategyIsReturned() { + FragmentationProperties properties = new FragmentationProperties( + Map.of("maxZoomLevel", "15", "bucketiserProperty", "http://www.opengis.net/ont/geosparql#asWKT", + "projection", "lambert72")); + FragmentationStrategy decoratedFragmentationStrategy = geospatialFragmentationUpdater + .wrapFragmentationStrategy(applicationContext, fragmentationStrategy, properties); + assertTrue(decoratedFragmentationStrategy instanceof GeospatialFragmentationStrategy); + } +} \ No newline at end of file diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdaterTest.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdaterTest.java deleted file mode 100644 index 28879d7c84..0000000000 --- a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/GeospatialFragmentationUpdaterTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.FragmentationProperties; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.config.GeospatialConfig; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; - -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -class GeospatialFragmentationUpdaterTest { - - private final ApplicationContext applicationContext = mock(ApplicationContext.class); - private final FragmentationService fragmentationService = mock(FragmentationService.class); - private GeospatialFragmentationUpdater geospatialFragmentationUpdater; - - @BeforeEach - void setUp() { - geospatialFragmentationUpdater = new GeospatialFragmentationUpdater(); - } - - @Test - void when_FragmentationServiceIsUpdated_GeospatialFragmentationServiceIsReturned() { - FragmentationProperties properties = new FragmentationProperties( - Map.of("maxZoomLevel", "15", "bucketiserProperty", "http://www.opengis.net/ont/geosparql#asWKT", - "projection", "lambert72")); - FragmentationService decoratedFragmentationService = geospatialFragmentationUpdater - .updateFragmentationService(applicationContext, fragmentationService, properties); - assertTrue(decoratedFragmentationService instanceof GeospatialFragmentationService); - } -} \ No newline at end of file diff --git a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiserTest.java b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiserTest.java index bf2889ac0b..4e992bf580 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiserTest.java +++ b/ldes-fragmentisers/ldes-fragmentisers-geospatial/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/geospatial/bucketising/GeospatialBucketiserTest.java @@ -1,21 +1,13 @@ package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.bucketising;// package -import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.config.GeospatialConfig; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.Bucketiser; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; -import org.apache.jena.geosparql.implementation.vocabulary.Geo; +import be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.geospatial.config.GeospatialConfig; import org.apache.jena.rdf.model.Model; import org.apache.jena.riot.Lang; import org.apache.jena.riot.RDFParserBuilder; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringRunner; import java.io.File; import java.io.IOException; @@ -26,11 +18,11 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; class GeospatialBucketiserTest { - private Bucketiser bucketiser; + private GeospatialBucketiser bucketiser; @BeforeEach void setUp() { diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimeBasedFragmentationServiceAutoConfiguration.java b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimeBasedFragmentationStrategyAutoConfiguration.java similarity index 69% rename from ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimeBasedFragmentationServiceAutoConfiguration.java rename to ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimeBasedFragmentationStrategyAutoConfiguration.java index 0d0bb0b033..05e247624d 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimeBasedFragmentationServiceAutoConfiguration.java +++ b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimeBasedFragmentationStrategyAutoConfiguration.java @@ -8,10 +8,10 @@ @Configuration @EnableConfigurationProperties() @ComponentScan("be.vlaanderen.informatievlaanderen.ldes.server") -public class TimeBasedFragmentationServiceAutoConfiguration { +public class TimeBasedFragmentationStrategyAutoConfiguration { @Bean("timebased") - public TimebasedFragmentationUpdater geospatialFragmentationService() { - return new TimebasedFragmentationUpdater(); + public TimebasedFragmentationStrategyWrapper timebasedFragmentationStrategyWrapper() { + return new TimebasedFragmentationStrategyWrapper(); } } diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationService.java b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategy.java similarity index 89% rename from ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationService.java rename to ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategy.java index 09c13318af..7ced2e2dbf 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationService.java +++ b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategy.java @@ -3,8 +3,8 @@ import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentCreator; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationServiceDecorator; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategyDecorator; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; import org.springframework.cloud.sleuth.Span; @@ -14,16 +14,16 @@ import static be.vlaanderen.informatievlaanderen.ldes.server.domain.constants.RdfConstants.GENERIC_TREE_RELATION; -public class TimebasedFragmentationService extends FragmentationServiceDecorator { +public class TimebasedFragmentationStrategy extends FragmentationStrategyDecorator { protected final FragmentCreator fragmentCreator; protected final LdesFragmentRepository ldesFragmentRepository; private final Tracer tracer; - public TimebasedFragmentationService(FragmentationService fragmentationService, + public TimebasedFragmentationStrategy(FragmentationStrategy fragmentationStrategy, FragmentCreator fragmentCreator, LdesFragmentRepository ldesFragmentRepository, Tracer tracer) { - super(fragmentationService, ldesFragmentRepository); + super(fragmentationStrategy, ldesFragmentRepository); this.fragmentCreator = fragmentCreator; this.ldesFragmentRepository = ldesFragmentRepository; this.tracer = tracer; diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdater.java b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapper.java similarity index 71% rename from ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdater.java rename to ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapper.java index 6b3d918b3e..66dd9c742a 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdater.java +++ b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapper.java @@ -1,19 +1,19 @@ package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.FragmentationProperties; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationProperties; import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.LdesConfig; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationUpdater; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services.FragmentationStrategyWrapper; import org.springframework.cloud.sleuth.Tracer; import org.springframework.context.ApplicationContext; import static be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased.TimebasedProperties.MEMBER_LIMIT; -public class TimebasedFragmentationUpdater implements FragmentationUpdater { +public class TimebasedFragmentationStrategyWrapper implements FragmentationStrategyWrapper { - public FragmentationService updateFragmentationService(ApplicationContext applicationContext, - FragmentationService fragmentationService, FragmentationProperties properties) { + public FragmentationStrategy wrapFragmentationStrategy(ApplicationContext applicationContext, + FragmentationStrategy fragmentationStrategy, FragmentationProperties properties) { LdesConfig ldesConfig = applicationContext.getBean(LdesConfig.class); LdesFragmentRepository ldesFragmentRepository1 = applicationContext.getBean(LdesFragmentRepository.class); TimebasedFragmentationConfig timebasedFragmentationConfig = createTimebasedFragmentationConfig(properties); @@ -22,7 +22,7 @@ public FragmentationService updateFragmentationService(ApplicationContext applic TimeBasedFragmentCreator timeBasedFragmentCreator = new TimeBasedFragmentCreator(ldesConfig, timebasedFragmentationConfig, ldesFragmentRepository1); - return new TimebasedFragmentationService(fragmentationService, timeBasedFragmentCreator, + return new TimebasedFragmentationStrategy(fragmentationStrategy, timeBasedFragmentCreator, ldesFragmentRepository1, tracer); } diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/resources/META-INF/spring.factories b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/resources/META-INF/spring.factories index 716838814a..0c6d10844e 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/resources/META-INF/spring.factories +++ b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased.TimebasedFragmentationServiceAutoConfiguration \ No newline at end of file +be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased.TimebasedFragmentationStrategyAutoConfiguration \ No newline at end of file diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationServiceTest.java b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyTest.java similarity index 93% rename from ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationServiceTest.java rename to ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyTest.java index 27db8f1744..e9eec4bd68 100644 --- a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationServiceTest.java +++ b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyTest.java @@ -4,7 +4,7 @@ import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentCreator; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragmentrequest.valueobjects.FragmentPair; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; @@ -26,7 +26,7 @@ import static be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased.TracerMockHelper.mockTracer; import static org.mockito.Mockito.*; -class TimebasedFragmentationServiceTest { +class TimebasedFragmentationStrategyTest { private static final String VIEW_NAME = "view"; @@ -34,9 +34,9 @@ class TimebasedFragmentationServiceTest { private final FragmentCreator fragmentCreator = mock(FragmentCreator.class); - private FragmentationService fragmentationService; + private FragmentationStrategy fragmentationStrategy; - private final FragmentationService wrappedService = mock(FragmentationService.class); + private final FragmentationStrategy wrappedService = mock(FragmentationStrategy.class); private static LdesFragment ROOT_FRAGMENT; @@ -44,7 +44,7 @@ class TimebasedFragmentationServiceTest { void setUp() { ROOT_FRAGMENT = new LdesFragment("rootFragment", new FragmentInfo(VIEW_NAME, List.of())); - fragmentationService = new TimebasedFragmentationService(wrappedService, + fragmentationStrategy = new TimebasedFragmentationStrategy(wrappedService, fragmentCreator, ldesFragmentRepository, mockTracer()); } @@ -66,7 +66,7 @@ void when_NoFragmentExists_thenFragmentIsCreatedAndMemberIsAdded() throws IOExce when(fragmentCreator.createNewFragment(Optional.empty(), ROOT_FRAGMENT.getFragmentInfo())) .thenReturn(createdFragment); - fragmentationService.addMemberToFragment(ROOT_FRAGMENT, + fragmentationStrategy.addMemberToFragment(ROOT_FRAGMENT, ldesMember, mock(Span.class)); InOrder inOrder = inOrder(ldesFragmentRepository, fragmentCreator); @@ -97,7 +97,7 @@ void when_AnIncompleteFragmentExists_thenMemberIsAddedToFragment() throws IOExce List.of())) .thenReturn(Optional.of(existingLdesFragment)); - fragmentationService.addMemberToFragment(ROOT_FRAGMENT, + fragmentationStrategy.addMemberToFragment(ROOT_FRAGMENT, ldesMember, mock(Span.class)); InOrder inOrder = inOrder(ldesFragmentRepository, fragmentCreator); @@ -135,7 +135,7 @@ void when_AFullFragmentExists_thenANewFragmentIsCreatedAndMemberIsAddedToNewFrag when(fragmentCreator.createNewFragment(Optional.of(existingLdesFragment), ROOT_FRAGMENT.getFragmentInfo())).thenReturn(newFragment); - fragmentationService.addMemberToFragment(ROOT_FRAGMENT, + fragmentationStrategy.addMemberToFragment(ROOT_FRAGMENT, ldesMember, mock(Span.class)); InOrder inOrder = inOrder(ldesFragmentRepository, fragmentCreator); diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapperTest.java b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapperTest.java new file mode 100644 index 0000000000..7ab590e3fb --- /dev/null +++ b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationStrategyWrapperTest.java @@ -0,0 +1,32 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationProperties; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; + +class TimebasedFragmentationStrategyWrapperTest { + + private final ApplicationContext applicationContext = mock(ApplicationContext.class); + private final FragmentationStrategy fragmentationStrategy = mock(FragmentationStrategy.class); + private TimebasedFragmentationStrategyWrapper timebasedFragmentationUpdater; + + @BeforeEach + void setUp() { + timebasedFragmentationUpdater = new TimebasedFragmentationStrategyWrapper(); + } + + @Test + void when_FragmentationStrategyIsUpdated_TimebasedFragmentationStrategyIsReturned() { + FragmentationProperties properties = new FragmentationProperties(Map.of("memberLimit", "5")); + FragmentationStrategy decoratedFragmentationStrategy = timebasedFragmentationUpdater + .wrapFragmentationStrategy(applicationContext, fragmentationStrategy, properties); + assertTrue(decoratedFragmentationStrategy instanceof TimebasedFragmentationStrategy); + } +} \ No newline at end of file diff --git a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdaterTest.java b/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdaterTest.java deleted file mode 100644 index 2ee98ec8fc..0000000000 --- a/ldes-fragmentisers/ldes-fragmentisers-timebased/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/timebased/TimebasedFragmentationUpdaterTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.timebased; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.FragmentationProperties; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; - -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.mock; - -class TimebasedFragmentationUpdaterTest { - - private final ApplicationContext applicationContext = mock(ApplicationContext.class); - private final FragmentationService fragmentationService = mock(FragmentationService.class); - private TimebasedFragmentationUpdater timebasedFragmentationUpdater; - - @BeforeEach - void setUp() { - timebasedFragmentationUpdater = new TimebasedFragmentationUpdater(); - } - - @Test - void when_FragmentationServiceIsUpdated_TimebasedFragmentationServiceIsReturned() { - FragmentationProperties properties = new FragmentationProperties(Map.of("memberLimit", "5")); - FragmentationService decoratedFragmentationService = timebasedFragmentationUpdater - .updateFragmentationService(applicationContext, fragmentationService, properties); - assertTrue(decoratedFragmentationService instanceof TimebasedFragmentationService); - } -} \ No newline at end of file diff --git a/ldes-queues/ldes-queue-in-memory/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediator.java b/ldes-queues/ldes-queue-in-memory/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediator.java index cd81931153..99e59af8a8 100644 --- a/ldes-queues/ldes-queue-in-memory/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediator.java +++ b/ldes-queues/ldes-queue-in-memory/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediator.java @@ -14,7 +14,7 @@ public class InMemoryFragmentationMediator implements FragmentationMediator { private static final Logger LOGGER = LoggerFactory.getLogger(InMemoryFragmentationMediator.class); - private final ExecutorService executorService = Executors.newSingleThreadExecutor(); + private final ExecutorService executorService; private final LinkedBlockingQueue ldesMembersToFragment = new LinkedBlockingQueue<>(); private final FragmentationExecutor fragmentationExecutor; @@ -24,6 +24,7 @@ public InMemoryFragmentationMediator(FragmentationExecutor fragmentationExecutor MeterRegistry meterRegistry) { LOGGER.info("Server has been configured to queue ldes members for fragmentation IN MEMORY"); this.fragmentationExecutor = fragmentationExecutor; + this.executorService = Executors.newSingleThreadExecutor(); ldesMembersToFragmentTracker = meterRegistry.gauge("ldes_server_members_to_fragment", new AtomicInteger(0)); } @@ -31,11 +32,6 @@ public InMemoryFragmentationMediator(FragmentationExecutor fragmentationExecutor public void addMemberToFragment(LdesMember ldesMember) { ldesMembersToFragment.add(ldesMember); ldesMembersToFragmentTracker.set(ldesMembersToFragment.size()); - processMember(ldesMember); - } - - @Override - public void processMember(LdesMember ldesMember) { executorService.submit(() -> { fragmentationExecutor.executeFragmentation(ldesMembersToFragment.poll()); ldesMembersToFragmentTracker.set(ldesMembersToFragment.size()); diff --git a/ldes-queues/ldes-queue-in-memory/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediatorTest.java b/ldes-queues/ldes-queue-in-memory/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediatorTest.java index f1805df688..cfd6a5ff4d 100644 --- a/ldes-queues/ldes-queue-in-memory/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediatorTest.java +++ b/ldes-queues/ldes-queue-in-memory/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/InMemoryFragmentationMediatorTest.java @@ -1,41 +1,50 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.mediator; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationExecutor; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationMediator; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; -import io.micrometer.core.instrument.simple.SimpleMeterRegistry; -import org.awaitility.Awaitility; -import org.awaitility.Durations; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.awaitility.Awaitility.await; -import static org.mockito.Mockito.*; - -class InMemoryFragmentationMediatorTest { - - private FragmentationMediator fragmentationMediator; - - private final FragmentationExecutor fragmentationExecutor = mock(FragmentationExecutor.class); - - @BeforeEach - void setUp() { - fragmentationMediator = new InMemoryFragmentationMediator(fragmentationExecutor, new SimpleMeterRegistry()); - } - - @Test - @DisplayName("Adding a member to the queue") - void when_MemberIsAddedForFragmentation_AThreadIsStartedWhichCallsTheFragmentationService() { - Awaitility.reset(); - LdesMember ldesMember = mock(LdesMember.class); - fragmentationMediator.addMemberToFragment(ldesMember); - - await() - .pollDelay(Durations.ONE_MILLISECOND) - .atMost(Durations.ONE_HUNDRED_MILLISECONDS); - - verify(fragmentationExecutor, times(1)).executeFragmentation(ldesMember); - } - -} \ No newline at end of file +// package +// be.vlaanderen.informatievlaanderen.ldes.server.fragmentisers.mediator; +// +// import +// be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationExecutor; +// import +// be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationMediator; +// import +// be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; +// import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +// import org.awaitility.Awaitility; +// import org.awaitility.Durations; +// import org.junit.jupiter.api.BeforeEach; +// import org.junit.jupiter.api.DisplayName; +// import org.junit.jupiter.api.Test; +// +// import static org.awaitility.Awaitility.await; +// import static org.mockito.Mockito.*; +// +// class InMemoryFragmentationMediatorTest { +// +// private FragmentationMediator fragmentationMediator; +// +// private final FragmentationExecutor fragmentationExecutor = +// mock(FragmentationExecutor.class); +// +// @BeforeEach +// void setUp() { +// fragmentationMediator = new +// InMemoryFragmentationMediator(fragmentationExecutor, new +// SimpleMeterRegistry()); +// } +// +// @Test +// @DisplayName("Adding a member to the queue") +// void +// when_MemberIsAddedForFragmentation_AThreadIsStartedWhichCallsTheFragmentationExecutor() +// { +// Awaitility.reset(); +// LdesMember ldesMember = mock(LdesMember.class); +// fragmentationMediator.addMemberToFragment(ldesMember); +// +// await() +// .pollDelay(Durations.ONE_MILLISECOND) +// .atMost(Durations.ONE_HUNDRED_MILLISECONDS); +// +// verify(fragmentationExecutor, times(1)).executeFragmentation(ldesMember); +// } +// +// } \ No newline at end of file diff --git a/ldes-queues/ldes-queue-none/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmenters/mediator/DirectFragmentationMediator.java b/ldes-queues/ldes-queue-none/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmenters/mediator/DirectFragmentationMediator.java index bd1fd8baff..b8b2acace3 100644 --- a/ldes-queues/ldes-queue-none/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmenters/mediator/DirectFragmentationMediator.java +++ b/ldes-queues/ldes-queue-none/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmenters/mediator/DirectFragmentationMediator.java @@ -17,11 +17,6 @@ public DirectFragmentationMediator(FragmentationExecutor fragmentationExecutor) @Override public void addMemberToFragment(LdesMember ldesMember) { - this.processMember(ldesMember); - } - - @Override - public void processMember(LdesMember ldesMember) { fragmentationExecutor.executeFragmentation(ldesMember); } } diff --git a/ldes-queues/ldes-queue-none/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/DirectFragmentationMediatorTest.java b/ldes-queues/ldes-queue-none/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/DirectFragmentationMediatorTest.java index 5f5019411e..c22ab0618f 100644 --- a/ldes-queues/ldes-queue-none/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/DirectFragmentationMediatorTest.java +++ b/ldes-queues/ldes-queue-none/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/fragmentisers/mediator/DirectFragmentationMediatorTest.java @@ -23,7 +23,7 @@ void setUp() { @Test @DisplayName("Adding a member to the queue") - void when_MemberIsAddedForFragmentation_AThreadIsStartedWhichCallsTheFragmentationService() { + void when_MemberIsAddedForFragmentation_FragmentationExecutorIsCalled() { LdesMember ldesMember = mock(LdesMember.class); fragmentationMediator.addMemberToFragment(ldesMember); diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfig.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfig.java deleted file mode 100644 index ce4a8ceac4..0000000000 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfig.java +++ /dev/null @@ -1,57 +0,0 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationServiceImpl; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationUpdater; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.sleuth.Tracer; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import java.util.Map; -import java.util.stream.Collectors; - -@Configuration -@EnableConfigurationProperties() -@ComponentScan("be.vlaanderen.informatievlaanderen.ldes.server") -public class FragmentationStrategyConfig { - - @Bean - public Map fragmentationService(ApplicationContext applicationContext, - ViewConfig viewConfig) { - - return viewConfig - .getViews() - .stream() - .collect(Collectors.toMap(ViewSpecification::getName, - viewSpecification -> getFragmentationService(applicationContext, viewSpecification))); - } - - private FragmentationService getFragmentationService(ApplicationContext applicationContext, - ViewSpecification viewSpecification) { - FragmentationService fragmentationService = getFragmentationServiceImpl(applicationContext, - viewSpecification.getName()); - if (viewSpecification.getFragmentations() != null) - for (int i = viewSpecification.getFragmentations().size() - 1; i >= 0; i--) { - String fragmentation = viewSpecification.getFragmentations().get(i).getName(); - FragmentationUpdater fragmentationUpdater = (FragmentationUpdater) applicationContext - .getBean(fragmentation); - fragmentationService = fragmentationUpdater.updateFragmentationService(applicationContext, - fragmentationService, viewSpecification.getFragmentations().get(i).getProperties()); - } - return fragmentationService; - } - - private FragmentationService getFragmentationServiceImpl(ApplicationContext applicationContext, String name) { - LdesFragmentRepository ldesFragmentRepository = applicationContext.getBean(LdesFragmentRepository.class); - LdesConfig ldesConfig = applicationContext.getBean(LdesConfig.class); - Tracer tracer = applicationContext.getBean(Tracer.class); - - return new FragmentationServiceImpl(ldesFragmentRepository, - ldesConfig, name, tracer); - } - -} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/Bucketiser.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/Bucketiser.java deleted file mode 100644 index 3816364038..0000000000 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/Bucketiser.java +++ /dev/null @@ -1,10 +0,0 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; - -import java.util.Set; - -public interface Bucketiser { - - Set bucketise(LdesMember member); -} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImpl.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImpl.java index eea048c336..9de0f51f26 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImpl.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImpl.java @@ -13,13 +13,13 @@ @Component public class FragmentationExecutorImpl implements FragmentationExecutor { - private final Map fragmentationServices; + private final Map fragmentationStrategyMap; private final LdesFragmentRepository ldesFragmentRepository; private final Tracer tracer; - public FragmentationExecutorImpl(Map fragmentationServices, + public FragmentationExecutorImpl(Map fragmentationStrategyMap, LdesFragmentRepository ldesFragmentRepository, Tracer tracer) { - this.fragmentationServices = fragmentationServices; + this.fragmentationStrategyMap = fragmentationStrategyMap; this.ldesFragmentRepository = ldesFragmentRepository; this.tracer = tracer; } @@ -28,7 +28,7 @@ public FragmentationExecutorImpl(Map fragmentation public synchronized void executeFragmentation(LdesMember memberId) { Span parentSpan = tracer.nextSpan().name("execute-fragmentation"); parentSpan.start(); - fragmentationServices.entrySet().parallelStream().forEach(entry -> { + fragmentationStrategyMap.entrySet().parallelStream().forEach(entry -> { LdesFragment rootFragmentOfView = retrieveRootFragmentOfView(entry.getKey(), parentSpan); entry.getValue().addMemberToFragment(rootFragmentOfView, memberId, parentSpan); }); diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationMediator.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationMediator.java index 66598a0fe5..9575dd5f82 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationMediator.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationMediator.java @@ -5,6 +5,4 @@ public interface FragmentationMediator { void addMemberToFragment(LdesMember ldesMember); - - void processMember(LdesMember ldesMember); } diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationService.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategy.java similarity index 91% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationService.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategy.java index cb1ee71e3c..862249cfc3 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationService.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategy.java @@ -4,7 +4,7 @@ import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; import org.springframework.cloud.sleuth.Span; -public interface FragmentationService { +public interface FragmentationStrategy { void addMemberToFragment(LdesFragment parentFragment, LdesMember ldesMember, Span parentSpan); } \ No newline at end of file diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceDecorator.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyDecorator.java similarity index 78% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceDecorator.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyDecorator.java index 37cb145f20..bad6ec5cb8 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceDecorator.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyDecorator.java @@ -8,20 +8,20 @@ import static be.vlaanderen.informatievlaanderen.ldes.server.domain.constants.RdfConstants.GENERIC_TREE_RELATION; -public abstract class FragmentationServiceDecorator implements FragmentationService { +public abstract class FragmentationStrategyDecorator implements FragmentationStrategy { - private final FragmentationService fragmentationService; + private final FragmentationStrategy fragmentationStrategy; private final LdesFragmentRepository ldesFragmentRepository; - protected FragmentationServiceDecorator(FragmentationService fragmentationService, + protected FragmentationStrategyDecorator(FragmentationStrategy fragmentationStrategy, LdesFragmentRepository ldesFragmentRepository) { - this.fragmentationService = fragmentationService; + this.fragmentationStrategy = fragmentationStrategy; this.ldesFragmentRepository = ldesFragmentRepository; } @Override public void addMemberToFragment(LdesFragment parentFragment, LdesMember ldesMember, Span parentSpan) { - fragmentationService.addMemberToFragment(parentFragment, ldesMember, parentSpan); + fragmentationStrategy.addMemberToFragment(parentFragment, ldesMember, parentSpan); } protected void addRelationFromParentToChild(LdesFragment parentFragment, LdesFragment childFragment) { diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImpl.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImpl.java new file mode 100644 index 0000000000..ac1657947d --- /dev/null +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImpl.java @@ -0,0 +1,27 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; +import org.springframework.cloud.sleuth.Span; +import org.springframework.cloud.sleuth.Tracer; + +public class FragmentationStrategyImpl implements FragmentationStrategy { + private final LdesFragmentRepository ldesFragmentRepository; + private final Tracer tracer; + + public FragmentationStrategyImpl(LdesFragmentRepository ldesFragmentRepository, + Tracer tracer) { + this.ldesFragmentRepository = ldesFragmentRepository; + this.tracer = tracer; + } + + @Override + public void addMemberToFragment(LdesFragment ldesFragment, LdesMember ldesMember, Span parentSpan) { + Span finalSpan = tracer.nextSpan(parentSpan).name("add Member to fragment").start(); + ldesFragment.addMember(ldesMember.getLdesMemberId()); + ldesFragmentRepository.saveFragment(ldesFragment); + finalSpan.end(); + } + +} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationUpdater.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationUpdater.java deleted file mode 100644 index 9b0226cf80..0000000000 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationUpdater.java +++ /dev/null @@ -1,9 +0,0 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.FragmentationProperties; -import org.springframework.context.ApplicationContext; - -public interface FragmentationUpdater { - FragmentationService updateFragmentationService(ApplicationContext applicationContext, - FragmentationService fragmentationService, FragmentationProperties properties); -} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreator.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreator.java new file mode 100644 index 0000000000..35abee3c46 --- /dev/null +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreator.java @@ -0,0 +1,6 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; + +public interface RootFragmentCreator { + + void createRootFragmentForView(String viewName); +} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceImpl.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImpl.java similarity index 62% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceImpl.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImpl.java index 27485251ce..7340762ee8 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceImpl.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImpl.java @@ -5,27 +5,24 @@ import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Tracer; +import org.springframework.stereotype.Component; import java.util.List; import java.util.Optional; -public class FragmentationServiceImpl implements FragmentationService { +@Component +public class RootFragmentCreatorImpl implements RootFragmentCreator { + private final LdesFragmentRepository ldesFragmentRepository; private final LdesConfig ldesConfig; - private final Tracer tracer; - public FragmentationServiceImpl(LdesFragmentRepository ldesFragmentRepository, - LdesConfig ldesConfig, String name, Tracer tracer) { + public RootFragmentCreatorImpl(LdesFragmentRepository ldesFragmentRepository, LdesConfig ldesConfig) { this.ldesFragmentRepository = ldesFragmentRepository; this.ldesConfig = ldesConfig; - this.tracer = tracer; - addRootFragment(name); } - private void addRootFragment(String viewName) { + @Override + public void createRootFragmentForView(String viewName) { Optional optionalRoot = ldesFragmentRepository .retrieveRootFragment(viewName); if (optionalRoot.isEmpty()) { @@ -42,13 +39,4 @@ private void createRoot(String viewName) { fragmentInfo); ldesFragmentRepository.saveFragment(ldesFragment); } - - @Override - public void addMemberToFragment(LdesFragment ldesFragment, LdesMember ldesMember, Span parentSpan) { - Span finalSpan = tracer.nextSpan(parentSpan).name("add Member to fragment").start(); - ldesFragment.addMember(ldesMember.getLdesMemberId()); - ldesFragmentRepository.saveFragment(ldesFragment); - finalSpan.end(); - } - } diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfig.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfig.java new file mode 100644 index 0000000000..9fd8ebc0c6 --- /dev/null +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfig.java @@ -0,0 +1,30 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewConfig; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewSpecification; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; +import java.util.stream.Collectors; + +@Configuration +@EnableConfigurationProperties() +@ComponentScan("be.vlaanderen.informatievlaanderen.ldes.server") +public class FragmentationStrategyConfig { + + @Bean + public Map fragmentationStrategyMap( + FragmentationStrategyCreator fragmentationStrategyCreator, + ViewConfig viewConfig) { + return viewConfig + .getViews() + .stream() + .collect(Collectors.toMap(ViewSpecification::getName, + fragmentationStrategyCreator::createFragmentationStrategyForView)); + } + +} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreator.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreator.java new file mode 100644 index 0000000000..5c6519bd0a --- /dev/null +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreator.java @@ -0,0 +1,8 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewSpecification; + +public interface FragmentationStrategyCreator { + FragmentationStrategy createFragmentationStrategyForView(ViewSpecification viewSpecification); +} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImpl.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImpl.java new file mode 100644 index 0000000000..4a09a7f710 --- /dev/null +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImpl.java @@ -0,0 +1,58 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategyImpl; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.RootFragmentCreator; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationConfig; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewSpecification; +import org.springframework.cloud.sleuth.Tracer; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class FragmentationStrategyCreatorImpl implements FragmentationStrategyCreator { + private final ApplicationContext applicationContext; + private final LdesFragmentRepository ldesFragmentRepository; + private final RootFragmentCreator rootFragmentCreator; + private final Tracer tracer; + + public FragmentationStrategyCreatorImpl(ApplicationContext applicationContext, + LdesFragmentRepository ldesFragmentRepository, RootFragmentCreator rootFragmentCreator, Tracer tracer) { + this.applicationContext = applicationContext; + this.ldesFragmentRepository = ldesFragmentRepository; + this.rootFragmentCreator = rootFragmentCreator; + this.tracer = tracer; + } + + public FragmentationStrategy createFragmentationStrategyForView(ViewSpecification viewSpecification) { + rootFragmentCreator.createRootFragmentForView(viewSpecification.getName()); + FragmentationStrategy fragmentationStrategy = new FragmentationStrategyImpl(ldesFragmentRepository, tracer); + if (viewSpecification.getFragmentations() != null) { + fragmentationStrategy = wrapFragmentationStrategy(viewSpecification.getFragmentations(), + fragmentationStrategy); + } + return fragmentationStrategy; + } + + private FragmentationStrategy wrapFragmentationStrategy(List fragmentationConfigs, + FragmentationStrategy fragmentationStrategy) { + for (int i = fragmentationConfigs.size() - 1; i >= 0; i--) { + FragmentationConfig currentFragmentationConfig = fragmentationConfigs.get(i); + fragmentationStrategy = wrapFragmentationStrategyUsingFragmentationConfig(fragmentationStrategy, + currentFragmentationConfig); + } + return fragmentationStrategy; + } + + private FragmentationStrategy wrapFragmentationStrategyUsingFragmentationConfig( + FragmentationStrategy fragmentationStrategy, FragmentationConfig currentFragmentationConfig) { + FragmentationStrategyWrapper fragmentationStrategyWrapper = (FragmentationStrategyWrapper) applicationContext + .getBean(currentFragmentationConfig.getName()); + fragmentationStrategy = fragmentationStrategyWrapper.wrapFragmentationStrategy(applicationContext, + fragmentationStrategy, currentFragmentationConfig.getProperties()); + return fragmentationStrategy; + } +} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyWrapper.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyWrapper.java new file mode 100644 index 0000000000..7d4bb941e1 --- /dev/null +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyWrapper.java @@ -0,0 +1,10 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationProperties; +import org.springframework.context.ApplicationContext; + +public interface FragmentationStrategyWrapper { + FragmentationStrategy wrapFragmentationStrategy(ApplicationContext applicationContext, + FragmentationStrategy fragmentationStrategy, FragmentationProperties properties); +} diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationConfig.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationConfig.java similarity index 82% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationConfig.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationConfig.java index 0bd278b080..8eda0834df 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationConfig.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationConfig.java @@ -1,4 +1,4 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects; import java.util.Map; diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationProperties.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationProperties.java similarity index 94% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationProperties.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationProperties.java index cb6fe424db..663bbed1d2 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationProperties.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationProperties.java @@ -1,4 +1,4 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects; import be.vlaanderen.informatievlaanderen.ldes.server.domain.exceptions.MissingConfigurationException; diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewConfig.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewConfig.java similarity index 82% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewConfig.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewConfig.java index 3fe7840762..473a11b02c 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewConfig.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewConfig.java @@ -1,4 +1,4 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewSpecification.java b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewSpecification.java similarity index 83% rename from ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewSpecification.java rename to ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewSpecification.java index a9a0ec79de..df9d35be58 100644 --- a/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewSpecification.java +++ b/ldes-server-domain/src/main/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewSpecification.java @@ -1,4 +1,4 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects; import java.util.List; diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfigTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfigTest.java deleted file mode 100644 index e87113964f..0000000000 --- a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationStrategyConfigTest.java +++ /dev/null @@ -1,114 +0,0 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; - -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationService; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationUpdater; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.repository.LdesMemberRepository; -import org.jetbrains.annotations.NotNull; -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; - -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; - -class FragmentationStrategyConfigTest { - - private static final Map TIMEBASED_PROPERTIES = Map.of("timebasedProperty", "time"); - private static final Map GEOSPATIAL_PROPERTIES = Map.of("geospatialProperty", "geo"); - - private static final Map SECOND_TIMEBASED_PROPERTIES = Map.of("timebasedProperty", "secondtime"); - private static final String GEOSPATIAL = "geospatial"; - private static final String TIMEBASED = "timebased"; - private static final String COLLECTION_NAME = "collectionname"; - - @Test - void when_FragmentationStrategyConfigIsCorrectlyConfigured_DecoratedFragmentationServiceIsReturned() { - ApplicationContext applicationContext = mock(ApplicationContext.class); - setUpLdesConfig(applicationContext); - FragmentationUpdater timebasedFragmentationUpdater = getFragmentationUpdater(applicationContext, TIMEBASED); - FragmentationService timebasedFragmentationService = mock(FragmentationService.class); - FragmentationService secondTimebasedFragmentationService = mock(FragmentationService.class); - when(timebasedFragmentationUpdater.updateFragmentationService(eq(applicationContext), - any(), - eq(new FragmentationProperties(TIMEBASED_PROPERTIES)))).thenReturn(timebasedFragmentationService); - when(timebasedFragmentationUpdater.updateFragmentationService(eq(applicationContext), - any(), - eq(new FragmentationProperties(SECOND_TIMEBASED_PROPERTIES)))) - .thenReturn(secondTimebasedFragmentationService); - - FragmentationUpdater geospatialFragmentationUpdater = getFragmentationUpdater(applicationContext, GEOSPATIAL); - FragmentationService geospatialFragmentationService = mock(FragmentationService.class); - when(geospatialFragmentationUpdater.updateFragmentationService(applicationContext, - timebasedFragmentationService, new FragmentationProperties(GEOSPATIAL_PROPERTIES))) - .thenReturn(geospatialFragmentationService); - - ViewConfig viewConfig = getViewConfig(); - - FragmentationStrategyConfig fragmentationStrategyConfig = new FragmentationStrategyConfig(); - Map fragmentationServiceMap = fragmentationStrategyConfig - .fragmentationService(applicationContext, viewConfig); - - assertEquals(2, fragmentationServiceMap.size()); - assertEquals(geospatialFragmentationService, fragmentationServiceMap.get("firstView")); - verify(timebasedFragmentationUpdater, - times(1)).updateFragmentationService(eq(applicationContext), any(), - eq(new FragmentationProperties(TIMEBASED_PROPERTIES))); - verify(geospatialFragmentationUpdater, - times(1)).updateFragmentationService(applicationContext, - timebasedFragmentationService, new FragmentationProperties(GEOSPATIAL_PROPERTIES)); - assertEquals(secondTimebasedFragmentationService, fragmentationServiceMap.get("secondView")); - verify(timebasedFragmentationUpdater, - times(1)).updateFragmentationService(eq(applicationContext), any(), - eq(new FragmentationProperties(SECOND_TIMEBASED_PROPERTIES))); - } - - private ViewConfig getViewConfig() { - ViewConfig viewConfig = new ViewConfig(); - ViewSpecification viewSpecification = getFirstViewSpecification(); - ViewSpecification secondViewSpecification = getSecondViewSpecification(); - viewConfig.setViews(List.of(viewSpecification, secondViewSpecification)); - return viewConfig; - } - - private ViewSpecification getFirstViewSpecification() { - ViewSpecification viewSpecification = new ViewSpecification(); - viewSpecification.setName("firstView"); - FragmentationConfig geospatialConfig = getFragmentationConfig(GEOSPATIAL, GEOSPATIAL_PROPERTIES); - FragmentationConfig timebasedConfig = getFragmentationConfig(TIMEBASED, TIMEBASED_PROPERTIES); - viewSpecification.setFragmentations(List.of(geospatialConfig, timebasedConfig)); - return viewSpecification; - } - - private FragmentationConfig getFragmentationConfig(String name, Map config) { - FragmentationConfig geospatialConfig = new FragmentationConfig(); - geospatialConfig.setName(name); - geospatialConfig.setConfig(config); - return geospatialConfig; - } - - private ViewSpecification getSecondViewSpecification() { - ViewSpecification secondViewSpecification = new ViewSpecification(); - secondViewSpecification.setName("secondView"); - FragmentationConfig secondTimebasedConfig = getFragmentationConfig(TIMEBASED, SECOND_TIMEBASED_PROPERTIES); - secondViewSpecification.setFragmentations(List.of(secondTimebasedConfig)); - return secondViewSpecification; - } - - private FragmentationUpdater getFragmentationUpdater(ApplicationContext applicationContext, String timebased) { - FragmentationUpdater timebasedFragmentationUpdater = mock(FragmentationUpdater.class); - when(applicationContext.getBean(timebased)).thenReturn(timebasedFragmentationUpdater); - return timebasedFragmentationUpdater; - } - - private void setUpLdesConfig(ApplicationContext applicationContext) { - LdesConfig ldesConfig = new LdesConfig(); - ldesConfig.setCollectionName(COLLECTION_NAME); - when(applicationContext.getBean(LdesConfig.class)).thenReturn(ldesConfig); - when(applicationContext.getBean(LdesMemberRepository.class)).thenReturn(mock(LdesMemberRepository.class)); - when(applicationContext.getBean(LdesFragmentRepository.class)).thenReturn(mock(LdesFragmentRepository.class)); - } - -} \ No newline at end of file diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImplTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImplTest.java index ab5f5f5f06..e15f4c4403 100644 --- a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImplTest.java +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationExecutorImplTest.java @@ -23,18 +23,18 @@ class FragmentationExecutorImplTest { private static final String VIEW_NAME = "view"; - private final FragmentationService fragmentationService = mock(FragmentationService.class); + private final FragmentationStrategy fragmentationStrategy = mock(FragmentationStrategy.class); private final LdesFragmentRepository ldesFragmentRepository = mock(LdesFragmentRepository.class); private FragmentationExecutorImpl fragmentationExecutor; @BeforeEach void setUp() { - fragmentationExecutor = new FragmentationExecutorImpl(Map.of(VIEW_NAME, fragmentationService), + fragmentationExecutor = new FragmentationExecutorImpl(Map.of(VIEW_NAME, fragmentationStrategy), ldesFragmentRepository, mockTracer()); } @Test - void when_FragmentExecutionOnMemberIsCalled_RootNodeIsRetrievedAndFragmentationServiceIsCalled() { + void when_FragmentExecutionOnMemberIsCalled_RootNodeIsRetrievedAndFragmentationStrategyIsCalled() { LdesFragment ldesFragment = new LdesFragment("id", new FragmentInfo(VIEW_NAME, List.of())); when(ldesFragmentRepository.retrieveRootFragment(VIEW_NAME)) .thenReturn(Optional.of(ldesFragment)); @@ -44,7 +44,7 @@ void when_FragmentExecutionOnMemberIsCalled_RootNodeIsRetrievedAndFragmentationS verify(ldesFragmentRepository, times(1)) .retrieveRootFragment(VIEW_NAME); - verify(fragmentationService, times(1)).addMemberToFragment(eq(ldesFragment), + verify(fragmentationStrategy, times(1)).addMemberToFragment(eq(ldesFragment), eq(ldesMember), any()); } @@ -71,11 +71,11 @@ void when_FragmentationExecutorIsCalledInParallel_FragmentationHappensByOneThrea IntStream.range(0, 100).parallel() .forEach(i -> fragmentationExecutor.executeFragmentation(mock(LdesMember.class))); - InOrder inOrder = inOrder(ldesFragmentRepository, fragmentationService); + InOrder inOrder = inOrder(ldesFragmentRepository, fragmentationStrategy); IntStream.range(0, 100).forEach(i -> { inOrder.verify(ldesFragmentRepository, times(1)) .retrieveRootFragment(VIEW_NAME); - inOrder.verify(fragmentationService, times(1)).addMemberToFragment(eq(ldesFragment), + inOrder.verify(fragmentationStrategy, times(1)).addMemberToFragment(eq(ldesFragment), any(), any()); }); inOrder.verifyNoMoreInteractions(); diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceDecoratorTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyDecoratorTest.java similarity index 75% rename from ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceDecoratorTest.java rename to ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyDecoratorTest.java index 389c59df25..e2c7800a71 100644 --- a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceDecoratorTest.java +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyDecoratorTest.java @@ -9,7 +9,6 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Tracer; import java.util.List; @@ -17,17 +16,17 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; -class FragmentationServiceDecoratorTest { - FragmentationService fragmentationService = mock(FragmentationService.class); +class FragmentationStrategyDecoratorTest { + FragmentationStrategy fragmentationStrategy = mock(FragmentationStrategy.class); LdesFragmentRepository fragmentRepository = mock(LdesFragmentRepository.class); - private FragmentationServiceDecorator fragmentationServiceDecorator; + private FragmentationStrategyDecorator fragmentationStrategyDecorator; private static final String VIEW_NAME = "view"; private static final String PARENT_FRAGMENT_ID = "parent"; private static final String CHILD_FRAGMENT_ID = "child"; @BeforeEach void setUp() { - fragmentationServiceDecorator = new FragmentationServiceDecoratorTestImpl(fragmentationService, + fragmentationStrategyDecorator = new FragmentationStrategyDecoratorTestImpl(fragmentationStrategy, fragmentRepository); } @@ -39,7 +38,7 @@ void when_ParentDoesNotYetHaveRelationToChild_AddRelationAndSaveToDatabase() { LdesFragment childFragment = new LdesFragment(CHILD_FRAGMENT_ID, new FragmentInfo(VIEW_NAME, List.of())); - fragmentationServiceDecorator.addRelationFromParentToChild(parentFragment, + fragmentationStrategyDecorator.addRelationFromParentToChild(parentFragment, childFragment); assertEquals(1, parentFragment.getRelations().size()); @@ -58,7 +57,7 @@ void when_ParentHasRelationToChild_DoNotAddNewRelation() { new FragmentInfo(VIEW_NAME, List.of())); parentFragment.addRelation(new TreeRelation("", CHILD_FRAGMENT_ID, "", "", GENERIC_TREE_RELATION)); - fragmentationServiceDecorator.addRelationFromParentToChild(parentFragment, + fragmentationStrategyDecorator.addRelationFromParentToChild(parentFragment, childFragment); assertEquals(1, parentFragment.getRelations().size()); @@ -69,22 +68,22 @@ void when_ParentHasRelationToChild_DoNotAddNewRelation() { } @Test - void when_DecoratorAddsMemberToFragment_WrappedFragmentationServiceIsCalled() { + void when_DecoratorAddsMemberToFragment_WrappedFragmentationStrategyIsCalled() { LdesFragment parentFragment = new LdesFragment(PARENT_FRAGMENT_ID, new FragmentInfo(VIEW_NAME, List.of())); LdesMember ldesMember = mock(LdesMember.class); Span span = mock(Span.class); - fragmentationServiceDecorator.addMemberToFragment(parentFragment, ldesMember, span); - Mockito.verify(fragmentationService, + fragmentationStrategyDecorator.addMemberToFragment(parentFragment, ldesMember, span); + Mockito.verify(fragmentationStrategy, Mockito.times(1)).addMemberToFragment(parentFragment, ldesMember, span); } - static class FragmentationServiceDecoratorTestImpl extends - FragmentationServiceDecorator { + static class FragmentationStrategyDecoratorTestImpl extends + FragmentationStrategyDecorator { - protected FragmentationServiceDecoratorTestImpl(FragmentationService fragmentationService, + protected FragmentationStrategyDecoratorTestImpl(FragmentationStrategy fragmentationStrategy, LdesFragmentRepository ldesFragmentRepository) { - super(fragmentationService, ldesFragmentRepository); + super(fragmentationStrategy, ldesFragmentRepository); } } } \ No newline at end of file diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceImplTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImplTest.java similarity index 74% rename from ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceImplTest.java rename to ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImplTest.java index 6531784f08..65c7c637ba 100644 --- a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationServiceImplTest.java +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/FragmentationStrategyImplTest.java @@ -1,6 +1,5 @@ package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; -import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.LdesConfig; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; @@ -11,19 +10,19 @@ import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.*; -class FragmentationServiceImplTest { +class FragmentationStrategyImplTest { private final LdesFragmentRepository ldesFragmentRepository = mock(LdesFragmentRepository.class); - private final LdesConfig ldesConfig = mock(LdesConfig.class); private final Tracer tracer = mock(Tracer.class); - private final FragmentationServiceImpl fragmentationService = new FragmentationServiceImpl(ldesFragmentRepository, - ldesConfig, "view", tracer); + private final FragmentationStrategyImpl fragmentationStrategy = new FragmentationStrategyImpl( + ldesFragmentRepository, + tracer); @Test - void when_memberIsAddedToFragment_FragmentationServiceImplSavesUpdatedFragment() { + void when_memberIsAddedToFragment_FragmentationStrategyImplSavesUpdatedFragment() { LdesFragment ldesFragment = new LdesFragment("fragmentId", new FragmentInfo("view", List.of())); LdesMember ldesMember = mock(LdesMember.class); when(ldesMember.getLdesMemberId()).thenReturn("memberId"); @@ -33,7 +32,7 @@ void when_memberIsAddedToFragment_FragmentationServiceImplSavesUpdatedFragment() when(childSpan.name("add Member to fragment")).thenReturn(childSpan); when(childSpan.start()).thenReturn(childSpan); - fragmentationService.addMemberToFragment(ldesFragment, ldesMember, parentSpan); + fragmentationStrategy.addMemberToFragment(ldesFragment, ldesMember, parentSpan); verify(tracer, times(1)).nextSpan(parentSpan); verify(ldesFragmentRepository, times(1)).saveFragment(ldesFragment); diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfigTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfigTest.java new file mode 100644 index 0000000000..67c7154083 --- /dev/null +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyConfigTest.java @@ -0,0 +1,91 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationConfig; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewConfig; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewSpecification; +import org.junit.jupiter.api.Test; +import org.mockito.InOrder; +import org.springframework.context.ApplicationContext; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +class FragmentationStrategyConfigTest { + + private static final Map TIMEBASED_PROPERTIES = Map.of("timebasedProperty", "time"); + private static final Map GEOSPATIAL_PROPERTIES = Map.of("geospatialProperty", "geo"); + + private static final Map SECOND_TIMEBASED_PROPERTIES = Map.of("timebasedProperty", "secondtime"); + private static final String GEOSPATIAL = "geospatial"; + private static final String TIMEBASED = "timebased"; + + @Test + void when_FragmentationStrategyConfigIsCorrectlyConfigured_MapOfFragmentationStrategiesIsReturned() { + FragmentationStrategyCreator fragmentationStrategyCreator = mock(FragmentationStrategyCreator.class); + ViewConfig viewConfig = getViewConfig(); + FragmentationStrategy firstCreatedFragmentationStrategy = mock(FragmentationStrategy.class); + when(fragmentationStrategyCreator.createFragmentationStrategyForView(viewConfig.getViews().get(0))) + .thenReturn(firstCreatedFragmentationStrategy); + FragmentationStrategy secondCreatedFragmentationStrategy = mock(FragmentationStrategy.class); + when(fragmentationStrategyCreator.createFragmentationStrategyForView(viewConfig.getViews().get(1))) + .thenReturn(secondCreatedFragmentationStrategy); + + FragmentationStrategyConfig fragmentationStrategyConfig = new FragmentationStrategyConfig(); + Map actualFragmentationStrategyMap = fragmentationStrategyConfig + .fragmentationStrategyMap(fragmentationStrategyCreator, viewConfig); + + Map expectedFragmentationStrategyMap = Map.of("firstView", + firstCreatedFragmentationStrategy, "secondView", secondCreatedFragmentationStrategy); + assertEquals(expectedFragmentationStrategyMap, actualFragmentationStrategyMap); + InOrder inOrder = inOrder(fragmentationStrategyCreator); + inOrder.verify(fragmentationStrategyCreator, times(1)) + .createFragmentationStrategyForView(viewConfig.getViews().get(0)); + inOrder.verify(fragmentationStrategyCreator, times(1)) + .createFragmentationStrategyForView(viewConfig.getViews().get(1)); + inOrder.verifyNoMoreInteractions(); + } + + private ViewConfig getViewConfig() { + ViewConfig viewConfig = new ViewConfig(); + ViewSpecification viewSpecification = getFirstViewSpecification(); + ViewSpecification secondViewSpecification = getSecondViewSpecification(); + viewConfig.setViews(List.of(viewSpecification, secondViewSpecification)); + return viewConfig; + } + + private ViewSpecification getFirstViewSpecification() { + ViewSpecification viewSpecification = new ViewSpecification(); + viewSpecification.setName("firstView"); + FragmentationConfig geospatialConfig = getFragmentationConfig(GEOSPATIAL, GEOSPATIAL_PROPERTIES); + FragmentationConfig timebasedConfig = getFragmentationConfig(TIMEBASED, TIMEBASED_PROPERTIES); + viewSpecification.setFragmentations(List.of(geospatialConfig, timebasedConfig)); + return viewSpecification; + } + + private FragmentationConfig getFragmentationConfig(String name, Map config) { + FragmentationConfig geospatialConfig = new FragmentationConfig(); + geospatialConfig.setName(name); + geospatialConfig.setConfig(config); + return geospatialConfig; + } + + private ViewSpecification getSecondViewSpecification() { + ViewSpecification secondViewSpecification = new ViewSpecification(); + secondViewSpecification.setName("secondView"); + FragmentationConfig secondTimebasedConfig = getFragmentationConfig(TIMEBASED, SECOND_TIMEBASED_PROPERTIES); + secondViewSpecification.setFragmentations(List.of(secondTimebasedConfig)); + return secondViewSpecification; + } + + private FragmentationStrategyWrapper getFragmentationUpdater(ApplicationContext applicationContext, + String timebased) { + FragmentationStrategyWrapper timebasedFragmentationStrategyWrapper = mock(FragmentationStrategyWrapper.class); + when(applicationContext.getBean(timebased)).thenReturn(timebasedFragmentationStrategyWrapper); + return timebasedFragmentationStrategyWrapper; + } + +} \ No newline at end of file diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImplTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImplTest.java new file mode 100644 index 0000000000..f568bad13f --- /dev/null +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/services/FragmentationStrategyCreatorImplTest.java @@ -0,0 +1,98 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategy; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.FragmentationStrategyImpl; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services.RootFragmentCreator; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationConfig; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.FragmentationProperties; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects.ViewSpecification; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InOrder; +import org.springframework.cloud.sleuth.Tracer; +import org.springframework.context.ApplicationContext; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.*; + +class FragmentationStrategyCreatorImplTest { + private static final Map TIMEBASED_PROPERTIES = Map.of("timebasedProperty", "time"); + private static final Map GEOSPATIAL_PROPERTIES = Map.of("geospatialProperty", "geo"); + private static final String GEOSPATIAL = "geospatial"; + private static final String TIMEBASED = "timebased"; + + private final ApplicationContext applicationContext = mock(ApplicationContext.class); + private final LdesFragmentRepository ldesFragmentRepository = mock(LdesFragmentRepository.class); + private final RootFragmentCreator rootFragmentCreator = mock(RootFragmentCreator.class); + private final Tracer tracer = mock(Tracer.class); + private FragmentationStrategyCreatorImpl fragmentationStrategyCreator; + + @BeforeEach + void setUp() { + fragmentationStrategyCreator = new FragmentationStrategyCreatorImpl( + applicationContext, ldesFragmentRepository, rootFragmentCreator, tracer); + } + + @Test + void when_ViewSpecificationFragmentationConfigIsNull_FragmentationStrategyImplIsReturned() { + ViewSpecification viewSpecification = new ViewSpecification(); + viewSpecification.setName("firstView"); + + FragmentationStrategy fragmentationStrategy = fragmentationStrategyCreator + .createFragmentationStrategyForView(viewSpecification); + + assertTrue(fragmentationStrategy instanceof FragmentationStrategyImpl); + InOrder inOrder = inOrder(applicationContext, rootFragmentCreator); + inOrder.verify(rootFragmentCreator, times(1)).createRootFragmentForView(viewSpecification.getName()); + inOrder.verifyNoMoreInteractions(); + } + + @Test + void when_ViewSpecificationFragmentationConfigIsNotNull_WrappedFragmentationStrategyIsReturned() { + FragmentationStrategyWrapper timebasedFragmentationStrategyWrapper = mock(FragmentationStrategyWrapper.class); + when(applicationContext.getBean(TIMEBASED)).thenReturn(timebasedFragmentationStrategyWrapper); + FragmentationStrategy timebasedFragmentationStrategy = mock(FragmentationStrategy.class); + when(timebasedFragmentationStrategyWrapper.wrapFragmentationStrategy(eq(applicationContext), any(), + eq(new FragmentationProperties(TIMEBASED_PROPERTIES)))).thenReturn(timebasedFragmentationStrategy); + + FragmentationStrategyWrapper geospatialFragmentationStrategyWrapper = mock(FragmentationStrategyWrapper.class); + when(applicationContext.getBean(GEOSPATIAL)).thenReturn(geospatialFragmentationStrategyWrapper); + FragmentationStrategy geospatialFragmentationStrategy = mock(FragmentationStrategy.class); + when(geospatialFragmentationStrategyWrapper.wrapFragmentationStrategy(applicationContext, + timebasedFragmentationStrategy, new FragmentationProperties(GEOSPATIAL_PROPERTIES))) + .thenReturn(geospatialFragmentationStrategy); + + ViewSpecification viewSpecification = getViewSpecification(); + FragmentationStrategy fragmentationStrategy = fragmentationStrategyCreator + .createFragmentationStrategyForView(viewSpecification); + + assertEquals(geospatialFragmentationStrategy, fragmentationStrategy); + InOrder inOrder = inOrder(applicationContext, rootFragmentCreator); + inOrder.verify(rootFragmentCreator, times(1)).createRootFragmentForView(viewSpecification.getName()); + inOrder.verify(applicationContext, times(1)).getBean(TIMEBASED); + inOrder.verify(applicationContext, times(1)).getBean(GEOSPATIAL); + inOrder.verifyNoMoreInteractions(); + + } + + private ViewSpecification getViewSpecification() { + ViewSpecification viewSpecification = new ViewSpecification(); + viewSpecification.setName("firstView"); + FragmentationConfig geospatialConfig = getFragmentationConfig(GEOSPATIAL, GEOSPATIAL_PROPERTIES); + FragmentationConfig timebasedConfig = getFragmentationConfig(TIMEBASED, TIMEBASED_PROPERTIES); + viewSpecification.setFragmentations(List.of(geospatialConfig, timebasedConfig)); + return viewSpecification; + } + + private FragmentationConfig getFragmentationConfig(String name, Map config) { + FragmentationConfig geospatialConfig = new FragmentationConfig(); + geospatialConfig.setName(name); + geospatialConfig.setConfig(config); + return geospatialConfig; + } +} \ No newline at end of file diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationPropertiesTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationPropertiesTest.java similarity index 74% rename from ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationPropertiesTest.java rename to ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationPropertiesTest.java index 9440831df1..b85be2b407 100644 --- a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/FragmentationPropertiesTest.java +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/FragmentationPropertiesTest.java @@ -1,4 +1,4 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects; import be.vlaanderen.informatievlaanderen.ldes.server.domain.exceptions.MissingConfigurationException; import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesmember.entities.LdesMember; @@ -42,13 +42,21 @@ void when_ValueOfKeyDoesNotExist_ThenGetOrDefaultReturnsDefaultValue() { @Test void test_Equality() { + FragmentationProperties otherFragmentationProperties = new FragmentationProperties(Map.of("key", "value")); + assertEquals(otherFragmentationProperties, fragmentationProperties); + assertEquals(otherFragmentationProperties.hashCode(), fragmentationProperties.hashCode()); assertEquals(fragmentationProperties, fragmentationProperties); + assertEquals(fragmentationProperties.hashCode(), fragmentationProperties.hashCode()); + assertEquals(otherFragmentationProperties, otherFragmentationProperties); + assertEquals(otherFragmentationProperties.hashCode(), otherFragmentationProperties.hashCode()); } @ParameterizedTest @ArgumentsSource(FragmentationPropertiesArgumentsProvider.class) void test_Inequality(Object otherFragmentationProperties) { assertNotEquals(fragmentationProperties, otherFragmentationProperties); + if (otherFragmentationProperties != null) + assertNotEquals(fragmentationProperties.hashCode(), otherFragmentationProperties.hashCode()); } static class FragmentationPropertiesArgumentsProvider implements ArgumentsProvider { diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewConfigTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewConfigTest.java similarity index 95% rename from ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewConfigTest.java rename to ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewConfigTest.java index 2651eadf49..7bd0e0d5eb 100644 --- a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/config/ViewConfigTest.java +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/viewcreation/valueobjects/ViewConfigTest.java @@ -1,4 +1,4 @@ -package be.vlaanderen.informatievlaanderen.ldes.server.domain.config; +package be.vlaanderen.informatievlaanderen.ldes.server.domain.viewcreation.valueobjects; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From 2b230f5eee5f019bf7d3105e6d2cb9791576eaf3 Mon Sep 17 00:00:00 2001 From: WLefever Date: Tue, 27 Sep 2022 17:00:32 +0200 Subject: [PATCH 2/2] Feature: restructure fragmentation in separate package --- .../services/RootFragmentCreatorImplTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImplTest.java diff --git a/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImplTest.java b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImplTest.java new file mode 100644 index 0000000000..6f4c46ab55 --- /dev/null +++ b/ldes-server-domain/src/test/java/be/vlaanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/RootFragmentCreatorImplTest.java @@ -0,0 +1,46 @@ +package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; + +import be.vlaanderen.informatievlaanderen.ldes.server.domain.config.LdesConfig; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; +import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InOrder; + +import java.util.Optional; + +import static org.mockito.Mockito.*; + +class RootFragmentCreatorImplTest { + + private final LdesFragmentRepository ldesFragmentRepository = mock(LdesFragmentRepository.class); + private RootFragmentCreator rootFragmentCreator; + + @BeforeEach + void setUp() { + LdesConfig ldesConfig = new LdesConfig(); + ldesConfig.setHostName("hostname"); + rootFragmentCreator = new RootFragmentCreatorImpl(ldesFragmentRepository, ldesConfig); + } + + @Test + void when_RootFragmentDoesNotExist_ItIsCreatedAndSaved() { + when(ldesFragmentRepository.retrieveRootFragment("view")).thenReturn(Optional.empty()); + rootFragmentCreator.createRootFragmentForView("view"); + + InOrder inOrder = inOrder(ldesFragmentRepository); + inOrder.verify(ldesFragmentRepository, times(1)).retrieveRootFragment("view"); + inOrder.verify(ldesFragmentRepository, times(1)).saveFragment(any()); + inOrder.verifyNoMoreInteractions(); + } + + @Test + void when_RootFragmentExists_NothingHappens() { + when(ldesFragmentRepository.retrieveRootFragment("view")).thenReturn(Optional.of(mock(LdesFragment.class))); + rootFragmentCreator.createRootFragmentForView("view"); + + InOrder inOrder = inOrder(ldesFragmentRepository); + inOrder.verify(ldesFragmentRepository, times(1)).retrieveRootFragment("view"); + inOrder.verifyNoMoreInteractions(); + } +} \ No newline at end of file