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

Commit

Permalink
Replace url to uri for resolving schema location
Browse files Browse the repository at this point in the history
  • Loading branch information
Muhammad Uzair Baig committed Nov 17, 2017
1 parent 39d0800 commit 4e0c84f
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import uk.gov.justice.schema.catalog.domain.Group;
import uk.gov.justice.schema.catalog.domain.Schema;

import java.net.URI;
import java.net.URL;
import java.util.AbstractMap.SimpleEntry;
import java.util.Map;
Expand All @@ -31,13 +32,11 @@ public Map<String, URL> resolveSchemaLocations() {
.collect(toMap(Entry::getKey, Entry::getValue));
}

private Entry<String, URL> resolveToUrl(final Group group, final Schema schema, final URL catalogUrl) {
private Entry<String, URL> resolveToUrl(final Group group, final Schema schema, final URI catalogUri) {
final String location = schema.getLocation();
final Optional<String> baseLocation = ofNullable(group.getBaseLocation());
final URL url = schemaResolver.resolve(catalogUrl, location, baseLocation);
final URL url = schemaResolver.resolve(catalogUri, location, baseLocation);

return new SimpleEntry<>(schema.getId(), url);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import uk.gov.justice.schema.catalog.domain.Catalog;
import uk.gov.justice.schema.catalog.domain.CatalogWrapper;
import uk.gov.justice.schema.catalog.util.ClasspathResourceLoader;
import uk.gov.justice.schema.catalog.util.UrlConverter;

import java.io.IOException;
import java.net.URI;
Expand All @@ -21,29 +22,31 @@ public class ClasspathCatalogLoader {

private final ObjectMapper objectMapper;
private final ClasspathResourceLoader classpathResourceLoader;
private final UrlConverter urlConverter;

public ClasspathCatalogLoader(final ObjectMapper objectMapper, final ClasspathResourceLoader classpathResourceLoader) {
public ClasspathCatalogLoader(final ObjectMapper objectMapper, final ClasspathResourceLoader classpathResourceLoader, final UrlConverter urlConverter) {
this.objectMapper = objectMapper;
this.classpathResourceLoader = classpathResourceLoader;
this.urlConverter = urlConverter;
}

public Map<URL, Catalog> getCatalogs() {
public Map<URI, Catalog> getCatalogs() {

final Map<URL, Catalog> map = new HashMap<>();
final Map<URI, Catalog> map = new HashMap<>();

for (final URI uri : listAllCatalogsFromClasspath()) {
for (final URL catalogUrl : listAllCatalogsFromClasspath()) {
try {
final Catalog catalog = objectMapper.readValue(uri.toURL(), CatalogWrapper.class).getCatalog();
map.put(uri.toURL(), catalog);
final Catalog catalog = objectMapper.readValue(catalogUrl, CatalogWrapper.class).getCatalog();
map.put(urlConverter.toUri(catalogUrl), catalog);
} catch (IOException e) {
throw new SchemaCatalogException(format("Failed to convert to json loaded from '%s' to a Catalog pojo", uri.toString()), e);
throw new SchemaCatalogException(format("Failed to convert to json loaded from '%s' to a Catalog pojo", catalogUrl.toString()), e);
}
}

return map;
}

private List<URI> listAllCatalogsFromClasspath() {
private List<URL> listAllCatalogsFromClasspath() {
try {
return classpathResourceLoader.getResources(getClass(), DEFAULT_JSON_CATALOG_LOCATION);
} catch (final IOException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,11 @@ public SchemaResolver(final UrlConverter urlConverter) {
}

public URL resolve(
final URL catalogUrl,
final URI catalogUri,
final String fileLocation,
final Optional<String> fileBaseLocation) {

final URI schemaUri = URI.create(fileBaseLocation.orElse(AN_EMPTY_STRING)).resolve(fileLocation);
final URI uri = urlConverter.toUri(catalogUrl).resolve(schemaUri);

return urlConverter.toUrl(uri);
return urlConverter.toUrl(catalogUri.resolve(schemaUri));
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,14 @@
package uk.gov.justice.schema.catalog.util;

import static java.util.Collections.list;
import static java.util.stream.Collectors.toList;

import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.List;

public class ClasspathResourceLoader {

public ClasspathResourceLoader(final UrlConverter urlConverter) {
this.urlConverter = urlConverter;
}

private final UrlConverter urlConverter;


public List<URI> getResources(final Class<?> clazz, final String location) throws IOException {
final List<URL> urls = list(clazz.getClassLoader().getResources(location));
return urls.stream().map(urlConverter::toUri).collect(toList());
public List<URL> getResources(final Class<?> clazz, final String location) throws IOException {
return list(clazz.getClassLoader().getResources(location));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import uk.gov.justice.schema.catalog.domain.Schema;
import uk.gov.justice.schema.catalog.util.UrlConverter;

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

Expand Down Expand Up @@ -43,9 +44,9 @@ public void shouldMapSchemasFoundOnTheClasspathToTheirIds() throws Exception {
final Group group = mock(Group.class);
final Schema schema = mock(Schema.class);

final URL url = new URL("file:/src/main/schema.json");
final URI uri = new URI("file:/src/main/schema.json");

final Map<URL, Catalog> catalogPojoMap = ImmutableMap.of(url, catalog);
final Map<URI, Catalog> catalogPojoMap = ImmutableMap.of(uri, catalog);

when(classpathCatalogLoader.getCatalogs()).thenReturn(catalogPojoMap);
when(catalog.getGroup()).thenReturn(singletonList(group));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import uk.gov.justice.schema.catalog.util.UrlConverter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

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

import com.fasterxml.jackson.databind.ObjectMapper;
Expand All @@ -30,24 +30,28 @@ public class ClasspathCatalogLoaderIntegrationTest {

@Spy
@SuppressWarnings("unused")
private ClasspathResourceLoader classpathResourceLoader = new ClasspathResourceLoader(new UrlConverter());
private ClasspathResourceLoader classpathResourceLoader = new ClasspathResourceLoader();

@Spy
@SuppressWarnings("unused")
private UrlConverter urlConverter = new UrlConverter();

@InjectMocks
private ClasspathCatalogLoader classpathCatalogLoader;

@Test
public void shouldLoadCatalogsFromTheClasspath() throws Exception {

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

assertThat(catalogs.size(), is(1));

final URL url = catalogs.keySet().iterator().next();
final URI uri = catalogs.keySet().iterator().next();

assertThat(url.toString(), startsWith("file:/"));
assertThat(url.toString(), endsWith("/json-schema-catalog/catalog-core/target/test-classes/json/schema/schema_catalog.json"));
assertThat(uri.toString(), startsWith("file:/"));
assertThat(uri.toString(), endsWith("/json-schema-catalog/catalog-core/target/test-classes/json/schema/schema_catalog.json"));

final Catalog catalog = catalogs.get(url);
final Catalog catalog = catalogs.get(uri);

assertThat(catalog.getName(), is("my catalog"));
assertThat(catalog.getGroup().size(), is(2));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import uk.gov.justice.schema.catalog.util.ClasspathResourceLoader;

import java.io.IOException;
import java.net.URI;
import java.net.URL;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
Expand All @@ -38,11 +38,11 @@ public void shouldThrowExceptionIfLoadingFileThrowsIOException() throws Exceptio

final IOException ioException = new IOException("Ooops");

final URI uri = new URI("file://src/code/my-file.txt");
final URL url = new URL("file://src/code/my-file.txt");


when(classpathResourceLoader.getResources(ClasspathCatalogLoader.class, "json/schema/schema_catalog.json")).thenReturn(singletonList(uri));
when(objectMapper.readValue(uri.toURL(), CatalogWrapper.class)).thenThrow(ioException);
when(classpathResourceLoader.getResources(ClasspathCatalogLoader.class, "json/schema/schema_catalog.json")).thenReturn(singletonList(url));
when(objectMapper.readValue(url, CatalogWrapper.class)).thenThrow(ioException);

try {
classpathCatalogLoader.getCatalogs();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import uk.gov.justice.schema.catalog.util.UrlConverter;

import java.net.URI;
import java.net.URL;
import java.util.Optional;

Expand All @@ -29,26 +30,26 @@ public class SchemaResolverTest {
@Test
public void shouldResolveTheLocationToAUrlUsingTheCatalogUrlAndBaseLocation() throws Exception {

final URL catalogUrl = new URL("file:/src/main/schema.json");
final URI catalogUri = new URI("file:/src/main/schema.json");

final String fileLocation = "some/path/to.json";
final Optional<String> baseLocation = of("base/location/");

final URL resolvedUrl = schemaResolver.resolve(catalogUrl, fileLocation, baseLocation);
final URL resolvedUri = schemaResolver.resolve(catalogUri, fileLocation, baseLocation);

assertThat(resolvedUrl.toString(), is("file:/src/main/base/location/some/path/to.json"));
assertThat(resolvedUri.toString(), is("file:/src/main/base/location/some/path/to.json"));
}

@Test
public void shouldResolveTheLocationToAUrlUsingTheCatalogUrlAndAnEmptyBaseLocation() throws Exception {

final URL catalogUrl = new URL("file:/src/main/schema.json");
final URI catalogUri = new URI("file:/src/main/schema.json");

final String fileLocation = "some/path/to.json";
final Optional<String> baseLocation = empty();

final URL resolvedUrl = schemaResolver.resolve(catalogUrl, fileLocation, baseLocation);
final URL resolvedUri = schemaResolver.resolve(catalogUri, fileLocation, baseLocation);

assertThat(resolvedUrl.toString(), is("file:/src/main/some/path/to.json"));
assertThat(resolvedUri.toString(), is("file:/src/main/some/path/to.json"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,20 @@
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.net.URI;
import java.net.URL;
import java.util.List;

import org.junit.Test;

public class ClasspathResourceLoaderTest {

private final UrlConverter urlConverter = new UrlConverter();
private final ClasspathResourceLoader classpathResourceLoader = new ClasspathResourceLoader(urlConverter);
private final ClasspathResourceLoader classpathResourceLoader = new ClasspathResourceLoader();

@Test
public void shouldLoadResourcesFromTheClasspath() throws Exception {

final String filename = "json/random-classpath-resource.txt";
final List<URI> resources = classpathResourceLoader.getResources(getClass(), filename);
final List<URL> resources = classpathResourceLoader.getResources(getClass(), filename);

assertThat(resources.size(), is(1));
assertThat(resources.get(0).toString(), endsWith(filename));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ public class CatalogLoaderIT {
private final SchemaResolverAndLoader schemaResolverAndLoader = new SchemaResolverAndLoader(jsonStringToSchemaConverter);
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final UrlConverter urlConverter = new UrlConverter();
private final ClasspathResourceLoader classpathResourceLoader = new ClasspathResourceLoader(urlConverter);
private final ClasspathCatalogLoader classpathCatalogLoader = new ClasspathCatalogLoader(objectMapper, classpathResourceLoader);
private final ClasspathResourceLoader classpathResourceLoader = new ClasspathResourceLoader();
private final ClasspathCatalogLoader classpathCatalogLoader = new ClasspathCatalogLoader(objectMapper, classpathResourceLoader, urlConverter);
private final SchemaResolver schemaResolver = new SchemaResolver(urlConverter);
private final CatalogToSchemaResolver catalogToSchemaResolver = new CatalogToSchemaResolver(classpathCatalogLoader, schemaResolver);
private final JsonSchemaLoader jsonSchemaLoader = new JsonSchemaLoader(fileContentsAsStringLoader);
Expand Down

0 comments on commit 4e0c84f

Please sign in to comment.