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

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