package fi.otavanopisto.muikku.plugins.communicator.model;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.PersistenceException;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
import fi.otavanopisto.security.ContextReference;
@Entity
public class CommunicatorMessage implements ContextReference {
public Long getId() {
return id;
}
public CommunicatorMessageId getCommunicatorMessageId() {
return communicatorMessageId;
}
public void setCommunicatorMessageId(CommunicatorMessageId communicatorMessageId) {
this.communicatorMessageId = communicatorMessageId;
}
public CommunicatorMessageCategory getCategory() {
return category;
}
public void setCategory(CommunicatorMessageCategory category) {
this.category = category;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this.caption = caption;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Long getSender() {
return sender;
}
public void setSender(Long sender) {
this.sender = sender;
}
public Boolean getArchivedBySender() {
return archivedBySender;
}
public void setArchivedBySender(Boolean archivedBySender) {
this.archivedBySender = archivedBySender;
}
public Set<Long> getTags() {
return tags;
}
public void setTags(Set<Long> tags) {
this.tags = tags;
}
public void addTag(Long tagId) {
if (!tags.contains(tagId)) {
tags.add(tagId);
} else {
throw new PersistenceException("Entity already has this tag");
}
}
public void removeTag(Long tagId) {
if (tags.contains(tagId)) {
tags.remove(tagId);
} else {
throw new PersistenceException("Entity does not have this tag");
}
}
public Boolean getTrashedBySender() {
return trashedBySender;
}
public void setTrashedBySender(Boolean trashedBySender) {
this.trashedBySender = trashedBySender;
}
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private CommunicatorMessageId communicatorMessageId;
@Column (nullable = false, name = "sender_id")
private Long sender;
@ManyToOne
private CommunicatorMessageCategory category;
@NotNull
@NotEmpty
@Column (nullable = false, length = 1024)
private String caption;
@NotNull
@NotEmpty
@Column (nullable = false)
@Lob
private String content;
@NotNull
@Column (updatable=false, nullable=false)
@Temporal (value=TemporalType.TIMESTAMP)
private Date created;
@NotNull
@Column(nullable = false)
private Boolean archivedBySender;
@NotNull
@Column(nullable = false)
private Boolean trashedBySender;
@ElementCollection
@CollectionTable (name="communicatormessage_tags", joinColumns=@JoinColumn(name="communicatorMessage_id"))
@Column
private Set<Long> tags = new HashSet<Long>();
}