From: <kp...@us...> - 2011-08-28 17:29:40
|
Revision: 19861 http://jedit.svn.sourceforge.net/jedit/?rev=19861&view=rev Author: kpouer Date: 2011-08-28 17:29:34 +0000 (Sun, 28 Aug 2011) Log Message: ----------- added client list panel Modified Paths: -------------- plugins/RemoteControl/trunk/RemoteControl.props plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/RemoteServer.java Added Paths: ----------- plugins/RemoteControl/trunk/dockables.xml plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ClientVisitor.java plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ServerListener.java plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ui/ plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ui/ClientListPanel.java Modified: plugins/RemoteControl/trunk/RemoteControl.props =================================================================== --- plugins/RemoteControl/trunk/RemoteControl.props 2011-08-28 16:44:05 UTC (rev 19860) +++ plugins/RemoteControl/trunk/RemoteControl.props 2011-08-28 17:29:34 UTC (rev 19861) @@ -12,6 +12,11 @@ plugin.com.kpouer.jedit.remotecontrol.RemoteControlPlugin.jars=xstream.jar jettison.jar plugin.com.kpouer.jedit.remotecontrol.RemoteControlPlugin.usePluginHome=true +plugin.com.kpouer.jedit.remotecontrol.RemoteControlPlugin.menu=remotecontrol-clientlist + + +remotecontrol-clientlist.title=Remote Control +remotecontrol-clientlist.label=Remote Control remotecontrol.port=53348 remotecontrol.pincode=1234 remotecontrol.welcomeservice=challenge Added: plugins/RemoteControl/trunk/dockables.xml =================================================================== --- plugins/RemoteControl/trunk/dockables.xml (rev 0) +++ plugins/RemoteControl/trunk/dockables.xml 2011-08-28 17:29:34 UTC (rev 19861) @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<!DOCTYPE DOCKABLES SYSTEM "dockables.dtd"> +<DOCKABLES> + <DOCKABLE NAME="remotecontrol-clientlist"> + new com.kpouer.jedit.remotecontrol.ui.ClientListPanel(); + </DOCKABLE> +</DOCKABLES> Added: plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ClientVisitor.java =================================================================== --- plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ClientVisitor.java (rev 0) +++ plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ClientVisitor.java 2011-08-28 17:29:34 UTC (rev 19861) @@ -0,0 +1,30 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.remotecontrol; + +/** + * @author Matthieu Casanova + */ +public interface ClientVisitor +{ + void visit(RemoteClient remoteClient); +} Modified: plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/RemoteServer.java =================================================================== --- plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/RemoteServer.java 2011-08-28 16:44:05 UTC (rev 19860) +++ plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/RemoteServer.java 2011-08-28 17:29:34 UTC (rev 19861) @@ -24,6 +24,7 @@ import org.gjt.sp.jedit.EBMessage; import org.gjt.sp.util.Log; +import javax.swing.event.EventListenerList; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; @@ -32,6 +33,7 @@ import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; +import java.util.EventListener; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -55,12 +57,15 @@ private final jEditListener jEditListener; private Thread thread; + private final EventListenerList listeners; + public RemoteServer(int port) { this.port = port; LOCK = new Object(); clients = new HashMap<SocketChannel, RemoteClient>(); jEditListener = new jEditListener(this); + listeners = new EventListenerList(); } public jEditListener getjEditListener() @@ -169,6 +174,7 @@ } } clients.clear(); + fireServerClosed(); } thread = null; Log.log(Log.MESSAGE, this, "RemoteServer closed"); @@ -188,6 +194,7 @@ { RemoteClient client = new RemoteClient(sChannel); clients.put(sChannel, client); + fireClientConnected(client); Log.log(Log.MESSAGE, this, "CLient connected : " + client); } catch (Exception e) @@ -217,6 +224,7 @@ public void removeClient(SocketChannel channel) { RemoteClient removed = clients.remove(channel); + fireClientDisconnected(removed); Log.log(Log.MESSAGE, this, "Client disconnected : " + removed); try { @@ -227,4 +235,64 @@ Log.log(Log.ERROR, this, e, e); } } + + public void visitClients(ClientVisitor visitor) + { + synchronized (clients) + { + for (RemoteClient remoteClient : clients.values()) + { + visitor.visit(remoteClient); + } + } + } + + public void addServerListener(ServerListener listener) + { + listeners.add(ServerListener.class, listener); + } + + public void removeServerListener(ServerListener listener) + { + listeners.remove(EventListener.class, listener); + } + + public void fireClientConnected(RemoteClient client) + { + ServerListener[] list; + synchronized (listeners) + { + list = listeners.getListeners(ServerListener.class); + } + for (ServerListener clientListener : list) + { + clientListener.clientConnected(client); + } + } + + public void fireClientDisconnected(RemoteClient client) + { + ServerListener[] list; + synchronized (listeners) + { + list = listeners.getListeners(ServerListener.class); + } + for (ServerListener clientListener : list) + { + clientListener.clientDisconnected(client); + } + } + + public void fireServerClosed() + { + ServerListener[] list; + synchronized (listeners) + { + list = listeners.getListeners(ServerListener.class); + } + for (ServerListener clientListener : list) + { + clientListener.serverClosed(); + } + } } Added: plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ServerListener.java =================================================================== --- plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ServerListener.java (rev 0) +++ plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ServerListener.java 2011-08-28 17:29:34 UTC (rev 19861) @@ -0,0 +1,34 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.remotecontrol; + +import java.util.EventListener; + +/** + * @author Matthieu Casanova + */ +public interface ServerListener extends EventListener +{ + void clientConnected(RemoteClient client); + void clientDisconnected(RemoteClient client); + void serverClosed(); +} Added: plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ui/ClientListPanel.java =================================================================== --- plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ui/ClientListPanel.java (rev 0) +++ plugins/RemoteControl/trunk/src/com/kpouer/jedit/remotecontrol/ui/ClientListPanel.java 2011-08-28 17:29:34 UTC (rev 19861) @@ -0,0 +1,144 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 jEdit contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.remotecontrol.ui; + +import com.kpouer.jedit.remotecontrol.ClientVisitor; +import com.kpouer.jedit.remotecontrol.RemoteClient; +import com.kpouer.jedit.remotecontrol.RemoteControlPlugin; +import com.kpouer.jedit.remotecontrol.ServerListener; + +import javax.swing.*; +import javax.swing.table.AbstractTableModel; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Matthieu Casanova + */ +public class ClientListPanel extends JPanel implements ServerListener +{ + + private ClientTableModel tableModel; + + public ClientListPanel() + { + super(new BorderLayout()); + tableModel = new ClientTableModel(); + JTable table = new JTable(tableModel); + table.setTableHeader(null); + add(new JScrollPane(table)); + } + + @Override + public void addNotify() + { + RemoteControlPlugin.server.visitClients(new ClientVisitor() + { + @Override + public void visit(RemoteClient remoteClient) + { + tableModel.clients.add(remoteClient); + } + }); + RemoteControlPlugin.server.addServerListener(this); + super.addNotify(); + } + + @Override + public void removeNotify() + { + RemoteControlPlugin.server.removeServerListener(this); + super.removeNotify(); + tableModel.clients.clear(); + } + + @Override + public void clientConnected(final RemoteClient client) + { + EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + tableModel.clients.add(client); + tableModel.fireTableDataChanged(); + } + }); + } + + @Override + public void clientDisconnected(final RemoteClient client) + { + EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + tableModel.clients.remove(client); + tableModel.fireTableDataChanged(); + } + }); + } + + @Override + public void serverClosed() + { + EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + tableModel.clients.clear(); + tableModel.fireTableDataChanged(); + } + }); + } + + private class ClientTableModel extends AbstractTableModel + { + private List<RemoteClient> clients; + + private ClientTableModel() + { + clients = new ArrayList<RemoteClient>(); + } + + @Override + public int getRowCount() + { + return clients.size(); + } + + @Override + public int getColumnCount() + { + return 1; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) + { + return clients.get(rowIndex).toString(); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |