/* * 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.ArrayList; import java.util.List; import lcmc.common.ui.CallbackAction; import lcmc.common.domain.AccessMode; import lcmc.common.domain.Application; import lcmc.host.domain.Host; import lcmc.cluster.ui.ClusterBrowser; import lcmc.common.ui.utils.ButtonCallback; import lcmc.common.domain.EnablePredicate; import lcmc.common.ui.utils.MenuAction; import lcmc.common.ui.utils.MenuFactory; import lcmc.common.ui.utils.MyMenuItem; import lcmc.common.domain.Predicate; import lcmc.common.domain.util.Tools; import lcmc.common.ui.utils.UpdatableItem; import javax.inject.Inject; import javax.inject.Named; @Named public class HbConnectionMenu { private HbConnectionInfo hbConnectionInfo; @Inject private MenuFactory menuFactory; public List<UpdatableItem> getPulldownMenu(final HbConnectionInfo hbConnectionInfo) { this.hbConnectionInfo = hbConnectionInfo; final List<UpdatableItem> items = new ArrayList<UpdatableItem>(); final Application.RunMode runMode = Application.RunMode.LIVE; final MyMenuItem removeEdgeItem = menuFactory.createMenuItem( Tools.getString("ClusterBrowser.Hb.RemoveEdge"), ClusterBrowser.REMOVE_ICON, Tools.getString("ClusterBrowser.Hb.RemoveEdge.ToolTip"), new AccessMode(AccessMode.ADMIN, AccessMode.NORMAL), new AccessMode(AccessMode.OP, AccessMode.NORMAL)) .enablePredicate(new EnablePredicate() { @Override public String check() { if (getBrowser().crmStatusFailed()) { return ClusterBrowser.UNKNOWN_CLUSTER_STATUS_STRING; } return null; } }) .addAction(new MenuAction() { @Override public void run(final String text) { getBrowser().getCrmGraph().removeConnection(hbConnectionInfo, getBrowser().getDCHost(), runMode); } }); final ButtonCallback removeEdgeCallback = getBrowser().new ClMenuItemCallback(null) { @Override public boolean isEnabled() { return super.isEnabled() && !hbConnectionInfo.isNew(); } } .addAction(new CallbackAction() { @Override public void run(final Host dcHost) { if (!hbConnectionInfo.isNew()) { getBrowser().getCrmGraph().removeConnection(hbConnectionInfo, dcHost, Application.RunMode.TEST); } } }); hbConnectionInfo.addMouseOverListener(removeEdgeItem, removeEdgeCallback); items.add(removeEdgeItem); /* remove/add order */ final MyMenuItem removeOrderItem = menuFactory.createMenuItem(Tools.getString("ClusterBrowser.Hb.RemoveOrder"), ClusterBrowser.REMOVE_ICON, Tools.getString("ClusterBrowser.Hb.RemoveOrder.ToolTip"), Tools.getString("ClusterBrowser.Hb.AddOrder"), null, Tools.getString("ClusterBrowser.Hb.AddOrder.ToolTip"), new AccessMode(AccessMode.ADMIN, AccessMode.NORMAL), new AccessMode(AccessMode.OP, AccessMode.NORMAL)) .predicate(new Predicate() { @Override public boolean check() { return getBrowser().getCrmGraph().isOrder(hbConnectionInfo); } }) .enablePredicate(new EnablePredicate() { @Override public String check() { if (getBrowser().crmStatusFailed()) { return ClusterBrowser.UNKNOWN_CLUSTER_STATUS_STRING; } return null; } }); removeOrderItem.addAction(new MenuAction() { @Override public void run(final String text) { if (removeOrderItem.getText().equals(Tools.getString("ClusterBrowser.Hb.RemoveOrder"))) { getBrowser().getCrmGraph().removeOrder(hbConnectionInfo, getBrowser().getDCHost(), runMode); } else { /* there is colocation constraint so let's get the * endpoints from it. */ hbConnectionInfo.addOrder(null, hbConnectionInfo.getLastServiceInfoRsc(), hbConnectionInfo.getLastServiceInfoWithRsc()); getBrowser().getCrmGraph().addOrder(hbConnectionInfo, getBrowser().getDCHost(), runMode); } } }); final ButtonCallback removeOrderCallback = getBrowser().new ClMenuItemCallback(null) { @Override public boolean isEnabled() { return super.isEnabled() && !hbConnectionInfo.isNew(); } } .addAction(new CallbackAction() { @Override public void run(final Host dcHost) { if (!hbConnectionInfo.isNew()) { if (getBrowser().getCrmGraph().isOrder(hbConnectionInfo)) { getBrowser().getCrmGraph().removeOrder(hbConnectionInfo, dcHost, Application.RunMode.TEST); } else { /* there is colocation constraint so let's get the * endpoints from it. */ hbConnectionInfo.addOrder(null, hbConnectionInfo.getLastServiceInfoRsc(), hbConnectionInfo.getLastServiceInfoWithRsc()); getBrowser().getCrmGraph().addOrder(hbConnectionInfo, dcHost, Application.RunMode.TEST); } } } }); hbConnectionInfo.addMouseOverListener(removeOrderItem, removeOrderCallback); items.add(removeOrderItem); /* remove/add colocation */ final MyMenuItem removeColocationItem = menuFactory.createMenuItem( Tools.getString("ClusterBrowser.Hb.RemoveColocation"), ClusterBrowser.REMOVE_ICON, Tools.getString("ClusterBrowser.Hb.RemoveColocation.ToolTip"), Tools.getString("ClusterBrowser.Hb.AddColocation"), null, Tools.getString("ClusterBrowser.Hb.AddColocation.ToolTip"), new AccessMode(AccessMode.ADMIN, AccessMode.NORMAL), new AccessMode(AccessMode.OP, AccessMode.NORMAL)) .predicate(new Predicate() { @Override public boolean check() { return getBrowser().getCrmGraph().isColocation(hbConnectionInfo); } }) .enablePredicate(new EnablePredicate() { @Override public String check() { if (getBrowser().crmStatusFailed()) { return ClusterBrowser.UNKNOWN_CLUSTER_STATUS_STRING; } return null; } }); removeColocationItem.addAction(new MenuAction() { @Override public void run(final String text) { if (removeColocationItem.getText().equals(Tools.getString("ClusterBrowser.Hb.RemoveColocation"))) { getBrowser().getCrmGraph().removeColocation(hbConnectionInfo, getBrowser().getDCHost(), runMode); } else { /* add colocation */ /* there is order constraint so let's get the endpoints * from it. */ hbConnectionInfo.addColocation(null, hbConnectionInfo.getLastServiceInfoParent(), hbConnectionInfo.getLastServiceInfoChild()); getBrowser().getCrmGraph().addColocation(hbConnectionInfo, getBrowser().getDCHost(), runMode); } } }); final ButtonCallback removeColocationCallback = getBrowser().new ClMenuItemCallback(null) { @Override public boolean isEnabled() { return super.isEnabled() && !hbConnectionInfo.isNew(); } } .addAction(new CallbackAction() { @Override public void run(final Host dcHost) { if (!hbConnectionInfo.isNew()) { if (getBrowser().getCrmGraph().isColocation(hbConnectionInfo)) { getBrowser().getCrmGraph().removeColocation(hbConnectionInfo, dcHost, Application.RunMode.TEST); } else { /* add colocation */ /* there is order constraint so let's get the endpoints * from it. */ hbConnectionInfo.addColocation(null, hbConnectionInfo.getLastServiceInfoParent(), hbConnectionInfo.getLastServiceInfoChild()); getBrowser().getCrmGraph().addColocation(hbConnectionInfo, dcHost, Application.RunMode.TEST); } } } }); hbConnectionInfo.addMouseOverListener(removeColocationItem, removeColocationCallback); items.add(removeColocationItem); return items; } private ClusterBrowser getBrowser() { return hbConnectionInfo.getBrowser(); } }