package com.QA;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Index;
import org.hibernate.annotations.IndexColumn;
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.SecuredLoggableSupport;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Entity
@Table(name = "qa_question_revision")
public class QuestionRevision extends SecuredLoggableSupport {
private QAOperator editor;
private Date revisionDate;
private Question revisionOf;
private String formerSubject;
private String formerDescription;
private List<Tag> formerTags = new ArrayList();
@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_questrev_own")
@Index(name = "idx_questrev_own")
@JoinColumn(name = "editorx")
public QAOperator getEditor() {
return editor;
}
public void setEditor(QAOperator editor) {
this.editor = editor;
}
public Date getRevisionDate() {
return revisionDate;
}
public void setRevisionDate(Date revisionDate) {
this.revisionDate = revisionDate;
}
@ManyToOne(targetEntity = Question.class)
@ForeignKey(name = "fk_questrev_qst")
@Index(name = "idx_questrev_qst")
public Question getRevisionOf() {
return revisionOf;
}
public void setRevisionOf(Question revisionOf) {
this.revisionOf = revisionOf;
}
@Column(length = 900)
public String getFormerSubject() {
return formerSubject;
}
public void setFormerSubject(String formerSubject) {
this.formerSubject = formerSubject;
}
@Lob
public String getFormerDescription() {
return formerDescription;
}
public void setFormerDescription(String formerDescription) {
this.formerDescription = formerDescription;
}
@ManyToMany(cascade = {CascadeType.PERSIST})
@JoinTable(name = "qa_tagquestrev", joinColumns = {@JoinColumn(name = "id")})
@IndexColumn(name = "tagPosition", base = 0)
public List<Tag> getFormerTags() {
return formerTags;
}
public void setFormerTags(List<Tag> formerTags) {
this.formerTags = formerTags;
}
public static QuestionRevision createRevision(Question question, QAOperator editor) {
QuestionRevision qr = new QuestionRevision();
qr.setFormerDescription(question.getDescription());
qr.setFormerSubject(question.getSubject());
qr.setFormerTags(question.getTags());
qr.setRevisionOf(question);
qr.setEditor(editor);
qr.setRevisionDate(new Date());
return qr;
}
}