/*
* Copyright 2012 uaiHebert Solucoes em Informatica
*
* 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 com.uaihebert.uaicriteria.base.element;
import com.uaihebert.cto.UaiCTOImp;
import com.uaihebert.model.EasyCTOImp;
import com.uaihebert.model.EasyCriteria;
import com.uaihebert.model.EasyCriteriaImp;
import com.uaihebert.uaicriteria.UaiCriteria;
import com.uaihebert.uaicriteria.UaiCriteriaFactory;
import javax.persistence.EntityManager;
/**
* @author uaiHebert.com
* <p/>
* Class that will create an instance of the EasyCriteria
*/
public final class EasyCriteriaFactory {
private EasyCriteriaFactory() {
}
/**
* Creates a new instance of the EasyCriteria that
* will generate a TypedQuery.
*
* @param entityManager Entity Manager implementation
* @param entityClass The class to be queried
* @return a EasyCriteria instance.
*/
public static <T> EasyCriteria<T> createQueryCriteria(final EntityManager entityManager, final Class<T> entityClass) {
final UaiCriteria<T> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(entityManager, entityClass);
return new EasyCriteriaImp<T>(uaiCriteria);
}
/**
* Method that will create an instance of EasyCriteria, but using the parameters
* of a view Criteria Transfer Object.
* <p/>
* With the returned instance it is possible to fire the query.
*
* @param entityManager Entity Manager implementation
* @param entityClass The class to be queried
* @return a EasyCriteria instance.
*/
public static <T> EasyCriteria<T> createQueryCriteria(final EntityManager entityManager, final Class<T> entityClass, final EasyCriteria easyCTO) {
if (!(easyCTO instanceof EasyCTOImp)) {
throw new IllegalArgumentException("Should I be receiving an object like this? " + easyCTO);
}
final EasyCTOImp<T> easyCTOImp = (EasyCTOImp) easyCTO;
final UaiCTOImp<T> uaiCriteriaImp = new UaiCTOImp(easyCTOImp.isDistinct(), easyCTOImp.getOrderByList(), easyCTOImp.getCriteriaConditionTypeList(), easyCTOImp.getJoinList());
uaiCriteriaImp.setFirstResult(easyCTOImp.getFirstResult());
uaiCriteriaImp.setMaxResults(easyCTOImp.getMaxResults());
final UaiCriteria<T> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(entityManager, entityClass, uaiCriteriaImp);
return new EasyCriteriaImp<T>(uaiCriteria);
}
public static <T> EasyCriteria<T> createEasyCTO() {
return new EasyCTOImp<T>();
}
}