package ch.retorte.intervalmusiccompositor.ui.audiofilelist;
import ch.retorte.intervalmusiccompositor.commons.MessageFormatBundle;
import ch.retorte.intervalmusiccompositor.messagebus.DebugMessage;
import ch.retorte.intervalmusiccompositor.spi.decoder.AudioFileDecoder;
import ch.retorte.intervalmusiccompositor.spi.messagebus.MessageProducer;
import com.google.common.collect.Lists;
import javafx.stage.FileChooser;
import javafx.stage.Window;
import java.io.File;
import java.util.List;
import java.util.ResourceBundle;
import java.util.stream.Collectors;
import static com.google.common.collect.Lists.newArrayList;
/**
* Displays a file chooser with filter targeting only supported music files.
*/
public class MusicFileChooser {
private MessageProducer messageProducer;
private MessageFormatBundle messageFormatBundle;
private List<AudioFileDecoder> audioFileDecoders;
public MusicFileChooser(MessageProducer messageProducer, MessageFormatBundle messageFormatBundle, List<AudioFileDecoder> audioFileDecoders) {
this.messageProducer = messageProducer;
this.messageFormatBundle = messageFormatBundle;
this.audioFileDecoders = audioFileDecoders;
}
public List<File> chooseFileIn(Window window) {
FileChooser chooser = new FileChooser();
chooser.setTitle(messageFormatBundle.getString("ui.form.file_chooser.title"));
FileChooser.ExtensionFilter allFilesExtensionFilter = new FileChooser.ExtensionFilter(messageFormatBundle.getString("ui.form.file_chooser.filter.all_files"), "*");
FileChooser.ExtensionFilter musicFileExtensionFilter = new FileChooser.ExtensionFilter(messageFormatBundle.getString("ui.form.file_chooser.filter.music_files"), createMusicFileExtensionList());
chooser.getExtensionFilters().addAll(musicFileExtensionFilter, allFilesExtensionFilter);
chooser.setSelectedExtensionFilter(musicFileExtensionFilter);
messageProducer.send(new DebugMessage(this, "Opening file dialog with filter: " + musicFileExtensionFilter.getExtensions()));
List<File> result = chooser.showOpenMultipleDialog(window);
if (result == null) {
messageProducer.send(new DebugMessage(this, "Aborted."));
return newArrayList();
}
else {
messageProducer.send(new DebugMessage(this, "Chose files: " + result));
return result;
}
}
private List<String> createMusicFileExtensionList() {
List<String> result = newArrayList();
for (AudioFileDecoder d : audioFileDecoders) {
result.addAll(d.getExtensions().stream().map(extension -> "*." + extension).collect(Collectors.toList()));
}
return result;
}
}