diff --git a/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java b/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java index 660d06aa2..96b0fed8b 100644 --- a/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java +++ b/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java @@ -151,6 +151,8 @@ public class Jsonschema2PojoTask extends Task implements GenerationConfig { private boolean includeDynamicBuilders = false; + private String[] baseClassInterfaces = new String[0]; + private String dateTimeType; private String timeType; @@ -764,6 +766,16 @@ public void setIncludeDynamicBuilders(boolean includeDynamicBuilders) { this.includeDynamicBuilders = includeDynamicBuilders; } + /** + * Sets the 'baseClassInterfaces' property of this class + * + * @param baseClassInterfaces + * Interfaces added to top-level generated classes. + */ + public void setBaseClassInterfaces(String[] baseClassInterfaces) { + this.baseClassInterfaces = baseClassInterfaces; + } + /** * Sets the 'formatDateTimes' property of this class * @@ -1096,6 +1108,11 @@ public boolean isIncludeDynamicBuilders() { return includeDynamicBuilders; } + @Override + public String[] getBaseClassInterfaces() { + return baseClassInterfaces; + } + @Override public String getDateTimeType() { return dateTimeType; diff --git a/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html b/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html index e9dea274b..e8ccc0fe8 100644 --- a/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html +++ b/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html @@ -188,6 +188,11 @@
false
)""
(none)){}
+ */
+ @Override
+ public String[] getBaseClassInterfaces() {
+ return new String[] {};
+ }
+
@Override
public String getDateTimeType() {
return null;
@@ -427,4 +437,4 @@ public Language getTargetLanguage() {
return Language.JAVA;
}
-}
\ No newline at end of file
+}
diff --git a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java
index f0596b99a..467a2220b 100644
--- a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java
+++ b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java
@@ -20,6 +20,7 @@
import java.io.FileFilter;
import java.net.URL;
import java.util.Iterator;
+import java.util.List;
import org.jsonschema2pojo.rules.RuleFactory;
@@ -422,6 +423,13 @@ public interface GenerationConfig {
*/
boolean isIncludeDynamicBuilders();
+ /**
+ * Gets the `baseClassInterfaces` configuration option.
+ *
+ * @return a list of interfaces added to each generated base class
+ */
+ String[] getBaseClassInterfaces();
+
/**
* Gets the `dateTimeType` configuration option.
* diff --git a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/EnumRule.java b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/EnumRule.java index a5dcc9e10..ab33f50b5 100644 --- a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/EnumRule.java +++ b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/EnumRule.java @@ -108,6 +108,11 @@ public JType apply(String nodeName, JsonNode node, JsonNode parent, JClassContai schema.setJavaTypeIfEmpty(_enum); + if (parent == null) { + for (String _interface : ruleFactory.getGenerationConfig().getBaseClassInterfaces()) { + _enum._implements(resolveType(_enum._package(), _interface)); + } + } if (node.has("javaInterfaces")) { addInterfaces(_enum, node.get("javaInterfaces")); } diff --git a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/ObjectRule.java b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/ObjectRule.java index 86488218e..28028258d 100644 --- a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/ObjectRule.java +++ b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/ObjectRule.java @@ -122,6 +122,11 @@ public JType apply(String nodeName, JsonNode node, JsonNode parent, JPackage _pa ruleFactory.getPropertiesRule().apply(nodeName, node.get("properties"), node, jclass, schema); + if (parent == null) { + for (String _interface : ruleFactory.getGenerationConfig().getBaseClassInterfaces()) { + jclass._implements(resolveType(jclass._package(), _interface)); + } + } if (node.has("javaInterfaces")) { addInterfaces(jclass, node.get("javaInterfaces")); } diff --git a/jsonschema2pojo-core/src/test/java/org/jsonschema2pojo/rules/EnumRuleTest.java b/jsonschema2pojo-core/src/test/java/org/jsonschema2pojo/rules/EnumRuleTest.java index 98b79d230..6a5f74b5c 100644 --- a/jsonschema2pojo-core/src/test/java/org/jsonschema2pojo/rules/EnumRuleTest.java +++ b/jsonschema2pojo-core/src/test/java/org/jsonschema2pojo/rules/EnumRuleTest.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.*; import org.jsonschema2pojo.Annotator; +import org.jsonschema2pojo.GenerationConfig; import org.jsonschema2pojo.Schema; import org.jsonschema2pojo.util.NameHelper; import org.junit.Before; @@ -44,6 +45,7 @@ public class EnumRuleTest { private Annotator annotator = mock(Annotator.class); private RuleFactory ruleFactory = mock(RuleFactory.class); private TypeRule typeRule = mock(TypeRule.class); + private GenerationConfig config = mock(GenerationConfig.class); private EnumRule rule = new EnumRule(ruleFactory); @@ -52,6 +54,7 @@ public void wireUpConfig() { when(ruleFactory.getNameHelper()).thenReturn(nameHelper); when(ruleFactory.getAnnotator()).thenReturn(annotator); when(ruleFactory.getTypeRule()).thenReturn(typeRule); + when(ruleFactory.getGenerationConfig()).thenReturn(config); } @Test @@ -61,6 +64,7 @@ public void applyGeneratesUniqueEnumNamesForMultipleEnumNodesWithSameName() { when(nameHelper.getFieldName(anyString(), Matchers.any(JsonNode.class))).thenAnswer(firstArgAnswer); when(nameHelper.replaceIllegalCharacters(anyString())).thenAnswer(firstArgAnswer); when(nameHelper.normalizeName(anyString())).thenAnswer(firstArgAnswer); + when(config.getBaseClassInterfaces()).thenReturn(new String[0]); JPackage jpackage = new JCodeModel()._package(getClass().getPackage().getName()); diff --git a/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy b/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy index 39655984c..9c2462c0c 100644 --- a/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy +++ b/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy @@ -51,6 +51,7 @@ public class JsonSchemaExtension implements GenerationConfig { boolean includeDynamicGetters boolean includeDynamicSetters boolean includeDynamicBuilders + String[] baseClassInterfaces boolean includeConstructors boolean constructorsRequiredPropertiesOnly boolean includeHashcodeAndEquals @@ -137,6 +138,7 @@ public class JsonSchemaExtension implements GenerationConfig { includeDynamicGetters = false includeDynamicSetters = false includeDynamicBuilders = false + baseClassInterfaces = [] as String[] formatDates = false formatTimes = false formatDateTimes = false @@ -239,6 +241,7 @@ public class JsonSchemaExtension implements GenerationConfig { |includeDynamicGetters = ${includeDynamicGetters} |includeDynamicSetters = ${includeDynamicSetters} |includeDynamicBuilders = ${includeDynamicBuilders} + |baseClassInterfaces = ${baseClassInterfaces} |formatDates = ${formatDates} |formatTimes = ${formatTimes} |formatDateTimes = ${formatDateTimes} diff --git a/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java b/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java index 769fb5d73..dbb6be162 100644 --- a/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java +++ b/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java @@ -617,6 +617,14 @@ public class Jsonschema2PojoMojo extends AbstractMojo implements GenerationConfi */ private boolean includeDynamicBuilders = false; + /** + * Interfaces to add to all top-level generated classes. + * + * @parameter property="jsonschema2pojo.baseClassInterfaces" + * default-value="" + */ + private String[] baseClassInterfaces = new String[0]; + /** * The project being built. * @@ -1062,6 +1070,11 @@ public boolean isIncludeDynamicBuilders() { return includeDynamicBuilders; } + @Override + public String[] getBaseClassInterfaces() { + return baseClassInterfaces; + } + @Override public String getDateTimeType() { return dateTimeType;