ReaderEvent.java 4.44 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.model;

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

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

/**
 * 
 */
@Entity
@Table(name = "reader_events")
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()
	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()
	private EventUser user;

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

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

	@Enumerated(EnumType.STRING)
	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 "" + ((System.currentTimeMillis() - getUpdatetime().getTime()) / 1000 / 60) + " min.";
	}
}