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

Commit

Permalink
Merge pull request #21 from CJSCommonPlatform/refactor-core
Browse files Browse the repository at this point in the history
Refactor to use single visitor for validation and generation
  • Loading branch information
allanmckenzie committed Aug 30, 2017
2 parents ec2b2a2 + d3a1d6e commit 967b20e
Show file tree
Hide file tree
Showing 51 changed files with 1,796 additions and 1,292 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.core.DefinitionFactory;
import uk.gov.justice.generation.pojo.core.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapperFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultJsonSchemaAcceptorFactory;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

Expand All @@ -37,7 +39,7 @@ public class ArrayIT {
private final NameGenerator rootFieldNameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final DefinitionFactory definitionFactory = new DefinitionFactory(new ClassNameProvider());
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory(new ClassNameProvider());

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -64,7 +66,8 @@ public void shouldAnArraySchemaDocumentWithAnArrayOfItemSchemas() throws Excepti
final String fieldName = rootFieldNameGenerator.rootFieldNameFrom(jsonSchemaFile);

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor("uk.gov.justice.pojo.arrays", definitionFactory);
final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(schema);
final JsonSchemaWrapperFactory jsonSchemaWrapperFactory = new JsonSchemaWrapperFactory();
final JsonSchemaWrapper jsonSchemaWrapper = jsonSchemaWrapperFactory.createWith(schema, new DefaultJsonSchemaAcceptorFactory(jsonSchemaWrapperFactory));

jsonSchemaWrapper.accept(fieldName, definitionBuilderVisitor);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.core.DefinitionFactory;
import uk.gov.justice.generation.pojo.core.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapperFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultJsonSchemaAcceptorFactory;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

Expand All @@ -37,7 +39,7 @@ public class CombinedSchemaIT {
private final NameGenerator rootFieldNameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final DefinitionFactory definitionFactory = new DefinitionFactory(new ClassNameProvider());
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory(new ClassNameProvider());

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -64,7 +66,8 @@ public void shouldParseAVeryComplexSchemaDocument() throws Exception {
final String fieldName = rootFieldNameGenerator.rootFieldNameFrom(jsonSchemaFile);

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor("uk.gov.justice.pojo.combined.schema", definitionFactory);
final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(schema);
final JsonSchemaWrapperFactory jsonSchemaWrapperFactory = new JsonSchemaWrapperFactory();
final JsonSchemaWrapper jsonSchemaWrapper = jsonSchemaWrapperFactory.createWith(schema, new DefaultJsonSchemaAcceptorFactory(jsonSchemaWrapperFactory));

jsonSchemaWrapper.accept(fieldName, definitionBuilderVisitor);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.core.DefinitionFactory;
import uk.gov.justice.generation.pojo.core.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapperFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultJsonSchemaAcceptorFactory;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;

import java.io.File;
Expand All @@ -26,7 +28,7 @@ public class ComplexSchemaIT {
private final JavaGeneratorFactory javaGeneratorFactory = new JavaGeneratorFactory();
private final NameGenerator nameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final DefinitionFactory definitionFactory = new DefinitionFactory(new ClassNameProvider());
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory(new ClassNameProvider());

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -53,7 +55,8 @@ public void shouldParseAVeryComplexSchemaDocument() throws Exception {
final String fieldName = nameGenerator.rootFieldNameFrom(jsonSchemaFile);

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor("uk.gov.justice.pojo.complex.schema", definitionFactory);
final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(schema);
final JsonSchemaWrapperFactory jsonSchemaWrapperFactory = new JsonSchemaWrapperFactory();
final JsonSchemaWrapper jsonSchemaWrapper = jsonSchemaWrapperFactory.createWith(schema, new DefaultJsonSchemaAcceptorFactory(jsonSchemaWrapperFactory));

jsonSchemaWrapper.accept(fieldName, definitionBuilderVisitor);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.core.DefinitionFactory;
import uk.gov.justice.generation.pojo.core.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.dom.ClassDefinition;
import uk.gov.justice.generation.pojo.generators.ClassGeneratable;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapperFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultJsonSchemaAcceptorFactory;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

Expand All @@ -36,7 +38,7 @@ public class DefinitionBuilderIT {
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final NameGenerator nameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final DefinitionFactory definitionFactory = new DefinitionFactory(new ClassNameProvider());
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory(new ClassNameProvider());

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -63,7 +65,9 @@ public void shouldBuildTypeSpecFromSchema() throws Exception {

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor("uk.gov.justice.pojo.definition.builder", definitionFactory);

final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(schema);
final JsonSchemaWrapperFactory jsonSchemaWrapperFactory = new JsonSchemaWrapperFactory();
final JsonSchemaWrapper jsonSchemaWrapper = jsonSchemaWrapperFactory.createWith(schema, new DefaultJsonSchemaAcceptorFactory(jsonSchemaWrapperFactory));

jsonSchemaWrapper.accept(fieldName, definitionBuilderVisitor);

final ClassDefinition personClassDefinition = (ClassDefinition) definitionBuilderVisitor.getDefinitions().get(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.UnsupportedSchemaException;
import uk.gov.justice.generation.pojo.validation.SchemaValidatorVisitable;
import uk.gov.justice.generation.pojo.validation.SchemaValidatorVisitor;
import uk.gov.justice.generation.pojo.validation.Validator;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapperFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultJsonSchemaAcceptorFactory;

import java.io.File;

Expand All @@ -17,17 +20,17 @@
public class SchemaValidationIT {

private final SchemaLoader schemaLoader = new SchemaLoader();
private final SchemaValidatorVisitor schemaValidatorVisitor = new SchemaValidatorVisitor();
private final SchemaValidatorVisitor schemaValidatorVisitor = new SchemaValidatorVisitor(new Validator());

@Test
public void shouldFailValidationIfAnEnumContainsDiversTypesOfValues() throws Exception {
final File jsonSchemaFile = new File("src/test/resources/invalid-schemas/invalid-enum.json");
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);

final SchemaValidatorVisitable schemaValidatorVisitable = new SchemaValidatorVisitable(schema);
final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapperFactory().createWith(schema, new DefaultJsonSchemaAcceptorFactory(new JsonSchemaWrapperFactory()));

try {
schemaValidatorVisitable.accept(schemaValidatorVisitor);
jsonSchemaWrapper.accept("", schemaValidatorVisitor);
fail();
} catch (final UnsupportedSchemaException expected) {
assertThat(expected.getMessage(), is("Enums must have members of the same type. Found java.lang.String, java.lang.Boolean out of possible values [Mr, false, Ms, 23, Mrs]"));
Expand All @@ -39,10 +42,10 @@ public void shouldFailValidationIfAnArrayContainsDiversTypesOfValues() throws Ex
final File jsonSchemaFile = new File("src/test/resources/invalid-schemas/invalid-array.json");
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);

final SchemaValidatorVisitable schemaValidatorVisitable = new SchemaValidatorVisitable(schema);
final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapperFactory().createWith(schema, new DefaultJsonSchemaAcceptorFactory(new JsonSchemaWrapperFactory()));

try {
schemaValidatorVisitable.accept(schemaValidatorVisitor);
jsonSchemaWrapper.accept("", schemaValidatorVisitor);
fail();
} catch (final UnsupportedSchemaException expected) {
assertThat(expected.getMessage(), is("Arrays must have members of the same type. Found org.everit.json.schema.NumberSchema, org.everit.json.schema.StringSchema"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.core.DefinitionFactory;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.JsonSchemaWrapper;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.validation.FileNameValidator;
import uk.gov.justice.generation.pojo.visitable.JsonSchemaWrapperFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultJsonSchemaAcceptorFactory;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.JavaSourceFileProvider;
import uk.gov.justice.generation.pojo.write.NonDuplicatingSourceWriter;
import uk.gov.justice.generation.pojo.write.SourceWriter;
Expand All @@ -26,6 +27,7 @@ public class SchemaToJavaGenerator implements Generator<File> {
private final NameGenerator nameGenerator = new NameGenerator();
private final FileNameValidator fileNameValidator = new FileNameValidator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private JsonSchemaWrapperFactory jsonSchemaWrapperFactory = new JsonSchemaWrapperFactory();

@Override
public void run(final File source, final GeneratorConfig generatorConfig) {
Expand All @@ -36,8 +38,10 @@ public void run(final File source, final GeneratorConfig generatorConfig) {
final String fieldName = nameGenerator.rootFieldNameFrom(source);

final DefinitionBuilderVisitor definitionBuilderVisitor = constructDefinitionBuilderVisitor(source, generatorConfig.getBasePackageName());
final DefaultJsonSchemaAcceptorFactory jsonSchemaAcceptorFactory = new DefaultJsonSchemaAcceptorFactory(jsonSchemaWrapperFactory);

new JsonSchemaWrapper(schema).accept(fieldName, definitionBuilderVisitor);
jsonSchemaWrapperFactory.createWith(schema, jsonSchemaAcceptorFactory)
.accept(fieldName, definitionBuilderVisitor);

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions())
Expand All @@ -48,9 +52,9 @@ private DefinitionBuilderVisitor constructDefinitionBuilderVisitor(final File so
if (fileNameValidator.isEventSchema(source)) {
return new DefinitionBuilderVisitor(
basePackageName,
new DefinitionFactory(new ClassNameProvider(), nameGenerator.eventNameFrom(source)));
new DefaultDefinitionFactory(new ClassNameProvider(), nameGenerator.eventNameFrom(source)));
}

return new DefinitionBuilderVisitor(basePackageName, new DefinitionFactory(new ClassNameProvider()));
return new DefinitionBuilderVisitor(basePackageName, new DefaultDefinitionFactory(new ClassNameProvider()));
}
}

This file was deleted.

Loading

0 comments on commit 967b20e

Please sign in to comment.