From 18c1d3ade7238a55b1a29833d8a76336edca453b Mon Sep 17 00:00:00 2001
From: amckenzie
+ * The uuid should be specified as a reference in your json schema file:
+ *
+ * {@code public class MyClass {
+ *
+ * private final String myProperty;
+ *
+ * public MyClass(final String myProperty) {
+ * this.myProperty = myProperty;
+ * }
+ *
+ * public String getMyProperty() {
+ * return myProperty;
+ * }
+ *
+ * public static Builder myClass() {
+ * return new MyClass.Builder();
+ * }
+ *
+ * public static class Builder {
+ *
+ * private String myProperty;
+ *
+ * public Builder withMyProperty(final String myProperty) {
+ * this.myProperty = myProperty;
+ * return this;
+ * }
+ *
+ * public MyClass build() {
+ * return new MyClass(myProperty);
+ * }
+ * }
+ * }
+ * }
+ */
public class GenerateBuilderForClassPlugin implements ClassModifyingPlugin {
private final BuilderGeneratorFactory builderGeneratorFactory;
diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/classgenerator/MakeClassSerializablePlugin.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/classgenerator/MakeClassSerializablePlugin.java
index 2c0365e..8347886 100644
--- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/classgenerator/MakeClassSerializablePlugin.java
+++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/classgenerator/MakeClassSerializablePlugin.java
@@ -12,6 +12,33 @@
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.TypeSpec;
+/**
+ * A class plugin that adds {@see Serializable} interface and
+ * {@Code serialVersionUID} to the generated class.
+ *
+ * Note: the serialVersionUID is always set to 1.
+ *
+ * For example:
+ *
+ *
+ * {@code public class MyClass implements Serializable {
+ *
+ * private static final long serialVersionUID = 1L;
+ *
+ * private final String myProperty;
+ *
+ * public MyClass(final String myProperty) {
+ * this.myProperty = myProperty;
+ * }
+ *
+ * public String getMyProperty() {
+ * return myProperty;
+ * }
+ * }
+ * }
+ *
+ *
+ */
public class MakeClassSerializablePlugin implements ClassModifyingPlugin {
private static final String SERIAL_VERSION_FIELD_NAME = "serialVersionUID";
diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportJavaOptionalsPlugin.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportJavaOptionalsPlugin.java
index 453b659..9726218 100644
--- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportJavaOptionalsPlugin.java
+++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportJavaOptionalsPlugin.java
@@ -10,6 +10,28 @@
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
+/**
+ * A type modifying plugin for setting all properties which are not marked as required
+ * in the json schema document to be wrapped in a java {@see Optional}.
+ *
+ * For example:
+ *
+ *
+ * {@code public class MyClass {
+ *
+ * private final Optional
+ */
public class SupportJavaOptionalsPlugin implements TypeModifyingPlugin {
@Override
diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportUuidsPlugin.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportUuidsPlugin.java
index a84b7a8..563aa3e 100644
--- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportUuidsPlugin.java
+++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportUuidsPlugin.java
@@ -10,6 +10,50 @@
import com.squareup.javapoet.TypeName;
+/**
+ * Adds support for using {@see UUID} as return types and constructor parameters in the generated
+ * class.
+ *
+ * To Use:
+ *
+ * {@code "myProperty": {
+ * "$ref": "#/definitions/UUID"
+ * },
+ * "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}$",
+ * }
+ * }
+ *
+ * }
+ *
+ * This will generate the following code: + *
+ * {@code + * public class MyClass { + * + * private final UUID myProperty; + * + * public MyClass(final UUID myProperty) { + * this.myProperty = myProperty; + * } + * + * public UUID getMyProperty() { + * return myProperty; + * } + * } + * }+ * + * + */ public class SupportUuidsPlugin implements TypeModifyingPlugin { @Override diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportZonedDateTimePlugin.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportZonedDateTimePlugin.java index f2439db..af1ce35 100644 --- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportZonedDateTimePlugin.java +++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/SupportZonedDateTimePlugin.java @@ -10,6 +10,50 @@ import com.squareup.javapoet.TypeName; +/** + * Adds support for using {@see ZonedDateTime} as return types and constructor parameters in the generated + * class. + * + * To Use: + *
+ * The ZonedDateTime should be specified as a reference in your json schema file: + *
+ * {@code "myProperty": { + * "$ref": "#/definitions/ZonedDateTime" + * }, + * "definitions": { + * "ZonedDateTime": { + * "type": "string", + * "pattern": "^[1|2][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$" + * } + * } + * + * }+ * + * + * The name {@code ZonedDateTime} in the definition is important as this is how we specify that + * the types should be of type {@link ZonedDateTime}. + * + *
+ * This will generate the following code: + *
+ * {@code public class MyClass { + * + * private final ZonedDateTime myProperty; + * + * public MyClass(final ZonedDateTime myProperty) { + * this.myProperty = myProperty; + * } + * + * public ZonedDateTime getMyProperty() { + * return myProperty; + * } + * } + * }+ * + * + */ + public class SupportZonedDateTimePlugin implements TypeModifyingPlugin { @Override diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/TypeModifyingPlugin.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/TypeModifyingPlugin.java index f289c5e..6372444 100644 --- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/TypeModifyingPlugin.java +++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/typename/TypeModifyingPlugin.java @@ -4,7 +4,27 @@ import com.squareup.javapoet.TypeName; +/** + * Interface for all plugins that modify return types and parameters of generated classes. For + * example these plugins can change the types of nullable properties in a class to + * {@link java.util.Optional}, support for {@link java.util.UUID} as return types and constructor + * parameters, or support for {@link java.time.ZonedDateTime} as return types and constructor + * parameters + * + * {@link SupportJavaOptionalsPlugin} + * {@link SupportUuidsPlugin} + * {@link SupportZonedDateTimePlugin} + */ public interface TypeModifyingPlugin { + /** + * Modifies the TypeName (used as constructor parameters and getter return types) of + * generated classes in some way. + * + * @param typeName The type name to be modified + * @param definition The FieldDefinition of the type to be modified + * + * @return The modified type name + */ TypeName modifyTypeName(final TypeName typeName, final Definition definition); } diff --git a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/TestPluginProvider.java b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/TestPluginProvider.java index 37f0832..b340839 100644 --- a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/TestPluginProvider.java +++ b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/TestPluginProvider.java @@ -4,8 +4,8 @@ import static java.util.Collections.singletonList; import uk.gov.justice.generation.pojo.generators.plugin.PluginProvider; -import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.AddFieldsAndMethodsToClassPlugin; +import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.MakeClassSerializablePlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.SupportJavaOptionalsPlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.TypeModifyingPlugin; diff --git a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/DefaultPluginProviderTest.java b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/DefaultPluginProviderTest.java index 639bc59..91e5292 100644 --- a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/DefaultPluginProviderTest.java +++ b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/DefaultPluginProviderTest.java @@ -5,14 +5,14 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; -import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.AddFieldsAndMethodsToClassPlugin; -import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.MakeClassSerializablePlugin; +import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.GenerateBuilderForClassPlugin; +import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.MakeClassSerializablePlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.SupportJavaOptionalsPlugin; -import uk.gov.justice.generation.pojo.generators.plugin.typename.TypeModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.SupportUuidsPlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.SupportZonedDateTimePlugin; +import uk.gov.justice.generation.pojo.generators.plugin.typename.TypeModifyingPlugin; import java.util.List; diff --git a/pojo-plugin-test-provider/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProvider.java b/pojo-plugin-test-provider/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProvider.java index c7f9f03..6c7ea5e 100644 --- a/pojo-plugin-test-provider/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProvider.java +++ b/pojo-plugin-test-provider/src/main/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProvider.java @@ -3,9 +3,9 @@ import static java.util.Arrays.asList; import static java.util.Collections.emptyList; -import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.AddEventAnnotationToClassPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.AddFieldsAndMethodsToClassPlugin; +import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.MakeClassSerializablePlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.TypeModifyingPlugin; diff --git a/pojo-plugin-test-provider/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProviderTest.java b/pojo-plugin-test-provider/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProviderTest.java index f34adce..442e56f 100644 --- a/pojo-plugin-test-provider/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProviderTest.java +++ b/pojo-plugin-test-provider/src/test/java/uk/gov/justice/generation/pojo/generators/plugin/PluginTestProviderTest.java @@ -5,9 +5,9 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; -import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.AddEventAnnotationToClassPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.AddFieldsAndMethodsToClassPlugin; +import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.ClassModifyingPlugin; import uk.gov.justice.generation.pojo.generators.plugin.classgenerator.MakeClassSerializablePlugin; import uk.gov.justice.generation.pojo.generators.plugin.typename.TypeModifyingPlugin;