AssetSpecification.java

package com.nashtech.rookie.asset_management_0701.services.asset;
import java.util.List;
import java.util.Set;

import org.springframework.data.jpa.domain.Specification;

import com.nashtech.rookie.asset_management_0701.entities.Asset;
import com.nashtech.rookie.asset_management_0701.entities.Category;
import com.nashtech.rookie.asset_management_0701.entities.Location;
import com.nashtech.rookie.asset_management_0701.enums.EAssetState;


public final class AssetSpecification {

    private AssetSpecification () {
    }
    public static Specification<Asset> hasAssetName (String assetName) {
        if (assetName == null || assetName.trim().isEmpty()) {
            return null;
        }
        String lowerCaseName = assetName.trim().toLowerCase();
        return (root, query, criteriaBuilder) ->
                criteriaBuilder.like(criteriaBuilder.lower(root.get("name")), "%" + lowerCaseName + "%");
    }
    public static Specification<Asset> hasAssetCode (String assetCode) {
        if (assetCode == null || assetCode.trim().isEmpty()) {
            return null;
        }
        String lowerCaseName = assetCode.trim().toLowerCase();
        return (root, query, criteriaBuilder) ->
                criteriaBuilder.like(criteriaBuilder.lower(root.get("assetCode")), "%" + lowerCaseName + "%");
    }
    public static Specification<Asset> hasStates (Set<EAssetState> states) {
        return (root, query, criteriaBuilder) -> {
            if (states == null || states.isEmpty()) {
                return null;
            }
            return root.get("state").in(states);
        };
    }
    public static Specification<Asset> hasCategories (List<Category> categories) {
        return (root, query, criteriaBuilder) -> {
            if (categories == null || categories.isEmpty()) {
                return null;
            }
            return root.get("category").in(categories);
        };
    }
    public static Specification<Asset> hasLocation (Location location) {
        return (root, query, criteriaBuilder) -> {
            if (location == null) {
                return null;
            }
            return criteriaBuilder.equal(root.get("location"), location);
        };
    }
}