/** * Copyright © 2010-2014 Nokia * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jsonschema2pojo; import java.io.File; import java.io.FileFilter; import java.net.URL; import java.util.Iterator; import org.jsonschema2pojo.rules.RuleFactory; /** * Defines the configuration options for Java type generation, including source * and target paths/packages and all behavioural options (e.g should builders be * generated, should primitives be used, etc). * <p> * Devs: add to this interface if you need to introduce a new config property. */ public interface GenerationConfig { /** * Gets the 'generateBuilders' configuration option. * * @return Whether to generate builder-style methods of the form * <code>withXxx(value)</code> (that return <code>this</code>), * alongside the standard, void-return setters. */ boolean isGenerateBuilders(); /** * Gets the 'usePrimitives' configuration option. * * @return whether to use primitives (<code>long</code>, <code>double</code> * , <code>boolean</code>) instead of wrapper types where possible * when generating bean properties (has the side-effect of making * those properties non-null). */ boolean isUsePrimitives(); /** * Gets the 'source' configuration option. * * @return The source file(s) or directory(ies) from which JSON Schema will * be read. */ Iterator<URL> getSource(); /** * Gets the 'targetDirectory' configuration option. * * @return The target directory into which generated types will be written * (may or may not exist before types are written) */ File getTargetDirectory(); /** * Gets the 'targetPackage' configuration option. * * @return The java package used for generated types. */ String getTargetPackage(); /** * Gets the 'propertyWordDelimiters' configuration option. * * @return an array of characters that should act as word delimiters when * choosing java bean property names. */ char[] getPropertyWordDelimiters(); /** * Gets the 'useLongIntegers' configuration option. * * @return Whether to use the java type <code>long</code> (or * {@link java.lang.Long}) instead of <code>int</code> (or * {@link java.lang.Integer}) when representing the JSON Schema type * 'integer'. */ boolean isUseLongIntegers(); /** * Gets the 'useBigIntegers' configuration option. * * @return Whether to use the java type {@link java.math.BigInteger} instead * of <code>int</code> (or {@link java.lang.Integer}) when * representing the JSON Schema type 'integer'. Note that this * configuration overrides {@link #isUseLongIntegers()}. */ boolean isUseBigIntegers(); /** * Gets the 'useDoubleNumbers' configuration option. * * @return Whether to use the java type <code>double</code> (or * {@link java.lang.Double}) instead of <code>float</code> (or * {@link java.lang.Float}) when representing the JSON Schema type * 'number'. */ boolean isUseDoubleNumbers(); /** * Gets the 'useBigDecimals' configuration option. * * @return Whether to use the java type {@link java.math.BigDecimal} instead * of <code>float</code> (or {@link java.lang.Float}) when * representing the JSON Schema type 'number'. Note that this * configuration overrides {@link #isUseDoubleNumbers()}. */ boolean isUseBigDecimals(); /** * Gets the 'includeHashcodeAndEquals' configuration option. * * @return Whether to use include <code>hashCode</code> and * <code>equals</code> methods in generated Java types. */ boolean isIncludeHashcodeAndEquals(); /** * Gets the 'includeToString' configuration option. * * @return Whether to use include a <code>toString</code> method in * generated Java types. */ boolean isIncludeToString(); /** * Gets the 'toStringExcludes' configuration option. * * @return An array of strings representing fields * that should be excluded from toString methods */ String[] getToStringExcludes(); /** * Gets the 'annotationStyle' configuration option. * * @return The style of annotations to use in the generated Java types. * <p> * Supported values: * <ul> * <li><code>jackson1</code> (apply annotations from the * <a href="http://jackson.codehaus.org/">Jackson 1.x</a> library) * </li> * <li><code>jackson2</code> (apply annotations from the * <a href="https://github.com/FasterXML/jackson-annotations"> * Jackson 2.x</a> library)</li> * <li><code>gson</code> (apply annotations from the * <a href="https://code.google.com/p/google-gson/">gson</a> * library)</li> * <li><code>moshi1</code> (apply annotations from the * <a href="https://github.com/square/moshi">moshi</a> library)</li> * <li><code>none</code> (apply no annotations at all)</li> * </ul> * @see AnnotatorFactory */ AnnotationStyle getAnnotationStyle(); /** * Gets the 'inclusionLevel' option for Jackson1 and Jackson2 serializers. * * @return Level of inclusion to set in the generated Java types. * <p> * Supported values * <ul> * <li><code>ALWAYS</code></li> * <li><code>NON_ABSENT</code></li> * <li><code>NON_DEFAULT</code></li> * <li><code>NON_EMPTY</code></li> * <li><code>NON_NULL</code></li> * <li><code>USE_DEFAULTS</code></li> * </ul> * </p> * * @see InclusionLevel */ InclusionLevel getInclusionLevel(); /** * Gets the 'customAnnotator' configuration option. * * @return An annotator that will be used in addition to the one chosen by * {@link #getAnnotationStyle()} */ Class<? extends Annotator> getCustomAnnotator(); /** * Gets the 'customRuleFactory' configuration option. * * @return An Rule Factory that will be used for the creation of generation * rules. */ Class<? extends RuleFactory> getCustomRuleFactory(); /** * Gets the 'includeJsr303Annotations' configuration option. * * @return Whether to include * <a href="http://jcp.org/en/jsr/detail?id=303">JSR-303</a> * annotations (for schema rules like minimum, maximum, etc) in * generated Java types. */ boolean isIncludeJsr303Annotations(); /** * Gets the 'includeJsr305Annotations' configuration option. * * @return Whether to include * <a href="http://jcp.org/en/jsr/detail?id=305">JSR-305</a> * annotations (for schema rules like Nullable, NonNull, etc) in * generated Java types. */ boolean isIncludeJsr305Annotations(); /** * Gets the 'sourceType' configuration option. * * @return The type of input documents that will be read * <p> * Supported values: * <ul> * <li><code>jsonschema</code></li> * <li><code>json</code></li> * </ul> */ SourceType getSourceType(); /** * Gets the 'removeOldOutput' configuration option. * * @return Whether to empty the target directory before generation occurs, * to clear out all source files that have been generated * previously. <strong>Be warned</strong>, when activated this * option will cause jsonschema2pojo to <strong>indiscriminately * delete the entire contents of the target directory (all files and * folders)</strong> before it begins generating sources. */ boolean isRemoveOldOutput(); /** * Gets the 'outputEncoding' configuration option. * * @return The character encoding that should be used when writing the * generated Java source files. */ String getOutputEncoding(); /** * Gets the 'useJodaDates' configuration option. * * @return Whether to use {@link org.joda.time.DateTime} instead of * {@link java.util.Date} when adding date type fields to generated * Java types. */ boolean isUseJodaDates(); /** * Gets the 'useJodaLocalDates' configuration option. * * @return Whether to use {@link org.joda.time.LocalDate} instead of string * when adding string type fields with a format of date (not * date-time) to generated Java types. */ boolean isUseJodaLocalDates(); /** * Gets the 'useJodaLocalTimes' configuration option. * * @return Whether to use {@link org.joda.time.LocalTime} instead of string * when adding string type fields with a format of time (not * date-time) to generated Java types. */ boolean isUseJodaLocalTimes(); /** * Gets the 'useCommonsLang3' configuration option. * * @return Whether to use commons-lang 3.x imports instead of commons-lang * 2.x imports when adding equals, hashCode and toString methods. */ boolean isUseCommonsLang3(); /** * Gets the 'parcelable' configuration option. * * @return Whether to make the generated types 'parcelable' (for Android * development) */ boolean isParcelable(); /** * Gets the 'serializable' configuration option. * * @return Whether to make the generated types 'serializable' */ boolean isSerializable(); /** * Gets the file filter used to isolate the schema mapping files in the * source directories. * * @return the file filter use when scanning for schema files. */ FileFilter getFileFilter(); /** * Gets the 'initializeCollections' configuration option. * * @return Whether to initialize collections with empty instance or null. */ boolean isInitializeCollections(); /** * Gets the 'getClassNamePrefix' configuration option. * * @return Whether to add a prefix to generated classes. */ String getClassNamePrefix(); /** * Gets the 'getClassNameSuffix' configuration option. * * @return Whether to add a suffix to generated classes. */ String getClassNameSuffix(); /** * Gets the 'fileExtensions' configuration option. * * @return An array of strings that should be considered as file extensions * and therefore not included in class names. */ String[] getFileExtensions(); /** * Gets the 'includeConstructors' configuration option. * * @return Whether to generate constructors or not. */ boolean isIncludeConstructors(); /** * Gets the 'constructorsRequiredPropertiesOnly' configuration option * * @return Whether generated constructors should have parameters for all * properties, or only required ones. */ boolean isConstructorsRequiredPropertiesOnly(); /** * Gets the 'includeAdditionalProperties' configuration option. * * @return Whether to allow 'additional properties' support in objects. * Setting this to false will disable additional properties support, * regardless of the input schema(s). */ boolean isIncludeAdditionalProperties(); /** * Gets the 'includeAccessors' configuration option. * * @return Whether to include getters/setters or to omit these accessor * methods and create public fields instead. */ boolean isIncludeAccessors(); /** * Gets the 'targetVersion' configuration option. * * @return The target version for generated source files. */ String getTargetVersion(); /** * Gets the `includeDynamicAccessors` configuraiton option. * * @return Whether to include dynamic getters, setters, and builders or to * omit these methods. */ boolean isIncludeDynamicAccessors(); /** * Gets the `dateTimeType` configuration option. * <p> * Example values: * <ul> * <li><code>org.joda.time.LocalDateTime</code> (Joda)</li> * <li><code>java.time.LocalDateTime</code> (JSR310)</li> * <li><code>null</code> (default behavior)</li> * </ul> * * @return The java type to use instead of {@link java.util.Date} when * adding date type fields to generate Java types. */ String getDateTimeType(); /** * Gets the `dateType` configuration option. * <p> * Example values: * <ul> * <li><code>org.joda.time.LocalDate</code> (Joda)</li> * <li><code>java.time.LocalDate</code> (JSR310)</li> * <li><code>null</code> (default behavior)</li> * </ul> * * @return The java type to use instead of string when adding string type * fields with a format of date (not date-time) to generated Java * types. */ String getDateType(); /** * Gets the `timeType` configuration option. * <p> * Example values: * <ul> * <li><code>org.joda.time.LocalTime</code> (Joda)</li> * <li><code>java.time.LocalTime</code> (JSR310)</li> * <li><code>null</code> (default behavior)</li> * </ul> * * @return The java type to use instead of string when adding string type * fields with a format of time (not date-time) to generated Java * types. */ String getTimeType(); /** * Gets the `formatDates` configuration option * * @return Whether the fields of type <code>date</code> have the * <code>@JsonFormat</code> annotation with pattern set to the * default value of <code>yyyy-MM-dd</code> */ boolean isFormatDates(); /** * Gets the `formatDateTime` configuration option * * @return Whether the fields of type <code>date-type</code> have the * <code>@JsonFormat</code> annotation with pattern set to the * default value of <code>yyyy-MM-dd'T'HH:mm:ss.SSSZ</code> */ boolean isFormatDateTimes(); /** * Gets the 'customDatePattern' configuration option * * @return The custom format that dates will use when types are serialized. * Requires support from your JSON binding library. */ String getCustomDatePattern(); /** * Gets the 'customDateTimePattern' configuration option * * @return The custom format that dates will use when types are serialized. * Requires support from your JSON binding library. */ String getCustomDateTimePattern(); /** * Gets the `refFragmentPathDelimiters` configuration option. * * @return A string containing any characters that should act as path * delimiters when resolving $ref fragments. By default, #, / and . * are used in an attempt to support JSON Pointer and JSON Path. */ String getRefFragmentPathDelimiters(); /** * Gets the 'sourceSortOrder' configuration option. * * @return * <p> * Supported values: * <ul> * <li><code>OS</code> (Let the OS influence the order the source files are processed.)</li> * <li><code>FILES_FIRST</code> (Case sensitive sort, visit the files first. The source files are processed in a breadth * first sort order.)</li> * <li><code>SUBDIRS_FIRST</code> (Case sensitive sort, visit the sub-directories before the files. The source files are * processed in a depth first sort order.)</li> * </ul> */ SourceSortOrder getSourceSortOrder(); }