/******************************************************************************* * Copyright [2015] [Onboard team of SERC, Peking University] * * 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.onboard.test.exampleutils; import java.util.List; import com.onboard.domain.mapper.model.common.BaseCriteria; import com.onboard.domain.mapper.model.common.BaseExample; import com.onboard.domain.mapper.model.common.Criterion; /** * Criterion检查的辅助函数 * <p> * 注意: 目前只适用于只有一个or criteria的情况 * </p> * * @author yewei * */ public class CriterionVerifier { public static boolean verifyDistinct(BaseExample baseExample, boolean distinct) { return distinct == baseExample.isDistinct(); } public static boolean verifyStart(BaseExample baseExample, int start) { return start == baseExample.getStart(); } public static boolean verifyLimit(BaseExample baseExample, int limit) { return limit == baseExample.getLimit(); } public static boolean verifyOrderByClause(BaseExample baseExample, String orderbyclause) { return orderbyclause.equals(baseExample.getOrderByClause()); } public static boolean verifyIsNull(BaseExample baseExample, String field) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.IS_NULL); return checkCriterion(criterion); } public static boolean verifyIsNotNull(BaseExample baseExample, String field) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.IS_NOT_NULL); return checkCriterion(criterion); } public static boolean verifyBetween(BaseExample baseExample, String field, Object value, Object secondValue) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.BETWEEN); return checkCriterion(criterion, value, secondValue); } public static boolean verifyNotBetween(BaseExample baseExample, String field, Object value, Object secondValue) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.NOT_BETWEEN); return checkCriterion(criterion, value, secondValue); } public static boolean verifyIn(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.IN); return checkCriterion(criterion, value); } public static boolean verifyNotIn(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.NOT_IN); return checkCriterion(criterion, value); } public static boolean verifyEqualTo(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.EQUAL_TO); return checkCriterion(criterion, value); } public static boolean verifyNotEqualTo(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.NOT_EQUAL_TO); return checkCriterion(criterion, value); } public static boolean verifyGraterThan(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.GREATER_THAN); return checkCriterion(criterion, value); } public static boolean verifyGraterThanOrEqualTo(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.GREATER_THAN_OR_EQUAL_TO); return checkCriterion(criterion, value); } public static boolean verifyLessThan(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.LESS_THAN); return checkCriterion(criterion, value); } public static boolean verifyLessThanOrEqualTo(BaseExample baseExample, String field, Object value) { Criterion criterion = getCriterionByCondition(baseExample, field + CriteriaType.LESS_THAN_OR_EQUAL_TO); return checkCriterion(criterion, value); } private static boolean checkCriterion(Criterion c) { return c != null; } private static boolean checkCriterion(Criterion c, Object value) { if (c != null) { // 如果value为list, list中不能包含null元素 if (value != null && c.getValue() != null && value instanceof List && c.getValue() instanceof List) { List<?> list = (List<?>) value; List<?> secondList = (List<?>) c.getValue(); if (list.size() == secondList.size()) { for (int i = 0; i < list.size(); i++) { if (list.get(i) != null && !list.get(i).equals(secondList.get(i))) { return false; } } return true; } } else { return c.getValue() != null && c.getValue().equals(value); } } return false; } private static boolean checkCriterion(Criterion c, Object value, Object secondValue) { return c != null && c.getValue() != null && c.getValue().equals(value) && c.getSecondValue() != null && c.getSecondValue().equals(secondValue); } /** * 根据condition找到baseExample中的criterion * * @param baseExample * @param condition * @return */ private static Criterion getCriterionByCondition(BaseExample baseExample, String condition) { List<BaseCriteria> criterias = baseExample.getOredBaseCriteria(); if (criterias != null && !criterias.isEmpty()) { for (Criterion c : criterias.get(0).getCriteria()) { if (c.getCondition().equals(condition)) { return c; } } } return null; } private static class CriteriaType { public static final String IS_NULL = " is null"; public static final String IS_NOT_NULL = " is not null"; public static final String BETWEEN = " between"; public static final String NOT_BETWEEN = " not between"; public static final String IN = " in"; public static final String NOT_IN = " not in"; public static final String EQUAL_TO = " ="; public static final String NOT_EQUAL_TO = " <>"; public static final String GREATER_THAN = " >"; public static final String GREATER_THAN_OR_EQUAL_TO = " >="; public static final String LESS_THAN = " <"; public static final String LESS_THAN_OR_EQUAL_TO = " <="; } }