package com.acme.gwt.data; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Version; import javax.persistence.criteria.CriteriaQuery; import com.acme.gwt.data.TvGuideCallFactory.ChannelListCall; import com.acme.gwt.data.TvGuideCallFactory.UserFavoritesCall; import com.acme.gwt.shared.defs.Geo; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; import com.google.inject.persist.Transactional; /** * this is a local channel in a lineup of channels, this is not a network in a list of Cable networks. * <p/> * 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 TvChannel 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 icon; private Integer channelNumber; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getChannelNumber() { return channelNumber; } public void setChannelNumber(Integer channelNumber) { this.channelNumber = channelNumber; } private Geo geo; @Enumerated(EnumType.STRING) public Geo getGeo() { return geo; } public void setGeo(Geo geo) { this.geo = geo; } private List<TvScheduledEpisode> scheduledEpisodes; @OneToMany(cascade = CascadeType.ALL, mappedBy = "tvChannel") public List<TvScheduledEpisode> getScheduledEpisodes() { return scheduledEpisodes; } public void setScheduledEpisodes(List<TvScheduledEpisode> scheduledEpisodes) { this.scheduledEpisodes = scheduledEpisodes; } public static class FavoritesChannelCallable implements UserFavoritesCall { private final List<TvShow> newShowList; @Inject TvViewer viewer; @Inject EntityManager em; @AssistedInject public FavoritesChannelCallable(@Assisted List<TvShow> shows) { newShowList = shows; } @AssistedInject public FavoritesChannelCallable() { newShowList = null; } @Transactional @Override public List<TvShow> call() throws Exception { if (newShowList != null) { viewer.setFavorites(newShowList); viewer = em.merge(viewer); } return viewer.getFavorites(); } } public static class ChannelListCallable implements ChannelListCall { @Inject EntityManager em; @Override public List<TvChannel> call() throws Exception { CriteriaQuery<TvChannel> q = em.getCriteriaBuilder().createQuery( TvChannel.class); q.from(TvChannel.class); //TODO where clause return em.createQuery(q).getResultList(); } } }