Java tutorial
/* Copyright (C) 2011 Josh Schreuder This file is part of SMSnatcher. SMSnatcher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. SMSnatcher is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with SMSnatcher. If not, see <http://www.gnu.org/licenses/>. */ package controller; import javax.swing.SwingWorker; import model.Logger; import model.LyricWikiScraper; import model.MP3TagHandler; import model.SongMeaningsScraper; import model.SongTableModel; import org.apache.commons.lang3.text.WordUtils; import view.MainFrame; public class GetLyricsSwingWorker extends SwingWorker<String, Object> { private int numLyricsChanged = 0; protected String doInBackground() throws Exception { numLyricsChanged = 0; MainFrame.getSongTable().setEnabled(false); MainFrame.getOpenButton().setEnabled(false); MainFrame.getGoButton().setEnabled(false); SongTableModel model = ((SongTableModel) MainFrame.getSongTable().getModel()); MainFrame.getProgressBar().setMinimum(0); MainFrame.getProgressBar().setValue(0); MainFrame.getProgressBar().setMaximum(model.getRowCount()); for (int i = 0; i < model.getRowCount(); i++) { String lyricsColumn = model.getValueAt(i, 2); MainFrame.getSongTable().scrollRectToVisible(MainFrame.getSongTable().getCellRect(i, 0, true)); MainFrame.getSongTable().getSelectionModel().setSelectionInterval(i, i); // If lyrics are blank if (lyricsColumn.compareTo("") == 0) { Logger.LogToStatusBar("Getting lyrics " + (i + 1) + " of " + model.getRowCount()); String artist = model.getValueAt(i, 0); artist = artist.replace("[", ""); artist = artist.replace("]", ""); artist = WordUtils.capitalize(artist); String track = model.getValueAt(i, 1); track = track.replace("[", ""); track = track.replace("]", ""); track = WordUtils.capitalize(track); if (MainFrame.useLyricWiki() == true) { String lyrics = LyricWikiScraper.getLyrics(artist, track); // If artist has an & sign, try replacing with 'and' and search again for more results if (artist.contains("&") && (lyrics.compareTo("") == 0 || lyrics != null)) { Logger.LogToStatusBar("Artist contains &, searching again with 'And' instead"); artist = artist.replace("&", " And "); lyrics = LyricWikiScraper.getLyrics(artist, track); } if (lyrics != null && lyrics.compareTo("") != 0) { model.setValueAt(lyrics, i, 2); MP3TagHandler.saveLyrics(lyrics, model.getValueAt(i, 3)); numLyricsChanged += 1; } } else { String lyrics = SongMeaningsScraper.getLyrics(artist, track); // If artist has an & sign, try replacing with 'and' and search again for more results if (artist.contains("&") && (lyrics.compareTo("") == 0 || lyrics != null)) { Logger.LogToStatusBar("Artist contains &, searching again with 'And' instead"); artist = artist.replace("&", " And "); lyrics = SongMeaningsScraper.getLyrics(artist, track); } if (lyrics.compareTo("") != 0) { model.setValueAt(lyrics, i, 2); MP3TagHandler.saveLyrics(lyrics, model.getValueAt(i, 3)); numLyricsChanged += 1; } } } // Lyrics are not blank else { // If overwriteLyrics is set, we are overwriting them anyway if (MainFrame.overwriteLyrics() == true) { Logger.LogToStatusBar("Getting lyrics " + (i + 1) + " of " + model.getRowCount()); String artist = model.getValueAt(i, 0); artist = artist.replace("[", ""); artist = artist.replace("]", ""); String track = model.getValueAt(i, 1); track = track.replace("[", ""); track = track.replace("]", ""); if (MainFrame.useLyricWiki() == true) { String lyrics = LyricWikiScraper.getLyrics(artist, track); // If artist has an & sign, try replacing with 'and' and search again for more results if (artist.contains("&") && (lyrics.compareTo("") == 0 || lyrics != null)) { Logger.LogToStatusBar("Artist contains &, searching again with 'And' instead"); artist = artist.replace("&", "And"); lyrics = LyricWikiScraper.getLyrics(artist, track); } if (lyrics != null && lyrics.compareTo("") != 0) { model.setValueAt(lyrics, i, 2); MP3TagHandler.saveLyrics(lyrics, model.getValueAt(i, 3)); numLyricsChanged += 1; } } else { String lyrics = SongMeaningsScraper.getLyrics(artist, track); // If artist has an & sign, try replacing with 'and' and search again for more results if (artist.contains("&") && (lyrics.compareTo("") == 0 || lyrics != null)) { Logger.LogToStatusBar("Artist contains &, searching again with 'And' instead"); artist = artist.replace("&", "And"); lyrics = SongMeaningsScraper.getLyrics(artist, track); } if (lyrics.compareTo("") != 0) { model.setValueAt(lyrics, i, 2); MP3TagHandler.saveLyrics(lyrics, model.getValueAt(i, 3)); numLyricsChanged += 1; } } } } int value = MainFrame.getProgressBar().getValue() + 1; if (value > MainFrame.getProgressBar().getMaximum()) { value = MainFrame.getProgressBar().getMaximum(); } MainFrame.getProgressBar().setValue(value); } MainFrame.getOpenButton().setEnabled(true); MainFrame.getGoButton().setEnabled(true); MainFrame.getSongTable().setEnabled(true); Logger.LogToStatusBar("Done getting lyrics (changed " + numLyricsChanged + " lyrics)"); // TODO: Resolve artist / song mismatches return null; } }