package com.trywildcard.pair.model.review; import com.fasterxml.jackson.annotation.JsonIgnore; import com.trywildcard.pair.exception.CardBuilderException; import com.trywildcard.pair.validation.ValidationTool; public class Rating { @JsonIgnore protected ValidationTool v = new ValidationTool(); //required fields private Float rating; private Float minimumRating; private Float maximumRating; //optional fields private Integer numberOfRatings; /** Constructor for Deserialization **/ private Rating() {} public Rating(Float rating, Float minimumRating, Float maximumRating) throws CardBuilderException { setRating(rating); setMinimumRating(minimumRating); setMaximumRating(maximumRating); } public Rating(Float rating, Float minimumRating, Float maximumRating, Integer numberOfRatings) throws CardBuilderException { setRating(rating); setMinimumRating(minimumRating); setMaximumRating(maximumRating); setNumberOfRatings(numberOfRatings); } public Float getRating() { return rating; } public Float getMinimumRating() { return minimumRating; } public Float getMaximumRating() { return maximumRating; } public Integer getNumberOfRatings() { return numberOfRatings; } private void setRating(Float rating) throws CardBuilderException { v.required(v.notNull(rating), "Rating must not be null"); v.required(v.notNegative(rating), "Rating must be a non-negative Float."); this.rating = rating; } private void setMinimumRating(Float minimumRating) throws CardBuilderException { v.required(v.notNull(minimumRating), "Minimum Rating must not be null"); v.required(v.notNegative(minimumRating), "Minimum Rating must be a non-negative Float."); this.minimumRating = minimumRating; } private void setMaximumRating(Float maximumRating) throws CardBuilderException { v.required(v.notNull(maximumRating), "Maximum Rating must not be null"); v.required(v.notNegative(maximumRating), "Maximum Rating must be a non-negative Float."); this.maximumRating = maximumRating; } public void setNumberOfRatings(Integer numberOfRatings) throws CardBuilderException { boolean isNotNull = v.optional(v.notNull(numberOfRatings), "Number of Ratings must not be null"); boolean isNotNegative = v.optional(v.notNegative(numberOfRatings), "Number of Ratings must be a non-negative Integer."); if (isNotNull && isNotNegative) { this.numberOfRatings = numberOfRatings; } } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Rating rating1 = (Rating) o; if (maximumRating != null ? !maximumRating.equals(rating1.maximumRating) : rating1.maximumRating != null) return false; if (minimumRating != null ? !minimumRating.equals(rating1.minimumRating) : rating1.minimumRating != null) return false; if (numberOfRatings != null ? !numberOfRatings.equals(rating1.numberOfRatings) : rating1.numberOfRatings != null) return false; if (rating != null ? !rating.equals(rating1.rating) : rating1.rating != null) return false; return true; } @Override public int hashCode() { int result = rating != null ? rating.hashCode() : 0; result = 31 * result + (minimumRating != null ? minimumRating.hashCode() : 0); result = 31 * result + (maximumRating != null ? maximumRating.hashCode() : 0); result = 31 * result + (numberOfRatings != null ? numberOfRatings.hashCode() : 0); return result; } }