| package com.intellij.remoteServer.impl.runtime; |
| |
| import com.intellij.openapi.application.ApplicationManager; |
| import com.intellij.openapi.application.ModalityState; |
| import com.intellij.remoteServer.configuration.RemoteServer; |
| import com.intellij.remoteServer.configuration.ServerConfiguration; |
| import com.intellij.remoteServer.runtime.ServerConnection; |
| import com.intellij.remoteServer.runtime.ServerConnectionManager; |
| import com.intellij.util.Alarm; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| /** |
| * @author nik |
| */ |
| public class ServerConnectionManagerImpl extends ServerConnectionManager { |
| |
| private final Map<RemoteServer<?>, ServerConnection> myConnections = new HashMap<RemoteServer<?>, ServerConnection>(); |
| private final ServerConnectionEventDispatcher myEventDispatcher = new ServerConnectionEventDispatcher(); |
| |
| @NotNull |
| @Override |
| public <C extends ServerConfiguration> ServerConnection getOrCreateConnection(@NotNull RemoteServer<C> server) { |
| ApplicationManager.getApplication().assertIsDispatchThread(); |
| ServerConnection connection = myConnections.get(server); |
| if (connection == null) { |
| connection = doCreateConnection(server, this); |
| myConnections.put(server, connection); |
| myEventDispatcher.fireConnectionCreated(connection); |
| } |
| return connection; |
| } |
| |
| @NotNull |
| @Override |
| public <C extends ServerConfiguration> ServerConnection createTemporaryConnection(@NotNull RemoteServer<C> server) { |
| return doCreateConnection(server, null); |
| } |
| |
| private <C extends ServerConfiguration> ServerConnection doCreateConnection(@NotNull RemoteServer<C> server, |
| ServerConnectionManagerImpl manager) { |
| ServerTaskExecutorImpl executor = new ServerTaskExecutorImpl(); |
| return new ServerConnectionImpl(server, server.getType().createConnector(server, executor), manager, getEventDispatcher()); |
| } |
| |
| @Nullable |
| @Override |
| public <C extends ServerConfiguration> ServerConnection getConnection(@NotNull RemoteServer<C> server) { |
| return myConnections.get(server); |
| } |
| |
| public void removeConnection(RemoteServer<?> server) { |
| ApplicationManager.getApplication().assertIsDispatchThread(); |
| myConnections.remove(server); |
| } |
| |
| public ServerConnectionEventDispatcher getEventDispatcher() { |
| return myEventDispatcher; |
| } |
| |
| @NotNull |
| @Override |
| public Collection<ServerConnection> getConnections() { |
| ApplicationManager.getApplication().assertIsDispatchThread(); |
| return Collections.unmodifiableCollection(myConnections.values()); |
| } |
| } |