1 /* 2 * Copyright (c) 2002-2020, City of Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.plugins.stock.business.attribute.utils; 35 36 import fr.paris.lutece.plugins.stock.business.attribute.AbstractAttributeDate; 37 import fr.paris.lutece.plugins.stock.business.attribute.AbstractAttributeDate_; 38 39 import java.sql.Timestamp; 40 41 import javax.persistence.criteria.CriteriaBuilder; 42 import javax.persistence.criteria.Join; 43 import javax.persistence.criteria.Predicate; 44 45 /** 46 * Utility class provided for dynamic attributes 47 * 48 * @author abataille 49 */ 50 public final class AttributeDateUtils 51 { 52 53 /** 54 * 55 * Creates a new AttributeDateUtils.java object. 56 */ 57 private AttributeDateUtils( ) 58 { 59 60 } 61 62 /** 63 * Return predicate greaterThanOrEqualTo for dynamic attribute 64 * 65 * @param builder 66 * criteria builder 67 * @param join 68 * join with dyn attributes 69 * @param key 70 * key of dyn attribute 71 * @param value 72 * value 73 * @return predicate 74 */ 75 public static Predicate greaterThanOrEqualTo( CriteriaBuilder builder, Join<?, ? extends AbstractAttributeDate<?>> join, String key, Timestamp value ) 76 { 77 return builder.and( builder.equal( join.get( AbstractAttributeDate_.key ), key ), 78 builder.greaterThanOrEqualTo( join.get( AbstractAttributeDate_.value ), value ) ); 79 } 80 81 /** 82 * Return predicate lessThanOrEqualTo for dynamic attribute 83 * 84 * @param builder 85 * criteria builder 86 * @param join 87 * join with dyn attributes 88 * @param key 89 * key of dyn attribute 90 * @param value 91 * value 92 * @return predicate 93 */ 94 public static Predicate lessThanOrEqualTo( CriteriaBuilder builder, Join<?, ? extends AbstractAttributeDate<?>> join, String key, Timestamp value ) 95 { 96 return builder.and( builder.equal( join.get( AbstractAttributeDate_.key ), key ), 97 builder.lessThanOrEqualTo( join.get( AbstractAttributeDate_.value ), value ) ); 98 } 99 100 /** 101 * Return predicate equal for dynamic attribute 102 * 103 * @param builder 104 * criteria builder 105 * @param join 106 * join with dyn attributes 107 * @param key 108 * key of dyn attribute 109 * @param value 110 * value 111 * @return predicate 112 */ 113 public static Predicate equal( CriteriaBuilder builder, Join<?, ? extends AbstractAttributeDate<?>> join, String key, Timestamp value ) 114 { 115 return builder.and( builder.equal( join.get( AbstractAttributeDate_.key ), key ), builder.equal( join.get( AbstractAttributeDate_.value ), value ) ); 116 } 117 118 /** 119 * Return predicate greaterTan for dynamic attribute 120 * 121 * @param builder 122 * criteria builder 123 * @param join 124 * join with dyn attributes 125 * @param key 126 * key of dyn attribute 127 * @param value 128 * value 129 * @return predicate 130 */ 131 public static Predicate greaterThan( CriteriaBuilder builder, Join<?, ? extends AbstractAttributeDate<?>> join, String key, Timestamp value ) 132 { 133 return builder.and( builder.equal( join.get( AbstractAttributeDate_.key ), key ), 134 builder.greaterThan( join.get( AbstractAttributeDate_.value ), value ) ); 135 } 136 137 /** 138 * Return predicate between for dynamic attribute 139 * 140 * @param builder 141 * criteria builder 142 * @param join 143 * join with dyn attributes 144 * @param key 145 * key of dyn attribute 146 * @param value 147 * value 148 * @return predicate 149 */ 150 public static Predicate between( CriteriaBuilder builder, Join<?, ? extends AbstractAttributeDate<?>> join, 151 Join<?, ? extends AbstractAttributeDate<?>> join1, String key, String key1, Timestamp value ) 152 { 153 return builder.and( builder.equal( join.get( AbstractAttributeDate_.key ), key ), 154 builder.lessThanOrEqualTo( join.get( AbstractAttributeDate_.value ), value ), builder.equal( join1.get( AbstractAttributeDate_.key ), key1 ), 155 builder.greaterThanOrEqualTo( join1.get( AbstractAttributeDate_.value ), value ) ); 156 } 157 }