blob: 283bbf80a1c3c8c8669ca63ea338aa8690c3f1d3 [file] [log] [blame]
package com.intellij.remoteServer.impl.runtime.ui;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowAnchor;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.remoteServer.configuration.RemoteServer;
import com.intellij.remoteServer.configuration.RemoteServerListener;
import com.intellij.remoteServer.configuration.RemoteServersManager;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
import icons.RemoteServersIcons;
import org.jetbrains.annotations.NotNull;
/**
* @author michael.golubev
*/
public class ServersToolWindow {
public static final String ID = "Application Servers";
private final Project myProject;
private final ToolWindow myToolWindow;
public ServersToolWindow(final Project project) {
myProject = project;
for (RemoteServersViewContributor contributor : RemoteServersViewContributor.EP_NAME.getExtensions()) {
contributor.setupAvailabilityListener(project, new Runnable() {
@Override
public void run() {
updateWindowAvailable(true);
}
});
}
myProject.getMessageBus().connect().subscribe(RemoteServerListener.TOPIC, new RemoteServerListener() {
@Override
public void serverAdded(@NotNull RemoteServer<?> server) {
updateWindowAvailable(true);
}
@Override
public void serverRemoved(@NotNull RemoteServer<?> server) {
updateWindowAvailable(false);
}
});
myToolWindow = ToolWindowManager.getInstance(project).registerToolWindow(ID, false,
ToolWindowAnchor.BOTTOM);
myToolWindow.setIcon(RemoteServersIcons.ServersToolWindow);
final ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
final ServersToolWindowContent serversContent = new ServersToolWindowContent(project);
Content content = contentFactory.createContent(serversContent.getMainPanel(), null, false);
Disposer.register(content, serversContent);
myToolWindow.getContentManager().addContent(content);
updateWindowAvailable(false);
}
private void updateWindowAvailable(boolean showIfAvailable) {
boolean available = isAvailable();
boolean doShow = !myToolWindow.isAvailable() && available;
if (myToolWindow.isAvailable() && !available) {
myToolWindow.hide(null);
}
myToolWindow.setAvailable(available, null);
if (showIfAvailable && doShow) {
myToolWindow.show(null);
}
}
private boolean isAvailable() {
if (!RemoteServersManager.getInstance().getServers().isEmpty()) {
return true;
}
for (RemoteServersViewContributor contributor : RemoteServersViewContributor.EP_NAME.getExtensions()) {
if (contributor.canContribute(myProject)) {
return true;
}
}
return false;
}
}