Lior Vernia has uploaded a new change for review. Change subject: webadmin: Allow editing labels on a host interface ......................................................................
webadmin: Allow editing labels on a host interface Added an edit interface dialog, that allows assigning multiple labels to it. If its labels have changed, the changes that should be applied to the networks on the interface are considered; if the configuration is valid then the dialog is redrawn with those changes, else the status panel explains the error. Change-Id: I030cbb7bcef1b05f329f67fc8a30ec5dee4b67f9 Signed-off-by: Lior Vernia <lver...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkItemPanel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java 23 files changed, 546 insertions(+), 22 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/22973/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java index 2316cdb..3f5da97 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java @@ -177,6 +177,16 @@ return getBootProtocol() == NetworkBootProtocol.STATIC_IP; } + private NicLabelModel labelsModel; + + public NicLabelModel getLabelsModel() { + return labelsModel; + } + + protected void setLabelsModel(NicLabelModel labelsModel) { + this.labelsModel = labelsModel; + } + public HostBondInterfaceModel() { setAddress(new EntityModel()); setSubnet(new EntityModel()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java new file mode 100644 index 0000000..c5e08ba --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java @@ -0,0 +1,26 @@ +package org.ovirt.engine.ui.uicommonweb.models.hosts; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; +import org.ovirt.engine.ui.uicommonweb.models.Model; + +public class HostNicModel extends Model { + + private final NicLabelModel labelsModel; + + public NicLabelModel getLabelsModel() { + return labelsModel; + } + + public HostNicModel(VdsNetworkInterface iface, Collection<String> suggestedLabels, Map<String, String> labelToIface) { + labelsModel = new NicLabelModel(Collections.singletonList(iface), suggestedLabels, labelToIface); + } + + public boolean validate() { + return labelsModel.validate(); + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java index 1280044..d6aef5f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java @@ -1,12 +1,14 @@ package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.TreeSet; +import java.util.Set; import org.ovirt.engine.core.common.action.SetupNetworksParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -121,6 +123,8 @@ private Map<String, NetworkLabelModel> labelMap; + private Map<String, String> labelToIface; + private final List<String> networksToSync = new ArrayList<String>(); // The purpose of this map is to keep the network parameters while moving the network from one nic to another @@ -197,6 +201,10 @@ NetworkItemModel<?> op1 = nic1 == null ? network1 : nic1; NetworkItemModel<?> op2 = nic2 == null ? network2 : nic2; + return candidateOperation(op1, op2, drop); + } + + private boolean candidateOperation(NetworkItemModel<?> op1, NetworkItemModel<?> op2, boolean drop) { if (op1 == null) { throw new IllegalArgumentException("null Operands"); //$NON-NLS-1$ } @@ -245,6 +253,41 @@ return privateOperationCandidateEvent; } + private boolean validateLabelChanges(NicLabelModel labelsModel, Collection<LogicalNetworkModel> originalNetworks) { + Collection<String> removedLabels = labelsModel.getRemovedLabels(); + Collection<String> addedLabels = labelsModel.getAddedLabels(); + Set<LogicalNetworkModel> removedNetworks = new HashSet<LogicalNetworkModel>(); + Set<LogicalNetworkModel> addedNetworks = new HashSet<LogicalNetworkModel>(); + for (String label : removedLabels) { + Collection<LogicalNetworkModel> labelNetworks = labelMap.get(label).getNetworks(); + if (labelNetworks != null) { + removedNetworks.addAll(labelNetworks); + } + } + for (String label : addedLabels) { + Collection<LogicalNetworkModel> labelNetworks = labelMap.get(label).getNetworks(); + if (labelNetworks != null) { + addedNetworks.addAll(labelNetworks); + } + } + + // operations that don't involve adding new networks can't create invalid situations + if (addedNetworks.isEmpty()) { + return true; + } + + // generate a mock "bonding" operation to check if the networks can be configured together + NetworkInterfaceModel mockSrc = new NetworkInterfaceModel(this); + NetworkInterfaceModel mockDst = new NetworkInterfaceModel(this); + Set<LogicalNetworkModel> potentialIfaceNetworks = + new HashSet<LogicalNetworkModel>(originalNetworks); + potentialIfaceNetworks.removeAll(removedNetworks); + potentialIfaceNetworks.addAll(addedNetworks); + mockSrc.setItems(new HashSet<LogicalNetworkModel>()); + mockDst.setItems(potentialIfaceNetworks); + return candidateOperation(mockSrc, mockDst, true); + } + public void onEdit(NetworkItemModel<?> item) { Model editPopup = null; BaseCommandTarget okTarget = null; @@ -253,15 +296,45 @@ * Bond Dialog *****************/ final VdsNetworkInterface entity = ((NetworkInterfaceModel) item).getEntity(); - editPopup = new SetupNetworksEditBondModel(entity); + editPopup = new SetupNetworksEditBondModel(entity, getFreeLabels(), labelToIface); final SetupNetworksBondModel bondDialogModel = (SetupNetworksBondModel) editPopup; // OK Target okTarget = new BaseCommandTarget() { @Override public void executeCommand(UICommand command) { - setBondOptions(entity, bondDialogModel); + if (!bondDialogModel.validate()) { + return; + } sourceListModel.setConfirmWindow(null); + if (validateLabelChanges(bondDialogModel.getLabelsModel(), nicMap.get(entity.getName()).getItems())) { + setBondOptions(entity, bondDialogModel); + bondDialogModel.getLabelsModel().commit(entity); + redraw(); + } + } + }; + } else if (item instanceof NetworkInterfaceModel) { + /******************* + * Interface Dialog + *******************/ + final VdsNetworkInterface entity = ((NetworkInterfaceModel) item).getEntity(); + final HostNicModel interfacePopupModel = new HostNicModel(entity, getFreeLabels(), labelToIface); + editPopup = interfacePopupModel; + + // OK Target + okTarget = new BaseCommandTarget() { + @Override + public void executeCommand(UICommand uiCommand) { + if (!interfacePopupModel.validate()) { + return; + } + sourceListModel.setConfirmWindow(null); + if (validateLabelChanges(interfacePopupModel.getLabelsModel(), nicMap.get(entity.getName()) + .getItems())) { + interfacePopupModel.getLabelsModel().commit(entity); + redraw(); + } } }; } else if (item instanceof LogicalNetworkModel) { @@ -410,13 +483,22 @@ return; } else if (operation == NetworkOperation.BOND_WITH || operation == NetworkOperation.JOIN_BONDS) { final SetupNetworksBondModel bondPopup; + VdsNetworkInterface iface1 = ((NetworkInterfaceModel) networkCommand.getOp1()).getEntity(); + VdsNetworkInterface iface2 = ((NetworkInterfaceModel) networkCommand.getOp2()).getEntity(); if (operation == NetworkOperation.BOND_WITH) { - bondPopup = new SetupNetworksAddBondModel(getFreeBonds(), nextBondName); + bondPopup = + new SetupNetworksAddBondModel(getFreeBonds(), + nextBondName, + Arrays.asList(iface1, iface2), + getFreeLabels(), + labelToIface); } else { bondPopup = new SetupNetworksJoinBondsModel(getFreeBonds(), (BondNetworkInterfaceModel) networkCommand.getOp1(), - (BondNetworkInterfaceModel) networkCommand.getOp2()); + (BondNetworkInterfaceModel) networkCommand.getOp2(), + getFreeLabels(), + labelToIface); } bondPopup.getCommands().add(new UICommand("OK", new BaseCommandTarget() { //$NON-NLS-1$ @@ -426,13 +508,19 @@ return; } sourceListModel.setConfirmWindow(null); - VdsNetworkInterface bond = new Bond((String) bondPopup.getBond().getSelectedItem()); - setBondOptions(bond, bondPopup); + NetworkInterfaceModel nic1 = (NetworkInterfaceModel) networkCommand.getOp1(); NetworkInterfaceModel nic2 = (NetworkInterfaceModel) networkCommand.getOp2(); List<LogicalNetworkModel> networks = new ArrayList<LogicalNetworkModel>(); networks.addAll(nic1.getItems()); networks.addAll(nic2.getItems()); + if (!validateLabelChanges(bondPopup.getLabelsModel(), networks)) { + return; + } + VdsNetworkInterface bond = new Bond((String) bondPopup.getBond().getSelectedItem()); + setBondOptions(bond, bondPopup); + bondPopup.getLabelsModel().commit(bond); + networkCommand.execute(bond); redraw(); @@ -498,6 +586,12 @@ } + private Collection<String> getFreeLabels() { + Set<String> freeLabels = new HashSet<String>(dcLabels); + freeLabels.removeAll(labelToIface.keySet()); + return freeLabels; + } + private List<String> getFreeBonds() { List<String> freeBonds = new ArrayList<String>(); for (VdsNetworkInterface bond : allBonds) { @@ -542,6 +636,7 @@ List<VdsNetworkInterface> physicalNics = new ArrayList<VdsNetworkInterface>(); Map<String, List<VdsNetworkInterface>> bondToNic = new HashMap<String, List<VdsNetworkInterface>>(); Map<String, List<LogicalNetworkModel>> nicToNetwork = new HashMap<String, List<LogicalNetworkModel>>(); + labelToIface = new HashMap<String, String>(); // map all nics for (VdsNetworkInterface nic : allNics) { @@ -576,6 +671,8 @@ networkModel.attachViaLabel(); } } + + labelToIface.put(label, nicName); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java new file mode 100644 index 0000000..09f50fb --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java @@ -0,0 +1,106 @@ +package org.ovirt.engine.ui.uicommonweb.models.hosts; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; + +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +public class NicLabelModel extends ListModel<ListModel<String>> { + + private final Collection<VdsNetworkInterface> srcIfaces; + private final Collection<String> suggestedLabels; + private final Map<String, String> labelToIface; + private final Collection<String> originalLabels; + private final Set<String> containedIfaces; + private final ListModel<ListModel<String>> labelModels; + private final Set<String> flushedLabels; + + public Collection<String> getSuggestedLabels() { + return suggestedLabels; + } + + public ListModel<ListModel<String>> getLabelModels() { + return labelModels; + } + + public NicLabelModel(Collection<VdsNetworkInterface> srcIfaces, + Collection<String> suggestedLabels, + Map<String, String> labelToIface) { + + this.srcIfaces = srcIfaces; + this.suggestedLabels = suggestedLabels; + this.labelToIface = labelToIface; + + originalLabels = new ArrayList<String>(); + containedIfaces = new HashSet<String>(); + for (VdsNetworkInterface iface : srcIfaces) { + originalLabels.addAll(iface.getLabels()); + containedIfaces.add(iface.getName()); + } + + LinkedList<ListModel<String>> items = new LinkedList<ListModel<String>>(); + for (String label : originalLabels) { + ListModel<String> labelModel = new ListModel<String>(); + labelModel.setItems(suggestedLabels); + labelModel.setSelectedItem(label); + items.add(labelModel); + } + + labelModels = new ListModel<ListModel<String>>(); + labelModels.setItems(items); + + flushedLabels = new HashSet<String>(); + } + + public boolean validate() { + boolean res = true; + for (ListModel<String> labelModel : labelModels.getItems()) { + String label = labelModel.getSelectedItem(); + String usingIface = labelToIface.get(label); + if (usingIface != null && !containedIfaces.contains(usingIface)) { + labelModel.setIsValid(false); + labelModel.getInvalidityReasons().add(ConstantsManager.getInstance() + .getMessages() + .labelInUse(label, usingIface)); + res = false; + } + } + return res; + } + + private void flush() { + flushedLabels.clear(); + for (ListModel<String> labelModel : labelModels.getItems()) { + flushedLabels.add(labelModel.getSelectedItem()); + } + } + + public Collection<String> getRemovedLabels() { + flush(); + Set<String> removedLabels = new HashSet<String>(originalLabels); + removedLabels.removeAll(flushedLabels); + return removedLabels; + } + + public Collection<String> getAddedLabels() { + flush(); + Set<String> addedLabels = new HashSet<String>(flushedLabels); + addedLabels.removeAll(originalLabels); + return addedLabels; + } + + public void commit(VdsNetworkInterface dstIface) { + for (VdsNetworkInterface iface : srcIfaces) { + iface.getLabels().clear(); + } + flush(); + dstIface.setLabels(flushedLabels); + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java index 5754a91..9be5fde 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java @@ -1,15 +1,25 @@ package org.ovirt.engine.ui.uicommonweb.models.hosts; +import java.util.Collection; import java.util.List; +import java.util.Map; +import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class SetupNetworksAddBondModel extends SetupNetworksBondModel { - public SetupNetworksAddBondModel(List<String> freeBonds, String defaultBondName) { + public SetupNetworksAddBondModel(List<String> freeBonds, + String defaultBondName, + Collection<VdsNetworkInterface> ifaces, + Collection<String> suggestedLabels, + Map<String, String> labelToIface) { + setTitle(ConstantsManager.getInstance().getConstants().createNewBondTitle()); getBond().setItems(freeBonds); getBond().setSelectedItem(defaultBondName); + + setLabelsModel(new NicLabelModel(ifaces, suggestedLabels, labelToIface)); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java index 4391ca1..6bdca8f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java @@ -17,4 +17,9 @@ setBond(new SortedListModel(new LexoNumericComparator())); } + @Override + public boolean validate() { + return getLabelsModel().validate(); + } + } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java index f2ef2a3..39360c2 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java @@ -1,7 +1,10 @@ package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.Map; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.compat.KeyValuePairCompat; @@ -10,7 +13,10 @@ public class SetupNetworksEditBondModel extends SetupNetworksBondModel { - public SetupNetworksEditBondModel(final VdsNetworkInterface bond) { + public SetupNetworksEditBondModel(final VdsNetworkInterface bond, + Collection<String> suggestedLabels, + Map<String, String> labelToIface) { + setTitle(ConstantsManager.getInstance() .getMessages() .editBondInterfaceTitle(bond.getName())); @@ -43,6 +49,8 @@ customItem.setValue(value); getBondingOptions().setSelectedItem(customItem); } + + setLabelsModel(new NicLabelModel(Collections.singletonList(bond), suggestedLabels, labelToIface)); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java index 7dd3fe9..269a343 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java @@ -1,6 +1,8 @@ package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -21,7 +23,9 @@ @SuppressWarnings("unchecked") public SetupNetworksJoinBondsModel(List<String> freeBonds, BondNetworkInterfaceModel source, - BondNetworkInterfaceModel target) { + BondNetworkInterfaceModel target, + Collection<String> suggestedLabels, + Map<String, String> labelToIface) { setTitle(ConstantsManager.getInstance().getConstants().joinBondsTitle()); @@ -40,6 +44,8 @@ addBondOptionIfMissing(target.getBondOptions()); getBondingOptions().setItems(bondOptions); getBondingOptions().setSelectedItem(pairForBondOption.get(target.getBondOptions())); + + setLabelsModel(new NicLabelModel(Arrays.asList(source.getEntity(), target.getEntity()), suggestedLabels, labelToIface)); } private void addBondOptionIfMissing(String candidateOption) { diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java index 204edb5..f6e7c18 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java @@ -201,6 +201,9 @@ @DefaultMessage("You could detach {0} first.") String suggestDetachNetwork(String networkName); + @DefaultMessage("Label {0} cannot be attached, it is already in use by interface {1}.") + String labelInUse(String label, String ifaceName); + @DefaultMessage("Incorrect number of Total Virtual CPUs. It is not possible to compose this number from the available Virtual Sockets and Cores per Virtual Sockets") String incorrectVCPUNumber(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java index d5c2c85..f26120a 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java @@ -53,6 +53,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget; @@ -262,6 +263,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostInterfacePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostManagementConfirmationPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostManagementPopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostNicPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostSetupNetworksPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.ManualFenceConfirmationPopupView; @@ -1076,6 +1078,9 @@ bindPresenterWidget(SetupNetworksBondPopupPresenterWidget.class, SetupNetworksBondPopupPresenterWidget.ViewDef.class, SetupNetworksBondPopupView.class); + bindPresenterWidget(HostNicPopupPresenterWidget.class, + HostNicPopupPresenterWidget.ViewDef.class, + HostNicPopupView.class); bindPresenterWidget(HostSetupNetworksPopupPresenterWidget.class, HostSetupNetworksPopupPresenterWidget.ViewDef.class, HostSetupNetworksPopupView.class); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java index 4c2269e..b462b3d 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java @@ -38,6 +38,7 @@ import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostManagementNetworkModel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostVmListModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.ReportPresenterWidget; @@ -51,6 +52,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget; @@ -185,6 +187,7 @@ final Provider<SetupNetworksManagementPopupPresenterWidget> setupNetworksManagementPopupProvider, final Provider<HostBondPopupPresenterWidget> hostBondPopupProvider, final Provider<SetupNetworksBondPopupPresenterWidget> setupNetworksBondPopupProvider, + final Provider<HostNicPopupPresenterWidget> hostNicPopupProvider, final Provider<HostSetupNetworksPopupPresenterWidget> hostSetupNetworksPopupProvider) { return new SearchableDetailTabModelProvider<HostInterfaceLineModel, HostListModel, HostInterfaceListModel>( eventBus, defaultConfirmPopupProvider, @@ -210,7 +213,7 @@ if (hostInterfaceModel.isSetupNetworkMode()){ return setupNetworksInterfacePopupProvider.get(); - }else{ + } else { return hostInterfacePopupProvider.get(); } } else if (windowModel instanceof HostManagementNetworkModel) { @@ -218,9 +221,11 @@ if (hostManagementNetworkModel.isSetupNetworkMode()){ return setupNetworksManagementPopupProvider.get(); - }else{ + } else { return hostManagementPopupProvider.get(); } + } else if (windowModel instanceof HostNicModel) { + return hostNicPopupProvider.get(); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java index 91d55b2..607e088 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java @@ -28,6 +28,7 @@ import org.ovirt.engine.ui.uicommonweb.models.hosts.HostBondInterfaceModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostManagementNetworkModel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel; import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkClusterListModel; import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkHostListModel; @@ -39,6 +40,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterManageNetworkPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.EditNetworkPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.NewNetworkPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksBondPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksInterfacePopupPresenterWidget; @@ -174,6 +176,7 @@ final Provider<SetupNetworksBondPopupPresenterWidget> setupNetworksBondPopupProvider, final Provider<SetupNetworksInterfacePopupPresenterWidget> setupNetworksInterfacePopupProvider, final Provider<SetupNetworksManagementPopupPresenterWidget> setupNetworksManagementPopupProvider, + final Provider<HostNicPopupPresenterWidget> hostNicPopupProvider, final Provider<HostSetupNetworksPopupPresenterWidget> hostSetupNetworksPopupProvider) { return new SearchableDetailTabModelProvider<PairQueryable<VdsNetworkInterface, VDS>, NetworkListModel, NetworkHostListModel>( eventBus, defaultConfirmPopupProvider, @@ -191,6 +194,8 @@ return setupNetworksInterfacePopupProvider.get(); } else if (windowModel instanceof HostManagementNetworkModel) { return setupNetworksManagementPopupProvider.get(); + } else if (windowModel instanceof HostNicModel) { + return hostNicPopupProvider.get(); } // Resolve by last executed command diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java new file mode 100644 index 0000000..07e4549 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host; + +import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class HostNicPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget<HostNicModel, HostNicPopupPresenterWidget.ViewDef> { + + public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<HostNicModel> { + } + + @Inject + public HostNicPopupPresenterWidget(EventBus eventBus, ViewDef view) { + super(eventBus, view); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java index 72b43cb..2a852d8 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java @@ -67,6 +67,10 @@ @Ignore EntityModelTextBoxEditor customEditor; + @UiField + @Ignore + NicLabelWidget labelsWidget; + @UiField(provided = true) EnumRadioEditor<NetworkBootProtocol> bootProtocol; diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml index 884be68..2092ebb 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml @@ -3,9 +3,9 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" xmlns:t="urn:import:org.ovirt.engine.ui.common.widget.dialog.tab" - xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" - xmlns:we="urn:import:org.ovirt.engine.ui.webadmin.widget.editor" - xmlns:w="urn:import:org.ovirt.engine.ui.webadmin.widget"> + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" xmlns:we="urn:import:org.ovirt.engine.ui.webadmin.widget.editor" + xmlns:w="urn:import:org.ovirt.engine.ui.webadmin.widget" + xmlns:h="urn:import:org.ovirt.engine.ui.webadmin.section.main.view.popup.host"> <ui:style type="org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostBondPopupView.Style"> .checkCon{ @@ -24,6 +24,7 @@ <e:ListModelListBoxEditor ui:field="networkEditor" /> <e:ListModelListBoxEditor ui:field="bondingModeEditor" /> <e:EntityModelTextBoxEditor ui:field="customEditor" visible="false" /> + <h:NicLabelWidget ui:field="labelsWidget" visible="false" /> <e:EntityModelLabelEditor ui:field="bootProtocolLabel" /> <we:EnumRadioEditor ui:field="bootProtocol" /> <e:EntityModelTextBoxEditor ui:field="address" /> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java new file mode 100644 index 0000000..849f475 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java @@ -0,0 +1,50 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.host; + +import org.ovirt.engine.ui.common.CommonApplicationResources; +import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView; +import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.inject.Inject; + +public class HostNicPopupView extends AbstractModelBoundPopupView<HostNicModel> implements HostNicPopupPresenterWidget.ViewDef { + + interface Driver extends SimpleBeanEditorDriver<HostNicModel, HostNicPopupView> { + } + + private Driver driver = GWT.create(Driver.class); + + interface ViewUiBinder extends UiBinder<SimpleDialogPanel, HostNicPopupView> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + @UiField + @Ignore + NicLabelWidget labelsWidget; + + @Inject + public HostNicPopupView(EventBus eventBus, CommonApplicationResources resources) { + super(eventBus, resources); + driver.initialize(this); + ViewUiBinder.uiBinder.createAndBindUi(this); + } + + @Override + public void edit(HostNicModel model) { + driver.edit(model); + labelsWidget.edit(model.getLabelsModel()); + } + + @Override + public HostNicModel flush() { + labelsWidget.flush(); + return driver.flush(); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml new file mode 100644 index 0000000..4a32237 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" + xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:h="urn:import:org.ovirt.engine.ui.webadmin.section.main.view.popup.host"> + + <ui:style type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle"> + .mainPanel { + height: 100%; + width: 100%; + } + + .buttonStyle { + margin-right: 7px; + width: 9px; + height: 10px; + padding-left: 2px; + padding-top: 2px; + margin-top: 7px; + margin-left: 8px; + } + </ui:style> + + <d:SimpleDialogPanel width="400px" height="600px" > + <h:NicLabelWidget ui:field="labelsWidget" /> + </d:SimpleDialogPanel> + +</ui:UiBinder> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java new file mode 100644 index 0000000..f0b9ec2 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java @@ -0,0 +1,98 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.host; + +import java.util.Collection; + +import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget; +import org.ovirt.engine.ui.common.widget.editor.generic.ListModelSuggestBox; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.hosts.NicLabelModel; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.event.logical.shared.HasValueChangeHandlers; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Widget; + +public class NicLabelWidget extends AddRemoveRowWidget<NicLabelModel, ListModel<String>, NicLabelWidget.NicLabelEditor> { + + public interface ViewUiBinder extends UiBinder<Widget, NicLabelWidget> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + private Collection<String> suggestions; + + public NicLabelWidget() { + ViewUiBinder.uiBinder.createAndBindUi(this); + } + + @Override + protected NicLabelEditor createWidget(ListModel<String> value) { + NicLabelEditor widget = new NicLabelEditor(); + widget.edit(value); + return widget; + } + + @Override + protected ListModel<String> createGhostValue() { + ListModel<String> value = new ListModel<String>(); + value.setItems(suggestions); + value.setSelectedItem(""); //$NON-NLS-1$ + return value; + } + + @Override + protected boolean isGhost(ListModel<String> value) { + String text = value.getSelectedItem(); + return text == null || text.isEmpty(); + } + + @Override + protected void toggleGhost(ListModel<String> value, NicLabelEditor widget, boolean becomingGhost) { + // do nothing, widgets look the same as ghost widgets (only one UI field) + } + + @Override + public void edit(NicLabelModel model) { + super.edit(model); + suggestions = model.getSuggestedLabels(); + } + + protected class NicLabelEditor extends AbstractModelBoundPopupWidget<ListModel<String>> implements HasValueChangeHandlers<ListModel<String>> { + + private final ListModelSuggestBox suggestBox; + private ListModel<String> model; + + public NicLabelEditor() { + suggestBox = new ListModelSuggestBox(); + } + + @Override + public void edit(ListModel<String> model) { + this.model = model; + suggestBox.setAcceptableValues((Collection<String>) model.getItems()); + suggestBox.setValue(model.getSelectedItem()); + } + + @Override + public ListModel<String> flush() { + model.setSelectedItem(suggestBox.getValue()); + return model; + } + + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler<ListModel<String>> handler) { + return suggestBox.addValueChangeHandler(new ValueChangeHandler<String>() { + + @Override + public void onValueChange(ValueChangeEvent<String> event) { + model.setSelectedItem(event.getValue()); + ValueChangeEvent.fire(NicLabelEditor.this, model); + } + }); + } + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml new file mode 100644 index 0000000..66016d5 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + + <ui:style type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle"> + .mainPanel { + height: 100%; + width: 100%; + } + + .buttonStyle { + margin-right: 7px; + width: 9px; + height: 10px; + padding-left: 2px; + padding-top: 2px; + margin-top: 7px; + margin-left: 8px; + } + </ui:style> + + <g:ScrollPanel addStyleNames="{style.mainPanel}" > + <g:FlowPanel ui:field="contentPanel" /> + </g:ScrollPanel> + +</ui:UiBinder> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java index 66c686f..0292756 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java @@ -18,9 +18,11 @@ @Override public void edit(final HostBondInterfaceModel object) { super.edit(object); + labelsWidget.edit(object.getLabelsModel()); bondSuggestEditor.setVisible(true); bondEditor.setVisible(false); + labelsWidget.setVisible(true); // hide widgets info.setVisible(false); @@ -31,4 +33,10 @@ asPopupPanel().setPixelSize(400, 400); } + @Override + public HostBondInterfaceModel flush() { + labelsWidget.flush(); + return super.flush(); + } + } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkItemPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkItemPanel.java index 26cd638..f4ad861 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkItemPanel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkItemPanel.java @@ -106,6 +106,7 @@ if (parentPanel != null) { parentPanel.onMouseOver(); } + actionButton.setVisible(false); } protected void onMouseOver() { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanel.java index 7a50716..36992aa 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanel.java @@ -124,12 +124,6 @@ } @Override - protected void onMouseOut() { - super.onMouseOut(); - actionButton.setVisible(false); - } - - @Override protected void onMouseOver() { super.onMouseOver(); LogicalNetworkModel network = (LogicalNetworkModel) item; diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java index 55408d6..0be4cba 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java @@ -45,6 +45,7 @@ } rowPanel.setWidget(0, 2, nicImage); rowPanel.setWidget(0, 3, titleLabel); + rowPanel.setWidget(0, 4, actionButton); return rowPanel; } @@ -63,6 +64,14 @@ @Override protected void onAction() { - // Do nothing + item.edit(); + } + + @Override + protected void onMouseOver() { + super.onMouseOver(); + if (parentPanel == null) { + actionButton.setVisible(true); + } } } -- To view, visit http://gerrit.ovirt.org/22973 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I030cbb7bcef1b05f329f67fc8a30ec5dee4b67f9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <lver...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches