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

com.wavemaker.runtime.data.util.CriteriaUtils Maven / Gradle / Ivy

There is a newer version: 11.9.2.ee
Show newest version
/**
 * Copyright (C) 2020 WaveMaker, Inc.
 * 

* 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.wavemaker.runtime.data.util; import java.util.Set; import org.hibernate.Criteria; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import com.wavemaker.runtime.data.expression.QueryFilter; import com.wavemaker.runtime.data.spring.WMPageImpl; /** * @author Anusha Dharmasagar * @since 25/5/16 */ public abstract class CriteriaUtils { public static final String SEARCH_PROPERTY_DELIMITER = "."; public static Criterion createCriterion(QueryFilter queryFilter) { Object attributeValue = queryFilter.getAttributeValue(); String attributeName = queryFilter.getAttributeName(); return queryFilter.getFilterCondition().criterion(attributeName, attributeValue); } public static Page executeAndGetPageableData(Criteria criteria, Pageable pageable, Set aliases) { if (pageable != null) { long count = getRowCount(criteria); updateCriteriaForPageable(criteria, pageable, aliases); return new WMPageImpl(criteria.list(), pageable, count); } else { return new WMPageImpl(criteria.list()); } } public static Long getRowCount(Criteria criteria) { //set the projection criteria.setProjection(Projections.rowCount()); Long count; try { count = (Long) criteria.uniqueResult(); if (count == null) { count = 0L; } } finally { //unset the projection criteria.setProjection(null); criteria.setResultTransformer(Criteria.ROOT_ENTITY); } return count; } public static Criteria criteriaForRelatedProperty( Criteria criteria, final String attributeName, final Set aliases) { final int indexOfDot = attributeName.lastIndexOf(SEARCH_PROPERTY_DELIMITER); if (indexOfDot != -1) { String relatedEntityName = attributeName.substring(0, indexOfDot); if (aliases == null) { return criteria.createAlias(relatedEntityName, relatedEntityName); } else if (!aliases.contains(relatedEntityName)) { aliases.add(relatedEntityName); return criteria.createAlias(relatedEntityName, relatedEntityName); } } return criteria; } public static void updateCriteriaForPageable(Criteria criteria, Pageable pageable, Set aliases) { if (pageable == null) { throw new RuntimeException("Pageable object cannot be null"); } criteria.setFirstResult((int) pageable.getOffset()); criteria.setMaxResults(pageable.getPageSize()); if (pageable.getSort() != null) { for (final Sort.Order order : pageable.getSort()) { final String property = order.getProperty(); criteriaForRelatedProperty(criteria, property, aliases); if (order.getDirection() == Sort.Direction.DESC) { criteria.addOrder(Order.desc(property)); } else { criteria.addOrder(Order.asc(property)); } } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy