// Path: src/main/java/org/chorem/ecd/model/Playlist.java
// public class Playlist {
// 
//     private UUID id;
// 
//     private List<SignageStream> streams = Lists.newArrayList();
// 
//     private List<NewsFeed> newsFeeds = Lists.newArrayList();
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public void setId(UUID id) {
//         this.id = id;
//     }
// 
//     public List<SignageStream> getStreams() {
//         return streams;
//     }
// 
//     public void setStreams(List<SignageStream> streams) {
//         this.streams = streams;
//     }
// 
//     public List<NewsFeed> getNewsFeeds() {
//         return newsFeeds;
//     }
// 
//     public void setNewsFeeds(List<NewsFeed> newsFeeds) {
//         this.newsFeeds = newsFeeds;
//     }
// 
// }
// 
// Path: src/main/java/org/chorem/ecd/model/news/NewsFeed.java
// public class NewsFeed {
// 
//     private UUID id;
// 
//     private String name;
// 
//     private String url;
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public void setId(UUID id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getUrl() {
//         return url;
//     }
// 
//     public URL getParsedUrl() {
//         URL parsedUrl = null;
//         try {
//             parsedUrl = new URL(getUrl());
//         } catch (MalformedURLException e) {
//         }
//         return parsedUrl;
//     }
// 
//     public void setUrl(String url) {
//         this.url = url;
//     }
// }
// 
// Path: src/main/java/org/chorem/ecd/model/stream/SignageStream.java
// public class SignageStream {
// 
//     private UUID id;
// 
//     private String name;
// 
//     private Integer timing;
// 
//     private LocalDateTime creationDateTime;
// 
//     private LocalDateTime lastUpdateDateTime;
// 
//     private List<SignageStreamFrame> frames;
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public void setId(UUID id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public Integer getTiming() {
//         return timing;
//     }
// 
//     public void setTiming(Integer timing) {
//         this.timing = timing;
//     }
// 
//     public LocalDateTime getCreationDateTime() {
//         return creationDateTime;
//     }
// 
//     public void setCreationDateTime(LocalDateTime creationDateTime) {
//         this.creationDateTime = creationDateTime;
//     }
// 
//     public LocalDateTime getLastUpdateDateTime() {
//         return lastUpdateDateTime;
//     }
// 
//     public void setLastUpdateDateTime(LocalDateTime lastUpdateDateTime) {
//         this.lastUpdateDateTime = lastUpdateDateTime;
//     }
// 
//     public List<SignageStreamFrame> getFrames() {
//         return frames;
//     }
// 
//     public void setFrames(List<SignageStreamFrame> frames) {
//         this.frames = frames;
//     }
// }


import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.gson.reflect.TypeToken;
import org.chorem.ecd.model.Playlist;
import org.chorem.ecd.model.news.NewsFeed;
import org.chorem.ecd.model.stream.SignageStream;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.RecordMapper;
import org.jooq.Table;
import org.jooq.impl.DSL;
import org.jooq.util.postgres.PostgresDSL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.enterprise.context.ApplicationScoped;
import java.lang.reflect.Type;
import java.util.List;
import java.util.UUID;
import static org.chorem.ecd.mapping.tables.Playlist.PLAYLIST;
import static org.chorem.ecd.mapping.tables.SignageStream.SIGNAGE_STREAM;
import static org.chorem.ecd.mapping.tables.NewsFeed.NEWS_FEED;
package org.chorem.ecd.dao;




/**
 * @author Julien Gaston (gaston@codelutin.com)
 */
@ApplicationScoped
public class PlaylistDao extends AbstractDao<Playlist, UUID> {

    private static final Logger logger = LoggerFactory.getLogger(PlaylistDao.class);

// Path: src/main/java/org/chorem/ecd/model/Playlist.java
// public class Playlist {
// 
//     private UUID id;
// 
//     private List<SignageStream> streams = Lists.newArrayList();
// 
//     private List<NewsFeed> newsFeeds = Lists.newArrayList();
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public void setId(UUID id) {
//         this.id = id;
//     }
// 
//     public List<SignageStream> getStreams() {
//         return streams;
//     }
// 
//     public void setStreams(List<SignageStream> streams) {
//         this.streams = streams;
//     }
// 
//     public List<NewsFeed> getNewsFeeds() {
//         return newsFeeds;
//     }
// 
//     public void setNewsFeeds(List<NewsFeed> newsFeeds) {
//         this.newsFeeds = newsFeeds;
//     }
// 
// }
// 
// Path: src/main/java/org/chorem/ecd/model/news/NewsFeed.java
// public class NewsFeed {
// 
//     private UUID id;
// 
//     private String name;
// 
//     private String url;
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public void setId(UUID id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getUrl() {
//         return url;
//     }
// 
//     public URL getParsedUrl() {
//         URL parsedUrl = null;
//         try {
//             parsedUrl = new URL(getUrl());
//         } catch (MalformedURLException e) {
//         }
//         return parsedUrl;
//     }
// 
//     public void setUrl(String url) {
//         this.url = url;
//     }
// }
// 
// Path: src/main/java/org/chorem/ecd/model/stream/SignageStream.java
// public class SignageStream {
// 
//     private UUID id;
// 
//     private String name;
// 
//     private Integer timing;
// 
//     private LocalDateTime creationDateTime;
// 
//     private LocalDateTime lastUpdateDateTime;
// 
//     private List<SignageStreamFrame> frames;
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public void setId(UUID id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public Integer getTiming() {
//         return timing;
//     }
// 
//     public void setTiming(Integer timing) {
//         this.timing = timing;
//     }
// 
//     public LocalDateTime getCreationDateTime() {
//         return creationDateTime;
//     }
// 
//     public void setCreationDateTime(LocalDateTime creationDateTime) {
//         this.creationDateTime = creationDateTime;
//     }
// 
//     public LocalDateTime getLastUpdateDateTime() {
//         return lastUpdateDateTime;
//     }
// 
//     public void setLastUpdateDateTime(LocalDateTime lastUpdateDateTime) {
//         this.lastUpdateDateTime = lastUpdateDateTime;
//     }
// 
//     public List<SignageStreamFrame> getFrames() {
//         return frames;
//     }
// 
//     public void setFrames(List<SignageStreamFrame> frames) {
//         this.frames = frames;
//     }
// }


// Path: src/main/java/org/chorem/ecd/dao/PlaylistDao.java
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.gson.reflect.TypeToken;
import org.chorem.ecd.model.Playlist;
import org.chorem.ecd.model.news.NewsFeed;
import org.chorem.ecd.model.stream.SignageStream;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.RecordMapper;
import org.jooq.Table;
import org.jooq.impl.DSL;
import org.jooq.util.postgres.PostgresDSL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.enterprise.context.ApplicationScoped;
import java.lang.reflect.Type;
import java.util.List;
import java.util.UUID;
import static org.chorem.ecd.mapping.tables.Playlist.PLAYLIST;
import static org.chorem.ecd.mapping.tables.SignageStream.SIGNAGE_STREAM;
import static org.chorem.ecd.mapping.tables.NewsFeed.NEWS_FEED;

package org.chorem.ecd.dao;




/**
 * @author Julien Gaston (gaston@codelutin.com)
 */
@ApplicationScoped
public class PlaylistDao extends AbstractDao<Playlist, UUID> {

    private static final Logger logger = LoggerFactory.getLogger(PlaylistDao.class);

    private final Type streamsListType = new TypeToken<List<SignageStream>>(){}.getType();