org.mybatis.generator.ant.GeneratorAntTask Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2005 The Apache Software Foundation
*
* 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.mybatis.generator.ant;
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
import static org.mybatis.generator.internal.util.messages.Messages.getString;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.PropertySet;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
/**
* This is an Ant task that will run the generator. The following is a sample
* Ant script that shows how to run the generator from Ant:
*
*
* <project default="genfiles" basedir=".">
* <property name="generated.source.dir" value="${basedir}" />
* <target name="genfiles" description="Generate the files">
* <taskdef name="mbgenerator"
* classname="org.mybatis.generator.ant.GeneratorAntTask"
* classpath="mybatis-generator-core-x.x.x.jar" />
* <mbgenerator overwrite="true" configfile="generatorConfig.xml" verbose="false" >
* <propertyset>
* <propertyref name="generated.source.dir"/>
* </propertyset>
* </mbgenerator>
* </target>
* </project>
*
*
* The task requires that the attribute "configFile" be set to an existing XML
* configuration file.
*
* The task supports these optional attributes:
*
* - "overwrite" - if true, then existing Java files will be overwritten. if
* false (default), then existing Java files will be untouched and the generator
* will write new Java files with a unique name
* - "verbose" - if true, then the generator will log progress messages to the
* Ant log. Default is false
* - "contextIds" - a comma delimited list of contaxtIds to use for this run
* - "fullyQualifiedTableNames" - a comma delimited list of fully qualified
* table names to use for this run
*
*
*
* @author Jeff Butler
*/
public class GeneratorAntTask extends Task {
private String configfile;
private boolean overwrite;
private PropertySet propertyset;
private boolean verbose;
private String contextIds;
private String fullyQualifiedTableNames;
/**
*
*/
public GeneratorAntTask() {
super();
}
/*
* (non-Javadoc)
*
* @see org.apache.tools.ant.Task#execute()
*/
@Override
public void execute() throws BuildException {
if (!stringHasValue(configfile)) {
throw new BuildException(getString("RuntimeError.0")); //$NON-NLS-1$
}
List warnings = new ArrayList();
File configurationFile = new File(configfile);
if (!configurationFile.exists()) {
throw new BuildException(getString(
"RuntimeError.1", configfile)); //$NON-NLS-1$
}
Set fullyqualifiedTables = new HashSet();
if (stringHasValue(fullyQualifiedTableNames)) {
StringTokenizer st = new StringTokenizer(fullyQualifiedTableNames,
","); //$NON-NLS-1$
while (st.hasMoreTokens()) {
String s = st.nextToken().trim();
if (s.length() > 0) {
fullyqualifiedTables.add(s);
}
}
}
Set contexts = new HashSet();
if (stringHasValue(contextIds)) {
StringTokenizer st = new StringTokenizer(contextIds, ","); //$NON-NLS-1$
while (st.hasMoreTokens()) {
String s = st.nextToken().trim();
if (s.length() > 0) {
contexts.add(s);
}
}
}
try {
Properties p = propertyset == null ? null : propertyset
.getProperties();
ConfigurationParser cp = new ConfigurationParser(p, warnings);
Configuration config = cp.parseConfiguration(configurationFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(new AntProgressCallback(this, verbose), contexts,
fullyqualifiedTables);
} catch (XMLParserException e) {
for (String error : e.getErrors()) {
log(error, Project.MSG_ERR);
}
throw new BuildException(e.getMessage());
} catch (SQLException e) {
throw new BuildException(e.getMessage());
} catch (IOException e) {
throw new BuildException(e.getMessage());
} catch (InvalidConfigurationException e) {
for (String error : e.getErrors()) {
log(error, Project.MSG_ERR);
}
throw new BuildException(e.getMessage());
} catch (InterruptedException e) {
// ignore (will never happen with the DefaultShellCallback)
;
} catch (Exception e) {
e.printStackTrace();
throw new BuildException(e.getMessage());
}
for (String error : warnings) {
log(error, Project.MSG_WARN);
}
}
/**
* @return Returns the configfile.
*/
public String getConfigfile() {
return configfile;
}
/**
* @param configfile
* The configfile to set.
*/
public void setConfigfile(String configfile) {
this.configfile = configfile;
}
/**
* @return Returns the overwrite.
*/
public boolean isOverwrite() {
return overwrite;
}
/**
* @param overwrite
* The overwrite to set.
*/
public void setOverwrite(boolean overwrite) {
this.overwrite = overwrite;
}
public PropertySet createPropertyset() {
if (propertyset == null) {
propertyset = new PropertySet();
}
return propertyset;
}
public boolean isVerbose() {
return verbose;
}
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
public String getContextIds() {
return contextIds;
}
public void setContextIds(String contextIds) {
this.contextIds = contextIds;
}
public String getFullyQualifiedTableNames() {
return fullyQualifiedTableNames;
}
public void setFullyQualifiedTableNames(String fullyQualifiedTableNames) {
this.fullyQualifiedTableNames = fullyQualifiedTableNames;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy