package com.giftoftheembalmer.gotefarm.server.dao; import com.google.appengine.api.datastore.Key; import javax.jdo.annotations.Element; import javax.jdo.annotations.Extension; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.Order; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import java.util.ArrayList; import java.util.Date; import java.util.List; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Event { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key key; @Persistent private Key eventTemplate; @Persistent private Key guild; @Persistent private String name; @Persistent private int size; @Persistent private int minimumLevel; @Persistent private String instance; @Persistent private Key instanceKey; // FIXME: Using List here due to AppEngine bug, switch to Set once // it is fixed. // http://code.google.com/p/datanucleus-appengine/issues/detail?id=26 @Persistent @Element(dependent = "true") @Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "boss asc")) private List<EventBoss> eventBosses = new ArrayList<EventBoss>(); // FIXME: Using List here due to AppEngine bug, switch to Set once // it is fixed. // http://code.google.com/p/datanucleus-appengine/issues/detail?id=26 @Persistent @Element(dependent = "true") @Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "role asc")) private List<EventRole> eventRoles = new ArrayList<EventRole>(); // FIXME: Using List here due to AppEngine bug, switch to Set once // it is fixed. // http://code.google.com/p/datanucleus-appengine/issues/detail?id=26 @Persistent @Element(dependent = "true") @Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "badge asc")) private List<EventBadge> eventBadges = new ArrayList<EventBadge>(); @Persistent Date startTime; @Persistent int duration; @Persistent Date displayStart; @Persistent Date displayEnd; @Persistent Date signupsStart; @Persistent Date signupsEnd; @Persistent @Element(dependent = "true") @Order(extensions = @Extension( vendorName = "datanucleus", key = "list-ordering", value = "signupTime asc, actualSignupTime asc, character asc" )) private List<Signup> signups = new ArrayList<Signup>(); @Persistent private Date lastModification = new Date(); public Event(Key eventTemplate, Key guild, String name, int size, int minimumLevel, String instance, Key instanceKey, Date startTime, int duration, Date displayStart, Date displayEnd, Date signupsStart, Date signupsEnd) { this.eventTemplate = eventTemplate; this.guild = guild; this.name = name; this.size = size; this.minimumLevel = minimumLevel; this.instance = instance; this.instanceKey = instanceKey; this.startTime = startTime; this.duration = duration; this.displayStart = displayStart; this.displayEnd = displayEnd; this.signupsStart = signupsStart; this.signupsEnd = signupsEnd; } public Date getDisplayEnd() { return displayEnd; } public Date getDisplayStart() { return displayStart; } public int getDuration() { return duration; } public List<EventBadge> getEventBadges() { return eventBadges; } public List<EventBoss> getEventBosses() { return eventBosses; } public List<EventRole> getEventRoles() { return eventRoles; } public Key getEventTemplate() { return eventTemplate; } public Key getGuild() { return guild; } public String getInstance() { return instance; } public Key getInstanceKey() { return instanceKey; } public Key getKey() { return key; } public Date getLastModification() { return lastModification; } public int getMinimumLevel() { return minimumLevel; } public String getName() { return name; } public List<Signup> getSignups() { return signups; } public Date getSignupsEnd() { return signupsEnd; } public Date getSignupsStart() { return signupsStart; } public int getSize() { return size; } public Date getStartTime() { return startTime; } public void setDisplayEnd(Date displayEnd) { this.displayEnd = displayEnd; } public void setDisplayStart(Date displayStart) { this.displayStart = displayStart; } public void setDuration(int duration) { this.duration = duration; } private <A extends Copyable<A>> List<A> copyList(List<A> input) { int len = 0; if (input != null) { len = input.size(); } List<A> output = new java.util.ArrayList<A>(len); if (input != null) { for (A item : input) { output.add(item.copy()); } } return output; } public void setEventBadges(List<EventBadge> eventBadges) { this.eventBadges = copyList(eventBadges); } public void setEventBosses(List<EventBoss> eventBosses) { this.eventBosses = copyList(eventBosses); } public void setEventRoles(List<EventRole> eventRoles) { this.eventRoles = copyList(eventRoles); } public void setInstance(String instance, Key instanceKey) { this.instance = instance; this.instanceKey = instanceKey; } public void setLastModification(Date lastModification) { this.lastModification = lastModification; } public void setMinimumLevel(int minimumLevel) { this.minimumLevel = minimumLevel; } public void setName(String name) { this.name = name; } public void setSignups(List<Signup> signups) { this.signups = signups; } public void setSignupsEnd(Date signupsEnd) { this.signupsEnd = signupsEnd; } public void setSignupsStart(Date signupsStart) { this.signupsStart = signupsStart; } public void setSize(int size) { this.size = size; } public void setStartTime(Date startTime) { this.startTime = startTime; } }