package com.acme.gwt.data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Version;
import com.acme.gwt.data.TvGuideCallFactory.EpisodesDateCall;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
/**
* Created by IntelliJ IDEA.
* User: jim
* Date: 3/10/11
* Time: 7:40 PM
* To change this template use File | Settings | File Templates.
*/
public @Entity
class TvEpisode implements HasVersionAndId {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
private Integer version;
@Version
public Integer getVersion() {
return version;
}
public void setId(Long id) {
this.id = id;
}
public void setVersion(Integer version) {
this.version = version;
}
private TvShow tvShow;
private Integer season;
private Integer episodeNumber;
private String name;
@ManyToOne(cascade = CascadeType.ALL)
public TvShow getTvShow() {
return tvShow;
}
public void setTvShow(TvShow tvShow) {
this.tvShow = tvShow;
}
public Integer getSeason() {
return season;
}
public void setSeason(Integer season) {
this.season = season;
}
public Integer getEpisodeNumber() {
return episodeNumber;
}
public void setEpisodeNumber(Integer episodeNumber) {
this.episodeNumber = episodeNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private List<TvScheduledEpisode> scheduledEpisodes;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "tvEpisode", orphanRemoval = true)
@OrderBy(value = "block.startDate")
public List<TvScheduledEpisode> getScheduledEpisodes() {
return scheduledEpisodes;
}
public void setScheduledEpisodes(List<TvScheduledEpisode> scheduledEpisodes) {
this.scheduledEpisodes = scheduledEpisodes;
}
public static class EpisodeRangeCallable implements EpisodesDateCall {
@Assisted("startDate")
Date startDate;
@Assisted("endDate")
Date endDate;
@Assisted
TvChannel channel;
@Assisted
TvShow show;
//very locally scoped, no need for provider
@Inject
EntityManager em;
@Override
public List<TvScheduledEpisode> call() throws Exception {
return new ArrayList<TvScheduledEpisode>();
}
}
}