package magic.ui.widget.deck.stats; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.CancellationException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import magic.data.stats.MagicStats; import magic.model.MagicDeck; public class PwlWorker extends SwingWorker<String, Void> { private static final Logger LOGGER = Logger.getLogger(PwlWorker.class.getName()); private final MagicDeck deckCopy; private final List<IPwlWorkerListener> listeners = new ArrayList<>(); public PwlWorker(MagicDeck deck) { deckCopy = new MagicDeck(deck); } public void setListeners(IPwlWorkerListener... newListeners) { listeners.clear(); listeners.addAll(Arrays.asList(newListeners)); } @Override protected String doInBackground() throws Exception { return MagicStats.getPlayedWonLost(deckCopy); } @Override protected void done() { try { final String pwl = get(); for (IPwlWorkerListener listener : listeners) { SwingUtilities.invokeLater(() -> { listener.setPlayedWonLost(pwl); }); } } catch (CancellationException ex) { LOGGER.log(Level.INFO, "pwlWorker cancelled."); } catch (Exception ex) { LOGGER.log(Level.SEVERE, null, ex); } } }