package org.onehippo.forge.konakart.hst.tags;
import com.konakart.app.DataDescriptor;
import com.konakart.app.KKException;
import com.konakart.appif.DataDescriptorIf;
import com.konakart.appif.ReviewIf;
import com.konakart.appif.ReviewsIf;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import java.io.IOException;
public class RatingTag extends KKTagSupport {
protected Integer productId;
protected String ratingVar;
protected String nbReviewsVar;
protected Boolean showVisible = false;
public void setProductId(Integer productId) {
this.productId = productId;
}
public void setRatingVar(String ratingVar) {
this.ratingVar = ratingVar;
}
public void setNbReviewsVar(String nbReviewsVar) {
this.nbReviewsVar = nbReviewsVar;
}
public void setShowVisible(Boolean showVisible) {
this.showVisible = showVisible;
}
/* (non-Javadoc)
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
if (ratingVar != null) {
pageContext.removeAttribute(ratingVar, PageContext.PAGE_SCOPE);
}
if (nbReviewsVar != null) {
pageContext.removeAttribute(nbReviewsVar, PageContext.PAGE_SCOPE);
}
return EVAL_BODY_INCLUDE;
}
@Override
public int doEndTag() throws JspException {
Double ratingValue = 0D;
DataDescriptorIf dataDescriptorIf = new DataDescriptor();
dataDescriptorIf.setShowInvisible(showVisible);
double numberOfReview = 0;
try {
ReviewsIf reviewsIf = getKkAppEng().getEng().getReviewsPerProduct(dataDescriptorIf, productId);
if (reviewsIf.getTotalNumReviews() == 0) {
return 0;
}
// Retreive the reviews.
ReviewIf[] reviews = reviewsIf.getReviewArray();
// Double check...
if (reviews != null && reviews.length > 0) {
numberOfReview = reviews.length;
double rating = 0;
for (ReviewIf reviewIf : reviews) {
rating += reviewIf.getRating();
}
ratingValue = rating / reviews.length;
}
} catch (KKException e) {
ratingValue = 0D;
}
writeOrSetVar(ratingVar, ratingValue);
writeOrSetVar(nbReviewsVar, numberOfReview);
return EVAL_PAGE;
}
private void writeOrSetVar(String var, Double rating) throws JspException {
if (var == null) {
JspWriter writer = pageContext.getOut();
try {
writer.write(rating.toString());
} catch (IOException e) {
throw new JspException("IOException while trying to write script tag", e);
}
} else {
int varScope = PageContext.PAGE_SCOPE;
pageContext.setAttribute(var, rating, varScope);
}
}
}