package com.universalbits.conorganizer.badger.ui;
import com.universalbits.conorganizer.badger.control.BadgeSource;
import com.universalbits.conorganizer.badger.model.BadgeInfo;
import javax.swing.*;
import java.lang.reflect.InvocationTargetException;
class UIBadgeSource implements BadgeSource {
private final BadgeListModel pendingListModel;
private final BadgeListModel historyListModel;
private final BadgeListModel problemListModel;
/**
* @param pendingListModel Pending badges
* @param problemListModel Problem badges
* @param historyListModel History badges
*/
UIBadgeSource(BadgeListModel pendingListModel, BadgeListModel problemListModel, BadgeListModel historyListModel) {
this.pendingListModel = pendingListModel;
this.problemListModel = problemListModel;
this.historyListModel = historyListModel;
}
@Override
public BadgeInfo getBadgeToPrint() {
final BadgeInfo badgeInfo[] = new BadgeInfo[1];
while (badgeInfo[0] == null) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
if (pendingListModel.getSize() > 0) {
badgeInfo[0] = pendingListModel.remove(0);
}
}
});
if (badgeInfo[0] == null) {
Thread.sleep(100);
}
} catch (InvocationTargetException | InterruptedException e) {
e.printStackTrace();
}
}
return badgeInfo[0];
}
@Override
public void reportProblem(final BadgeInfo badgeInfo) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
problemListModel.addElement(badgeInfo);
}
});
}
@Override
public void reportDone(final BadgeInfo badgeInfo) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
historyListModel.addElement(badgeInfo);
}
});
}
}