package com.sleazyweasel.applescriptifier;
import com.sleazyweasel.applescriptifier.preferences.MuseControllerPreferences;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MusicPlayerSupplier implements MusicPlayer {
private final Map<Application, MusicPlayer> suppliers = new HashMap<Application, MusicPlayer>();
private final List<MusicPlayerStateChangeListener> listeners = new ArrayList<MusicPlayerStateChangeListener>();
private Application currentApplication;
public void addMusicPlayer(Application application, MusicPlayer musicPlayer) {
suppliers.put(application, musicPlayer);
}
public void setCurrentApplication(Application currentApplication) {
MusicPlayer oldPlayer = getCurrentMusicPlayer();
if (oldPlayer != null) {
for (MusicPlayerStateChangeListener listener : listeners) {
oldPlayer.removeListener(listener);
}
}
this.currentApplication = currentApplication;
MusicPlayer newPlayer = getCurrentMusicPlayer();
if (newPlayer != null) {
for (MusicPlayerStateChangeListener listener : listeners) {
newPlayer.addListener(listener);
}
}
}
@Override
public void removeListener(MusicPlayerStateChangeListener listener) {
listeners.remove(listener);
MusicPlayer currentMusicPlayer = getCurrentMusicPlayer();
if (currentMusicPlayer != null) {
currentMusicPlayer.removeListener(listener);
}
}
@Override
public void addListener(MusicPlayer.MusicPlayerStateChangeListener listener) {
listeners.add(listener);
MusicPlayer currentMusicPlayer = getCurrentMusicPlayer();
if (currentMusicPlayer != null) {
currentMusicPlayer.addListener(listener);
}
}
private MusicPlayer getCurrentMusicPlayer() {
return suppliers.get(currentApplication);
}
public void volumeUp() {
getCurrentMusicPlayer().volumeUp();
}
public void bounce() {
getCurrentMusicPlayer().bounce();
}
public void thumbsDown() {
getCurrentMusicPlayer().thumbsDown();
}
public void next() {
getCurrentMusicPlayer().next();
}
public void playPause() {
getCurrentMusicPlayer().playPause();
}
public boolean isConfigured() {
return getCurrentMusicPlayer().isConfigured();
}
@Override
public boolean isAuthorized() {
return getCurrentMusicPlayer().isAuthorized();
}
@Override
public void sleep() {
getCurrentMusicPlayer().sleep();
}
@Override
public void setVolume(double volume) {
getCurrentMusicPlayer().setVolume(volume);
}
public boolean isPlaying() {
return getCurrentMusicPlayer().isPlaying();
}
public void initializeFromSavedUserState(MuseControllerPreferences preferences) {
getCurrentMusicPlayer().initializeFromSavedUserState(preferences);
}
public void activate() {
getCurrentMusicPlayer().activate();
}
public void askToChooseStation() {
getCurrentMusicPlayer().askToChooseStation();
}
public void close() {
getCurrentMusicPlayer().close();
}
public void cancelStationSelection() {
getCurrentMusicPlayer().cancelStationSelection();
}
public MusicPlayerState getState() {
return getCurrentMusicPlayer().getState();
}
public void selectStation(Integer stationNumber) {
getCurrentMusicPlayer().selectStation(stationNumber);
}
public void volumeDown() {
getCurrentMusicPlayer().volumeDown();
}
public void saveConfig(String username, char[] password) throws IOException {
getCurrentMusicPlayer().saveConfig(username, password);
}
public void thumbsUp() {
getCurrentMusicPlayer().thumbsUp();
}
public void previous() {
getCurrentMusicPlayer().previous();
}
}