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 #89 from CJSCommonPlatform/plug-in-schema-id-parser
Browse files Browse the repository at this point in the history
plug in schema id parser for generating base package name
  • Loading branch information
allanmckenzie committed Oct 25, 2017
2 parents 18e160a + ea8999b commit 5b8a437
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public void run(final File jsonSchemaFile, final GeneratorConfig generatorConfig
final PojoGeneratorProperties generatorProperties = (PojoGeneratorProperties) generatorConfig.getGeneratorProperties();
final String schemaFileName = jsonSchemaFile.getName();

final GenerationContext generationContext = generatorContextProvider.create(schemaFileName, generatorConfig);
final GenerationContext generationContext = generatorContextProvider.create(schemaFileName, schema, generatorConfig);
final PluginProvider pluginProvider = pluginProviderFactory.createFor(generatorProperties);

final Logger logger = generationContext.getLoggerFor(getClass());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import uk.gov.justice.generation.io.files.JavaFileSimpleNameLister;
import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.PackageAndClassNameParser;
import uk.gov.justice.generation.pojo.plugin.PluginProviderFactoryFactory;
import uk.gov.justice.generation.pojo.visitable.VisitableFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.AcceptorService;
Expand Down Expand Up @@ -32,12 +33,14 @@ public class SchemaPojoGeneratorFactory implements GeneratorFactory<File> {
private final SourceWriter sourceWriter = new SourceWriter();
private NonDuplicatingSourceWriter writer = new NonDuplicatingSourceWriter(new JavaSourceFileProvider(), sourceWriter);

private final PackageAndClassNameParser packageAndClassNameParser = new PackageAndClassNameParser();

@Override
public Generator<File> create() {
return new SchemaPojoGenerator(
new PluginProviderFactoryFactory().create(),
new DefinitionProvider(visitableFactory, definitionBuilderVisitorProvider, acceptorService),
new GeneratorContextProvider(javaFileSimpleNameLister),
new GeneratorContextProvider(javaFileSimpleNameLister, packageAndClassNameParser),
new PojoGeneratorFactoriesProvider(),
new JavaClassFileWriter(writer),
new PluginContextProvider(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,32 @@

import uk.gov.justice.generation.io.files.JavaFileSimpleNameLister;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.PackageAndClassNameParser;
import uk.gov.justice.maven.generator.io.files.parser.core.GeneratorConfig;

import java.nio.file.Path;
import java.util.List;

import org.everit.json.schema.Schema;

public class GeneratorContextProvider {

private final JavaFileSimpleNameLister javaFileSimpleNameLister;
private final PackageAndClassNameParser packageAndClassNameParser;

public GeneratorContextProvider(final JavaFileSimpleNameLister javaFileSimpleNameLister) {
public GeneratorContextProvider(
final JavaFileSimpleNameLister javaFileSimpleNameLister,
final PackageAndClassNameParser packageAndClassNameParser) {
this.javaFileSimpleNameLister = javaFileSimpleNameLister;
this.packageAndClassNameParser = packageAndClassNameParser;
}

public GenerationContext create(final String schemaFileName, final GeneratorConfig generatorConfig) {
public GenerationContext create(final String schemaFileName, final Schema schema, final GeneratorConfig generatorConfig) {
final List<Path> sourcePaths = generatorConfig.getSourcePaths();
final Path outputDirectory = generatorConfig.getOutputDirectory();
final String basePackageName = generatorConfig.getBasePackageName();

final String basePackageName = packageAndClassNameParser.packageNameFrom(schema.getId())
.orElseGet(generatorConfig::getBasePackageName);

final List<String> hardCodedClassNames = javaFileSimpleNameLister.findSimpleNames(
sourcePaths,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public void shouldGeneratePojoFromSchema() throws Exception {
when(schemaLoader.loadFrom(jsonSchemaFile)).thenReturn(jsonSchema);
when(jsonSchemaFile.getName()).thenReturn(jsonSchemaFileName);
when(generatorConfig.getGeneratorProperties()).thenReturn(generatorProperties);
when(generatorContextProvider.create(jsonSchemaFileName, generatorConfig)).thenReturn(generationContext);
when(generatorContextProvider.create(jsonSchemaFileName, jsonSchema, generatorConfig)).thenReturn(generationContext);

when(pluginProviderFactory.createFor(generatorProperties)).thenReturn(pluginProvider);
when(generationContext.getLoggerFor(SchemaPojoGenerator.class)).thenReturn(mock(Logger.class));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
package uk.gov.justice.generation.provider;

import static java.util.Optional.of;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import uk.gov.justice.generation.io.files.JavaFileSimpleNameLister;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.PackageAndClassNameParser;
import uk.gov.justice.maven.generator.io.files.parser.core.GeneratorConfig;

import java.nio.file.Path;
import java.util.List;

import org.everit.json.schema.Schema;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
Expand All @@ -24,26 +27,34 @@ public class GeneratorContextProviderTest {
@Mock
private JavaFileSimpleNameLister javaFileSimpleNameLister;

@Mock
private PackageAndClassNameParser packageAndClassNameParser;

@InjectMocks
private GeneratorContextProvider generatorContextProvider;

@Test
@SuppressWarnings("unchecked")
public void shouldProvideGeneratorContext() throws Exception {
final String packageName = "package.name";
final String packageName = "uk.gov.justice.standards.events";
final String schemaFilename = "schemaFilename";
final Path outputDirectory = mock(Path.class);
final List<String> hardCodedClassNames = mock(List.class);
final String schemaId = "http://justice.gov.uk/standards/events/address.schema.json";

final List<Path> sourcePaths = mock(List.class);
final GeneratorConfig generatorConfig = mock(GeneratorConfig.class);
final Schema schema = mock(Schema.class);

when(generatorConfig.getSourcePaths()).thenReturn(sourcePaths);
when(generatorConfig.getOutputDirectory()).thenReturn(outputDirectory);
when(generatorConfig.getBasePackageName()).thenReturn(packageName);
when(schema.getId()).thenReturn(schemaId);
when(packageAndClassNameParser.packageNameFrom(schemaId)).thenReturn(of(packageName));

when(javaFileSimpleNameLister.findSimpleNames(sourcePaths, outputDirectory, packageName)).thenReturn(hardCodedClassNames);
when(generatorConfig.getBasePackageName()).thenReturn(packageName);

final GenerationContext generationContext = generatorContextProvider.create(schemaFilename, generatorConfig);
final GenerationContext generationContext = generatorContextProvider.create(schemaFilename, schema, generatorConfig);

assertThat(generationContext.getPackageName(), is(packageName));
assertThat(generationContext.getOutputDirectoryPath(), is(outputDirectory));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"id": "http://justice.gov.uk/events/pojo/example.events.person-removed.json",
"properties": {
"personId": {
"$ref": "#/definitions/uuid"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"id": "http://justice.gov.uk/events/pojo/example.events.person-updated.json",
"properties": {
"personId": {
"$ref": "#/definitions/uuid"
Expand Down

0 comments on commit 5b8a437

Please sign in to comment.