/* * The contents of this file are subject to the OpenMRS Public 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://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module.openhmis.commons.api.entity.search; import java.util.Date; import org.hibernate.Criteria; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import org.openmrs.OpenmrsObject; /** * Base template search class for {@link org.openmrs.OpenmrsObject} models. * @param <T> The model class. */ public class BaseObjectTemplateSearch<T extends OpenmrsObject> { public static final long serialVersionUID = 0L; private T template; public BaseObjectTemplateSearch(T template) { this.template = template; } public T getTemplate() { return template; } public void setTemplate(T template) { this.template = template; } public void updateCriteria(Criteria criteria) {} protected Criterion createCriterion(String field, Object value, ComparisonType comparisonType) { ComparisonType comparison = comparisonType == null ? ComparisonType.EQUAL : comparisonType; Criterion result; switch (comparison) { case EQUAL: result = Restrictions.eq(field, value); break; case NOT_EQUAL: result = Restrictions.ne(field, value); break; case IS_NULL: result = Restrictions.isNull(field); break; case IS_NOT_NULL: result = Restrictions.isNotNull(field); break; default: throw new IllegalArgumentException(); } return result; } protected Criterion createCriterion(String field, String value, StringComparisonType comparisonType) { StringComparisonType comparison = comparisonType == null ? StringComparisonType.EQUAL : comparisonType; Criterion result; switch (comparison) { case EQUAL: result = Restrictions.eq(field, value); break; case NOT_EQUAL: result = Restrictions.ne(field, value); break; case IS_NULL: result = Restrictions.isNull(field); break; case IS_NOT_NULL: result = Restrictions.isNotNull(field); break; case IS_EMPTY: result = Restrictions.isEmpty(field); break; case IS_NOT_EMPTY: result = Restrictions.isNotEmpty(field); break; case LIKE: result = Restrictions.ilike(field, value); break; default: throw new IllegalArgumentException(); } return result; } protected Criterion createCriterion(String field, Date value, DateComparisonType comparisonType) { DateComparisonType comparison = comparisonType == null ? DateComparisonType.EQUAL : comparisonType; Criterion result; switch (comparison) { case EQUAL: result = Restrictions.eq(field, value); break; case NOT_EQUAL: result = Restrictions.ne(field, value); break; case IS_NULL: result = Restrictions.isNull(field); break; case IS_NOT_NULL: result = Restrictions.isNotNull(field); break; case GREATER_THAN: result = Restrictions.gt(field, value); break; case GREATER_THAN_EQUAL: result = Restrictions.ge(field, value); break; case LESS_THAN: result = Restrictions.lt(field, value); break; case LESS_THAN_EQUAL: result = Restrictions.le(field, value); break; default: throw new IllegalArgumentException(); } return result; } /** * Basic comparison types. */ public enum ComparisonType { EQUAL, NOT_EQUAL, IS_NULL, IS_NOT_NULL } /** * String comparison types. */ public enum StringComparisonType { EQUAL, NOT_EQUAL, IS_NULL, IS_NOT_NULL, IS_EMPTY, IS_NOT_EMPTY, LIKE } /** * Date comparison types. */ public enum DateComparisonType { EQUAL, NOT_EQUAL, IS_NULL, IS_NOT_NULL, GREATER_THAN, GREATER_THAN_EQUAL, LESS_THAN, LESS_THAN_EQUAL, } }