
com.wesleyhome.dao.processor.method.BaseQueryMethodGenerator Maven / Gradle / Ivy
/*
* @(#)BaseQueryMethodGenerator.java
*
* (C) Copyright 2014 by Travelers
* All Rights Reserved.
*
* This software is the confidential and proprietary information
* of the Travelers Corporation. ("Confidential Information").
* Redistribution of the source code or binary form is not permitted
* without prior authorization from Travelers.
*/
package com.wesleyhome.dao.processor.method;
import static java.util.Arrays.asList;
import java.util.List;
import java.util.ListIterator;
import javax.lang.model.element.Element;
import javax.persistence.criteria.Predicate;
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JFieldVar;
import com.sun.codemodel.JInvocation;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JVar;
import com.wesleyhome.dao.processor.EntityInformationMap;
import com.wesleyhome.dao.processor.model.EntityInfo;
import com.wesleyhome.dao.processor.model.MappingType;
/**
* The BaseQueryMethodGenerator
class is a
*
* @author
* @since
*/
public abstract class BaseQueryMethodGenerator implements MethodGenerator {
/* (non-Javadoc)
* @see com.travelers.smart.dao.generator.processor.method.MethodGenerator#createMethods(com.sun.codemodel.JCodeModel, com.sun.codemodel.JClass, com.sun.codemodel.JDefinedClass, javax.lang.model.element.Element, com.sun.codemodel.JFieldVar, boolean, com.travelers.smart.dao.generator.processor.model.EntityInfo)
*/
@Override
public void createMethods(final JCodeModel model, final JClass entityJClass, final JDefinedClass _class, final Element fieldElement,
final JFieldVar entityManagerField, final boolean generate, final EntityInfo entityInfo, final EntityInformationMap entityInfoMap, final MappingType mappingType) {
if (generate(_class, generate)) {
JMethod method = createQueryMethod(model, entityJClass, _class, fieldElement, entityInfo, entityInfoMap, mappingType);
if (!_class.isInterface()) {
createMethodBody(method, entityJClass, model, fieldElement, entityManagerField, entityInfo, entityInfoMap, mappingType);
}
}
}
protected boolean generate(final JDefinedClass _class, final boolean generate) {
return _class.isInterface() || generate;
}
/**
* @param method
* @param entityJClass
* @param model
* @param fieldElement
* @param entityManagerField
* @param entityInfo
* @param entityInfoMap
* @param mappingType TODO
*/
protected abstract void createMethodBody(JMethod method, JClass entityJClass, JCodeModel model, Element fieldElement,
JFieldVar entityManagerField, EntityInfo entityInfo, EntityInformationMap entityInfoMap, MappingType mappingType);
/**
* @param model
* @param entityJClass
* @param _class
* @param fieldElement
* @param entityInfo
* @param entityInfoMap
* @param mappingType TODO
* @return
*/
protected abstract JMethod createQueryMethod(JCodeModel model, JClass entityJClass, JDefinedClass _class, Element fieldElement,
EntityInfo entityInfo, EntityInformationMap entityInfoMap, MappingType mappingType);
protected void addMethodParameters(final JMethod method, final JClass fieldType, final String parameterName) {
method.param(JMod.FINAL, fieldType, parameterName);
}
/**
* @param model
* @param body
* @param whereInvoke
* @param pathVar
* @param params
* @param entityManagerField
*/
protected void invokePredicates(final JCodeModel model, final JBlock body, final JInvocation whereInvoke,
final List predicateInvokes, final List predicateNames) {
ListIterator itr = predicateInvokes.listIterator();
while (itr.hasNext()) {
int index = itr.nextIndex();
JInvocation predicateInvoke = itr.next();
JVar predicate = body.decl(model.ref(Predicate.class), predicateNames.get(index), predicateInvoke);
whereInvoke.arg(predicate);
}
}
/**
* @param model
* @param body
* @param whereInvoke
* @param predicateInvoke
* @param name
*/
protected void invokePredicates(final JCodeModel model, final JBlock body, final JInvocation whereInvoke,
final JInvocation predicateInvoke, final String name) {
invokePredicates(model, body, whereInvoke, asList(predicateInvoke), asList(name));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy