package br.ufmg.dcc.labsoft.aserg.modularitycheck.distribution.map; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JInternalFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import br.ufmg.dcc.labsoft.aserg.modularitycheck.distribution.control.AbstractController; public abstract class AbstractView extends JInternalFrame { private static final long serialVersionUID = 4520698614926883560L; protected Thread progressMonitorThread; protected javax.swing.JProgressBar progressBar; protected javax.swing.JButton startExecutionButton; protected AbstractController controller; public AbstractView() { setVisible(true); setClosable(true); setResizable(false); setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); progressBar = new javax.swing.JProgressBar(); progressBar.setStringPainted(true); startExecutionButton = new javax.swing.JButton(); startExecutionButton.setText("Start"); } public abstract void refresh(); protected class PanelUpdater implements Runnable { private double value; public PanelUpdater() {} @Override public void run() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { while (progressMonitorThread != null && progressMonitorThread.isAlive()) { try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } value = ((double) controller.numCompletedStages() / controller.numStages()) * 100; progressBar.setValue((int) value); progressBar.setString(controller.getProgressMessage()); progressBar.repaint(); } if (!controller.getFailedProjects().isEmpty()) { StringBuilder sb = new StringBuilder(); for (File f : controller.getFailedProjects()) { sb.append("* ").append(f.getName()); sb.append("\n"); } JOptionPane.showMessageDialog(null, "Projects Failed:\nCause:\n" + sb.toString(), "Error", JOptionPane.ERROR_MESSAGE); } startExecutionButton.setText("Start"); } }); } } }