package net.codjo.segmentation.gui.progress; import net.codjo.gui.toolkit.text.AntialiasedJLabel; import net.codjo.workflow.common.message.JobAudit; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; /** * */ public class FamilyProgressGui { private JProgressBar progressBar; private JPanel main; private AntialiasedJLabel familyLabel; private JLabel deleteLabel; private JLabel paginateLabel; private JLabel computeLabel; private Status deleteStatus = Status.WAITING; private Status paginateStatus = Status.WAITING; private Status computeStatus = Status.WAITING; public FamilyProgressGui(String familyName) { familyLabel.setText("<html>Famille <i>" + familyName + "</i>"); } public JPanel getMain() { return main; } public void receivePostAudit(JobAudit audit) { boolean auditOk = audit.getStatus() == JobAudit.Status.OK; closeStep(deleteLabel, deleteStatus, auditOk); closeStep(paginateLabel, paginateStatus, auditOk); closeStep(computeLabel, computeStatus, auditOk); progressBar.setValue(progressBar.getMaximum()); } public void setDeleteStatus(boolean isLast) { if (!isLast) { deleteStatus = Status.RUNNING; deleteLabel.setIcon(getRunningIcon()); } else { deleteStatus = Status.FINISHED; deleteLabel.setIcon(getFinishedIcon()); } } public void setPaginateStatus(int count, boolean isLast) { if (isLast) { paginateLabel.setIcon(getFinishedIcon()); paginateStatus = Status.FINISHED; } else if (paginateStatus == Status.WAITING) { paginateLabel.setIcon(getRunningIcon()); paginateStatus = Status.RUNNING; } progressBar.setMaximum(count); } public void declareOnePageHasBeenComputed() { if (computeStatus == Status.WAITING) { computeLabel.setIcon(getRunningIcon()); computeStatus = Status.RUNNING; } progressBar.setValue(progressBar.getValue() + 1); if (paginateStatus == Status.FINISHED && progressBar.getValue() == progressBar.getMaximum()) { computeStatus = Status.FINISHED; computeLabel.setIcon(getFinishedIcon()); } } private ImageIcon getFinishedIcon() { return new ImageIcon(getClass().getResource("finished.gif")); } private void closeStep(JLabel label, Status status, boolean auditOk) { if (Status.FINISHED == status) { return; } label.setIcon(auditOk ? getFinishedIcon() : getWarningIcon()); } private ImageIcon getWarningIcon() { return new ImageIcon(getClass().getResource("warning.gif")); } private ImageIcon getRunningIcon() { return new ImageIcon(getClass().getResource("running.gif")); } private enum Status { WAITING, RUNNING, FINISHED; } }