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

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