package com.acme.gwt.data;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Version;
import com.acme.gwt.data.TvSetupCallFactory.TvShowCall;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import com.google.inject.persist.Transactional;
/**
* Created by IntelliJ IDEA.
* User: jim
* Date: 3/10/11
* Time: 7:40 PM
* To change this template use File | Settings | File Templates.
*/
@Entity
public class TvShow 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 String name;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
private List<TvEpisode> episodes;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "tvShow", fetch = FetchType.LAZY, orphanRemoval = true)
@OrderBy("episodeNumber")
public List<TvEpisode> getEpisodes() {
return episodes;
}
public void setEpisodes(List<TvEpisode> episodes) {
this.episodes = episodes;
}
public static class SaveCallable implements TvShowCall {
private final TvShow show;
@Inject
Provider<EntityManager> em;
@AssistedInject
public SaveCallable(@Assisted
TvShow show) {
this.show = show;
}
@Transactional
@Override
public TvShow call() throws Exception {
return em.get().merge(show);
}
}
}