package pipe.actions.gui;
import pipe.controllers.application.PipeApplicationController;
import pipe.utilities.gui.GuiUtils;
import uk.ac.imperial.pipe.parsers.UnparsableException;
import javax.swing.*;
import java.awt.FileDialog;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.File;
/**
* Opens a PNML Petri net
*/
@SuppressWarnings("serial")
public class OpenAction extends GuiAction {
/**
* Main PIPE application controller
*/
private final PipeApplicationController applicationController;
/**
* File dialog for selecting a Petri net to load
*/
private final FileDialog fileChooser;
/**
* Constructor
* @param applicationController Main PIPE application controller
* @param fileChooser file dialog responsible for choosing files to load
*/
public OpenAction(PipeApplicationController applicationController, FileDialog fileChooser) {
super("Open", "Open", KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
this.applicationController = applicationController;
this.fileChooser = fileChooser;
}
/**
* When this action is performed it shows the file dialog and processes the file selected for loading
* @param e event
*/
@Override
public void actionPerformed(ActionEvent e) {
fileChooser.setVisible(true);
for (File file : fileChooser.getFiles()) {
if (file.exists() && file.isFile() && file.canRead()) {
try {
applicationController.createNewTabFromFile(file);
} catch (UnparsableException e1) {
GuiUtils.displayErrorMessage(null, e1.getMessage());
}
} else {
String message = "File \"" + file.getName() + "\" does not exist.";
JOptionPane.showMessageDialog(null, message, "Warning", JOptionPane.WARNING_MESSAGE);
}
}
}
}