diff --git a/src/main/java/com/nfl/dm/shield/dynamic/repository/InMemorySchemaRepository.java b/src/main/java/com/nfl/dm/shield/dynamic/repository/InMemorySchemaRepository.java index 5d8a7bb..78aa5e4 100644 --- a/src/main/java/com/nfl/dm/shield/dynamic/repository/InMemorySchemaRepository.java +++ b/src/main/java/com/nfl/dm/shield/dynamic/repository/InMemorySchemaRepository.java @@ -8,9 +8,6 @@ import com.nfl.dm.shield.dynamic.domain.schema.InMemorySchemaDescriptionHolder; import com.nfl.dm.shield.dynamic.domain.schema.SchemaDescription; import com.nfl.dm.shield.dynamic.domain.schema.SchemaKey; -import com.nfl.graphql.mediator.GraphQLMediator; -import graphql.language.SelectionSet; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @@ -20,30 +17,20 @@ import static com.google.common.collect.Lists.transform; import static com.nfl.dm.shield.dynamic.domain.instance.SchemaInstance.UPDATE_DATE_FIELD; -import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_ID; -import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_TYPE; import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; import static java.util.stream.Collectors.toList; @Service public class InMemorySchemaRepository extends BaseRepositoryImpl - implements SchemaRepository, SchemaInstanceRepository, ExternalReferenceRepository { - - private final GraphQLMediator mediator; + implements SchemaRepository, SchemaInstanceRepository { private final Map allTheSchemas = new ConcurrentHashMap<>(89); private final Map> instances = new ConcurrentHashMap<>(89); - private final Map>> externalInstances - = new ConcurrentHashMap<>(89); - - @SuppressWarnings("SpringJavaAutowiringInspection") - @Autowired - public InMemorySchemaRepository(GraphQLMediator mediator) { - this.mediator = mediator; + public InMemorySchemaRepository() { } @Override @@ -204,31 +191,4 @@ public Stream findInstancesBySchemaKeyAndStringInC return instanceHoldersForRelatedSchemas.stream().filter(instanceHolder -> instanceHolder.getInstanceClob().contains(searchString)); } - - @Override - public GraphQLMediator buildMediator(String authHeader) { - return mediator; - } - - @Override - public Map findById(SelectionSet selections, Map id, String authHeader) { - - String typeName = id.get(REFERENCE_TYPE); - if (!externalInstances.containsKey(typeName)) { - return null; - } - - return externalInstances.get(typeName).get(id.get(REFERENCE_ID)); - } - - public void loadExternalInstance(String typeName, String id, Map instance) { - if (!externalInstances.containsKey(typeName)) { - externalInstances.put(typeName, new HashMap<>(89)); - } - externalInstances.get(typeName).put(id, instance); - } - - public void clearForExternalTesting() { - externalInstances.clear(); - } } diff --git a/src/main/java/com/nfl/dm/shield/dynamic/repository/StubbedExternalReferenceRepository.java b/src/main/java/com/nfl/dm/shield/dynamic/repository/StubbedExternalReferenceRepository.java new file mode 100644 index 0000000..74095b4 --- /dev/null +++ b/src/main/java/com/nfl/dm/shield/dynamic/repository/StubbedExternalReferenceRepository.java @@ -0,0 +1,57 @@ +package com.nfl.dm.shield.dynamic.repository; + +import com.nfl.graphql.mediator.GraphQLMediator; +import graphql.language.SelectionSet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_ID; +import static com.nfl.dm.shield.dynamic.domain.schema.instancefield.AbstractReferenceType.REFERENCE_TYPE; + +@SuppressWarnings("unused") +@Service("stubbedExternal") +@Primary +public class StubbedExternalReferenceRepository implements ExternalReferenceRepository { + + private final GraphQLMediator mediator; + + private final Map>> externalInstances + = new ConcurrentHashMap<>(89); + + @Autowired + public StubbedExternalReferenceRepository(GraphQLMediator mediator) { + this.mediator = mediator; + } + + @Override + public GraphQLMediator buildMediator(String authHeader) { + return mediator; + } + + @Override + public Map findById(SelectionSet selections, Map id, String authHeader) { + + String typeName = id.get(REFERENCE_TYPE); + if (!externalInstances.containsKey(typeName)) { + return null; + } + + return externalInstances.get(typeName).get(id.get(REFERENCE_ID)); + } + + public void loadExternalInstance(String typeName, String id, Map instance) { + if (!externalInstances.containsKey(typeName)) { + externalInstances.put(typeName, new HashMap<>(89)); + } + externalInstances.get(typeName).put(id, instance); + } + + public void clearForExternalTesting() { + externalInstances.clear(); + } +} diff --git a/src/test/java/com/nfl/dm/shield/dynamic/service/BaseExternalReferenceTest.java b/src/test/java/com/nfl/dm/shield/dynamic/service/BaseExternalReferenceTest.java index 095d6c0..0f956e1 100644 --- a/src/test/java/com/nfl/dm/shield/dynamic/service/BaseExternalReferenceTest.java +++ b/src/test/java/com/nfl/dm/shield/dynamic/service/BaseExternalReferenceTest.java @@ -2,6 +2,7 @@ import com.nfl.dm.shield.dynamic.BaseBeanTest; import com.nfl.dm.shield.dynamic.repository.InMemorySchemaRepository; +import com.nfl.dm.shield.dynamic.repository.StubbedExternalReferenceRepository; import org.springframework.beans.factory.annotation.Autowired; import org.testng.Assert; import org.testng.annotations.AfterMethod; @@ -22,6 +23,9 @@ public abstract class BaseExternalReferenceTest extends BaseBeanTest { @Autowired private InMemorySchemaRepository inMemorySchemaRepository; + @Autowired + private StubbedExternalReferenceRepository externalReferenceRepository; + void loadSchema(String simonSchema, String simonSchemaResults) { // Set up the schema assertFalse(simonSchema.isEmpty()); @@ -46,14 +50,14 @@ public void loadExternalData() { Map imageMap = new HashMap<>(); imageMap.put("id", IMAGE_ID); imageMap.put("title", "Hitchhikers Guide"); - inMemorySchemaRepository.loadExternalInstance("Image", IMAGE_ID, imageMap); + externalReferenceRepository.loadExternalInstance("Image", IMAGE_ID, imageMap); Map videoMap = new HashMap<>(); videoMap.put("id", VIDEO_ID); videoMap.put("title", "Casablanca"); videoMap.put("caption", "The greatest movie ever."); - inMemorySchemaRepository.loadExternalInstance("Video", VIDEO_ID, videoMap); + externalReferenceRepository.loadExternalInstance("Video", VIDEO_ID, videoMap); } @@ -69,6 +73,6 @@ GraphQLResult upsert(String key, String query) { public void cleanup() { inMemorySchemaRepository.clearForInstanceTesting(); inMemorySchemaRepository.clearForSchemaTesting(); - inMemorySchemaRepository.clearForExternalTesting(); + externalReferenceRepository.clearForExternalTesting(); } }