diff --git a/api/src/main/java/dev/fitko/fitconnect/api/config/ApplicationConfig.java b/api/src/main/java/dev/fitko/fitconnect/api/config/ApplicationConfig.java index 5c57e4aa7fa47ba9f2d40b0697ab5c34537e91d9..762597640529b490d53b1f1bb503e3247ab04dd0 100644 --- a/api/src/main/java/dev/fitko/fitconnect/api/config/ApplicationConfig.java +++ b/api/src/main/java/dev/fitko/fitconnect/api/config/ApplicationConfig.java @@ -42,6 +42,8 @@ public class ApplicationConfig { private EnvironmentName activeEnvironment; + private String submissionDataSchemaPath; + private Environment getEnvironmentByName(final EnvironmentName environmentName) { if (environments.containsKey(environmentName)) { return environments.get(environmentName); diff --git a/api/src/main/java/dev/fitko/fitconnect/api/config/SchemaConfig.java b/api/src/main/java/dev/fitko/fitconnect/api/config/SchemaConfig.java index 3250d70249af4e2b0308c01f664a8d33d09d1bb6..b1d3c0d49c2823d3b261acc212514b5b57922005 100644 --- a/api/src/main/java/dev/fitko/fitconnect/api/config/SchemaConfig.java +++ b/api/src/main/java/dev/fitko/fitconnect/api/config/SchemaConfig.java @@ -15,8 +15,7 @@ public enum SchemaConfig { SET_V_1_0_1(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.1/set-payload.schema.json"), "set_schema_1.0.1.json"), SET_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.0/set-payload.schema.json"), "set_schema_1.0.0.json"), METADATA_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("metadata/1.0.0/metadata.schema.json"), "metadata_schema_1.0.0.json"), - XZUFI_DESTINATION_SCHEMA(SCHEMA_BASE_URL.schemaUri.resolve("xzufi/destination.schema.json"), "destination_schema.json"), - SUBMISSION_DATA_SCHEMA(URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"), "s00000096_1.0.schema.json"); + XZUFI_DESTINATION_SCHEMA(SCHEMA_BASE_URL.schemaUri.resolve("xzufi/destination.schema.json"), "destination_schema.json"); private final URI schemaUri; @@ -50,12 +49,6 @@ public enum SchemaConfig { .collect(Collectors.toList()); } - public static List<String> getSubmissionDataSchemaPaths(final String submissionDataSchemaBaseDir) { - return Stream.of(SUBMISSION_DATA_SCHEMA.fileName) - .map(fileName -> submissionDataSchemaBaseDir + "/" + fileName) - .collect(Collectors.toList()); - } - @Override public String toString() { return schemaUri.toString(); diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/schema/SchemaResources.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/schema/SchemaResources.java index f64692e175cced47719ca2fca139d4bd8edbc106..4c53496cf0675da5684749a2f018ac339e9d738e 100644 --- a/api/src/main/java/dev/fitko/fitconnect/api/domain/schema/SchemaResources.java +++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/schema/SchemaResources.java @@ -10,5 +10,5 @@ public class SchemaResources { List<String> setSchemaPaths; List<String> metadataSchemaPaths; List<String> destinationSchemaPaths; - List<String> submissionDataSchemaPaths; + String submissionDataSchemaPath; } diff --git a/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java b/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java index 24eff7a4a2621a0b10291a9b9793c445cbf52a34..975fb202ad1271d8bdbaa11df19720d4c00097c0 100644 --- a/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java +++ b/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java @@ -61,7 +61,6 @@ public final class ClientFactory { private static final String SET_SCHEMA_DIR = "/set-schema"; private static final String DESTINATION_SCHEMA_DIR = "/destination-schema"; private static final String METADATA_SCHEMA_DIR = "/metadata-schema"; - private static final String SUBMISSION_DATA_SCHEMA_DIR = "/submission-data-schema"; private ClientFactory() { } @@ -129,7 +128,7 @@ public final class ClientFactory { public static RoutingClient routingClient(final ApplicationConfig config) { LOGGER.info("Initializing routing client ..."); final RestTemplate restTemplate = getRestTemplate(config, ApplicationConfigLoader.loadBuildInfo()); - final SchemaProvider schemaProvider = getSchemaProvider(restTemplate); + final SchemaProvider schemaProvider = getSchemaProvider(restTemplate, config.getSubmissionDataSchemaPath()); final OAuthService authService = getSenderConfiguredAuthService(config, restTemplate); final MessageDigestService messageDigestService = getMessageDigestService(); @@ -145,7 +144,7 @@ public final class ClientFactory { private static Sender getSender(final ApplicationConfig config, final BuildInfo buildInfo) { final RestTemplate restTemplate = getRestTemplate(config, buildInfo); - final SchemaProvider schemaProvider = getSchemaProvider(restTemplate); + final SchemaProvider schemaProvider = getSchemaProvider(restTemplate, config.getSubmissionDataSchemaPath()); final MessageDigestService messageDigestService = getMessageDigestService(); final CryptoService cryptoService = getCryptoService(messageDigestService); @@ -162,7 +161,7 @@ public final class ClientFactory { private static Subscriber getSubscriber(final ApplicationConfig config, final BuildInfo buildInfo) { final RestTemplate restTemplate = getRestTemplate(config, buildInfo); - final SchemaProvider schemaProvider = getSchemaProvider(restTemplate); + final SchemaProvider schemaProvider = getSchemaProvider(restTemplate, config.getSubmissionDataSchemaPath()); final MessageDigestService messageDigestService = getMessageDigestService(); final CryptoService cryptoService = getCryptoService(messageDigestService); @@ -231,12 +230,11 @@ public final class ClientFactory { return new EventLogVerifier(keyService, validationService); } - private static SchemaProvider getSchemaProvider(RestTemplate restTemplate) { + private static SchemaProvider getSchemaProvider(RestTemplate restTemplate, String submissionDataSchemaPath) { final List<String> setSchemaFiles = SchemaConfig.getSetSchemaFilePaths(SET_SCHEMA_DIR); final List<String> metadataSchemaFiles = SchemaConfig.getMetadataSchemaFileNames(METADATA_SCHEMA_DIR); final List<String> destinationSchemaFiles = SchemaConfig.getDestinationSchemaPaths(DESTINATION_SCHEMA_DIR); - final List<String> submissionDataSchemaFiles = SchemaConfig.getSubmissionDataSchemaPaths(SUBMISSION_DATA_SCHEMA_DIR); - final SchemaResources schemaResources = new SchemaResources(setSchemaFiles, metadataSchemaFiles, destinationSchemaFiles, submissionDataSchemaFiles); + final SchemaResources schemaResources = new SchemaResources(setSchemaFiles, metadataSchemaFiles, destinationSchemaFiles, submissionDataSchemaPath); return new SchemaResourceProvider(restTemplate, schemaResources); } diff --git a/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java b/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java index cb81e6849f036aaf147d460cac118a155c35b394..d753850ab0851810afb81e26e1b21d3eeffdd87c 100644 --- a/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java +++ b/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java @@ -12,12 +12,11 @@ import org.slf4j.LoggerFactory; import org.springframework.web.client.RestTemplate; import java.io.BufferedReader; +import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -48,7 +47,7 @@ public class SchemaResourceProvider implements SchemaProvider { populateSetSchemas(schemaResources.getSetSchemaPaths()); populateMetadataSchemas(schemaResources.getMetadataSchemaPaths()); populateDestinationSchemas(schemaResources.getDestinationSchemaPaths()); - populateSubmissionDataSchemas(schemaResources.getSubmissionDataSchemaPaths()); + populateSubmissionDataSchemas(schemaResources.getSubmissionDataSchemaPath()); } private void populateMetadataSchemas(final List<String> metadataSchemaPaths) { @@ -66,9 +65,11 @@ public class SchemaResourceProvider implements SchemaProvider { getResourceFiles(destinationSchemaPaths).forEach(this::addDestinationSchema); } - private void populateSubmissionDataSchemas(final List<String> submissionDataSchemaPaths) { + private void populateSubmissionDataSchemas(final String submissionDataSchemaPath) { LOGGER.info("Initializing submission data schemas"); - getResourceFiles(submissionDataSchemaPaths).forEach(this::addSubmissionDataSchema); + if (submissionDataSchemaPath != null && !submissionDataSchemaPath.isEmpty()) { + getResourceFiles(submissionDataSchemaPath).forEach(this::addSubmissionDataSchema); + } } @Override @@ -156,6 +157,15 @@ public class SchemaResourceProvider implements SchemaProvider { return schemaFiles.stream().map(SchemaResourceProvider::readResourceToString).collect(Collectors.toList()); } + private List<String> getResourceFiles(final String schemaPath) { + + File schemaFolder = new File(Objects.requireNonNull(SchemaResourceProvider.class.getClassLoader().getResource(schemaPath)).getFile()); + + return Arrays.stream(Objects.requireNonNull(schemaFolder.listFiles())) + .map(file -> "/" + schemaPath + "/" + file.getName()) + .map(SchemaResourceProvider::readResourceToString).collect(Collectors.toList()); + } + private static String readResourceToString(final String schemaFile) { try (final InputStream is = SchemaResourceProvider.class.getResourceAsStream(schemaFile); final BufferedReader reader = new BufferedReader(new InputStreamReader(is))) { diff --git a/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java index c894ac53ad9d76576289815db42492223f081f7b..dc93dc13aec5b170a2aca5bff8a24c0f1225a915 100644 --- a/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java +++ b/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java @@ -11,8 +11,8 @@ import dev.fitko.fitconnect.api.config.ApplicationConfig; import dev.fitko.fitconnect.api.config.Environment; import dev.fitko.fitconnect.api.config.EnvironmentName; import dev.fitko.fitconnect.api.config.SchemaConfig; -import dev.fitko.fitconnect.api.domain.model.event.EventPayload; import dev.fitko.fitconnect.api.domain.model.event.Event; +import dev.fitko.fitconnect.api.domain.model.event.EventPayload; import dev.fitko.fitconnect.api.domain.model.event.problems.submission.AttachmentsMismatch; import dev.fitko.fitconnect.api.domain.model.submission.Submission; import dev.fitko.fitconnect.api.domain.schema.SchemaResources; @@ -63,8 +63,8 @@ class SecurityEventTokenServiceTest { final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema"); final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema"); final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema"); - final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema"); - final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas); + final String submissionDataSchemaPath = "submission-data-test-schema"; + final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemaPath); final SchemaProvider schemaProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources); validationService = new DefaultValidationService(config, new HashService(), schemaProvider); diff --git a/core/src/test/java/dev/fitko/fitconnect/core/schema/SchemaResourceProviderTest.java b/core/src/test/java/dev/fitko/fitconnect/core/schema/SchemaResourceProviderTest.java index 10b954b6ae4fe5fe9f1f426a302ad857c44032c6..2a58d12bd3cf838b51f365295787f90b39e826f4 100644 --- a/core/src/test/java/dev/fitko/fitconnect/core/schema/SchemaResourceProviderTest.java +++ b/core/src/test/java/dev/fitko/fitconnect/core/schema/SchemaResourceProviderTest.java @@ -32,8 +32,8 @@ class SchemaResourceProviderTest { final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema"); final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema"); final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema"); - final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema"); - final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas); + final String submissionDataPath = "submission-data-test-schema"; + final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataPath); underTest = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources); } @@ -108,7 +108,7 @@ class SchemaResourceProviderTest { when(restTemplate.getForEntity(eq(URI.create("https://test.json")), any())).thenReturn(ResponseEntity.ok("schema")); SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(restTemplate, - new SchemaResources(List.of(), List.of(), List.of(), List.of())); + new SchemaResources(List.of(), List.of(), List.of(), null)); String schema = schemaResourceProvider.loadSubmissionDataSchema(URI.create("https://test.json")); @@ -122,7 +122,7 @@ class SchemaResourceProviderTest { when(restTemplate.getForEntity(eq(URI.create("https://test.json")), any())).thenThrow(new RuntimeException("Something went wrong!")); SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(restTemplate, - new SchemaResources(List.of(), List.of(), List.of(), List.of())); + new SchemaResources(List.of(), List.of(), List.of(), null)); Exception exception = assertThrows(SchemaNotFoundException.class, () -> schemaResourceProvider.loadSubmissionDataSchema(URI.create("https://test.json"))); @@ -133,8 +133,7 @@ class SchemaResourceProviderTest { @Test void loadSubmissionDataSchemaFromMemory() { - SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), - List.of("/submission_data_schema_local.json")); + SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), "submission-data-test-schema"); SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources); @@ -146,7 +145,7 @@ class SchemaResourceProviderTest { @Test void loadSubmissionDataSchemaFromMemoryFailed() { - SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), List.of()); + SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), null); SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources); diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java index 0eb691a6532e697499528397e53c6dcc15bb1da9..651a433cc023608102aac70a486d80e0d4f99984 100644 --- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java +++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java @@ -61,8 +61,8 @@ class DefaultValidationServiceTest { final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema"); final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema"); final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema"); - final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema"); - final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas); + final String submissionDataSchemaPath = "submission-data-test-schema"; + final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemaPath); schemaProvider = new SchemaResourceProvider(restTemplate, schemaResources); underTest = new DefaultValidationService(config, hashService, schemaProvider); } @@ -449,7 +449,7 @@ class DefaultValidationServiceTest { // Given SchemaProvider schemaProvider = mock(SchemaProvider.class); - when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission_data_schema_remote.json")); + when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission-data-test-schema/submission_data_schema_remote.json")); DefaultValidationService defaultValidationService = new DefaultValidationService(getApplicationConfig(true, false), new HashService(), schemaProvider); final var invalidJson = "{ \"someString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }"; @@ -467,7 +467,7 @@ class DefaultValidationServiceTest { // Given SchemaProvider schemaProvider = mock(SchemaProvider.class); - when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission_data_schema_remote.json")); + when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission-data-test-schema/submission_data_schema_remote.json")); DefaultValidationService defaultValidationService = new DefaultValidationService(getApplicationConfig(true, false), new HashService(), schemaProvider); final var invalidJson = "{ \"wrongString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }"; @@ -486,7 +486,7 @@ class DefaultValidationServiceTest { // Given SchemaProvider schemaProvider = mock(SchemaProvider.class); - when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission_data_schema_remote.json")); + when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission-data-test-schema/submission_data_schema_remote.json")); DefaultValidationService defaultValidationService = new DefaultValidationService(getApplicationConfig(true, true), new HashService(), schemaProvider); final var invalidJson = "{ \"wrongString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }"; diff --git a/core/src/main/resources/submission-data-schema/s00000096_1.0.schema.json b/core/src/test/resources/submission-data-test-schema/s00000096_1.0.schema.json similarity index 100% rename from core/src/main/resources/submission-data-schema/s00000096_1.0.schema.json rename to core/src/test/resources/submission-data-test-schema/s00000096_1.0.schema.json diff --git a/core/src/test/resources/submission_data_schema_local.json b/core/src/test/resources/submission-data-test-schema/submission_data_schema_local.json similarity index 100% rename from core/src/test/resources/submission_data_schema_local.json rename to core/src/test/resources/submission-data-test-schema/submission_data_schema_local.json diff --git a/core/src/test/resources/submission_data_schema_remote.json b/core/src/test/resources/submission-data-test-schema/submission_data_schema_remote.json similarity index 100% rename from core/src/test/resources/submission_data_schema_remote.json rename to core/src/test/resources/submission-data-test-schema/submission_data_schema_remote.json