package org.karmaexchange.dao; import javax.annotation.Nullable; import org.karmaexchange.resources.msg.ErrorResponseMsg; import org.karmaexchange.resources.msg.ErrorResponseMsg.ErrorInfo; import lombok.Data; import lombok.NoArgsConstructor; import com.googlecode.objectify.annotation.Index; import com.googlecode.objectify.condition.PojoIf; @Data @NoArgsConstructor public class Rating { public static final double MIN_RATING = 1; public static final double MAX_RATING = 5; @Index(ValueIsIndexedCheck.class) private Double value; public static Rating create(double value) { return new Rating(value); } protected Rating(@Nullable Double value) { setValue(value); } public void setValue(@Nullable Double value) { if (value != null) { if (value > MAX_RATING) { throw ErrorResponseMsg.createException("the max rating value is " + MAX_RATING, ErrorInfo.Type.BAD_REQUEST); } else if (value < MIN_RATING) { throw ErrorResponseMsg.createException("the max rating value is " + MIN_RATING, ErrorInfo.Type.BAD_REQUEST); } } this.value = value; } protected boolean valueIsIndexed() { return false; } private static class ValueIsIndexedCheck extends PojoIf<Rating> { @Override public boolean matchesPojo(Rating rating) { return rating.valueIsIndexed(); } } }