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

Commit

Permalink
handle reference schemas
Browse files Browse the repository at this point in the history
  • Loading branch information
mapingo committed Aug 15, 2017
1 parent 5ecc9c1 commit d2500f4
Show file tree
Hide file tree
Showing 14 changed files with 132 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@

import java.io.File;
import java.lang.reflect.Constructor;
import java.math.BigDecimal;
import java.time.ZonedDateTime;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import javax.inject.Inject;

import org.everit.json.schema.ArraySchema;
import org.everit.json.schema.Schema;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,11 +375,13 @@
"definitions": {
"uuid": {
"type": "string",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"description": "UUID"
},
"dateString": {
"type": "string",
"pattern": "^[1|2][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$"
"pattern": "^[1|2][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$",
"description": "ZonedDateTime"
},
"money": {
"type": "number",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package uk.gov.justice.generation.pojo.core;

import uk.gov.justice.generation.pojo.dom.ClassName;

import java.time.ZonedDateTime;
import java.util.UUID;

public class ClassNameProvider {

public ClassName classNameFor(final String description) {
return classNameFor(description, String.class);
}

public ClassName classNameFor(final String description, final Class<?> defaultClass) {
if(UUID.class.getSimpleName().equals(description)) {
return new ClassName(UUID.class);
}

if(ZonedDateTime.class.getSimpleName().equals(description)) {
return new ClassName(ZonedDateTime.class);
}

return new ClassName(defaultClass);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@
import org.everit.json.schema.NullSchema;
import org.everit.json.schema.NumberSchema;
import org.everit.json.schema.ObjectSchema;
import org.everit.json.schema.ReferenceSchema;
import org.everit.json.schema.Schema;
import org.everit.json.schema.StringSchema;

public class DefinitionBuilderVisitor implements Visitor {

private final Deque<Entry> definitions = new ArrayDeque<>();
private final List<ClassDefinition> classDefinitions = new ArrayList<>();
private final ClassNameProvider classNameProvider = new ClassNameProvider();
private final String packageName;

public DefinitionBuilderVisitor(final String packageName) {
Expand Down Expand Up @@ -58,7 +58,10 @@ public void leave(final ObjectSchema schema) {

@Override
public void visit(final String fieldName, final StringSchema schema) {
definitions.push(new Entry(schema, new FieldDefinition(fieldName, new ClassName(String.class))));

final ClassName className = classNameProvider.classNameFor(schema.getDescription());

definitions.push(new Entry(schema, new FieldDefinition(fieldName, className)));
}

@Override
Expand All @@ -82,11 +85,6 @@ public void visit(final String fieldName, final ArraySchema schema) {
//TODO: Implement Array Schema
}

@Override
public void visit(final String fieldName, final ReferenceSchema schema) {
//TODO: Implement Reference Schema
}

@Override
public void visit(final String fieldName, final EmptySchema schema) {
//TODO: Implement Empty Schema
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ public void accept(final String fieldName, final Visitor visitor) {
visitor.visit(fieldName, (EmptySchema) schema);
break;
case "ReferenceSchema":
visitor.visit(fieldName, (ReferenceSchema) schema);
final ReferenceSchema referenceSchema = (ReferenceSchema) this.schema;
final Schema referredSchema = referenceSchema.getReferredSchema();
visitChildSchema(fieldName, visitor, referredSchema);
break;
case "ArraySchema":
visitor.visit(fieldName, (ArraySchema) schema);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public String generateNameFrom(final File jsonSchemaFile) {
}

private String getNameFrom(final String fileName) {
final String name = fileName.substring(0, fileName.lastIndexOf("."));
final String name = fileName.substring(0, fileName.lastIndexOf('.'));

final int index = name.lastIndexOf('.');
if (index > -1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import org.everit.json.schema.NullSchema;
import org.everit.json.schema.NumberSchema;
import org.everit.json.schema.ObjectSchema;
import org.everit.json.schema.ReferenceSchema;
import org.everit.json.schema.StringSchema;

public interface Visitor {
Expand All @@ -25,8 +24,6 @@ public interface Visitor {

void visit(final String fieldName, final ArraySchema schema);

void visit(final String fieldName, final ReferenceSchema schema);

void visit(final String fieldName, final BooleanSchema schema);

void visit(final String fieldName, final EmptySchema schema);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,9 @@ public String getSimpleName() {
public String getFullyQualifiedName() {
return packageName + "." + simpleName;
}

@Override
public String toString() {
return getFullyQualifiedName();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package uk.gov.justice.generation.pojo.core;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import uk.gov.justice.generation.pojo.dom.ClassName;

import java.time.ZonedDateTime;
import java.util.UUID;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ClassNameProviderTest {

@InjectMocks
private ClassNameProvider classNameProvider;

@Test
public void shouldConvertAUUIDStringToAUUIDClassName() throws Exception {

final ClassName className = classNameProvider.classNameFor("UUID");
assertThat(className.getFullyQualifiedName(), is(UUID.class.getName()));
}

@Test
public void shouldConvertAZoneDateTimeStringToAZoneDateTimeClassName() throws Exception {

final ClassName className = classNameProvider.classNameFor("ZonedDateTime");
assertThat(className.getFullyQualifiedName(), is(ZonedDateTime.class.getName()));
}

@Test
public void shouldConvertAnyUnknownStringToAStringClassName() throws Exception {

final ClassName className = classNameProvider.classNameFor("SomethingSilly");
assertThat(className.getFullyQualifiedName(), is(String.class.getName()));
}

@Test
public void shouldHandleNullStrings() throws Exception {

final ClassName className = classNameProvider.classNameFor(null);
assertThat(className.getFullyQualifiedName(), is(String.class.getName()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import uk.gov.justice.generation.pojo.dom.ClassDefinition;

import java.util.List;
import java.util.UUID;

import org.everit.json.schema.BooleanSchema;
import org.everit.json.schema.NumberSchema;
Expand Down Expand Up @@ -116,4 +117,29 @@ public void shouldGenerateClassDefinitionWithNumberSchemaProperty() throws Excep
assertThat(definitions.get(0).getFieldDefinitions().get(1).getFieldName(), is("integerProperty"));
assertThat(definitions.get(0).getFieldDefinitions().get(1).getClassName().getFullyQualifiedName(), is("java.lang.Integer"));
}

@Test
public void shouldGenerateClassDefinitionsWithDescriptionOfTheClassName() throws Exception {
final String packageName = "org.bloggs.fred";
final String propertyName = "uuidProperty";

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName);

final StringSchema uuidProperty = StringSchema.builder().description("UUID").build();

final ObjectSchema objectSchema = ObjectSchema.builder()
.addPropertySchema(propertyName, uuidProperty)
.build();

definitionBuilderVisitor.enter("outerClass", objectSchema);
definitionBuilderVisitor.visit(propertyName, uuidProperty);
definitionBuilderVisitor.leave(objectSchema);

final List<ClassDefinition> definitions = definitionBuilderVisitor.getDefinitions();

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

assertThat(definitions.get(0).getFieldDefinitions().get(0).getFieldName(), is(propertyName));
assertThat(definitions.get(0).getFieldDefinitions().get(0).getClassName().getFullyQualifiedName(), is(UUID.class.getName()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,14 +138,16 @@ public void shouldVisitObjectAndEmptySchema() {
public void shouldVisitObjectAndReferenceSchema() {
final String fieldName = "fieldName";
final String childFieldName = "childFieldName";
final StringSchema referredSchema = StringSchema.builder().build();
final ReferenceSchema referenceSchema = ReferenceSchema.builder().build();
referenceSchema.setReferredSchema(referredSchema);
final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, referenceSchema).build();

final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema);
jsonSchemaWrapper.accept(fieldName, visitor);

verify(visitor).enter(fieldName, objectSchema);
verify(visitor).visit(childFieldName, referenceSchema);
verify(visitor).visit(childFieldName, referredSchema);
verify(visitor).leave(objectSchema);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
package uk.gov.justice.generation.pojo.core;

import static org.junit.Assert.*;

import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;

import java.io.File;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.io.File;
import org.mockito.runners.MockitoJUnitRunner;


@RunWith(MockitoJUnitRunner.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,10 @@ public void shouldCreateAClassNameFromAClass() throws Exception {
assertThat(integerClassName.getSimpleName(), is("Integer"));
assertThat(integerClassName.getFullyQualifiedName(), is("java.lang.Integer"));
}

@Test
public void shouldReturnTheFullyQualifiedNameForToString() throws Exception {

assertThat(new ClassName(String.class).toString(), is(String.class.getName()));
}
}

0 comments on commit d2500f4

Please sign in to comment.