package hr.fer.zemris.ecf.gui.display; import hr.fer.zemris.ecf.gui.Utils; import hr.fer.zemris.ecf.gui.model.log.ILog; import java.awt.event.ActionEvent; import java.io.File; import java.util.Scanner; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JOptionPane; /** * Object that handles incoming requests for result display. Method * displayResult is usually invoked when ECF Lab has generated a new log file. * * @author Domagoj * */ public class ResultProgressFrameDisplayer implements IResultDisplay { private ResultProgressFrame frame = null; private ILog logger = null; public ResultProgressFrameDisplayer(ILog logger) { super(); this.logger = logger; } @Override public void displayResult(String logFile) throws Exception { if (frame == null) { frame = ResultProgressFrame.getInstance(); } addComp(logFile); File f = new File(logFile + Utils.LOG_EXT); if (f.exists()) { Scanner sc = new Scanner(f); String line1 = sc.nextLine(); String path = sc.nextLine(); sc.close(); int num = Integer.parseInt(line1); int len = String.valueOf(num).length(); for (int i = 1; i <= num; i++) { addComp(Utils.addBeforeExtension(path, i, len)); } f.delete(); } frame.setVisible(true); } private void addComp(final String logFile) { JButton openButton = new JButton(new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { try { new FrameDisplayer().displayResult(logFile); } catch (Exception e1) { JOptionPane.showMessageDialog(frame, e1.getMessage(), "An error occured while reading log file", JOptionPane.WARNING_MESSAGE); e1.printStackTrace(); logger.log(e1); } } }); openButton.setText("Open"); JButton closeButton = new JButton(); final OpenResultPanel comp = new OpenResultPanel(logFile, openButton, closeButton); closeButton.setAction(new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { frame.remove(comp); frame.repaint(); } }); closeButton.setText("Close"); frame.add(comp); } }