org.jsonschema2pojo.GenerationConfig Maven / Gradle / Ivy
/**
* Copyright © 2010-2017 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).
*
* 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
* withXxx(value)
(that return this
),
* alongside the standard, void-return setters.
*/
boolean isGenerateBuilders();
/**
* Gets the 'usePrimitives' configuration option.
*
* @return whether to use primitives (long
, double
* , boolean
) 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 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 long
(or
* {@link java.lang.Long}) instead of int
(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 int
(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 double
(or
* {@link java.lang.Double}) instead of float
(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 float
(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 hashCode
and
* equals
methods in generated Java types.
*/
boolean isIncludeHashcodeAndEquals();
/**
* Gets the 'includeToString' configuration option.
*
* @return Whether to use include a toString
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.
*
* Supported values:
*
* jackson1
(apply annotations from the
* Jackson 1.x library)
*
* jackson2
(apply annotations from the
*
* Jackson 2.x library)
* gson
(apply annotations from the
* gson
* library)
* moshi1
(apply annotations from the
* moshi library)
* none
(apply no annotations at all)
*
* @see AnnotatorFactory
*/
AnnotationStyle getAnnotationStyle();
/**
* Gets the 'inclusionLevel' option for Jackson1 and Jackson2 serializers.
*
* @return Level of inclusion to set in the generated Java types.
*
* Supported values
*
* ALWAYS
* NON_ABSENT
* NON_DEFAULT
* NON_EMPTY
* NON_NULL
* USE_DEFAULTS
*
*
*
* @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 getCustomAnnotator();
/**
* Gets the 'customRuleFactory' configuration option.
*
* @return An Rule Factory that will be used for the creation of generation
* rules.
*/
Class getCustomRuleFactory();
/**
* Gets the 'includeJsr303Annotations' configuration option.
*
* @return Whether to include
* JSR-303
* annotations (for schema rules like minimum, maximum, etc) in
* generated Java types.
*/
boolean isIncludeJsr303Annotations();
/**
* Gets the 'includeJsr305Annotations' configuration option.
*
* @return Whether to include
* JSR-305
* 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
*
* Supported values:
*
* jsonschema
* json
*
*/
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. Be warned, when activated this
* option will cause jsonschema2pojo to indiscriminately
* delete the entire contents of the target directory (all files and
* folders) 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.
*
* Example values:
*
* org.joda.time.LocalDateTime
(Joda)
* java.time.LocalDateTime
(JSR310)
* null
(default behavior)
*
*
* @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.
*
* Example values:
*
* org.joda.time.LocalDate
(Joda)
* java.time.LocalDate
(JSR310)
* null
(default behavior)
*
*
* @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.
*
* Example values:
*
* org.joda.time.LocalTime
(Joda)
* java.time.LocalTime
(JSR310)
* null
(default behavior)
*
*
* @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 date
have the
* @JsonFormat
annotation with pattern set to the
* default value of yyyy-MM-dd
*/
boolean isFormatDates();
/**
* Gets the `formatTimes` configuration option
*
* @return Whether the fields of type time
have the
* @JsonFormat
annotation with pattern set to the
* default value of HH:mm:ss.SSS
*/
boolean isFormatTimes();
/**
* Gets the `formatDateTime` configuration option
*
* @return Whether the fields of type date-type
have the
* @JsonFormat
annotation with pattern set to the
* default value of yyyy-MM-dd'T'HH:mm:ss.SSSZ
*/
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 'customTimePattern' configuration option
*
* @return The custom format that times will use when types are serialized.
* Requires support from your JSON binding library.
*/
String getCustomTimePattern();
/**
* 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
*
* Supported values:
*
* OS
(Let the OS influence the order the source files are processed.)
* FILES_FIRST
(Case sensitive sort, visit the files first. The source files are processed in a breadth
* first sort order.)
* SUBDIRS_FIRST
(Case sensitive sort, visit the sub-directories before the files. The source files are
* processed in a depth first sort order.)
*
*/
SourceSortOrder getSourceSortOrder();
}