/**
* Copyright 2006-2016 the original author or authors.
*
* 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.codegen.mybatis3;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.GeneratedJavaFile;
import org.mybatis.generator.api.GeneratedXmlFile;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.ProgressCallback;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.codegen.AbstractGenerator;
import org.mybatis.generator.codegen.AbstractJavaClientGenerator;
import org.mybatis.generator.codegen.AbstractJavaGenerator;
import org.mybatis.generator.codegen.AbstractXmlGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.AnnotatedClientGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.MixedClientGenerator;
import org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator;
import org.mybatis.generator.codegen.mybatis3.model.ExampleGenerator;
import org.mybatis.generator.codegen.mybatis3.model.PrimaryKeyGenerator;
import org.mybatis.generator.codegen.mybatis3.model.RecordWithBLOBsGenerator;
import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator;
import org.mybatis.generator.config.PropertyRegistry;
import org.mybatis.generator.internal.ObjectFactory;
/**
* The Class IntrospectedTableMyBatis3Impl.
*
* @author Jeff Butler
*/
public class IntrospectedTableMyBatis3Impl extends IntrospectedTable {
/** The java model generators. */
protected List<AbstractJavaGenerator> javaModelGenerators;
/** The client generators. */
protected List<AbstractJavaGenerator> clientGenerators;
/** The xml mapper generator. */
protected AbstractXmlGenerator xmlMapperGenerator;
/**
* Instantiates a new introspected table my batis3 impl.
*/
public IntrospectedTableMyBatis3Impl() {
super(TargetRuntime.MYBATIS3);
javaModelGenerators = new ArrayList<AbstractJavaGenerator>();
clientGenerators = new ArrayList<AbstractJavaGenerator>();
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.IntrospectedTable#calculateGenerators(java.util.List, org.mybatis.generator.api.ProgressCallback)
*/
@Override
public void calculateGenerators(List<String> warnings,
ProgressCallback progressCallback) {
calculateJavaModelGenerators(warnings, progressCallback);
AbstractJavaClientGenerator javaClientGenerator =
calculateClientGenerators(warnings, progressCallback);
calculateXmlMapperGenerator(javaClientGenerator, warnings, progressCallback);
}
/**
* Calculate xml mapper generator.
*
* @param javaClientGenerator
* the java client generator
* @param warnings
* the warnings
* @param progressCallback
* the progress callback
*/
protected void calculateXmlMapperGenerator(AbstractJavaClientGenerator javaClientGenerator,
List<String> warnings,
ProgressCallback progressCallback) {
if (javaClientGenerator == null) {
if (context.getSqlMapGeneratorConfiguration() != null) {
xmlMapperGenerator = new XMLMapperGenerator();
}
} else {
xmlMapperGenerator = javaClientGenerator.getMatchedXMLGenerator();
}
initializeAbstractGenerator(xmlMapperGenerator, warnings,
progressCallback);
}
/**
* Calculate client generators.
*
* @param warnings
* the warnings
* @param progressCallback
* the progress callback
* @return true if an XML generator is required
*/
protected AbstractJavaClientGenerator calculateClientGenerators(List<String> warnings,
ProgressCallback progressCallback) {
if (!rules.generateJavaClient()) {
return null;
}
AbstractJavaClientGenerator javaGenerator = createJavaClientGenerator();
if (javaGenerator == null) {
return null;
}
initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
clientGenerators.add(javaGenerator);
return javaGenerator;
}
/**
* Creates the java client generator.
*
* @return the abstract java client generator
*/
protected AbstractJavaClientGenerator createJavaClientGenerator() {
if (context.getJavaClientGeneratorConfiguration() == null) {
return null;
}
String type = context.getJavaClientGeneratorConfiguration()
.getConfigurationType();
AbstractJavaClientGenerator javaGenerator;
if ("XMLMAPPER".equalsIgnoreCase(type)) { //$NON-NLS-1$
javaGenerator = new JavaMapperGenerator();
} else if ("MIXEDMAPPER".equalsIgnoreCase(type)) { //$NON-NLS-1$
javaGenerator = new MixedClientGenerator();
} else if ("ANNOTATEDMAPPER".equalsIgnoreCase(type)) { //$NON-NLS-1$
javaGenerator = new AnnotatedClientGenerator();
} else if ("MAPPER".equalsIgnoreCase(type)) { //$NON-NLS-1$
javaGenerator = new JavaMapperGenerator();
} else {
javaGenerator = (AbstractJavaClientGenerator) ObjectFactory
.createInternalObject(type);
}
return javaGenerator;
}
/**
* Calculate java model generators.
*
* @param warnings
* the warnings
* @param progressCallback
* the progress callback
*/
protected void calculateJavaModelGenerators(List<String> warnings,
ProgressCallback progressCallback) {
if (getRules().generateExampleClass()) {
AbstractJavaGenerator javaGenerator = new ExampleGenerator();
initializeAbstractGenerator(javaGenerator, warnings,
progressCallback);
javaModelGenerators.add(javaGenerator);
}
if (getRules().generatePrimaryKeyClass()) {
AbstractJavaGenerator javaGenerator = new PrimaryKeyGenerator();
initializeAbstractGenerator(javaGenerator, warnings,
progressCallback);
javaModelGenerators.add(javaGenerator);
}
if (getRules().generateBaseRecordClass()) {
AbstractJavaGenerator javaGenerator = new BaseRecordGenerator();
initializeAbstractGenerator(javaGenerator, warnings,
progressCallback);
javaModelGenerators.add(javaGenerator);
}
if (getRules().generateRecordWithBLOBsClass()) {
AbstractJavaGenerator javaGenerator = new RecordWithBLOBsGenerator();
initializeAbstractGenerator(javaGenerator, warnings,
progressCallback);
javaModelGenerators.add(javaGenerator);
}
}
/**
* Initialize abstract generator.
*
* @param abstractGenerator
* the abstract generator
* @param warnings
* the warnings
* @param progressCallback
* the progress callback
*/
protected void initializeAbstractGenerator(
AbstractGenerator abstractGenerator, List<String> warnings,
ProgressCallback progressCallback) {
if (abstractGenerator == null) {
return;
}
abstractGenerator.setContext(context);
abstractGenerator.setIntrospectedTable(this);
abstractGenerator.setProgressCallback(progressCallback);
abstractGenerator.setWarnings(warnings);
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.IntrospectedTable#getGeneratedJavaFiles()
*/
@Override
public List<GeneratedJavaFile> getGeneratedJavaFiles() {
List<GeneratedJavaFile> answer = new ArrayList<GeneratedJavaFile>();
for (AbstractJavaGenerator javaGenerator : javaModelGenerators) {
List<CompilationUnit> compilationUnits = javaGenerator
.getCompilationUnits();
for (CompilationUnit compilationUnit : compilationUnits) {
GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
context.getJavaModelGeneratorConfiguration()
.getTargetProject(),
context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
context.getJavaFormatter());
answer.add(gjf);
}
}
for (AbstractJavaGenerator javaGenerator : clientGenerators) {
List<CompilationUnit> compilationUnits = javaGenerator
.getCompilationUnits();
for (CompilationUnit compilationUnit : compilationUnits) {
GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
context.getJavaClientGeneratorConfiguration()
.getTargetProject(),
context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
context.getJavaFormatter());
answer.add(gjf);
}
}
return answer;
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.IntrospectedTable#getGeneratedXmlFiles()
*/
@Override
public List<GeneratedXmlFile> getGeneratedXmlFiles() {
List<GeneratedXmlFile> answer = new ArrayList<GeneratedXmlFile>();
if (xmlMapperGenerator != null) {
Document document = xmlMapperGenerator.getDocument();
GeneratedXmlFile gxf = new GeneratedXmlFile(document,
getMyBatis3XmlMapperFileName(), getMyBatis3XmlMapperPackage(),
context.getSqlMapGeneratorConfiguration().getTargetProject(),
true, context.getXmlFormatter());
if (context.getPlugins().sqlMapGenerated(gxf, this)) {
answer.add(gxf);
}
}
return answer;
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.IntrospectedTable#getGenerationSteps()
*/
@Override
public int getGenerationSteps() {
return javaModelGenerators.size() + clientGenerators.size() +
(xmlMapperGenerator == null ? 0 : 1);
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.IntrospectedTable#isJava5Targeted()
*/
@Override
public boolean isJava5Targeted() {
return true;
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.IntrospectedTable#requiresXMLGenerator()
*/
@Override
public boolean requiresXMLGenerator() {
AbstractJavaClientGenerator javaClientGenerator =
createJavaClientGenerator();
if (javaClientGenerator == null) {
return false;
} else {
return javaClientGenerator.requiresXMLGenerator();
}
}
}