/* * Copyright (c) 2014 Dennis Fischer. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0+ * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: Dennis Fischer */ package de.chaosfisch.uploader.persistence.dao; import com.google.common.eventbus.EventBus; import com.google.inject.Inject; import de.chaosfisch.google.account.Account; import de.chaosfisch.google.youtube.playlist.Playlist; import de.chaosfisch.google.youtube.playlist.events.PlaylistAdded; import de.chaosfisch.google.youtube.playlist.events.PlaylistRemoved; import de.chaosfisch.google.youtube.playlist.events.PlaylistUpdated; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; class PlaylistDaoImpl implements IPlaylistDao { private final List<Playlist> playlists = new CopyOnWriteArrayList<>(); @Inject private EventBus eventBus; @Inject private IPersistenceService persistenceService; @Override public List<Playlist> getAll(final Account account) { final List<Playlist> result = new ArrayList<>(playlists.size()); for (final Playlist playlist : playlists) { if (playlist.getAccount().equals(account)) { result.add(playlist); } } return result; } @Override public Playlist get(final String id) { for (final Playlist playlist : playlists) { if (playlist.getId().equals(id)) { return playlist; } } return null; } @Override public List<Playlist> fetchByHidden(final Account account, final boolean hidden) { final List<Playlist> result = new ArrayList<>(playlists.size()); for (final Playlist playlist : playlists) { if (playlist.isHidden() == hidden && playlist.getAccount().equals(account)) { result.add(playlist); } } return result; } @Override public Playlist fetchByPKey(final String playlistKey) { for (final Playlist playlist : playlists) { if (playlist.getPkey().equals(playlistKey)) { return playlist; } } return null; } @Override public void setPlaylists(final List<Playlist> playlists) { this.playlists.clear(); this.playlists.addAll(playlists); } @Override public List<Playlist> getPlaylists() { return playlists; } @Override public void insert(final Playlist playlist) { playlist.setId(UUID.randomUUID().toString()); playlists.add(playlist); persistenceService.saveToStorage(); eventBus.post(new PlaylistAdded(playlist)); } @Override public void update(final Playlist playlist) { persistenceService.saveToStorage(); eventBus.post(new PlaylistUpdated(playlist)); } @Override public void delete(final Playlist playlist) { playlists.remove(playlist); persistenceService.saveToStorage(); eventBus.post(new PlaylistRemoved(playlist)); } }