package com.giftoftheembalmer.gotefarm.server.dao;
import com.google.appengine.api.datastore.Key;
import javax.jdo.annotations.Extension;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import java.util.Date;
@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable = "true")
public class EventSchedule {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent(defaultFetchGroup = "true")
private Key guild;
@Persistent(defaultFetchGroup = "true")
private Key eventTemplate;
// Extension to work around appengine bug
// http://code.google.com/p/datanucleus-appengine/issues/detail?id=30
@Persistent
@Extension(vendorName = "datanucleus", key = "is-second-class",
value="false")
private Date startTime;
// Extension to work around appengine bug
// http://code.google.com/p/datanucleus-appengine/issues/detail?id=30
@Persistent
@Extension(vendorName = "datanucleus", key = "is-second-class",
value="false")
private Date origStartTime;
@Persistent
private String timeZone;
@Persistent
private int duration;
@Persistent
private int displayStart;
// Extension to work around appengine bug
// http://code.google.com/p/datanucleus-appengine/issues/detail?id=30
@Persistent
@Extension(vendorName = "datanucleus", key = "is-second-class",
value="false")
private Date displayStartDate;
@Persistent
private int displayEnd;
// Extension to work around appengine bug
// http://code.google.com/p/datanucleus-appengine/issues/detail?id=30
@Persistent
@Extension(vendorName = "datanucleus", key = "is-second-class",
value="false")
private Date displayEndDate;
@Persistent
private int signupsStart;
// Extension to work around appengine bug
// http://code.google.com/p/datanucleus-appengine/issues/detail?id=30
@Persistent
@Extension(vendorName = "datanucleus", key = "is-second-class",
value="false")
private Date signupsStartDate;
@Persistent
private int signupsEnd;
// Extension to work around appengine bug
// http://code.google.com/p/datanucleus-appengine/issues/detail?id=30
@Persistent
@Extension(vendorName = "datanucleus", key = "is-second-class",
value="false")
private Date signupsEndDate;
@Persistent
private int repeatSize;
@Persistent
private int repeatFreq;
@Persistent
private int dayMask;
@Persistent
private int repeatBy;
@Persistent
private boolean active;
public EventSchedule(Key guild, Key eventTemplate, Date startTime,
String timeZone, int duration, int displayStart,
int displayEnd, int signupsStart, int signupsEnd,
int repeatSize, int repeatFreq, int dayMask,
int repeatBy, boolean active) {
this.guild = guild;
this.eventTemplate = eventTemplate;
this.startTime = startTime;
this.origStartTime = startTime;
this.timeZone = timeZone;
this.duration = duration;
setDisplayStart(displayStart);
setDisplayEnd(displayEnd);
setSignupsStart(signupsStart);
setSignupsEnd(signupsEnd);
this.repeatSize = repeatSize;
this.repeatFreq = repeatFreq;
this.dayMask = dayMask;
this.repeatBy = repeatBy;
this.active = active;
}
private Date calcDate(Date from, int secondsDelta) {
return new Date(from.getTime() + secondsDelta * 1000L);
}
public int getDayMask() {
return dayMask;
}
public int getDisplayEnd() {
return displayEnd;
}
public Date getDisplayEndDate() {
return displayEndDate;
}
public int getDisplayStart() {
return displayStart;
}
public Date getDisplayStartDate() {
return displayStartDate;
}
public int getDuration() {
return duration;
}
public Key getEventTemplate() {
return eventTemplate;
}
public Key getGuild() {
return guild;
}
public Key getKey() {
return key;
}
public Date getOrigStartTime() {
return origStartTime;
}
public int getRepeatBy() {
return repeatBy;
}
public int getRepeatFreq() {
return repeatFreq;
}
public int getRepeatSize() {
return repeatSize;
}
public int getSignupsEnd() {
return signupsEnd;
}
public Date getSignupsEndDate() {
return signupsEndDate;
}
public int getSignupsStart() {
return signupsStart;
}
public Date getSignupsStartDate() {
return signupsStartDate;
}
public Date getStartTime() {
return startTime;
}
public String getTimeZone() {
return timeZone;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public void setDayMask(int dayMask) {
this.dayMask = dayMask;
}
public void setDisplayEnd(int displayEnd) {
this.displayEnd = displayEnd;
this.displayEndDate = calcDate(startTime, displayEnd);
}
public void setDisplayStart(int displayStart) {
this.displayStart = displayStart;
this.displayStartDate = calcDate(startTime, -displayStart);
}
public void setDuration(int duration) {
this.duration = duration;
}
public void setOrigStartTime(Date origStartTime) {
this.origStartTime = origStartTime;
}
public void setRepeatBy(int repeatBy) {
this.repeatBy = repeatBy;
}
public void setRepeatFreq(int repeatFreq) {
this.repeatFreq = repeatFreq;
}
public void setRepeatSize(int repeatSize) {
this.repeatSize = repeatSize;
}
public void setSignupsEnd(int signupsEnd) {
this.signupsEnd = signupsEnd;
this.signupsEndDate = calcDate(startTime, -signupsEnd);
}
public void setSignupsStart(int signupsStart) {
this.signupsStart = signupsStart;
this.signupsStartDate = calcDate(startTime, -signupsStart);
}
public void setStartTime(Date startTime) {
if (this.startTime.equals(startTime)) {
return;
}
this.startTime = startTime;
// Update new display/signup start/end Dates
setDisplayStart(displayStart);
setDisplayEnd(displayEnd);
setSignupsStart(signupsStart);
setSignupsEnd(signupsEnd);
}
public void setTimeZone(String timeZone) {
this.timeZone = timeZone;
}
}