diff --git a/CHANGELOG.md b/CHANGELOG.md index 03c5896..9c03991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to ## [Unreleased] +## [1.2.0] - 2018-01-26 + +### Added +- InterceptorContextProvider service provider + ## 1.1.0 - 2018-01-17 ### Changed diff --git a/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/InterceptorContext.java b/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/InterceptorContext.java index 55fee65..9c4649a 100644 --- a/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/InterceptorContext.java +++ b/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/InterceptorContext.java @@ -1,11 +1,24 @@ package uk.gov.justice.services.core.interceptor; +import uk.gov.justice.services.core.interceptor.spi.InterceptorContextProvider; import uk.gov.justice.services.messaging.JsonEnvelope; import java.util.Optional; public interface InterceptorContext { + /** + * Create an interceptor context with an input {@link ContextPayload} that wraps the input + * envelope, an output {@link ContextPayload} with no envelope and an injection point. + * + * @param inputEnvelope the input JsonEnvelope + * @return the new InterceptorContext + */ + static InterceptorContext interceptorContextWithInput(final JsonEnvelope inputEnvelope) { + return InterceptorContextProvider.provider().interceptorContextWithInput(inputEnvelope); + + } + /** * Create a copy of this interceptor context that will contain the provided input * envelope. diff --git a/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProvider.java b/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProvider.java new file mode 100644 index 0000000..2d6f5b8 --- /dev/null +++ b/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProvider.java @@ -0,0 +1,25 @@ +package uk.gov.justice.services.core.interceptor.spi; + +import uk.gov.justice.services.core.interceptor.InterceptorContext; +import uk.gov.justice.services.messaging.JsonEnvelope; + +import java.util.Iterator; +import java.util.ServiceLoader; + +public interface InterceptorContextProvider { + + static InterceptorContextProvider provider() { + final ServiceLoader loader = ServiceLoader.load(InterceptorContextProvider.class); + final Iterator iterator = loader.iterator(); + + if (iterator.hasNext()) { + return iterator.next(); + } else { + throw new InterceptorContextProviderNotFoundException("No InterceptorContextProvider implementation found"); + } + } + + public abstract InterceptorContext interceptorContextWithInput(final JsonEnvelope inputEnvelope); + + +} diff --git a/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderNotFoundException.java b/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderNotFoundException.java new file mode 100644 index 0000000..74b280f --- /dev/null +++ b/framework-api-core/src/main/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderNotFoundException.java @@ -0,0 +1,10 @@ +package uk.gov.justice.services.core.interceptor.spi; + +public class InterceptorContextProviderNotFoundException extends RuntimeException { + + private static final long serialVersionUID = -9004536849208475775L; + + public InterceptorContextProviderNotFoundException(final String message) { + super(message); + } +} \ No newline at end of file diff --git a/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/DummyInterceptorContextProvider.java b/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/DummyInterceptorContextProvider.java new file mode 100644 index 0000000..74765c7 --- /dev/null +++ b/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/DummyInterceptorContextProvider.java @@ -0,0 +1,13 @@ +package uk.gov.justice.services.core.interceptor.spi; + +import uk.gov.justice.services.core.interceptor.InterceptorContext; +import uk.gov.justice.services.messaging.JsonEnvelope; + +public class DummyInterceptorContextProvider implements InterceptorContextProvider { + + @Override + public InterceptorContext interceptorContextWithInput(final JsonEnvelope inputEnvelope) { + return null; + } + +} diff --git a/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderNotFoundExceptionTest.java b/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderNotFoundExceptionTest.java new file mode 100644 index 0000000..a47ea8a --- /dev/null +++ b/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderNotFoundExceptionTest.java @@ -0,0 +1,16 @@ +package uk.gov.justice.services.core.interceptor.spi; + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +import org.junit.Test; + +public class InterceptorContextProviderNotFoundExceptionTest { + + @Test + public void shouldCreateExceptionWithMessage() throws Exception { + final InterceptorContextProviderNotFoundException exception = new InterceptorContextProviderNotFoundException("Test message"); + assertThat(exception.getMessage(), is("Test message")); + } + +} \ No newline at end of file diff --git a/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderTest.java b/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderTest.java new file mode 100644 index 0000000..680c2d4 --- /dev/null +++ b/framework-api-core/src/test/java/uk/gov/justice/services/core/interceptor/spi/InterceptorContextProviderTest.java @@ -0,0 +1,19 @@ +package uk.gov.justice.services.core.interceptor.spi; + +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsInstanceOf.instanceOf; + +import org.junit.Test; + +public class InterceptorContextProviderTest { + + @Test + public void shouldProvideInterceptorContextProvider() throws Exception { + final InterceptorContextProvider interceptorContextProvider = InterceptorContextProvider.provider(); + + assertThat(interceptorContextProvider, notNullValue()); + assertThat(interceptorContextProvider, instanceOf(DummyInterceptorContextProvider.class)); + } + +} diff --git a/framework-api-core/src/test/java/uk/gov/justice/services/messaging/JsonEnvelopeProviderTest.java b/framework-api-core/src/test/java/uk/gov/justice/services/messaging/spi/JsonEnvelopeProviderTest.java similarity index 93% rename from framework-api-core/src/test/java/uk/gov/justice/services/messaging/JsonEnvelopeProviderTest.java rename to framework-api-core/src/test/java/uk/gov/justice/services/messaging/spi/JsonEnvelopeProviderTest.java index 1364365..8187a09 100644 --- a/framework-api-core/src/test/java/uk/gov/justice/services/messaging/JsonEnvelopeProviderTest.java +++ b/framework-api-core/src/test/java/uk/gov/justice/services/messaging/spi/JsonEnvelopeProviderTest.java @@ -1,4 +1,4 @@ -package uk.gov.justice.services.messaging; +package uk.gov.justice.services.messaging.spi; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/framework-api-core/src/test/resources/META-INF/services/uk.gov.justice.services.core.interceptor.spi.InterceptorContextProvider b/framework-api-core/src/test/resources/META-INF/services/uk.gov.justice.services.core.interceptor.spi.InterceptorContextProvider new file mode 100644 index 0000000..2ca4572 --- /dev/null +++ b/framework-api-core/src/test/resources/META-INF/services/uk.gov.justice.services.core.interceptor.spi.InterceptorContextProvider @@ -0,0 +1 @@ +uk.gov.justice.services.core.interceptor.spi.DummyInterceptorContextProvider \ No newline at end of file