package org.korsakow.ide.ui.controller.action.interf; import java.io.CharConversionException; import java.io.File; import java.io.FilenameFilter; import org.apache.log4j.Logger; import org.dsrg.soenea.domain.command.CommandException; import org.dsrg.soenea.service.Registry; import org.korsakow.domain.CommandExecutor; import org.korsakow.domain.command.ImportInterchangeInterfaceCommand; import org.korsakow.domain.command.Request; import org.korsakow.domain.command.Response; import org.korsakow.domain.interf.IInterface; import org.korsakow.ide.Application; import org.korsakow.ide.lang.LanguageBundle; import org.korsakow.ide.ui.components.tree.ResourceNode; import org.korsakow.ide.ui.controller.action.AbstractAction; import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTableModel; import org.korsakow.ide.util.FileUtil; import org.korsakow.ide.util.Util; public class ImportInterfaceAction extends AbstractAction { private static String _defaultExtension = null; public static String getDefaultExtension() { try { if (_defaultExtension == null) { _defaultExtension = Registry.getProperty("defaultInterchangeInterfaceExtension"); } } catch (Exception e) { _defaultExtension = "kif"; } return _defaultExtension; } public ImportInterfaceAction() { } @Override public void performAction() { Application app = Application.getInstance(); File file = app.showFileOpenDialog(app.getProjectExplorer(), new File("interface.kif"), null, new InterchangeFilenameFilter()); if (file == null) return; try { doImport(file); } catch (CommandException e) { Throwable cause = Util.getRootCause(e); if (cause instanceof CharConversionException) app.showHandledErrorDialog(LanguageBundle.getString("general.errors.invalidinterfacefile.title"), LanguageBundle.getString("general.errors.invalidinterfacefile.message")); else app.showUnhandledErrorDialog("Error importing interface", e); } } public void doImport(File file) throws CommandException { Application app = Application.getInstance(); Logger.getLogger(ImportInterfaceAction.class).info("ImportInterfaceAction: " + file.getAbsolutePath()); Request request = new Request(); request.set("filename", file.getAbsolutePath()); Response response = new Response(); CommandExecutor.executeCommand(ImportInterchangeInterfaceCommand.class, request, response); IInterface domain = (IInterface)response.get("interface"); ResourceTreeTableModel model = Application.getInstance().getProjectExplorer().getResourceBrowser().getResourceTreeTable().getTreeTableModel(); model.appendNode( ResourceNode.create( domain ), model.getRoot() ); Application.getInstance().notifyResourceAdded( domain ); } private final class InterchangeFilenameFilter implements FilenameFilter { public InterchangeFilenameFilter() { } public boolean accept(File dir, String name) { return getDefaultExtension().equals(FileUtil.getFileExtension(name)); } } }