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

Commit

Permalink
Add class generation plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
mapingo committed Aug 31, 2017
1 parent afaef7d commit c070781
Show file tree
Hide file tree
Showing 17 changed files with 264 additions and 100 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.VisitableSchema;
import uk.gov.justice.generation.pojo.visitable.VisitableSchemaFactory;
Expand Down Expand Up @@ -73,8 +77,13 @@ public void shouldAnArraySchemaDocumentWithAnArrayOfItemSchemas() throws Excepti

final List<Class<?>> newClasses = new ArrayList<>();

final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions())
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), plugins)
.forEach(classGeneratable -> {
sourceWriter.write(classGeneratable, sourceOutputDirectory.toPath());
final Class<?> newClass = classCompiler.compile(classGeneratable, sourceOutputDirectory, classesOutputDirectory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import uk.gov.justice.generation.pojo.dom.ClassName;
import uk.gov.justice.generation.pojo.dom.FieldDefinition;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.services.common.converter.ZonedDateTimes;
Expand Down Expand Up @@ -61,9 +65,13 @@ public void shouldGenerateJavaClassSourceCode() throws Exception {

final ClassDefinition addressDefinition = addressDefinition(packageName);
final ClassDefinition employeeDefinition = employeeDefinition(packageName, addressDefinition);
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

final List<? extends Class<?>> classes = javaGeneratorFactory
.createClassGeneratorsFor(asList(addressDefinition, employeeDefinition))
.createClassGeneratorsFor(asList(addressDefinition, employeeDefinition), plugins)
.stream()
.map(classGenerator -> {
sourceWriter.write(classGenerator, sourceOutputDirectory.toPath());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package uk.gov.justice.generation.pojo.integration.test;

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Arrays.asList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
Expand All @@ -10,6 +11,10 @@
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.VisitableSchema;
import uk.gov.justice.generation.pojo.visitable.VisitableSchemaFactory;
Expand Down Expand Up @@ -72,9 +77,13 @@ public void shouldParseAVeryComplexSchemaDocument() throws Exception {
visitableSchema.accept(fieldName, definitionBuilderVisitor);

final List<Class<?>> newClasses = new ArrayList<>();
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions())
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), plugins)
.forEach(classGeneratable -> {
sourceWriter.write(classGeneratable, sourceOutputDirectory.toPath());
final Class<?> newClass = classCompiler.compile(classGeneratable, sourceOutputDirectory, classesOutputDirectory);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package uk.gov.justice.generation.pojo.integration.test;

import static java.util.Arrays.asList;
import static org.apache.commons.io.FileUtils.cleanDirectory;

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.VisitableSchema;
import uk.gov.justice.generation.pojo.visitable.VisitableSchemaFactory;
Expand All @@ -15,6 +20,7 @@
import uk.gov.justice.generation.pojo.write.SourceWriter;

import java.io.File;
import java.util.List;

import org.everit.json.schema.Schema;
import org.junit.Before;
Expand Down Expand Up @@ -57,11 +63,15 @@ public void shouldParseAVeryComplexSchemaDocument() throws Exception {
final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor("uk.gov.justice.pojo.complex.schema", definitionFactory);
final VisitableSchemaFactory visitableSchemaFactory = new VisitableSchemaFactory();
final VisitableSchema visitableSchema = visitableSchemaFactory.createWith(schema, new DefaultAcceptorFactory(visitableSchemaFactory));
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

visitableSchema.accept(fieldName, definitionBuilderVisitor);

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions())
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), plugins)
.forEach(classGeneratable -> {
sourceWriter.write(classGeneratable, sourceOutputDirectory.toPath());
classCompiler.compile(classGeneratable, sourceOutputDirectory, classesOutputDirectory);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package uk.gov.justice.generation.pojo.integration.test;

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
Expand All @@ -12,6 +13,10 @@
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.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.visitable.VisitableSchema;
import uk.gov.justice.generation.pojo.visitable.VisitableSchemaFactory;
Expand All @@ -24,6 +29,7 @@
import java.io.File;
import java.lang.reflect.Constructor;
import java.math.BigDecimal;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.everit.json.schema.Schema;
Expand Down Expand Up @@ -71,9 +77,13 @@ public void shouldBuildTypeSpecFromSchema() throws Exception {
visitableSchema.accept(fieldName, definitionBuilderVisitor);

final ClassDefinition personClassDefinition = (ClassDefinition) definitionBuilderVisitor.getDefinitions().get(0);
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

final ClassGeneratable personClassGenerator = new JavaGeneratorFactory()
.createClassGeneratorsFor(singletonList(personClassDefinition))
.createClassGeneratorsFor(singletonList(personClassDefinition), plugins)
.get(0);

sourceWriter.write(personClassGenerator, sourceOutputDirectory.toPath());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
import uk.gov.justice.generation.pojo.dom.EnumDefinition;
import uk.gov.justice.generation.pojo.dom.FieldDefinition;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;
Expand Down Expand Up @@ -57,9 +61,13 @@ public void shouldGenerateJavaClassSourceCode() throws Exception {

final ClassDefinition studentDefinition = studentDefinition(packageName);
final EnumDefinition colourDefinition = colourDefinition(packageName);
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

final List<? extends Class<?>> classes = javaGeneratorFactory
.createClassGeneratorsFor(asList(colourDefinition, studentDefinition))
.createClassGeneratorsFor(asList(colourDefinition, studentDefinition), plugins)
.stream()
.map(classGenerator -> {
sourceWriter.write(classGenerator, sourceOutputDirectory.toPath());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package uk.gov.justice.generation.pojo.integration.test;

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
Expand All @@ -11,12 +12,17 @@
import uk.gov.justice.generation.pojo.dom.FieldDefinition;
import uk.gov.justice.generation.pojo.generators.ClassGeneratable;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

import java.io.File;
import java.lang.reflect.Constructor;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Before;
Expand Down Expand Up @@ -51,9 +57,13 @@ public void shouldWriteASingleSourceFile() throws Exception {

final String packageName = "org.bloggs.fred";
final ClassDefinition addressDefinition = addressDefinition(packageName);
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

final ClassGeneratable addressGenerator = new JavaGeneratorFactory()
.createClassGeneratorsFor(singletonList(addressDefinition))
.createClassGeneratorsFor(singletonList(addressDefinition), plugins)
.get(0);

sourceWriter.write(addressGenerator, sourceOutputDirectory.toPath());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package uk.gov.justice.generation;

import static java.util.Arrays.asList;

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.ClassNameProvider;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.ClassGeneratable;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.EventAnnotationGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.FieldAndMethodGenerator;
import uk.gov.justice.generation.pojo.generators.plugin.PluginClassGeneratable;
import uk.gov.justice.generation.pojo.generators.plugin.SerializableGenerator;
import uk.gov.justice.generation.pojo.validation.FileNameValidator;
import uk.gov.justice.generation.pojo.visitable.VisitableSchemaFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultAcceptorFactory;
Expand All @@ -17,6 +24,7 @@
import uk.gov.justice.maven.generator.io.files.parser.core.GeneratorConfig;

import java.io.File;
import java.util.List;

import org.everit.json.schema.Schema;
import org.slf4j.Logger;
Expand Down Expand Up @@ -45,13 +53,17 @@ public void run(final File source, final GeneratorConfig generatorConfig) {

final DefinitionBuilderVisitor definitionBuilderVisitor = constructDefinitionBuilderVisitor(source, generatorConfig.getBasePackageName());
final DefaultAcceptorFactory jsonSchemaAcceptorFactory = new DefaultAcceptorFactory(visitableSchemaFactory);
final List<PluginClassGeneratable> plugins = asList(
new EventAnnotationGenerator(),
new SerializableGenerator(),
new FieldAndMethodGenerator());

visitableSchemaFactory.createWith(schema, jsonSchemaAcceptorFactory)
.accept(fieldName, definitionBuilderVisitor);

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions())
.forEach(classGeneratable -> writer.write(classGeneratable, generationContext));
final List<ClassGeneratable> classGenerators = javaGeneratorFactory.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), plugins);

classGenerators.forEach(classGeneratable -> writer.write(classGeneratable, generationContext));
}

private DefinitionBuilderVisitor constructDefinitionBuilderVisitor(final File source, final String basePackageName) {
Expand Down
Loading

0 comments on commit c070781

Please sign in to comment.