1 /* 2 * aTunes 3 * Copyright (C) Alex Aranda, Sylvain Gaudard and contributors 4 * 5 * See http://www.atunes.org/wiki/index.php?title=Contributing for information about contributors 6 * 7 * http://www.atunes.org 8 * http://sourceforge.net/projects/atunes 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License 12 * as published by the Free Software Foundation; either version 2 13 * of the License, or (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 */ 20 21 package net.sourceforge.atunes.kernel.modules.radio; 22 23 import java.util.ArrayList; 24 import java.util.Collections; 25 import java.util.List; 26 27 import net.sourceforge.atunes.kernel.AbstractHandler; 28 import net.sourceforge.atunes.model.IDialogFactory; 29 import net.sourceforge.atunes.model.INavigationHandler; 30 import net.sourceforge.atunes.model.INavigationView; 31 import net.sourceforge.atunes.model.IRadio; 32 import net.sourceforge.atunes.model.IRadioDialog; 33 import net.sourceforge.atunes.model.IRadioHandler; 34 import net.sourceforge.atunes.model.IStateService; 35 import net.sourceforge.atunes.utils.Logger; 36 37 /** 38 * The Class RadioHandler. 39 * 40 * @author sylvain 41 */ 42 public final class RadioHandler extends AbstractHandler implements 43 IRadioHandler { 44 45 private List<IRadio> radios = new ArrayList<IRadio>(); 46 47 private INavigationView radioNavigationView; 48 49 private IDialogFactory dialogFactory; 50 51 /** 52 * @param dialogFactory 53 */ setDialogFactory(final IDialogFactory dialogFactory)54 public void setDialogFactory(final IDialogFactory dialogFactory) { 55 this.dialogFactory = dialogFactory; 56 } 57 58 /** 59 * @param radioNavigationView 60 */ setRadioNavigationView(final INavigationView radioNavigationView)61 public void setRadioNavigationView(final INavigationView radioNavigationView) { 62 this.radioNavigationView = radioNavigationView; 63 } 64 65 @Override createRadio(final String name, final String url, final String label)66 public IRadio createRadio(final String name, final String url, 67 final String label) { 68 return new Radio(name, url, label); 69 } 70 71 @Override addRadio()72 public void addRadio() { 73 IRadioDialog dialog = this.dialogFactory.newDialog(IRadioDialog.class); 74 dialog.showDialog(); 75 IRadio radio = dialog.getRadio(); 76 if (radio != null) { 77 addRadio(radio); 78 } 79 } 80 81 @Override addRadio(final IRadio radio)82 public void addRadio(final IRadio radio) { 83 Logger.info("Adding radio"); 84 if (radio != null && !getRadios().contains(radio)) { 85 getRadios().add(radio); 86 } 87 Collections.sort(getRadios(), new RadioComparator()); 88 getBean(INavigationHandler.class).refreshView(this.radioNavigationView); 89 persistRadios(); 90 } 91 persistRadios()92 private void persistRadios() { 93 getBean(IStateService.class).persistRadioCache(getRadios()); 94 } 95 96 @Override getRadios()97 public List<IRadio> getRadios() { 98 return this.radios; 99 } 100 101 @Override getRadios(final String label)102 public List<IRadio> getRadios(final String label) { 103 return new ArrayList<IRadio>(getRadios()); 104 } 105 106 @Override getRadioLabels()107 public List<String> getRadioLabels() { 108 List<String> result = new ArrayList<String>(); 109 // Read labels from user radios 110 for (IRadio radio : getRadios()) { 111 String label = radio.getLabel(); 112 if (!result.contains(label)) { 113 result.add(label); 114 } 115 } 116 return result; 117 } 118 119 @Override removeRadios(final List<IRadio> radios)120 public void removeRadios(final List<IRadio> radios) { 121 Logger.info("Removing radios"); 122 for (IRadio radio : radios) { 123 getRadios().remove(radio); 124 } 125 getBean(INavigationHandler.class).refreshView(this.radioNavigationView); 126 persistRadios(); 127 } 128 129 @Override removeRadio(final IRadio radio)130 public void removeRadio(final IRadio radio) { 131 removeRadios(Collections.singletonList(radio)); 132 } 133 134 @Override setLabel(final List<IRadio> radioList, final String label)135 public void setLabel(final List<IRadio> radioList, final String label) { 136 for (IRadio r : radioList) { 137 r.setLabel(label); 138 } 139 persistRadios(); 140 } 141 142 @Override replace(final IRadio radio, final IRadio newRadio)143 public void replace(final IRadio radio, final IRadio newRadio) { 144 getRadios().remove(radio); 145 addRadio(newRadio); 146 } 147 148 @Override getRadioIfLoaded(final String url)149 public IRadio getRadioIfLoaded(final String url) { 150 // Check in user radios 151 for (IRadio radio : getRadios()) { 152 if (radio.getUrl().equalsIgnoreCase(url)) { 153 return radio; 154 } 155 } 156 return null; 157 } 158 159 @Override showRadioBrowser()160 public void showRadioBrowser() { 161 getBean(RadioBrowserDialogController.class).showRadioBrowser(); 162 } 163 164 @Override editRadio(final IRadio radio)165 public IRadio editRadio(final IRadio radio) { 166 IRadioDialog dialog = this.dialogFactory.newDialog(IRadioDialog.class); 167 dialog.setRadio(radio); 168 dialog.showDialog(); 169 return dialog.getRadio(); 170 } 171 172 /** 173 * @param radios 174 */ setRadios(final List<IRadio> radios)175 void setRadios(final List<IRadio> radios) { 176 this.radios = radios; 177 } 178 } 179