package fr.lyrgard.hexScape.gui.desktop.action; import java.awt.Component; import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import javax.swing.AbstractAction; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; import org.apache.commons.io.FileUtils; import fr.lyrgard.hexScape.bus.CoreMessageBus; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.message.ErrorMessage; import fr.lyrgard.hexScape.message.RestoreGameMessage; import fr.lyrgard.hexScape.model.CurrentUserInfo; import fr.lyrgard.hexScape.model.game.Game; public class ChooseGameAction extends AbstractAction { private static final long serialVersionUID = 6124817922902744899L; private static final ImageIcon icon = new ImageIcon(ChooseGameAction.class.getResource("/gui/icons/open.png")); private Component parent; public ChooseGameAction(Component parent) { super("restore a game", icon); this.parent = parent; } public void actionPerformed(ActionEvent paramActionEvent) { JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "Game save file", "hsg"); chooser.setFileFilter(filter); int returnVal = chooser.showOpenDialog(parent); if(returnVal == JFileChooser.APPROVE_OPTION) { final File mapFile = chooser.getSelectedFile(); String content; Game game = null; try { content = FileUtils.readFileToString(mapFile, StandardCharsets.UTF_8); game = Game.fromJson(content); RestoreGameMessage message = new RestoreGameMessage(game); CoreMessageBus.post(message); } catch (IOException e) { GuiMessageBus.post(new ErrorMessage(CurrentUserInfo.getInstance().getId(), "Error when trying to open the game save : " + e.getMessage())); } } } }