ReaderEvent.java 3.95 KB
package fi.codecrew.moya.model;

import java.beans.Transient;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;

/**
 * 
 */
@Entity
@Table(name = "reader_events")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class ReaderEvent extends GenericEntity {

	private static final long serialVersionUID = 1L;

	@Column(name = "event_time", nullable = false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date time;

	@Column(name = "event_updated")
	@Temporal(TemporalType.TIMESTAMP)
	private Date updatetime;

	@Column(name = "value")
	private String value;

	@Lob
	@Column(name = "notes")
	private String notes;

	@JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = true, updatable = false)
	@ManyToOne(optional = false)
	private PrintedCard printedCard;

	@JoinColumn(name = "readers_id", referencedColumnName = "id", nullable = false, updatable = false)
	@ManyToOne(optional = false)
	private Reader reader;

	@JoinColumn(name = "event_users_id", referencedColumnName = "id", nullable = true, updatable = false)
	@ManyToOne(optional = false)
	private EventUser user;

	@JoinColumn(name = "places_id", referencedColumnName = "id", nullable = true, updatable = false)
	@ManyToOne(optional = false)
	private Place place;

	@JoinColumn(name = "products_id", referencedColumnName = "id", nullable = true, updatable = false)
	@ManyToOne(optional = false)
	private Product product;

	private ReaderEventType type;

	public ReaderEvent(Date eventTime, Reader reader, String value) {

		this(eventTime, reader, value, null, null, null, null, ReaderEventType.UNKNOWN);

	}

	public ReaderEvent(Date eventTime, Reader reader, String value, ReaderEventType type) {

		this(eventTime, reader, value, null, null, null, null, type);

	}

	public ReaderEvent(Date eventTime, Reader reader, String value, PrintedCard card, EventUser user, Place place, Product product, ReaderEventType type) {

		this.time = eventTime;
		this.reader = reader;
		this.value = value;
		this.user = user;
		this.printedCard = card;
		this.user = user;
		this.place = place;
		this.product = product;

		if (type == null)
			type = ReaderEventType.UNKNOWN;

		this.type = type;

	}

	public ReaderEvent() {
		super();
	}

	public EventUser getUser() {
		return user;
	}

	public void setUser(EventUser user) {
		this.user = user;
	}

	public Place getPlace() {
		return place;
	}

	public void setPlace(Place place) {
		this.place = place;
	}

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public ReaderEventType getType() {
		return type;
	}

	public void setType(ReaderEventType type) {
		this.type = type;
	}

	public String getNotes() {
		return notes;
	}

	public void setNotes(String notes) {
		this.notes = notes;
	}

	public Date getTime() {
		return time;
	}

	public void setTime(Date eventTime) {
		this.time = eventTime;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public PrintedCard getPrintedCard() {
		return printedCard;
	}

	public void setPrintedCard(PrintedCard printedCardsId) {
		this.printedCard = printedCardsId;
	}

	public Reader getReader() {
		return reader;
	}

	public void setReader(Reader readersId) {
		this.reader = readersId;
	}

	public Date getUpdatetime() {
		if (updatetime == null)
			return time;

		return updatetime;
	}

	public void setUpdatetime(Date updatetime) {
		this.updatetime = updatetime;
	}
	
	@Transient
	public String getSeenSince() {
		return "" + ((getUpdatetime().getTime() / 1000) / 60) +" min." ;
	}

}