package org.korsakow.ide.ui.controller.action.interf; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import org.dsrg.soenea.domain.MapperException; import org.dsrg.soenea.domain.command.CommandException; import org.dsrg.soenea.domain.mapper.DomainObjectNotFoundException; import org.korsakow.domain.CommandExecutor; import org.korsakow.domain.command.ExportInterchangeInterfaceCommand; import org.korsakow.domain.command.Request; import org.korsakow.domain.interf.IInterface; import org.korsakow.domain.mapper.input.InterfaceInputMapper; import org.korsakow.ide.Application; import org.korsakow.ide.ui.components.tree.KNode; import org.korsakow.ide.ui.components.tree.ResourceNode; import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTable; public class ExportInterfaceAction implements ActionListener { private final ResourceTreeTable resourceTreeTable; public ExportInterfaceAction(ResourceTreeTable resourceTreeTable) { this.resourceTreeTable = resourceTreeTable; } public void actionPerformed(ActionEvent event) { Application app = Application.getInstance(); KNode selectedNode = resourceTreeTable.getSelectedNode(); if (selectedNode == null) return; if (selectedNode instanceof ResourceNode == false) return; ResourceNode resourceNode = (ResourceNode)selectedNode; long id = resourceNode.getResourceId(); IInterface interf = null; try { interf = InterfaceInputMapper.map(id); } catch (DomainObjectNotFoundException e) { return; } catch (MapperException e) { app.showUnhandledErrorDialog("Error exporting interface", e); } String defaultFilename = interf.getName().replaceAll("[ ./\\:*?\"'<>|!]", ""); // TODO: whitelist instead if (defaultFilename.trim().length() == 0) defaultFilename = "interface"; defaultFilename += ".kif"; File file = app.showFileSaveDialog(resourceTreeTable, new File(defaultFilename)); if (file == null) return; Request request = new Request(); request.set("filename", file.getAbsolutePath()); request.set("interface_id", interf.getId()); try { CommandExecutor.executeCommand(ExportInterchangeInterfaceCommand.class, request); } catch (CommandException e) { app.showUnhandledErrorDialog("Error exporting interface", e); } } }