/* * 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.model; import com.uaihebert.cto.CriteriaConditionHolder; import com.uaihebert.cto.CriteriaConditionType; import com.uaihebert.cto.JoinHolder; import com.uaihebert.cto.JoinHolderType; import com.uaihebert.cto.OrderByHolder; import java.util.ArrayList; import java.util.List; public class EasyCTOImp<T> implements EasyCriteria<T> { private static final boolean DO_NOT_APPLY_LOWER_CASE = false; private static final boolean ORDER_BY_ASC = false; private static final boolean ORDER_BY_DESC = true; private final List<OrderByHolder> orderByList = new ArrayList<OrderByHolder>(); private final List<CriteriaConditionHolder> criteriaConditionTypeList = new ArrayList<CriteriaConditionHolder>(); private final List<JoinHolder> joinList = new ArrayList<JoinHolder>(); private boolean distinct; private Integer firstResult; private Integer maxResults; public List<T> getResultList() { throw queryNotAllowedInCTO(); } private IllegalStateException queryNotAllowedInCTO() { return new IllegalStateException("Hello, I am a Criteria Transfer Object (CTO) Only. I do not have an entity manager do run the query. \n" + " To use a CTO correctly there is an other method in the EasyCriteriaFactory: \n" + " UaiCriteriaFactory.createQueryCriteria(EntityManager , Class<T>, UaiCriteria)" + " The last parameter is where you should pass the CTO"); } public T getSingleResult() { throw queryNotAllowedInCTO(); } public Long count() { throw queryNotAllowedInCTO(); } public EasyCriteria<T> andEquals(final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.EQUAL, value)); return this; } public EasyCriteria<T> andEquals(final boolean toLowerCase, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.EQUAL, value)); return this; } public EasyCriteria<T> orEquals(final String attributeName, final Object... valueArray) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.OR_EQUAL, valueArray)); return this; } public EasyCriteria<T> orEquals(final boolean toLowerCase, final String attributeName, final Object... valueArray) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.OR_EQUAL, valueArray)); return this; } public EasyCriteria<T> orEquals(final int index, final String attributeName, final Object... valueArray) { criteriaConditionTypeList.add(new CriteriaConditionHolder(index, DO_NOT_APPLY_LOWER_CASE, attributeName, CriteriaConditionType.OR_EQUAL, valueArray)); return this; } public EasyCriteria<T> orEquals(final boolean toLowerCase, final int index, final String attributeName, final Object... valueArray) { criteriaConditionTypeList.add(new CriteriaConditionHolder(index, toLowerCase, attributeName, CriteriaConditionType.OR_EQUAL, valueArray)); return this; } public EasyCriteria<T> andNotEquals(final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.NOT_EQUAL, value)); return this; } public EasyCriteria<T> andNotEquals(final boolean toLowerCase, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.NOT_EQUAL, value)); return this; } public EasyCriteria<T> orNotEquals(final String attributeName, final Object... valueArray) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.OR_NOT_EQUAL, valueArray)); return this; } public EasyCriteria<T> orNotEquals(final boolean toLowerCase, final String attributeName, final Object... valueArray) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.OR_NOT_EQUAL, valueArray)); return this; } public EasyCriteria<T> andGreaterThan(final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.GREATER_THAN, value)); return this; } public EasyCriteria<T> andGreaterThan(final boolean toLowerCase, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.GREATER_THAN, value)); return this; } public EasyCriteria<T> andGreaterOrEqualTo(final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.GREATER_OR_EQUAL_TO, value)); return this; } public EasyCriteria<T> andGreaterOrEqualTo(final boolean toLowerCase, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.GREATER_OR_EQUAL_TO, value)); return this; } public EasyCriteria<T> andLessThan(final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.LESS_THAN, value)); return this; } public EasyCriteria<T> andLessThan(final boolean toLowerCase, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.LESS_THAN, value)); return this; } public EasyCriteria<T> andLessOrEqualTo(final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.LESS_OR_EQUAL_TO, value)); return this; } public EasyCriteria<T> andLessOrEqualTo(final boolean toLowerCase, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.LESS_OR_EQUAL_TO, value)); return this; } public EasyCriteria<T> innerJoin(final String joinName) { joinList.add(new JoinHolder(joinName, JoinHolderType.INNER)); return this; } public EasyCriteria<T> leftJoin(final String joinName) { joinList.add(new JoinHolder(joinName, JoinHolderType.LEFT)); return this; } public EasyCriteria<T> innerJoinFetch(final String joinName) { joinList.add(new JoinHolder(joinName, JoinHolderType.INNER_FETCH)); return this; } public EasyCriteria<T> leftJoinFetch(final String joinName) { joinList.add(new JoinHolder(joinName, JoinHolderType.LEFT_FETCH)); return this; } public EasyCriteria<T> setDistinctTrue() { distinct = true; return this; } public EasyCriteria<T> andBetween(final String attributeName, final Object valueA, final Object valueB) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.BETWEEN, valueA, valueB)); return this; } public EasyCriteria<T> andBetween(final boolean toLowerCase, final String attributeName, final Object valueA, final Object valueB) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.BETWEEN, valueA, valueB)); return this; } public EasyCriteria<T> andIsNull(final String attributeName) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.AND_IS_NULL)); return this; } public EasyCriteria<T> andIsNotNull(final String attributeName) { criteriaConditionTypeList.add(new CriteriaConditionHolder(attributeName, CriteriaConditionType.AND_IS_NOT_NULL)); return this; } public EasyCriteria<T> andCollectionIsEmpty(final String collectionName) { criteriaConditionTypeList.add(new CriteriaConditionHolder(collectionName, CriteriaConditionType.COLLECTION_IS_EMPTY)); return this; } public EasyCriteria<T> andCollectionIsNotEmpty(final String collectionName) { criteriaConditionTypeList.add(new CriteriaConditionHolder(collectionName, CriteriaConditionType.COLLECTION_IS_NOT_EMPTY)); return this; } public EasyCriteria<T> andStringLike(final String attributeName, final String value) { return andStringLike(DO_NOT_APPLY_LOWER_CASE, attributeName, value); } public EasyCriteria<T> andStringLike(final boolean toLowerCase, final String attributeName, final String value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.STRING_LIKE, value)); return this; } public EasyCriteria<T> andStringNotLike(final String attributeName, final String value) { return andStringNotLike(DO_NOT_APPLY_LOWER_CASE, attributeName, value); } public EasyCriteria<T> andStringNotLike(final boolean toLowerCase, final String attributeName, final String value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.STRING_NOT_LIKE, value)); return this; } public EasyCriteria<T> andStringIn(final String attributeName, final List<String> valueList) { return andStringIn(DO_NOT_APPLY_LOWER_CASE, attributeName, valueList); } public EasyCriteria<T> andStringIn(final boolean toLowerCase, final String attributeName, final List<String> valueList) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.STRING_IN, valueList.toArray())); return this; } public EasyCriteria<T> andStringNotIn(final String attributeName, final List<String> valueList) { return andStringNotIn(DO_NOT_APPLY_LOWER_CASE, attributeName, valueList); } public EasyCriteria<T> andStringNotIn(final boolean toLowerCase, final String attributeName, final List<String> valueList) { criteriaConditionTypeList.add(new CriteriaConditionHolder(toLowerCase, attributeName, CriteriaConditionType.STRING_NOT_IN, valueList.toArray())); return this; } public EasyCriteria<T> orderByAsc(final String attributeName) { orderByList.add(new OrderByHolder(ORDER_BY_ASC, attributeName)); return this; } public EasyCriteria<T> orderByDesc(final String attributeName) { orderByList.add(new OrderByHolder(ORDER_BY_DESC, attributeName)); return this; } public EasyCriteria<T> andJoinEquals(final String joinName, final String attributeName, final Object value) { return andEquals(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinEquals(final boolean toLowerCase, final String joinName, final String attributeName, final Object value) { return andEquals(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinNotEquals(final String joinName, final String attributeName, final Object value) { return andNotEquals(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinNotEquals(final boolean toLowerCase, final String joinName, final String attributeName, final Object value) { return andNotEquals(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinGreaterThan(final String joinName, final String attributeName, final Object value) { return andGreaterThan(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinGreaterThan(final boolean toLowerCase, final String joinName, final String attributeName, final Object value) { return andGreaterThan(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinGreaterOrEqualTo(final String joinName, final String attributeName, final Object value) { return andGreaterOrEqualTo(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinGreaterOrEqualTo(final boolean toLowerCase, final String joinName, final String attributeName, final Object value) { return andGreaterOrEqualTo(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinLessThan(final String joinName, final String attributeName, final Object value) { return andLessThan(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinLessThan(final boolean toLowerCase, final String joinName, final String attributeName, final Object value) { return andLessThan(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinLessOrEqualTo(final String joinName, final String attributeName, final Object value) { return andLessOrEqualTo(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinLessOrEqualTo(final boolean toLowerCase, final String joinName, final String attributeName, final Object value) { return andLessOrEqualTo(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinBetween(final String joinName, final String attributeName, final Object valueA, final Object valueB) { return andBetween(joinName + "." + attributeName, valueA, valueB); } public EasyCriteria<T> andJoinBetween(final boolean toLowerCase, final String joinName, final String attributeName, final Object valueA, final Object valueB) { return andBetween(toLowerCase, joinName + "." + attributeName, valueA, valueB); } public EasyCriteria<T> andJoinAttributeIsNull(final String joinName, final String attributeName) { return andIsNull(joinName + "." + attributeName); } public EasyCriteria<T> andJoinAttributeIsNotNull(final String joinName, final String attributeName) { return andIsNotNull(joinName + "." + attributeName); } public EasyCriteria<T> andJoinListIsEmpty(final String joinName, final String listName) { return andCollectionIsEmpty(joinName + "." + listName); } public EasyCriteria<T> andJoinCollectionIsEmpty(final String joinName, final String collectionName) { return andCollectionIsEmpty(joinName + "." + collectionName); } public EasyCriteria<T> andJoinSetIsEmpty(final String joinName, final String setName) { return andCollectionIsEmpty(joinName + "." + setName); } public EasyCriteria<T> andJoinListIsNotEmpty(final String joinName, final String listName) { return andCollectionIsNotEmpty(joinName + "." + listName); } public EasyCriteria<T> andJoinCollectionIsNotEmpty(final String joinName, final String collectionName) { return andCollectionIsNotEmpty(joinName + "." + collectionName); } public EasyCriteria<T> andJoinSetIsNotEmpty(final String joinName, final String setName) { return andCollectionIsNotEmpty(joinName + "." + setName); } public EasyCriteria<T> andJoinStringLike(final String joinName, final String attributeName, final String value) { return andStringLike(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinStringLike(final boolean toLowerCase, final String joinName, final String attributeName, final String value) { return andStringLike(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinStringNotLike(final String joinName, final String attributeName, final String value) { return andStringNotLike(joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinStringNotLike(final boolean toLowerCase, final String joinName, final String attributeName, final String value) { return andStringNotLike(toLowerCase, joinName + "." + attributeName, value); } public EasyCriteria<T> andJoinStringIn(final String joinName, final String attributeName, final List<String> valueList) { return andStringIn(joinName + "." + attributeName, valueList); } public EasyCriteria<T> andJoinStringIn(final boolean toLowerCase, final String joinName, final String attributeName, final List<String> valueList) { return andStringIn(joinName + "." + attributeName, valueList); } public EasyCriteria<T> andJoinStringNotIn(final String joinName, final String attributeName, final List<String> valueList) { return andStringNotIn(joinName + "." + attributeName, valueList); } public EasyCriteria<T> andJoinStringNotIn(final boolean toLowerCase, final String joinName, final String attributeName, final List<String> valueList) { return andStringNotIn(toLowerCase, joinName + "." + attributeName, valueList); } public EasyCriteria<T> addAndSeparatedByOr(final int index, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(index, DO_NOT_APPLY_LOWER_CASE, attributeName, CriteriaConditionType.AND_SEPARATED_BY_OR, value)); return this; } public EasyCriteria<T> addAndSeparatedByOr(final boolean toLowerCase, final int index, final String attributeName, final Object value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(index, toLowerCase, attributeName, CriteriaConditionType.AND_SEPARATED_BY_OR, value)); return this; } public EasyCriteria<T> addHint(final String key, final String value) { criteriaConditionTypeList.add(new CriteriaConditionHolder(CriteriaConditionType.HINT, key, value)); return this; } public EasyCriteria<T> setFirstResult(final Integer firstResult) { this.firstResult = firstResult; return this; } public EasyCriteria<T> setMaxResults(final Integer maxResults) { this.maxResults = maxResults; return this; } public Integer getFirstResult() { return firstResult; } public Integer getMaxResults() { return maxResults; } public boolean isDistinct() { return distinct; } public List<OrderByHolder> getOrderByList() { return orderByList; } public List<CriteriaConditionHolder> getCriteriaConditionTypeList() { return criteriaConditionTypeList; } public List<JoinHolder> getJoinList() { return joinList; } }