Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Commit

Permalink
refactor catalog mappings
Browse files Browse the repository at this point in the history
  • Loading branch information
amckenzie committed Dec 5, 2017
1 parent 461a87e commit be21677
Show file tree
Hide file tree
Showing 40 changed files with 801 additions and 738 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package uk.gov.justice.schema.catalog;

import static java.util.Optional.empty;
import static java.util.Optional.of;

import uk.gov.justice.schema.catalog.client.SchemaClientFactory;

import java.util.Optional;

import org.everit.json.schema.Schema;
import org.everit.json.schema.loader.SchemaClient;

public class Catalog {

private final RawCatalog rawCatalog;
private final SchemaClientFactory schemaClientFactory;
private final JsonStringToSchemaConverter jsonStringToSchemaConverter;

public Catalog(final RawCatalog rawCatalog, final SchemaClientFactory schemaClientFactory, final JsonStringToSchemaConverter jsonStringToSchemaConverter) {
this.rawCatalog = rawCatalog;
this.schemaClientFactory = schemaClientFactory;
this.jsonStringToSchemaConverter = jsonStringToSchemaConverter;
}

public Optional<Schema> getSchema(final String schemaId) {

final Optional<String> rawJsonSchema = rawCatalog.getRawJsonSchema(schemaId);

if (rawJsonSchema.isPresent()) {
final SchemaClient schemaClient = schemaClientFactory.create(rawCatalog);
final Schema schema = jsonStringToSchemaConverter.convert(rawJsonSchema.get(), schemaClient);
return of(schema);
}

return empty();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package uk.gov.justice.schema.catalog;

import static org.slf4j.LoggerFactory.getLogger;

import uk.gov.justice.schema.catalog.client.SchemaClientFactory;
import uk.gov.justice.schema.catalog.util.ClasspathResourceLoader;
import uk.gov.justice.schema.catalog.util.UriResolver;
import uk.gov.justice.schema.catalog.util.UrlConverter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

import com.fasterxml.jackson.databind.ObjectMapper;

public class CatalogObjectFactory {

public UrlConverter urlConverter() {
return new UrlConverter();
}

public ObjectMapper objectMapper() {
return new ObjectMapperProducer().objectMapper();
}

public UriResolver uriResolver() {
return new UriResolver();
}

public JsonStringToSchemaConverter jsonStringToSchemaConverter() {
return new JsonStringToSchemaConverter();
}

public ClasspathResourceLoader classpathResourceLoader() {
return new ClasspathResourceLoader();
}

public ClasspathCatalogLoader classpathCatalogLoader() {
return new ClasspathCatalogLoader(
objectMapper(),
classpathResourceLoader(),
urlConverter());
}

public SchemaResolver schemaResolver() {
return new SchemaResolver(urlConverter(), uriResolver());
}

public CatalogToSchemaResolver catalogToSchemaResolver() {
return new CatalogToSchemaResolver(
classpathCatalogLoader(),
schemaResolver(),
getLogger(CatalogToSchemaResolver.class));
}

public FileContentsAsStringLoader fileContentsAsStringLoader() {
return new FileContentsAsStringLoader();
}

public JsonSchemaFileLoader jsonSchemaFileLoader() {
return new JsonSchemaFileLoader(fileContentsAsStringLoader(), catalogToSchemaResolver());
}

public SchemaClientFactory schemaClientFactory() {
return new SchemaClientFactory();
}

public Catalog catalog() {
return new Catalog(
rawCatalog(),
schemaClientFactory(),
jsonStringToSchemaConverter());
}

public RawCatalog rawCatalog() {
final RawCatalog rawCatalog = new RawCatalog(jsonSchemaFileLoader());
rawCatalog.initialize();

return rawCatalog;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package uk.gov.justice.schema.catalog;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

@ApplicationScoped
public class CatalogProducer {

@Produces
public Catalog catalog() {
return new CatalogObjectFactory().catalog();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import java.util.Map;
import java.util.Optional;

import javax.inject.Inject;

import org.slf4j.Logger;

public class CatalogToSchemaResolver {
Expand All @@ -23,19 +21,15 @@ public class CatalogToSchemaResolver {
private final SchemaResolver schemaResolver;
private final Logger logger;

@Inject
public CatalogToSchemaResolver(
final ClasspathCatalogLoader classpathCatalogLoader,
final SchemaResolver schemaResolver,
final Logger logger) {
public CatalogToSchemaResolver(final ClasspathCatalogLoader classpathCatalogLoader,
final SchemaResolver schemaResolver,
final Logger logger) {
this.classpathCatalogLoader = classpathCatalogLoader;
this.schemaResolver = schemaResolver;
this.logger = logger;
}


/**
*
* @return Mapping from schemaId to a schema location url
*/
public Map<String, URL> resolveSchemaLocations() {
Expand All @@ -44,16 +38,16 @@ public Map<String, URL> resolveSchemaLocations() {

final Map<URI, Catalog> catalogs = classpathCatalogLoader.getCatalogs();

for(final URI catalogLocation: catalogs.keySet()) {
for(final Group group: catalogs.get(catalogLocation).getGroups()) {
for(final Schema schema: group.getSchemas()) {
for (final URI catalogLocation : catalogs.keySet()) {
for (final Group group : catalogs.get(catalogLocation).getGroups()) {
for (final Schema schema : group.getSchemas()) {
final String location = schema.getLocation();
final Optional<String> baseLocation = ofNullable(group.getBaseLocation());

final String schemaId = schema.getId();
final URL schemaLocationUrl = schemaResolver.resolve(catalogLocation, location, baseLocation);

if(schemaLocations.containsKey(schemaId)) {
if (schemaLocations.containsKey(schemaId)) {
final URL otherLocation = schemaLocations.get(schemaId);
logger.warn(format("Found duplicate schema id '%s' for schemaLocations '%s' and '%s'", schemaId, otherLocation, schemaLocationUrl));
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import com.fasterxml.jackson.databind.ObjectMapper;

public class ClasspathCatalogLoader {
Expand All @@ -25,7 +23,6 @@ public class ClasspathCatalogLoader {
private final ClasspathResourceLoader classpathResourceLoader;
private final UrlConverter urlConverter;

@Inject
public ClasspathCatalogLoader(final ObjectMapper objectMapper,
final ClasspathResourceLoader classpathResourceLoader,
final UrlConverter urlConverter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@

import static java.util.stream.Collectors.toMap;

import java.net.URL;
import java.util.Map;

import javax.inject.Inject;

public class JsonSchemaFileLoader {

private final FileContentsAsStringLoader fileContentsAsStringLoader;
private final CatalogToSchemaResolver catalogToSchemaResolver;

@Inject
public JsonSchemaFileLoader(final FileContentsAsStringLoader fileContentsAsStringLoader) {
public JsonSchemaFileLoader(final FileContentsAsStringLoader fileContentsAsStringLoader, final CatalogToSchemaResolver catalogToSchemaResolver) {
this.fileContentsAsStringLoader = fileContentsAsStringLoader;
this.catalogToSchemaResolver = catalogToSchemaResolver;
}

public Map<String, String> loadJsonFrom(final Map<String, URL> schemaLocationMap) {
return schemaLocationMap.entrySet()
public Map<String, String> loadSchemas() {

return catalogToSchemaResolver.resolveSchemaLocations().entrySet()
.stream()
.collect(toMap(Map.Entry::getKey, entry -> fileContentsAsStringLoader.readFileContents(entry.getValue())));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package uk.gov.justice.schema.catalog;

import static java.util.Optional.ofNullable;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class RawCatalog {

private final JsonSchemaFileLoader jsonSchemaFileLoader;

private Map<String, String> schemaIdsToRawJsonSchemaCache = new HashMap<>();

public RawCatalog(final JsonSchemaFileLoader jsonSchemaFileLoader) {
this.jsonSchemaFileLoader = jsonSchemaFileLoader;
}

public void initialize() {
schemaIdsToRawJsonSchemaCache = jsonSchemaFileLoader.loadSchemas();
}

public Optional<String> getRawJsonSchema(final String schemaId) {
return ofNullable(schemaIdsToRawJsonSchemaCache.get(schemaId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,13 @@
import java.net.URL;
import java.util.Optional;

import javax.inject.Inject;

public class SchemaResolver {

private static final String AN_EMPTY_STRING = "";

private final UrlConverter urlConverter;
private final UriResolver uriResolver;

@Inject
public SchemaResolver(final UrlConverter urlConverter, final UriResolver uriResolver) {
this.urlConverter = urlConverter;
this.uriResolver = uriResolver;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package uk.gov.justice.schema.catalog.client;

import static java.lang.String.format;
import static java.nio.charset.StandardCharsets.UTF_8;

import uk.gov.justice.schema.catalog.RawCatalog;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import org.everit.json.schema.loader.SchemaClient;

public class LocalFileSystemSchemaClient implements SchemaClient {

private final RawCatalog rawCatalog;

public LocalFileSystemSchemaClient(final RawCatalog rawCatalog) {
this.rawCatalog = rawCatalog;
}

@Override
public InputStream get(final String schemaId) {

final String rawJsonSchema = rawCatalog.getRawJsonSchema(schemaId)
.orElseThrow(() -> new SchemaClientException(format("Failed to find schema with id '%s'", schemaId)));

return new ByteArrayInputStream(rawJsonSchema.getBytes(UTF_8));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package uk.gov.justice.schema.client;
package uk.gov.justice.schema.catalog.client;

public class SchemaClientException extends RuntimeException {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package uk.gov.justice.schema.catalog.client;

import uk.gov.justice.schema.catalog.RawCatalog;

import org.everit.json.schema.loader.SchemaClient;

public class SchemaClientFactory {

public SchemaClient create(final RawCatalog rawCatalog) {
return new LocalFileSystemSchemaClient(rawCatalog);
}
}
Loading

0 comments on commit be21677

Please sign in to comment.