GroupMembership.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. 
 * 
 */
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fi.codecrew.moya.model;

import java.util.Calendar;

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

/**
 * 
 */
@Entity
@Table(name = "group_memberships")
// , uniqueConstraints = { @UniqueConstraint(columnNames = {
// GroupMembership.EVENTUSER_ID, GroupMembership.GROUP_ID }) })
public class GroupMembership extends GenericEntity {

	/**
     * 
     */
	private static final long serialVersionUID = 2195875306960651526L;
	protected static final String EVENTUSER_ID = "eventuser_id";
	protected static final String GROUP_ID = "group_id";

	@Column(name = "invite_token", unique = true, nullable = false)
	private String inviteToken;

	@Column(name = "invite_accepted")
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar inviteAccepted;

	@Column(name = "invite_email")
	private String inviteEmail;

	@Column(name = "invite_name")
	private String inviteName;

	@ManyToOne(optional = false, cascade = CascadeType.PERSIST)
	@JoinColumn(name = GROUP_ID, referencedColumnName = "id", nullable = false)
	private PlaceGroup placeGroup;

	@OneToOne(optional = false)
	@JoinColumn(name = "place_reservation_id", referencedColumnName = "id", nullable = true, unique = true)
	private Place placeReservation;

	@JoinColumn(name = EVENTUSER_ID, referencedColumnName = EventUser.ID_COLUMN)
	@ManyToOne
	private EventUser user;

	/**
	 * When user has redeemed ticket at the door
	 */
	@Column(name = "entered_event")
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar enteredEvent;

	/**
	 * User who has given the entrance to the event (ie who has set the
	 * enteredEvent field to not null)
	 * 
	 */
	@ManyToOne()
	@JoinColumn(name = "entered_event_admin_id")
	private EventUser enteredEventAdmin;

	public GroupMembership() {
	}

	public GroupMembership(PlaceGroup pg, Place p, String token) {
		super();
		this.setPlaceGroup(pg);
		this.setPlaceReservation(p);
		this.inviteToken = token;
	}

	public Calendar getInviteAccepted() {
		return inviteAccepted;
	}

	public void setInviteAccepted(Calendar inviteAccepted) {
		this.inviteAccepted = inviteAccepted;
	}

	public String getInviteEmail() {
		return inviteEmail;
	}

	public void setInviteEmail(String inviteEmail) {
		this.inviteEmail = inviteEmail;
	}

	public String getInviteName() {
		return inviteName;
	}

	public void setInviteName(String inviteName) {
		this.inviteName = inviteName;
	}

	public PlaceGroup getPlaceGroup() {
		return placeGroup;
	}

	public void setPlaceGroup(PlaceGroup groupsId) {
		this.placeGroup = groupsId;
	}

	/**
	 * When user has selected place from map, it will be put on this.
	 * 
	 * @return
	 */
	public Place getPlaceReservation() {
		return placeReservation;
	}

	public void setPlaceReservation(Place placeReservation) {
		this.placeReservation = placeReservation;
	}

	public EventUser getUser() {
		return user;
	}

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

	/**
	 * @return the enteredEvent
	 */
	public Calendar getEnteredEvent() {
		return enteredEvent;
	}

	/**
	 * @param enteredEvent
	 *            the enteredEvent to set
	 */
	public void setEnteredEvent(Calendar enteredEvent) {
		this.enteredEvent = enteredEvent;
	}

	public void setInviteToken(String inviteToken) {
		this.inviteToken = inviteToken;
	}

	public String getInviteToken() {
		return inviteToken;
	}

	public EventUser getEnteredEventAdmin() {
		return enteredEventAdmin;
	}

	public void setEnteredEventAdmin(EventUser enteredEventAdmin) {
		this.enteredEventAdmin = enteredEventAdmin;
	}

}