package org.ovirt.engine.ui.userportal.client.protocols; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalItemModel; import org.ovirt.engine.ui.uicommon.models.vms.SpiceConsoleModel; import org.ovirt.engine.ui.userportal.client.util.ClientAgentType; import com.google.gwt.core.client.GWT; public class ConsoleUtils { private static Boolean spiceAvailable; private static Boolean rdpAvailable; private static final String VNC_NOT_SUPPORTED_MESSAGE = "VNC console access is not supported from the user portal.<br/>" + "Please ask the administrator to configure this " + "virtual machine to use SPICE for console access."; private static final String BROWSER_NOT_SUPPORTED_MESSAGE = "Your browser/platform does not support console opening"; public static boolean isSpiceAvailable() { if (spiceAvailable == null) { ClientAgentType cat = new ClientAgentType(); spiceAvailable = cat.getBrowser().toLowerCase().contains("firefox") && cat.getOS().toLowerCase().contains("linux") || cat.getBrowser().toLowerCase().contains("explorer") && cat.getOS().toLowerCase().contains("windows"); GWT.log("Determining if Spice console is available on current platform, result:" + spiceAvailable); } return spiceAvailable; } public static boolean isRDPAvailable() { if (rdpAvailable == null) { ClientAgentType cat = new ClientAgentType(); rdpAvailable = (cat.getBrowser().toLowerCase().contains("explorer") && cat.getOS().toLowerCase().contains("windows")); GWT.log("Determining if RDP console is available on current platform, result:" + rdpAvailable); } return rdpAvailable; } public static boolean canOpenSpiceConsole(UserPortalItemModel item) { if (item.getIsPool() || !isSpiceAvailable()) return false; VM vm = ((VM)item.getEntity()); if (vm.getdisplay_type().equals(DisplayType.qxl) && item.getDefaultConsole().getConnectCommand().getIsAvailable() && item.getDefaultConsole().getConnectCommand().getIsExecutionAllowed()) { return true; } return false; } public static boolean canOpenRDPConsole(UserPortalItemModel item) { if (item.getIsPool() || !isRDPAvailable()) return false; if (item.getHasAdditionalConsole() && item.getAdditionalConsole().getConnectCommand().getIsAvailable() && item.getAdditionalConsole().getConnectCommand().getIsExecutionAllowed()) { return true; } return false; } public static void determineDefaultProtocol(ProtocolOptionContainer container, UserPortalItemModel item) { if (!item.getIsPool()) { if (!(ConsoleUtils.isRDPAvailable() || ConsoleUtils.isSpiceAvailable())) { container.setProtocolMessage(BROWSER_NOT_SUPPORTED_MESSAGE); return; } if (item.getDefaultConsole() instanceof SpiceConsoleModel && ConsoleUtils.isSpiceAvailable()) { container.setProtocol(Protocol.SPICE); } else { if (item.getHasAdditionalConsole() && ConsoleUtils.isRDPAvailable()) { container.setProtocol(Protocol.RDP); } else { container.setProtocolMessage(VNC_NOT_SUPPORTED_MESSAGE); } } } } }