All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.jsonschema2pojo.ant.Jsonschema2PojoTask Maven / Gradle / Ivy

There is a newer version: 0.3.7
Show newest version
/**
 * Copyright © 2010-2011 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 com.googlecode.jsonschema2pojo.ant;

import static org.apache.commons.lang.StringUtils.*;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import com.googlecode.jsonschema2pojo.AnnotationStyle;
import com.googlecode.jsonschema2pojo.GenerationConfig;
import com.googlecode.jsonschema2pojo.SourceType;
import com.googlecode.jsonschema2pojo.cli.Jsonschema2Pojo;

/**
 * When invoked, this task reads one or more JSON Schema documents and generates DTO
 * style Java classes for data binding.
 * 

* See jsonschema2pojo.googlecode.com. * * @see Writing Your Own * Task */ public class Jsonschema2PojoTask extends Task implements GenerationConfig { private boolean generateBuilders; private boolean usePrimitives; private File source; private File targetDirectory; private String targetPackage; private boolean skip; private char[] propertyWordDelimiters = new char[] {}; private boolean useLongIntegers; private boolean includeHashcodeAndEquals = true; private boolean includeToString = true; private AnnotationStyle annotationStyle = AnnotationStyle.JACKSON; private boolean includeJsr303Annotations = false; private SourceType sourceType = SourceType.JSONSCHEMA; /** * Execute this task (it's expected that all relevant setters will have been * called by Ant to provide task configuration before this method * is called). * * @throws BuildException * if this task cannot be completed due to some error reading * schemas, generating types or writing output .java files. */ @Override public void execute() throws BuildException { if (skip) { return; } if (source == null) { log("source attribute is required but was not set"); return; } if (!source.exists()) { log(source.getAbsolutePath() + " cannot be found"); return; } if (targetDirectory == null) { log("targetDirectory attribute is required but was not set"); return; } try { Jsonschema2Pojo.generate(this); } catch (IOException e) { throw new BuildException( "Error generating classes from JSON Schema file(s) " + source.getPath(), e); } } /** * Sets the 'generateBuilders' property of this class. * * @param generateBuilders * Whether to generate builder-style methods of the form * withXxx(value) (that return this), * alongside the standard, void-return setters. *

* Default: false. */ public void setGenerateBuilders(boolean generateBuilders) { this.generateBuilders = generateBuilders; } /** * Sets the 'usePrimitives' property of this class. * * @param usePrimitives * 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). *

* Default: false. */ public void setUsePrimitives(boolean usePrimitives) { this.usePrimitives = usePrimitives; } /** * Sets the 'useLongIntegers' property of this class * * @param useLongIntegers * 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'. */ public void setUseLongIntegers(boolean useLongIntegers) { this.useLongIntegers = useLongIntegers; } /** * Sets schema file (or directory containing schema files) that should be * used for input. * * @param source * Location of the JSON Schema file(s). Note: this may refer to a * single file or a directory of files. */ public void setSource(File source) { this.source = source; } /** * Sets the target (output) directory for generated source files. * * @param targetDirectory * Target directory for generated Java source files. */ public void setTargetDirectory(File targetDirectory) { this.targetDirectory = targetDirectory; } /** * Sets the target package for generated types. * * @param targetPackage * Package name used for generated Java classes (for types where * a fully qualified name has not been supplied in the schema * using the 'javaType' property). */ public void setTargetPackage(String targetPackage) { this.targetPackage = targetPackage; } /** * Sets the 'skip' property of this task. * * @param skip * whether to skip execution of this task */ public void setSkip(boolean skip) { this.skip = skip; } /** * @param propertyWordDelimiters * a string containing all of the characters that should be * considered as word delimiters when creating Java Bean property * names from JSON property names. If blank or not set, JSON * properties will be considered to contain a single word when * creating Java Bean property names. */ public void setPropertyWordDelimiters(String propertyWordDelimiters) { this.propertyWordDelimiters = defaultString(propertyWordDelimiters).toCharArray(); } /** * Sets the 'includeHashcodeAndEquals' property of this class * * @param includeHashcodeAndEquals * Whether to include hashCode and * equals methods in generated Java types. */ public void setIncludeHashcodeAndEquals(boolean includeHashcodeAndEquals) { this.includeHashcodeAndEquals = includeHashcodeAndEquals; } /** * Sets the 'includeToString' property of this class * * @param includeToString * Whether to include a toString method in generated * Java types. */ public void setIncludeToString(boolean includeToString) { this.includeToString = includeToString; } /** * Sets the 'annotationStyle' property of this class * * @param annotationStyle * The style of annotations to use in the generated Java types. */ public void setAnnotationStyle(AnnotationStyle annotationStyle) { this.annotationStyle = annotationStyle; } /** * Sets the 'includeJsr303Annotations' property of this class * * @param includeJsr303Annotations * Whether to include JSR-303 * annotations (for schema rules like minimum, maximum, etc) in * generated Java types. */ public void setIncludeJsr303Annotations(boolean includeJsr303Annotations) { this.includeJsr303Annotations = includeJsr303Annotations; } /** * Sets the 'sourceType' property of this class * * @param sourceType * The type of input documents that will be read *

* Supported values: *

    *
  • jsonschema
  • *
  • json
  • *
*/ public void setSourceType(SourceType sourceType) { this.sourceType = sourceType; } @Override public boolean isGenerateBuilders() { return generateBuilders; } @Override public boolean isUsePrimitives() { return usePrimitives; } @Override public Iterator getSource() { return Collections.singleton(source).iterator(); } @Override public File getTargetDirectory() { return targetDirectory; } @Override public String getTargetPackage() { return targetPackage; } @Override public char[] getPropertyWordDelimiters() { return propertyWordDelimiters.clone(); } /** * Should this task be skipped? (don't read schemas, don't generate types) * * @return true if this task is disabled */ public boolean isSkip() { return skip; } @Override public boolean isUseLongIntegers() { return useLongIntegers; } @Override public boolean isIncludeHashcodeAndEquals() { return includeHashcodeAndEquals; } @Override public boolean isIncludeToString() { return includeToString; } @Override public AnnotationStyle getAnnotationStyle() { return annotationStyle; } @Override public boolean isIncludeJsr303Annotations() { return includeJsr303Annotations; } @Override public SourceType getSourceType() { return sourceType; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy