/* * Vimplugin * * Copyright (c) 2007 by The Vimplugin Project. * * Released under the GNU General Public License * with ABSOLUTELY NO WARRANTY. * * See the file COPYING for more information. */ package org.vimplugin.listeners; import java.io.IOException; import org.vimplugin.VimEvent; import org.vimplugin.VimException; import org.vimplugin.VimPlugin; import org.vimplugin.VimServer; import org.vimplugin.editors.VimEditor; /** * Closes the editor window if the server was closed. */ public class ServerDisconnect implements IVimListener { /** * Disposes the {@link org.vimplugin.editors.VimEditor ViMEditor} on * "disconnect" or killed. * * @throws VimException when the VimConnection could not be closed (wraps IOException). */ public void handleEvent(VimEvent ve) throws VimException { String event = ve.getEvent(); if (event.equals("disconnect") || event.equals("killed")) { VimPlugin plugin = VimPlugin.getDefault(); VimServer server = plugin.getVimserver(ve.getConnection().getVimID()); for (final VimEditor veditor : server.getEditors()) { if (veditor != null) { if (event.equals("disconnect") || veditor.getBufferID() == ve.getBufferID()) { veditor.forceDispose(); } } } if (event.equals("disconnect") || server.getEditors().size() == 0){ try { ve.getConnection().close(); } catch (IOException e) { throw new VimException("could not close the vim connection", e); } plugin.stopVimServer(server.getID()); } } } }