/* * This file is part of LCMC written by Rasto Levrinc. * * Copyright (C) 2014, Rastislav Levrinc. * * The LCMC 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, or (at your option) * any later version. * * The LCMC 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 LCMC; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ package lcmc.crm.ui.resource; import java.util.Collection; import java.util.List; import lcmc.common.domain.AccessMode; import lcmc.common.domain.Application; import lcmc.host.domain.Host; import lcmc.vm.domain.VmsXml; import lcmc.vm.ui.resource.DomainInfo; import lcmc.common.domain.EnablePredicate; import lcmc.common.ui.utils.MenuAction; import lcmc.common.ui.utils.MenuFactory; import lcmc.common.ui.utils.UpdatableItem; import javax.inject.Inject; import javax.inject.Named; @Named public class VirtualDomainMenu extends ServiceMenu { private VirtualDomainInfo virtualDomainInfo; private DomainInfo domainInfo; @Inject private Application application; @Inject private MenuFactory menuFactory; @Override public List<UpdatableItem> getPulldownMenu(final ServiceInfo serviceInfo) { virtualDomainInfo = (VirtualDomainInfo) serviceInfo; domainInfo = virtualDomainInfo.getDomainInfo(); final List<UpdatableItem> items = super.getPulldownMenu(virtualDomainInfo); addVncViewersToTheMenu(items); return items; } /** Adds vnc viewer menu items. */ private void addVncViewersToTheMenu(final Collection<UpdatableItem> items) { if (application.isUseTightvnc()) { /* tight vnc test menu */ final UpdatableItem tightvncViewerMenu = menuFactory.createMenuItem( "start TIGHT VNC viewer", null, null, new AccessMode(AccessMode.RO, AccessMode.NORMAL), new AccessMode(AccessMode.RO, AccessMode.NORMAL)) .enablePredicate(new EnablePredicate() { @Override public String check() { final VmsXml vxml = virtualDomainInfo.getVMSXML(getRunningOnHost()); if (vxml == null || domainInfo == null) { return "VM is not available"; } final int remotePort = vxml.getRemotePort(domainInfo.getName()); if (remotePort <= 0) { return "remote port is not greater than 0"; } return null; } }) .addAction(new MenuAction() { @Override public void run(final String text) { virtualDomainInfo.hidePopup(); final DomainInfo vvdi = domainInfo; final VmsXml vxml = virtualDomainInfo.getVMSXML(getRunningOnHost()); if (vxml != null && vvdi != null) { final int remotePort = vxml.getRemotePort(vvdi.getName()); final Host host = vxml.getDefinedOnHost(); if (host != null && remotePort > 0) { application.startTightVncViewer(host, remotePort); } } }}); items.add(tightvncViewerMenu); } if (application.isUseUltravnc()) { /* ultra vnc test menu */ final UpdatableItem ultravncViewerMenu = menuFactory.createMenuItem( "start ULTRA VNC viewer", null, null, new AccessMode(AccessMode.RO, AccessMode.NORMAL), new AccessMode(AccessMode.RO, AccessMode.NORMAL)) .enablePredicate(new EnablePredicate() { @Override public String check() { final VmsXml vxml = virtualDomainInfo.getVMSXML(getRunningOnHost()); if (vxml == null || domainInfo == null) { return "VM is not available"; } final int remotePort = vxml.getRemotePort(domainInfo.getName()); if (remotePort <= 0) { return "remote port is not greater than 0"; } return null; }}) .addAction(new MenuAction() { @Override public void run(final String text) { virtualDomainInfo.hidePopup(); final DomainInfo vvdi = domainInfo; final VmsXml vxml = virtualDomainInfo.getVMSXML(getRunningOnHost()); if (vxml != null && vvdi != null) { final int remotePort = vxml.getRemotePort(vvdi.getName()); final Host host = vxml.getDefinedOnHost(); if (host != null && remotePort > 0) { application.startUltraVncViewer(host, remotePort); } } }}); items.add(ultravncViewerMenu); } if (application.isUseRealvnc()) { /* real vnc test menu */ final UpdatableItem realvncViewerMenu = menuFactory.createMenuItem( "start REAL VNC test", null, null, new AccessMode(AccessMode.RO, AccessMode.NORMAL), new AccessMode(AccessMode.RO, AccessMode.NORMAL)) .enablePredicate(new EnablePredicate() { @Override public String check() { final VmsXml vxml = virtualDomainInfo.getVMSXML(getRunningOnHost()); if (vxml == null || domainInfo == null) { return "VM is not available"; } final int remotePort = vxml.getRemotePort(domainInfo.getName()); if (remotePort <= 0) { return "remote port is not greater than 0"; } return null; }}) .addAction(new MenuAction() { @Override public void run(final String text) { virtualDomainInfo.hidePopup(); final DomainInfo vvdi = domainInfo; final VmsXml vxml = virtualDomainInfo.getVMSXML(getRunningOnHost()); if (vxml != null && vvdi != null) { final int remotePort = vxml.getRemotePort(vvdi.getName()); final Host host = vxml.getDefinedOnHost(); if (host != null && remotePort > 0) { application.startRealVncViewer(host, remotePort); } } }}); items.add(realvncViewerMenu); } } /** Returns the first on which this vm is running. */ private Host getRunningOnHost() { final List<String> nodes = virtualDomainInfo.getRunningOnNodes(Application.RunMode.LIVE); if (nodes != null && !nodes.isEmpty()) { return virtualDomainInfo.getBrowser().getCluster().getHostByName(nodes.get(0)); } return null; } }