package com.QA;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Index;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.FieldBridge;
import org.hibernate.search.bridge.builtin.IntegerBridge;
import org.jblooming.ontology.LoggableIdentifiableSupport;
import org.jblooming.oql.OqlQuery;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "qa_upvote")
public class Upvote extends LoggableIdentifiableSupport {
private QAOperator operator;
private Answer answer;
private Question question;
@Id
@Type(type = "int")
@GeneratedValue(strategy = GenerationType.AUTO)
@DocumentId
@FieldBridge(impl = IntegerBridge.class)
public Serializable getId() {
return super.getId();
}
@ManyToOne( targetEntity = QAOperator.class)
@ForeignKey(name = "fk_up_op")
@Index(name = "idx_up_op")
public QAOperator getOperator() {
return operator;
}
public void setOperator(QAOperator op) {
this.operator = op;
}
@ManyToOne ( targetEntity = Question.class)
@ForeignKey(name = "fk_up_quest")
@Index(name = "idx_up_quest")
public Question getQuestion() {
return question;
}
private void setQuestion(Question question) {
this.question = question;
}
@Transient
public void setQuestionAndPropagate(Question question) {
this.setQuestion(question);
question.setTotUpvotesFromQandA(question.getTotUpvotesFromQandA()+1);
}
@ManyToOne ( targetEntity = Answer.class)
@ForeignKey(name = "fk_up_answ")
@Index(name = "idx_up_answ")
public Answer getAnswer() {
return answer;
}
private void setAnswer(Answer answer) {
this.answer = answer;
}
@Transient
public void setAnswerAndPropagate(Answer answer) {
this.setAnswer(answer);
answer.setTotUpvotesAndAcceptance(answer.getTotUpvotesAndAcceptance()+1);
answer.getQuestion().setTotUpvotesFromQandA(answer.getQuestion().getTotUpvotesFromQandA()+.5);
}
@Transient
public static Upvote getVote(QAOperator op, Answer answer){
OqlQuery oq = new OqlQuery("from " + Upvote.class.getName() + " as uv where uv.operator=:op and uv.answer=:answer");
oq.getQuery().setEntity("op", op).setEntity("answer", answer);
Upvote uv = null;
try {
uv = (Upvote) oq.uniqueResult();
} catch (Throwable a) {}
return uv;
}
}